Refunds and cancelled sales in offline conversion tracking
When a sale is refunded, DataCops corrects it in Google Ads: a full refund retracts the conversion, a partial one lowers its value. Meta and TikTok have no correction call, so this page also shows what to send instead, and how to report it so finance and marketing agree.

Trusted by agencies and brands running paid media










What happens when a sale is refunded
From the original sale to the corrected number in Google Ads.
- Step 01
Stages your CRM reports
Booked call ReportedShowed up ReportedWon, with value ReportedA sale closes. DataCops sends it once to each platform, with its order ID.
- Step 02Saved on yourdomain.comfbclid from Meta Keptgclid from Google Ads Keptttclid from TikTok KeptKept for up to 90 days
Later, the refund reaches DataCops from HighLevel or your conversions API post.
- Step 03Finding the ad click againWon dealby email or phoneAd click, 23 days earlierMatched
DataCops finds the original sale by its order ID.
- Step 04Won deal sent
Meta Sent once
Google Ads Sent once
TikTok Sent once
LinkedIn Sent once
Google Ads gets a retraction for a full refund, or a lower value for a partial one.
Google asks for a gap of a few hours between the upload and the change, so DataCops waits and retries.
Why refunds matter for your ads
Offline conversions teach ad platforms which clicks became customers. That only helps if the customers are real. A sale that is refunded a week later is still counted, unless something tells the platform.
For most businesses the refund rate is a few percent, and it does not undo the value of sending sales back. For some it is much higher: subscriptions with trial periods, high-ticket services, online courses. There, counting refunded sales inflates your return on ad spend, and the platform keeps finding more people who buy and then ask for their money back.
DataCops handles this in three ways: it corrects refunds on Google Ads, it never sends stages that did not happen, and it lets you choose a later stage to count. The wider picture is on our offline conversions page.
Google Ads: refunds are corrected
When a refund reaches DataCops, it looks up the original sale by its order ID and sends Google Ads a conversion adjustment:
- Full refund, or an unknown amount: a retraction. The conversion is taken back.
- Partial refund: a restatement. The conversion stays, at the lower value that was kept.
Refunds arrive two ways. From HighLevel, the payments module reports them on its own. From anything else, your store, billing tool or CRM posts the refund to the DataCops conversions API, directly or through Zapier, Make or n8n, with the same order ID as the sale.
Each refund is applied once. If the same refund webhook fires twice, the sale is adjusted a single time. If Google rejects an adjustment, for example because the upload is too recent, a retry worker tries again. Google asks for a gap of a few hours between the conversion and the change, so a refund on the same afternoon is applied a little later.
The result: Smart Bidding learns from the revenue you kept, not the revenue you first booked. See Google Ads offline conversions for the full setup.
Meta and TikTok: what to do instead
Meta and TikTok offer no call to correct a sale once sent. Nothing is sent to them for a refund, and the sale stays counted on the platform. You still have good levers:
- Send a later stage. Count paid, not signed. Or count a stage you only reach once the refund period is over.
- Hold the lead until it qualifies. DataCops can hold a lead and send it only when your CRM marks it qualified. HubSpot is checked every 5 minutes; any other CRM releases it with one API call. Held leads expire after 14 days.
- Read the platform number as a ceiling. Compare it with net revenue in your monthly report.
The trade-off is speed. A later stage means fewer events, each arriving later, so the platform learns a bit slower. Keep the platforms' own time limits in mind: Meta rejects events sent more than 7 days after they happened, and Google Ads ignores uploads more than 90 days after the click. For businesses with a heavy refund rate, a later stage is usually worth it.
What is never sent
From HighLevel, the stages sent are lead, booked, showed, won with value, and paid. Cancelled, no-show and lost are never sent. A cancelled booking or a lost deal is never turned into a conversion, so you are not counting things that did not happen.
From other CRMs, you decide which events to post to your private webhook. Post only the stages you trust. Every post is logged in plain words: sent, not sent, duplicate, ignored or rejected.
One sale, one conversion
Double counting looks a lot like a refund problem. The platform shows more revenue than you made, and it is hard to tell why. Often the same order was reported by more than one tool.
DataCops keeps a sale ledger. A purchase with an order ID is sent once per ad platform, and remembered for 400 days, no matter whether Shopify, a webhook and the pixel all report it. A lead with an email is sent once per platform within 30 minutes. Duplicates are logged as duplicate_sale or duplicate_lead, with the first message ID, so you can see exactly what was held back. If a send fails, the claim is released so a retry can go.
The conversions API is also safe to call twice: the same messageId counts once. And event IDs are passed to Meta so the browser pixel and server events dedupe.
Check what each platform received
The DataCops delivery report shows, per platform, how many conversions were sent, skipped or failed, with a plain-English reason and the value sent, for up to 400 days. When finance asks why a number looks high, you can show exactly what went out and when.
Sale refunds versus click fraud refunds
These two are easy to mix up. A sale refund is money you gave back to a customer, and DataCops corrects the conversion. A click fraud refund is money Google may give back to you for invalid clicks.
For the second, DataCops has a refund evidence export on the Organization plan. It lists every suspicious Google Ads click from the last 60 days with the reason (bot, automated browser, datacenter IP, VPN, proxy, Tor or repeat clicks), the IP and the click ID, as a CSV for Google's Click Quality Form. You file it yourself, and Google decides. The Organization plan can also block bad traffic at the Cloudflare edge before it reaches your site.
Judge platform revenue against net revenue
Ad platform reports count what they were told. Your accounts are net of refunds. Put both side by side, and never treat one as a mistake in the other.
A useful habit: keep one line in your monthly report called refunded revenue, taken from your accounts, and show platform revenue minus that figure next to the platform number. On Google Ads the gap shrinks on its own, because refunds are corrected. On Meta and TikTok it stays, and everyone can see where it comes from.
A made-up example
This is an example, not a real result. Say you sent 100 won sales at 500 each, so each platform shows 50,000. Later, 12 are refunded in full. Your accounts show 88 sales, or 44,000 net.
With DataCops, Google Ads gets 12 retractions and shows 44,000. Meta still shows 50,000, and its return on ad spend looks about 13.6 percent higher than the real one. Knowing that, you read the Meta number as a ceiling and plan budget against the net figure.
A simple refund policy for reporting
Write this down once so nobody argues about it monthly.
- Define the counted stage. Decide which stage is a sale for reporting, ideally one reached after the refund window.
- Send refunds with the order ID. So Google Ads is corrected automatically.
- Report both figures. Platform revenue and net revenue, side by side, with the difference labelled.
- Review the refund rate quarterly. If it climbs, move the counted stage later.
How to talk to finance
Finance and marketing often fight over which revenue is right. Both are, for different jobs. Marketing needs a signal fast enough to steer ads. Finance needs money that will not be reversed.
Say it in one sentence: the ad platforms tell us which clicks became buyers, Google Ads is corrected for refunds, our accounts tell us what we kept, and we show both. Agree the counted stage together. That turns an argument into a rule.
Good to know before you start
- Refunds are matched by order ID, so send an order ID with every sale.
- Google Ads applies a correction a few hours after the original upload, and DataCops retries until it lands.
- The refund evidence export for click fraud is part of the Organization plan ($359 a month, $299 yearly).
- The Free plan includes 2,000 sessions. See pricing.
Everything else DataCops does around the send

One first-party script, served from your own domain
- Runs first-party from datacops.yourdomain, not a blockable third-party host
- One script, one CNAME, live in about 5 minutes, no container to host
- Server-side collection on Cloudflare's edge, close to every visitor
- Captures click IDs at the network level, so fbclid and gclid still reach your CAPI feed after browsers strip them
- Recovers 15 to 25% of the sessions other setups lose
Traffic Visibility
First-Party Script
Blockers and ITP cut your sessions
Count the sales that stick
About 5 minutes per site. Agencies: about 15 minutes per client.
- Step 1code
Add the DataCops script
One script and one DNS record, so every ad click is kept on your own domain. - Step 2ads_click
Connect your ad platforms
One-click sign-in for Meta, Google Ads, TikTok, LinkedIn and X, an API key for Microsoft Ads, Reddit and Pinterest. - Step 3hub
Send sales and refunds with order IDs
HighLevel natively, or your store and CRM through the conversions API. Refunds then correct Google Ads.
Refunds in offline conversion tracking with DataCops, in short
DataCops is a tool that corrects refunds in Google Ads, where a full refund retracts the conversion and a partial one lowers its value, and marks every refund in the delivery log, because Meta and TikTok have no correction call.
How DataCops does it
One sale, one conversion
A sale is matched by order ID, so send an order ID with every sale. Cancelled and lost deals are never sent, so they never become conversions in the first place. A purchase with an order ID is counted once.
Google Ads is corrected
A full or unknown refund retracts the conversion, and a partial refund restates it at a lower value. The refund path comes from the conversions API and from HighLevel payments. Google applies a correction a few hours after the original upload, and DataCops retries until it lands.
Meta and TikTok cannot be corrected
Neither platform has a correction call. The page shows what to send instead, such as net value for later sales, and how to report it so finance and marketing agree.
Every refund is logged
A refund marks the row in the delivery log with its reason, so you can show what each platform was told and what it was not.
Refund evidence is a different feature
The refund evidence export for click fraud, which lists bot-flagged Google Ads clicks for a refund request that Google decides, is part of the Organization plan.
Send real sales to begin with
Every visit gets a bot verdict against 360+ billion IPs, with a Real people only switch per platform, off by default, and every form email is checked for disposable providers, domains with no mail server and an email risk score. Click IDs are kept for up to 90 days, and Ads Warmup sends existing customers to Meta, Google Ads and TikTok, dated when you send.
Best for: ecommerce, services and agencies whose reported revenue must match what is kept after refunds, and finance teams that reconcile ad numbers.
Free to start. See pricing.
When not to use DataCops
You need Meta or TikTok corrected
Neither platform offers a correction call, so DataCops cannot correct them.
You need Stripe or Paddle refunds directly
Stripe and Paddle payments are not sent directly. Post them to the webhook.
You need negative conversions on every platform
Only Google Ads supports corrections here.
You need automatic ad refunds
Refund corrections adjust conversions. A refund from Google for invalid clicks is a separate request that Google decides.
Sources
Platform rules checked October 2026. Rules change; check the platform's own page before you build.
FAQ
Yes, on Google Ads. When a refund reaches DataCops with the order ID, a full refund retracts the Google Ads conversion and a partial refund lowers its value. Meta and TikTok offer no correction call, so there the sale stays counted.
Works with the rest of DataCops
Conversion API
Server-side conversions to Meta, Google Ads and TikTok, no code.
See Conversion APIAds Warmup
Feed your customer list to the ad platforms before you spend.
See Ads WarmupLeadCops
Verified leads, and conversions only once a lead qualifies.
See LeadCopsOffline Conversions
CRM, store and CSV sales matched back to the ad click.
See Offline ConversionsCount the sales that stick
Send the stage you trust to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X, with refunds corrected on Google Ads.
Setup in 5 minutes. No credit card.