Conversion Tracking in a First-Party World: CAPI, Enhanced Conversions, and Consent

Third-party cookies are gone and browser signal loss is real. Here's how to rebuild accurate conversion tracking on first-party data across Google and Meta.

The Adriva Team10 min read

The pixel you set up in 2020 is quietly lying to you. Browser restrictions, consent gates, and ad blockers now swallow a meaningful share of conversions before they ever reach your ad platforms. Rebuilding measurement on first-party, server-side data is how you get the signal back — and how you keep automated bidding from optimizing against a blurry picture.

A developer reviewing conversion and event data across multiple monitors
Accurate measurement is now an engineering project, not a checkbox in an ad account.

Where your conversions actually disappear

Start with the myth worth killing: the third-party cookie apocalypse that was supposed to arrive in Chrome never did. Google spent years promising to phase out third-party cookies, pivoted to a “user choice” prompt in 2024, and in April 2025 confirmed it would not deprecate them or ship the prompt at all, keeping Chrome’s existing cookie controls. If your measurement plan was built around a Chrome deadline, the deadline is gone.

The signal loss is not. It was never really about Chrome. Safari’s Intelligent Tracking Prevention already blocks third-party cookies outright and caps the lifetime of any cookie written by JavaScript at seven days — and 24 hours for domains it classifies as trackers. Firefox blocks third-party cookies by default. Ad blockers strip the Meta Pixel and Google tag from the page before they fire. And in the EEA, a user who declines consent produces no client-side event at all. None of that depends on Google’s roadmap.

The result is a pixel that reports fewer conversions than actually happened, unevenly, and in ways that correlate with browser and consent choice rather than with campaign performance. That is the worst kind of measurement error: not random noise you can average out, but systematic bias your bidding algorithms will happily learn from.

Client-side and server-side, side by side

Every conversion event can travel two roads. The client-sideroad runs in the visitor’s browser: the Meta Pixel and the Google tag execute JavaScript, read cookies, and POST the event to the platform. It is easy to install and rich in context, but it lives entirely inside the environment that browsers, ad blockers, and consent tools are designed to restrict.

The server-sideroad sends the event from your own infrastructure — your application server, or a cloud tag container you control — directly to the platform’s API. It does not touch document.cookie, it is invisible to browser extensions, and you decide exactly which fields leave your system. The trade is real work: you own the endpoint, the data hygiene, and the maintenance.

DimensionClient-side (browser)Server-side
Runs inVisitor's browser, via JavaScriptYour server or a cloud container
Blocked byAd blockers, ITP/ETP, consent gatesBypasses browser-level restrictions
Cookie lifetimeCapped (Safari ~7 days for JS cookies)Server-set cookies keep full TTL
Data you exposeEverything the page can readOnly fields you choose to forward
Identity signalfbp, gclid, in-browser cookiesHashed first-party data + click IDs
Failure modeSilent, uneven conversion lossEngineering and upkeep overhead

Meta: the Conversions API and event deduplication

The Meta Conversions API (CAPI) creates a direct, server-to-server connection between your systems and Meta, sending the same web events your Pixel sends — Purchase, Lead, AddToCart— but from your server, where ad blockers and iOS restrictions cannot reach them. Meta’s guidance is explicit: run CAPI alongside the Pixel, not instead of it.

Running both raises an obvious problem. If the browser fires a Purchase and your server fires the same Purchase, Meta could count two. Deduplication is what stops that, and the mechanism is precise. Per Meta’s official documentation, the recommended method compares two fields: the Pixel’s eventID must equal the server’s event_id, and the Pixel’s event must equal the server’s event_name. When both match within 48 hours of the first event, Meta keeps one and drops the duplicate.

Two identifiers are easy to confuse with event_id but do a different job. fbp is the value in the first-party _fbp cookie Meta sets on your domain; fbc is derived from the fbclid click parameter and stored in the _fbc cookie. These are matchingparameters — they help Meta connect an event to a person — not deduplication keys, and unlike email or phone they must be sent unhashed. Meta does offer an alternative dedup method using event_name plus fbp or external_id, but it only works when the browser event arrives first and the server event second, which is why the shared event_id approach is the reliable default.

Close-up of code on a screen representing server-side event payloads sent to an advertising API
A CAPI event payload carries the same event_id as the browser Pixel, plus hashed customer data for matching.

Google: Enhanced Conversions and hashed first-party data

Google’s answer to the same problem is Enhanced Conversions. When a conversion fires, it captures the first-party data the user already handed you — email, phone, name, home address — normalizes it (lowercase, whitespace trimmed) and applies SHA-256, a one-way hash, before anything leaves the page or your server. Google receives the hash, matches it against hashes of signed-in Google accounts that engaged with your ads, and attributes the conversion even when the click cookie is long gone.

Because SHA-256 is irreversible, Google never sees the raw email or phone number — only a fixed-length fingerprint it can compare. You can send Enhanced Conversions through the Google tag, through Google Tag Manager, or via the Google Ads API up to 24 hours after the conversion is recorded, which makes a server-side path straightforward. The catch is data hygiene: hashing an un-normalized string produces a different fingerprint, so consistent formatting before hashing is the difference between a match and a miss.

None of this runs unconditionally in Europe. Since March 2024, Google requires Consent Mode v2 for advertisers targeting the EEA and UK to keep using audience and measurement features. It communicates a visitor’s choices to Google tags through four signals:

  • ad_storage— whether advertising cookies may be set.
  • analytics_storage— whether analytics cookies may be set.
  • ad_user_data— whether user data may be sent to Google for advertising, including Enhanced Conversions.
  • ad_personalization— whether the data may fuel remarketing and personalized ads.

The implementation choice matters. In Basic mode, tags stay blocked until the user interacts with the banner, so no signal leaves before consent. In Advanced mode, tags load with default-denied consent and send cookieless pingsthat carry no identifiers but let Google model the outcome. That modeling is the payoff: Advanced mode enables both conversion modeling and behavioral modeling, recovering a statistical estimate of the conversions from users who declined — conversions a strict Basic setup simply never sees.

Consent is not just a compliance tax. Configured as Advanced, it is a recovery channel for the exact conversions privacy restrictions take away.

Server-side tagging: one container to route it all

Bolting CAPI onto your checkout and Enhanced Conversions onto your thank-you page works, but it scatters logic across the codebase. A server-side Google Tag Manager container centralizes it. The browser sends one lightweight request to a container running on your own subdomain; that container then fans the event out to Meta’s Conversions API, Google Ads, GA4, and anywhere else — applying hashing, enrichment, and consent rules server-side, out of the browser’s reach.

The wins are concrete. Cookies set as an HTTP response from your own server are exempt from Safari’s seven-day JavaScript cap, so attribution windows survive longer. Sensitive data is hashed before it leaves your infrastructure. And you get one place to enforce consent rather than a policy re-implemented per tag. The cost is that you now operate a container — hosting, monitoring, and versioning included.

Analytics dashboard showing conversion trends and performance metrics on a laptop screen
Cleaner, deduplicated signal flowing to the platforms is what automated bidding actually trains on.

Why signal quality is bidding quality

Here is the part operators underweight. Automated bidding — Google Smart Bidding, Meta Advantage+ — is a model trained on the conversions you feed it. Under-report, and the algorithm bids as if those campaigns, audiences, and hours converted worse than they did, then starves them of budget. The measurement gap does not just distort your reports; it steers spend in the wrong direction. We break down the mechanics of that feedback loop in our guide to automated bidding strategies.

Recovering the lost events flips the loop. More accurate, deduplicated conversions mean more positive training signal, which sharpens targeting and pulls down cost per action — the exact benefit Meta cites for the Conversions API. The reported numbers back this up, with the usual caveat that they come from platform and vendor studies rather than one canonical figure.

7 days

Maximum lifetime Safari's ITP allows for cookies written by JavaScript, so browser-only tracking decays fast (WebKit)

+5%

Average uplift in tracked Search conversions Google reports for Enhanced Conversions, per Making Science

+13-19%

Additional attributed conversions reported when the Conversions API is added to the Meta Pixel, per industry lift studies

Treat those percentages as direction, not promises — the real number depends on your traffic mix, how much of it is Safari and consent-gated, and how clean your first-party data is. The principle holds regardless: the platforms optimize toward what you measure, so measuring more of the truth is the highest-leverage thing you can do before touching a single bid setting.

A first-party measurement rebuild, in order

The pieces reinforce each other, so sequence matters. A rough implementation path:

  1. Collect first-party data at the conversion.Capture email, phone, and order value at checkout or lead submission — this is the raw material every downstream match depends on.
  2. Stand up a server endpoint or sGTM container. Give yourself one server-side place to receive events and route them, on a first-party subdomain.
  3. Wire Meta CAPI with shared event IDs. Send server events alongside the Pixel, generating one event_id per action and passing it to both. Verify deduplication in Events Manager.
  4. Enable Google Enhanced Conversions. Normalize, then SHA-256 hash first-party fields, and forward them via the tag or the Google Ads API. Watch the diagnostics report for match rate.
  5. Configure Consent Mode v2 (Advanced where lawful). Pass all four signals from a certified CMP so modeling can run and EEA audience features keep working.
  6. Reconcile, then hand clean signal to bidding. Confirm the deduplicated totals are sane, then let Smart Bidding and Advantage+ train on the recovered data.

Where Adriva fits

This is exactly the plumbing Adrivais built to own. It unifies GA4, the Meta Pixel, and the Google Ads tag into one deduplicated signal layer, then feeds that clean data back into every budget and bid decision — the connection we detail in how Adriva connects Google Analytics and pixels. Accurate cross-platform measurement is also what lets Adriva run Google Ads and Meta Ads from one workflow and compare creative performance on real ROAS instead of the partial picture a leaking pixel would give you.

The takeaway is blunt: the third-party cookie deadline evaporated, but the signal loss did not. Rebuild measurement on first-party data, send it server-side, deduplicate it honestly, and respect consent — and the automated systems spending your budget finally get to optimize against what actually happened.

Frequently asked questions

Do I still need the Meta Pixel if I set up the Conversions API?
Yes. Meta recommends running the Pixel and the Conversions API together as a redundant setup, not one instead of the other. The browser Pixel captures rich client-side signals while the server API survives ad blockers and cookie restrictions. You deduplicate the overlap with a shared event_id so Meta counts one conversion, not two.
Does Enhanced Conversions send my customers' email addresses to Google?
No. Enhanced Conversions normalizes the data (lowercase, trimmed) and applies SHA-256, a one-way hash, before anything leaves your site or server. Google receives the hash, not the raw email or phone number, and matches it against hashes of signed-in Google accounts to attribute the conversion. The original values are never transmitted in the clear.
What is event_id and why does deduplication depend on it?
event_id is a unique string you generate once per user action and send identically to both the Meta Pixel and the Conversions API. When Meta receives two events with the same event_id and event_name within a 48-hour window, it keeps one and discards the duplicate. Without it, the same purchase sent from both browser and server would be counted twice.
Now that Chrome is keeping third-party cookies, do I still need first-party tracking?
Yes. Third-party cookies were only ever part of the problem. Safari and Firefox already block them and cap script-written cookies, ad blockers strip tracking scripts, and consent banners gate collection in the EEA regardless of Chrome. First-party server-side measurement addresses all of those, not just the Chrome deprecation that Google ultimately shelved.
What breaks if I skip Consent Mode v2 in the EEA?
Since March 2024, Google requires Consent Mode v2 for advertisers targeting the EEA and UK to keep using audience and remarketing features. Without valid ad_user_data and ad_personalization signals, Google stops building remarketing lists from EEA traffic and limits how conversions are used. Consent Mode also enables conversion modeling, which recovers a modeled estimate of the conversions lost when users decline consent.

Try Adriva

One operator for Google and Meta.

Launch, monitor, and rebalance both platforms from a single workflow.

Get started

Keep reading