What is the Conversions API (CAPI), in plain words?
Short answer
It sends the same kind of event as the pixel, from your server, with an event name, time, hashed email or phone, and value. An event_id lets Meta count a pixel and server pair once.
The Conversions API, or CAPI, is a way for your own server to tell Meta that something happened, such as a lead or a purchase, instead of leaving that job to a script in the visitor's browser. It sends the same kind of event the Meta pixel sends, just from your side of the fence.
That matters because browsers lose events. Ad blockers, privacy settings and short cookie lifetimes all get in the way of a pixel, while a message from a server does not care about any of that.
Here is the picture I use. The pixel is a courier standing in the visitor's browser, shouting to Meta that a sale just happened. If the visitor has a blocker, the courier never gets through. CAPI is a phone call from your back office. Nobody can stop it in the browser, because it never runs there.
An example, and it is made up: a small shop called Northside Candles runs Meta ads. On a Tuesday, 100 people buy. The pixel reports 71, because 29 buyers had blockers or a browser that cleared the ad click too early. The shop's server knows about all 100 orders. With CAPI, the server sends those orders to Meta, and Meta sees a much fuller picture of who is buying.
What does an event actually contain? At minimum, an event name such as Purchase, the time it happened, where it happened (usually a website), and some details that help Meta work out who the person was. Those details are usually a hashed email, a hashed phone number, and browser identifiers like the fbc and fbp values if you have them. Hashed means scrambled in a fixed way before it leaves your server, so Meta gets a scrambled version of the address and not the address itself. For purchases you also add a value and a currency.
Then there is event_id, which is a small label you attach so Meta can tell that the pixel and your server are describing the same moment. If both send the same event name and the same event_id, Meta keeps one and drops the other. Without it, you can count every sale twice.
The second thing to know is quality. Meta gives events a match quality score. The more real identifiers you send, the more of your events Meta can tie to an actual account, and the better its ad system learns. Sending an event with no email and no phone is technically valid and mostly useless.
Now the honest limits. CAPI does not create data you do not have. If your checkout never captures an email, no server can send one. It also does not make tracking legal on its own: you still need consent where the law asks for it. And it will not fix a broken offer, only a broken measurement.
Another limit that catches people out: Meta rejects events that are sent too long after they happened. Check the current documentation for the exact window, because it has changed before. Sending a batch of old sales weeks later is a common way to get silent rejections.
So who is CAPI for? Anyone paying for Meta ads who has a server, a shop platform or a tool in between that can send events. If you sell online, run lead forms, or close deals in a CRM after the ad click, it is worth having. If you get five leads a month and never optimise, it is probably not your first fix.
Are you starting from the pixel only, or do you already have some server events going out?
DataCops in short
For this question: DataCops sends each event with an event name, time, hashed identity and value from your own domain, with the same event ID as the pixel so Meta counts it once.
DataCops is a tool that does the ad-conversion job without a container, warehouse or plugin: one script and one DNS record on your own domain, a bot verdict on every visit with a Real people only switch per ad platform, the real sale from your CRM or Shopify sent back to your ads, new campaigns warmed up with the customers you already have, and a log of every send.
How DataCops does it
- First-party collection, no extra tool. One script and one DNS record put collection on your own subdomain; with DNS on Cloudflare, the free Worker reads the click at the edge before the page loads. A signed server-set cookie lasts up to 400 days where enabled.
- Real people only. Every visit gets a bot verdict, with a Real people only switch per ad platform, off by default. Every form email is checked for disposable providers, domains with no mail server and an email risk score.
- Every ad platform. Conversions go server-side to Meta, Google Ads, TikTok and LinkedIn, counted once against the pixel by event ID.
- The sale after the form. HighLevel natively, any CRM by webhook, Shopify through the DataCops Shopify app.
- A log you can read. A delivery log row per conversion, with the reason when it did not go. A TCF 2.2 consent banner and first-party analytics (a GA4 alternative) come from the same script.
Best for: teams who want better ad conversions without building or maintaining the pipe: lead gen, ecommerce, clinics, home services, B2B and agencies.
Ads Warmup: tell the ads who pays
Ads Warmup, DataCops' flagship feature, sends customers you already have to Meta, Google Ads and TikTok before a new campaign spends: upload a CSV (only email is required, up to 20,000 rows), see a 0 to 10 match score per person, pick the event, and send. Rows are dated when you send, and Google Ads credits only people who clicked a Google ad. Preview is free; sending needs a paid plan. Check your own consent basis for the list first. See Ads Warmup.
Ways to do this job
| Option | Best for |
|---|---|
| DataCops | One script, a bot verdict, CRM sales and a delivery log |
| Hosted server GTM (such as Stape) | A team that already owns a GTM container |
| The platform's own pixel | Basic browser tracking on one platform |
| Self-hosted server GTM | Engineering teams who want full control |
When not to use DataCops
- You need custom tag logic or non-ad destinations. DataCops sends to ad platforms and is not a Google Tag Manager container.
- You want a reporting dashboard. DataCops fixes what goes into your ads. It does not replace the reports you already read.
Sources and further reading
More on this: Meta Conversions API explained, and the complete guide to offline conversion tracking.
If you want the short version of what to do next: keep your pixel, add server events with the same event_id, and check Test Events before you trust anything.