Shadow mode: see every conversion you would have sent, before you send one
The riskiest moment in any measurement project is the first time real data leaves for an ad platform. It should not be the first time you look at it.
What came in
the shopper typed it
phone
from checkout
address
city, zip, country
click id
captured on landing
What we sent
em
a1f4…9c02
ph
7be1…44d8
ct / zp / country
3d90…b7e1
fbc / gclid
passed through raw
external_id
stable per customer
Match quality
0/10
Switching on server-side conversions is usually a leap. You configure it, you enable it, and then you find out what you built by watching numbers move in someone else's dashboard. If something was wrong, it was wrong in production, against a live ad account.
What shadow mode is
Everything runs - events are captured, identity resolved, payloads built exactly as they would be for a real send - and then nothing leaves. Each payload is stored so you can read it.
- Confirm the event names and values are what you expect before an ad account sees them.
- Check which match keys are actually present, rather than which ones you assumed would be.
- Catch the classic errors - wrong currency, doubled orders, test purchases - while they cost nothing.
The deduplication check
The specific thing worth verifying in shadow mode is that your server event and your browser pixel share an event id derived from the order, so the platform collapses them into one conversion. Get that wrong and you will double-count every sale, which looks like success for about a week.
Being able to read the exact JSON that would have been posted is not a debugging nicety. It is the difference between trusting a system and hoping about it.
What to do next
Before enabling any destination, look at ten shadow payloads by hand. It takes fifteen minutes and it is the highest-value fifteen minutes in the whole setup.
Read next
What a CDP actually is, and why the one you have probably is not one