Guide
Offline conversion tracking: make your ads bid on revenue
Your ads optimize for whatever you call a conversion. If that's a form fill, you'll get more form fills. Offline conversions teach them to find customers who pay.
By Mike Usry · Updated
The problem with form-fill conversions
Google, Meta, and Microsoft are very good at finding more of whatever you tell them is a conversion. Most small businesses tell them “someone filled out the form.”
So the algorithm finds form-fillers. Some of them are great customers. Some are tire-kickers, spam, out-of-area, or people who wanted a price and never picked up the phone. To the ad platform they all look like wins.
A real example: our own
Southland Organics, one of our own brands, sells online through Shopify and by phone. The phone orders are usually larger, and they live in a separate order system. Google only saw the Shopify orders, so it optimized for small online orders and knew nothing about the big ones.
The fix wasn’t a better ad. It was an offline conversion upload that tells Google about the phone orders too, with real order values, through a data layer we built in BigQuery.
How offline conversion tracking works
- Capture at the click. Store the click ID (
gclid,fbclid,msclkid) and the contact’s email and phone with every lead. See click IDs explained. - Carry it through. The IDs live on the lead or customer record in your CRM, store, or field-service software.
- Watch for outcomes. Booked, quoted, sold, completed, paid: whatever stages you track.
- Send them back daily. Each outcome goes to the ad platform with the click ID or hashed contact info, a timestamp, and a value.
- Bid on it. Set the valuable stage as the primary conversion and let the bid strategy (Maximize conversion value, target ROAS) optimize for it.
Which stage to optimize for
| If you close… | Optimize for | Value to send |
|---|---|---|
| Plenty of sales every week | Sale or paid invoice | Actual revenue |
| A few sales a month | Booked appointment or qualified lead | Predicted value (close rate × average ticket) |
| Long sales cycles (60+ days) | An earlier qualified stage | Predicted value, with the sale as a secondary conversion |
Keep the other stages as secondary conversions for reporting. Only one or two should drive bidding.
The platform specifics
- Google Ads: uploads now go through the Data Manager API. gclid uploads within 90 days of the click, enhanced conversions for leads within 63 days. See Google’s Data Manager API.
- Meta: send CRM and offline events through the Conversions API. See Meta Conversions API.
- Microsoft Ads: offline conversions keyed on
msclkidwithin 90 days, or enhanced conversions with hashed email or phone.
What usually goes wrong
- Flat values. Every conversion worth $1 teaches the platform nothing about which customers matter.
- Monthly uploads. The algorithm learns from fresh data. Daily or better.
- Double counting. The website form and the offline upload both count as the primary conversion. Pick one to bid on.
- No refunds. Cancelled jobs and returned orders stay counted forever.
- Nobody watching. The upload breaks, campaigns keep spending, nobody notices for months. Monitor it.
Questions we get
- What is an offline conversion?
- Any valuable outcome that happens after the click and outside the ad platform's view: a booked appointment, a completed job, a signed contract, a paid invoice, a phone order. You send it back to the ad platform so it can learn which clicks were worth it.
- What value should I send?
- The real revenue if you have it: the invoice or order total. If you bid on early stages like 'appointment booked', send a predicted value based on your average close rate and ticket size.
- How many conversions do I need for value-based bidding?
- More is better, and it needs to be steady. If you only close a handful of sales a month, optimize to an earlier stage that happens more often, like a booked appointment, and give it a predicted value.
- What about refunds and cancellations?
- Send them back. Google supports conversion adjustments to retract or restate a conversion. Otherwise the platform keeps learning from sales that never stuck.
Keep going
ServiceTitan, Housecall Pro, and Jobber, wired into your ads and website.
Your field software knows which calls became paid jobs. Your ads and your website should too.
See the integration → Integration · CRMHubSpot to Google Ads and Meta, with real deal revenue.
HubSpot knows which leads turned into revenue. We make sure Google, Meta, and Microsoft know it too, and push customer value back into HubSpot for sales.
See the integration → Integration · EcommerceShopify to Google Ads and Meta, with the orders Shopify never sees.
Shopify's built-in apps send online purchases. Your ads also need the phone orders, the refunds, the margin, and which customers come back.
See the integration → GuideGoogle's Data Manager API: what changed for offline conversions
Google moved offline conversion uploads to a new API on June 15, 2026. A lot of CRM-to-Google setups stopped working and nobody noticed.
Read the guide → GuideClick IDs explained: gclid, gbraid, wbraid, fbclid, msclkid
That random string on the end of your ad URLs is the key to sending sales back to the ad platform. Most businesses throw it away.
Read the guide → GuideFirst-party data for a small business
You already own the data that makes ads work: who bought, what they paid, and when. It's just stuck in software your marketing never touches.
Read the guide →Want this wired up for your business?
Tell us what system your customers live in and where you advertise. We'll tell you what's possible.