Why Paid Signal exists
Your ads are optimising on orders. You get paid on money.
On cash on delivery those are not the same number — and the gap between them is exactly what your ad platform has spent your budget learning from. This page explains what that costs you, what changes when you fix it, and the one thing you have to do for any of it to work.
The problem
When someone checks out, your pixel fires a Purchase event. Meta, TikTok and Snapchat take that as truth: this person converted — go and find more like them.
On a prepaid store that is fair enough. The card was captured at checkout, so an order really is a sale. On cash on delivery it is not. The order is a promise to pay.
Some promises turn into cash at the door. Plenty do not: the parcel is refused, nobody answers, the address is wrong, the customer changed their mind somewhere between the ad and the knock. Your ad platform never hears about any of it. It learned from the order and moved on.
Your pixel measures intent. Your bank measures money. On COD those two numbers drift apart — and every campaign you run is optimising against the first one.
What it actually costs you
Take a simple month. The numbers below are made up — the shape is what matters, and yours will be different:
Without Paid Signal
conversions reported
The pixel counts every order at checkout. Your campaigns optimise toward all 100, and every audience you build is seeded from all 100.
But only 60 of them paid you. The other 40 taught your campaigns to go and find more people who order and never pay — and they are sitting inside every audience you have seeded since.
With Paid Signal
conversions reported
One event per order, fired only when the money is confirmed. Fewer events — and every one of them is a customer who actually paid.
If someone later refunds, or the parcel comes back, that is recorded too, so the seed does not quietly rot over the following months.
The right-hand column looks worse in Ads Manager. That is the central difficulty with this product and it is worth being blunt about: your reported conversion count will go down, and your reported cost per conversion will go up.
Neither of those changed anything in the real world. They just stopped counting people who never paid you.
You were never really paying for 100 conversions. You were paying for 60 customers and telling yourself it was 100 — while pointing your optimisation at the wrong 40.
What the app does
- Watches your orders. Connects to your store and follows every order's financial status — no theme edits, no extra scripts on your storefront.
- Waits for the money. Nothing is sent at checkout. The event fires the moment the order is paid — card captured, or COD cash confirmed.
- Tells your ad platforms. One server-side event per paid order to Meta, TikTok and Snapchat, plus an offline-conversion file for Google. Server to server, so ad blockers and browser restrictions cannot drop it.
- Takes it back when the money goes back. Refunds and courier returns are tracked, so you can see which conversions reversed — and Google's file carries an explicit retraction.
- Shows you the truth. A full order ledger, collect rate per channel, and a reversal rate that tells you how polluted your seed audiences have become.
It never talks to your courier and never needs to. Everything hangs off one fact your store already knows: whether the order has been paid.
The one rule that makes it work
Card payments mark themselves paid at checkout. Cash on delivery does not — your store has no way to know your courier collected the money. So a delivered, fully-paid COD order stays "pending" forever unless somebody says otherwise, and no event is ever sent for it. Every one of those is a real paying customer your ad platforms never learn about.
Nothing else on this page matters if this is not handled. An app that never receives a "paid" signal will sit there looking perfectly connected and send nothing at all — which is exactly what it should do, and exactly what looks like a broken app if you do not know why.
Selling prepaid only? Nothing to do — card payments mark themselves paid at checkout and the event fires on its own.
Four ways to do it
An automation rule
automatic · freeIf your courier marks orders Delivered in your store, an automation can mark them paid the second that happens. No app, no code, nobody remembering.
- Open your store's automation tool and create a workflow.
- Trigger: Fulfillment event created.
- Condition: fulfillment display status equals DELIVERED.
- On the True branch: Mark order as paid.
- Turn it on. Paid Signal picks it up through the webhook it already uses.
Your courier or 3PL
best if availableIf your courier already writes fulfilment status back to your store, the workflow above runs itself and you never touch an order again.
- Ask your courier whether their app writes Delivered back to the order.
- If it does, build the workflow above and you are finished.
In bulk, from the orders list
no setupThe practical option when you reconcile courier payouts once or twice a week.
- Open Orders, filtered to the ones the courier has settled.
- Tick them, then use the bulk action to mark them paid.
- One event per order fires immediately.
One order at a time
no setupFine at low volume, and the most accurate — you are marking exactly what you were actually paid for.
- Open the order in your store admin.
- Collect payment → Mark as paid.
Only automate this if "delivered" really does mean "paid" for you. If your courier marks parcels delivered before handing over the cash, or returns are settled later, you will be telling the ad platforms a customer paid when they have not — the exact bad signal Paid Signal exists to stop. When in doubt, mark orders paid against your payout reconciliation instead: slower, but true.
Playbooks — turning verified payers into better targeting
Once the event is firing there are two moves on every channel: bid on it, and build an audience from it. The playbooks below happen inside the ad platform’s own console, with no extra access and nothing that expires. On the Scale plan Paid Signal can also maintain a payer audience on Meta and Snapchat for you, adding payers and removing reversals automatically; either way you create the Lookalike itself in the ad platform.
Meta
conversions api · audiencesMeta treats server events exactly like pixel events — same dataset — which is what lets them seed an audience with no extra access at all.
- Bid on it: Sales campaign → ad set → Conversion event → DeliveredPurchase.
- Seed an audience: Events Manager → Audiences → Create audience → Website, rule set to that event, retention 180 days.
- Then create a Lookalike from it in Meta, 1%, your country. Meta needs at least 100 matched people in the source before it will build one.
- The audience is a live rule, not an upload — Meta keeps it current as events arrive.
TikTok
events api · website audience- Ad group → Optimization event → your verified event. Check Events Manager shows the source as Events API, not Browser.
- Assets → Audiences → Create → Website traffic, filtered to that event over the longest window offered. Then build a lookalike from it in TikTok, starting Narrow.
Snapchat
conversions api · pixel audienceSnapchat only accepts its own fixed event names, so choose one you do not use anywhere else — otherwise the audience mixes everyone who ordered with everyone who paid, and you are back where you started.
- Ads Manager → Audiences → Create Audience → Pixel Custom Audience, filtered to that event.
- Then build a lookalike from it in Snapchat, and set the ad set goal to the same event.
Google removed Similar Audiences in August 2023, so on Google the win is bidding rather than audiences.
- Download the conversions file from the app and upload it in Google Ads → Goals → Conversions → Uploads. Matching is by the click id captured at the click.
- Set that conversion action as a primary goal, and use Maximise conversions or Target CPA so bidding learns from it.
How to tell it is working
| Look at | What it tells you |
|---|---|
| Events sent | Should climb as orders are marked paid — not at checkout. If it is flat while orders keep arriving, your COD orders are not being marked paid. |
| Collect rate | Paid ÷ placed. This is the number the whole product exists to expose. If it is 60%, then four in ten of your old "conversions" were fiction. |
| Reversal rate | The share of sent conversions whose order later returned or refunded. Under 10% is a healthy seed. Higher means you are still feeding the platforms money that came back. |
| Collect rate per channel | The uncomfortable one. A channel can deliver plenty of orders and collect badly — that is budget you have been defending with the wrong metric. |
Fair objections
My pixel already tracks purchases. Why do I need this?
Your pixel tracks checkouts. On prepaid that is the same thing as a purchase. On cash on delivery it is a promise, and a meaningful share of promises never turn into money. The pixel has no way to learn that — it stops watching the moment the browser closes.
Fewer conversion events will hurt my optimisation.
This objection is legitimate and worth taking seriously. Ad platforms do need volume to learn, and if your verified-payer volume is very low, an algorithm can struggle.
The honest advice: do not switch everything at once. Run one campaign optimised on the verified event alongside your existing ones, give it a few weeks, and compare on the number that pays your wages — cash collected — rather than on conversions reported. If your volume really is too thin, use the verified event for audiences and reporting and keep bidding on the pixel event until it is not.
My reported ROAS is going to drop.
Yes. Your reported ROAS was measuring orders placed. The money in your bank did not change when you installed this — only the honesty of the number describing it. Every decision you make from here is made against what actually collected.
We are prepaid only. Is there anything in this for us?
Less, and we would rather say so than sell you something. Your orders mark themselves paid at checkout, so the main gap this closes does not exist for you.
What is still useful: server-side events that ad blockers cannot drop, refund corrections so returns do not pollute your audiences, and a full ledger of what actually collected after refunds.
Does this send my customers' personal data anywhere?
Only one-way hashes. Email and phone are normalised and SHA-256 hashed before they ever leave your workspace — that is the format the ad platforms match on, and it cannot be reversed back into an address. Nothing readable is transmitted.
Do I have to change my theme or add scripts?
No. It reads your orders through your store's API and sends events from our server to theirs. There is nothing to paste into your storefront and nothing that can slow your site down.
Stop optimising on orders you never got paid for
Connect your store, mark your COD orders paid, and let your ad platforms learn from customers who actually paid you.
Start a free trialEverything switched on · no card required