Refunds and cancelled sales in offline conversion tracking

Google Ads refunds correctedOne sale, one conversion
Cancelled and lost never sentNet revenue

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.

Setup in 5 minutes
No credit card
One lead from a Meta ad
From form fill to won deal in HighLevel
With DataCops
Form fillSent to Meta
Booked callSent to Meta
Showed upSent to Meta
Deal wonSent with its value
Matched to the original ad click by email

Trusted by agencies and brands running paid media

AffilinoBigfishClever DigitalKeetraxLegendListingLogicNumeroStormZealdBurst Digital

What happens when a sale is refunded

From the original sale to the corrected number in Google Ads.

  1. Step 01
    Stages your CRM reports
    Booked call Reported
    Showed up Reported
    Won, with value Reported

    A sale closes. DataCops sends it once to each platform, with its order ID.

  2. Step 02
    Saved on yourdomain.com
    fbclid from Meta Kept
    gclid from Google Ads Kept
    ttclid from TikTok Kept
    Kept for up to 90 days

    Later, the refund reaches DataCops from HighLevel or your conversions API post.

  3. Step 03
    Finding the ad click again
    Won dealby email or phone
    Ad click, 23 days earlierMatched

    DataCops finds the original sale by its order ID.

  4. Step 04
    Won 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

Capture Background

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

10%
20%
30%
40%
50%
60%
70%
80%
90%
100%

First-Party Script

~78%

Blockers and ITP cut your sessions

Count the sales that stick

About 5 minutes per site. Agencies: about 15 minutes per client.

  1. Step 1
    code

    Add the DataCops script
    One script and one DNS record, so every ad click is kept on your own domain.

  2. Step 2
    ads_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.

  3. Step 3
    hub

    Send sales and refunds with order IDs
    HighLevel natively, or your store and CRM through the conversions API. Refunds then correct Google Ads.

In short

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

1

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.

2

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.

3

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.

4

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.

5

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.

6

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.

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.

Count 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.

Live traffic quality

Updated just now

Visits · last 24h

487
Real users
35873.5%
Bots · auto-filtered
12926.5%

Without filtering, 26.5% of your reported traffic is bot noise inflating dashboards and draining ad spend.

Don't trust your analytics!

Make confident, data-driven decisions withactionable ad spend insights.

Setup in 2 minutes
No credit card