New · A dedicated AI SEO channel: see conversions from ChatGPT, Perplexity, Claude & Gemini →
← Blog
Part of: SEO Conversion Tracking: Measure Conversions and Value from Organic Search →

Offline Conversion Tracking: Setup, Upload Windows and an Example

Portrait of Samy ThuillierBy ··17 min read
Diagram of offline conversion tracking: an ad click and form fill flow into a CRM, and closed deals flow back to the ad platform

Offline conversion tracking is the process of recording conversions that happen away from your website, such as a closed deal in your CRM, a sale over the phone or a store purchase, and sending them back to the ad platform or analytics tool that can match them to the original click. It works by saving an identifier when the lead arrives (a click ID like the GCLID, or the lead’s email and phone) and uploading it later with the conversion’s time and value. The payoff: your reports and your bidding learn which campaigns produce customers, not just form fills.

This guide covers how it works on Google Ads, Meta, Microsoft and LinkedIn, the exact Google Ads setup, a copyable upload template, privacy rules and the errors that break matching. It also covers three things most guides skip: how to attribute offline sales to organic search and AI assistants (which carry no click ID), a worked example of stage values with real arithmetic, and a monthly audit that tells you where your conversions are getting lost.

What Is Offline Conversion Tracking?

A conversion is any action you count as a success: a purchase, a lead, a booked call. Normal conversion tracking records it with a tag on the page where it happens. That fails when the action that matters happens later and somewhere else. The website sees the form fill on day 1. It never sees the contract signed on day 40.

Offline conversion tracking closes that gap. Your CRM, call system or point-of-sale system becomes the source of truth for outcomes, and you send those outcomes back to the systems that need them: Google Ads, Meta, Microsoft Advertising, LinkedIn, or your analytics tool.

What counts as an offline conversion

  • A lead that sales marks as qualified (MQL, SQL or opportunity)
  • A demo, consultation or appointment that actually happens
  • A closed deal or signed contract, with its revenue
  • A phone order or a sale made during a call
  • An in-store purchase after an online ad or search
  • A trial that converts to paid after a sales conversation
  • A renewal or upsell handled by an account manager

When you need it

You need offline conversion tracking when the outcome you are paid for does not happen in an online checkout. Lead generation, B2B, local services, high-ticket retail, education, real estate and anything sold over the phone all qualify. If every sale completes on your site and your tag records it with a value, you mostly do not need it, except for refunds and cancellations, which some teams send as adjustments.

Why Offline Conversion Tracking Matters

  • Bidding learns the right thing. Automated bidding optimizes toward whatever you call a conversion. If that is a form fill, it finds people who fill forms, including the ones who never buy. Feed it qualified leads or closed revenue and it starts looking for people like your customers.
  • You compare campaigns on profit, not volume. A campaign with cheap leads can lose money. A campaign with expensive leads can be your best one. Only downstream data shows which is which.
  • Marketing and sales stop arguing. One shared definition of a qualified lead, recorded in the CRM, replaces two sets of numbers.
  • Long sales cycles become visible. Deals that close weeks after the click still get credited to the source that started them.

How Offline Conversion Tracking Works

Every platform uses the same loop:

  1. Someone clicks your ad. The platform adds a click ID to the landing page URL (gclid=, msclkid=, fbclid= and so on).
  2. Your site reads the click ID and keeps it in a first-party cookie, because it disappears from the URL on the next page.
  3. When they submit a form, hidden fields send the click ID, plus the email and phone they typed, into your CRM.
  4. The lead moves through your pipeline. Sales updates its stage.
  5. When it reaches a stage you track, a conversion is created with a name, timestamp, value, currency and a unique ID.
  6. You send it to the platform by file, scheduled import, automation tool or API.
  7. The platform matches it to the original click and credits the campaign, ad group, keyword and ad.

Click IDs vs hashed customer data

There are two ways to match an offline conversion to a click. A click ID is exact: it points to one ad click. It is also fragile: redirects strip it, forms fail to store it, and some browsers remove known tracking parameters. Hashed customer data (email, phone, name and address run through SHA-256) is more durable: the platform compares it with the hashed data of its signed-in users, which also works across devices. Its weakness is coverage: it only matches people the platform can recognize.

The answer every platform now gives is to send both. Google’s offline conversion API documentation recommends including the GCLID even when you send user-provided data, accepts up to five user identifiers per conversion, and says conversions with only user-provided data still help optimization.

Click IDs and upload windows by platform

PlatformClick IDAlso matches onHow long you have to upload
Google Ads (GCLID import)gclid; gbraid / wbraid for some iOS trafficHashed email, phone, name and address (with enhanced conversions for leads)90 days after the click
Google Ads (enhanced conversions for leads)gclid recommended alongsideHashed email, phone, name and address63 days after the click
Meta (Conversions API, offline events)fbclid, stored as the fbc valueHashed email, phone, name and more62 days after the conversion
Microsoft AdvertisingmsclkidCheck the current offline conversion docsCheck the current offline goal docs
LinkedIn (Conversions API)li_fat_idHashed emailCheck the current Conversions API docs

The Google limits come from Google’s guidelines for importing offline conversions, which say conversions uploaded more than 90 days (GCLID) or 63 days (enhanced conversions for leads) after the last click are not imported. The Meta window comes from Meta’s offline events documentation, which asks you to upload store and offline events with physical_store as the action source within 62 days of the conversion. Guides quote other figures for Microsoft and LinkedIn; confirm them in each platform’s current docs before you design around them.

A note on iOS: gbraid and wbraid are aggregated, privacy-preserving identifiers. Google’s API accepts them on uploads, but they do not identify one person, so for iOS-heavy traffic the hashed customer data is what carries the match.

Plan Before You Build

Most failed setups break on process, not code. Answer these five questions first:

  1. What is the path from click to cash? List every step and the system that records it: form, CRM, call tool, quote tool, billing.
  2. Which stages become conversions? Pick one primary stage to optimize on (often qualified lead or booked meeting) and track closed-won next to it. A stage that is too rare gives the algorithm too little to learn from. A stage that is too early is just a form fill again.
  3. What is each stage worth? Use a fixed value per stage or the real deal value. The worked example below shows how to set stage values from your own close rates.
  4. Who updates the CRM? If nobody owns lead status, the uploads are wrong. Agree on definitions and a deadline for updating stages.
  5. How fast do deals close? If many close after 63 or 90 days, upload an earlier stage too, or most of your closed deals will arrive after the window and be rejected. Our guide to the attribution window explains how windows differ across platforms.

Worked Example: Stage Values and Cost per Closed Deal

The numbers in this example are illustrative, not from a real account. A B2B service company sells a contract worth $6,000 on average. From its CRM history, 5% of leads close, 25% of sales-qualified leads (SQLs) close, and 50% of proposals close.

Stage value = average deal value × that stage’s close rate
StageClose rate from this stageValue to upload
Lead (form fill)5%$6,000 × 5% = $300
Sales-qualified lead25%$6,000 × 25% = $1,500
Proposal sent50%$6,000 × 50% = $3,000
Closed won100%$6,000 (or the actual deal value)

Now two campaigns, each spending $9,000 in a month:

Campaign ACampaign B
Spend$9,000$9,000
Leads15060
Cost per lead$60$150
SQLs1218
Closed deals37
Cost per closed deal$9,000 ÷ 3 = $3,000$9,000 ÷ 7 = $1,286
Revenue3 × $6,000 = $18,0007 × $6,000 = $42,000
Revenue ÷ spend2.04.7

Here is what the ad platform “sees” depending on which conversion you send it:

  • Form fills only, valued at $300: A reports 150 × $300 = $45,000 of value, B reports 60 × $300 = $18,000. The platform concludes A is 2.5 times better and moves budget to it.
  • SQLs valued at $1,500: A reports 12 × $1,500 = $18,000, B reports 18 × $1,500 = $27,000. B now wins, which matches reality.
  • Closed deals at $6,000: A $18,000, B $42,000. Most accurate, but only 10 events a month across both campaigns, which is thin data for an algorithm and arrives weeks late.

That is why most lead-gen accounts optimize on a mid-funnel stage (here, SQL) and report closed revenue next to it. It also explains the thing teams panic about after switching: cost per lead goes up. In this example the “expensive” $150 lead is the cheaper way to buy a customer. Judge the change on cost per SQL and cost per closed deal, not cost per lead. For the full method of valuing leads, see how to calculate conversion value.

Before you switch bidding to offline conversions
Agree in writing that cost per lead and lead volume may change first
Set new targets for the deeper stage, since an SQL target must be higher than a lead target
Report cost per SQL, cost per closed deal and revenue per dollar
Give the bid strategy several weeks of steady uploads before judging it

How to Set Up Offline Conversion Tracking in Google Ads

Google Ads is where most teams start, and it is the most complete implementation. Menu labels change often, so look for these options rather than exact wording.

Step 1: Create an import conversion action

Go to Goals > Conversions and create a new conversion action. Choose Import, then the option for CRMs, files or other data sources, and “Track conversions from clicks.” Name it after the stage (for example “SQL” or “Closed won”), choose a category, and set the value: one fixed value per stage, or the value you upload with each conversion. Set Count to One for leads (one per click) and Every for repeat purchases. Mark the stage you optimize on as primary and the others as secondary.

Step 2: Capture the click ID and contact data

Turn on auto-tagging in the account settings so every click carries a GCLID. On your site, a small script reads gclid (and gbraid, wbraid, msclkid, fbclid, li_fat_id if you run those platforms) from the URL, stores it in a first-party cookie, and writes it into hidden fields on every form. Test multi-step forms, chat widgets and booking tools separately: each is a place where the value gets dropped. For enhanced conversions for leads, also turn on the setting that lets the Google tag pick up the email or phone from the form.

Step 3: Store identifiers on the CRM record

Create dedicated CRM properties for each click ID, the landing page, the first referrer, and consent status. Map the hidden fields to them. Native integrations in HubSpot and Salesforce can then sync stage changes to Google Ads directly; other CRMs need one of the methods below.

Step 4: Normalize and hash user data

If you send hashed data yourself (API or your own pipeline), normalize first, then hash with SHA-256. Google’s rules: trim spaces, lowercase, and format phone numbers to E.164 (for example +14155550123). For gmail.com and googlemail.com addresses only, remove dots and anything after a plus sign in the part before the @. Country, state, city and postal code are not hashed. One stray capital letter produces a different hash and a failed match. Tools like Data Manager and native integrations hash for you.

Step 5: Upload conversions

Send the identifier, the conversion action name, the conversion time with time zone, the value and the currency. Add an order ID so repeated uploads do not double count, and pass the consent status where required. Upload daily: a stage updated today and uploaded next week has lost a week of bidding signal, and old clicks risk falling outside the window. Do not upload conversions for clicks from the last day: Google may not have recorded the click yet.

Step 6: Check diagnostics

Open the conversion action’s diagnostics after each import. They flag rejected rows, too-old clicks, formatting errors and low match quality. Google’s guidelines say imported statistics take about 3 hours to appear, but other Google help pages and many guides quote longer processing times, so wait a full day before declaring an upload broken. Conversions are reported against the date of the original click, not the upload date, so last month’s numbers will keep rising after it ends.

Current Google change: Data Manager

Google is moving offline imports to Data Manager. Its API documentation says that from June 15, 2026, offline conversion uploads through the Google Ads API fail for developer tokens that had not already sent them, and points new integrations to the Data Manager API. Enhanced conversions for leads file uploads also run through Data Manager. If you are building a new pipeline or picking a tool, confirm it uses the current route. Existing integrations should plan the move too.

Google Ads offline conversion upload template

For a GCLID file or Google Sheet import, the columns look like this. Download the current template from the Uploads page before your first import, since Google can add columns.

Google Click IDConversion NameConversion TimeConversion ValueConversion Currency
Cj0KCQjw...SQL2026-10-01 14:32:00-05001500USD
EAIaIQob...Closed won2026-10-02 09:10:00-05006200USD

Write the conversion time with an explicit offset or set the file’s time zone parameter. A CRM that exports UTC timestamps into a file that assumes account time shifts every conversion by hours, and some will land before their click and be rejected.

Meta, Microsoft and LinkedIn

Meta

Meta takes offline events through the Conversions API, its server-side events pipeline. Older offline-specific APIs are no longer recommended for new setups. Send the event name (Lead, Purchase or a custom stage), the event time, action_source set to physical_store for store and offline events, value and currency, and as many hashed customer fields as you have, plus the fbc value built from the fbclid. Meta matches on many fields at once, so sending email, phone, name and location together helps. Many CRMs offer a native Meta connection that sends stage changes as events.

Microsoft Advertising

The flow mirrors Google: turn on auto-tagging so clicks carry an MSCLKID, store it with the lead, create an offline conversion goal, and upload by file, scheduled import or API. Microsoft asks you to wait a short time after creating a new goal before the first upload, and reports lag a few hours behind uploads, so do not debug a fresh goal on day one.

LinkedIn

LinkedIn’s Conversions API accepts CRM events matched on the li_fat_id click ID and hashed email. It matters most for B2B accounts where LinkedIn drives few but valuable leads. You can start with CSV uploads in Campaign Manager and move to the API or a CRM connector later.

Offline Conversions in GA4

GA4 works differently from ad platforms. It does not match on GCLID. It joins events through the client_id from the _ga cookie (and user_id if you set one). Two routes exist:

  • Measurement Protocol: your server sends an event (for example qualified_lead or purchase) with the stored client_id. Events can only be backdated a short time, so it suits stages that happen soon after the visit, like a phone order the same day, not a deal that closes in six weeks. Send a session_id too, or the event is likely to appear as Unassigned.
  • Data Import (offline events): upload a file of events under Admin > Data import. Useful for batches, with the same dependency on stored identifiers.

Use GA4 for cross-channel reporting and send offline conversions to each ad platform directly for bidding. GA4 is not a reliable bridge for long sales cycles. For key events setup on the website side, see Google Analytics conversion tracking.

Offline Conversions From Organic Search and AI Assistants

Every method above depends on a click ID or an ad platform matching your customers. Organic search and AI assistants give you neither. A visitor who finds you through Google’s organic results, Bing or a ChatGPT answer arrives with no gclid, and there is no platform to upload the closed deal to. If your offline tracking only covers paid clicks, organic and AI leads that close are invisible, and SEO looks weaker than it is in every revenue review.

The fix uses the same CRM plumbing, with different fields:

  1. Record the first landing page and referrer. On the first page of a visit, store the landing page URL, the document.referrer and any UTM values in a first-party cookie. Search engines hide the keyword, so the landing page is the most specific thing you can attribute to.
  2. Classify the channel. A google.com or bing.com referrer with no click ID is organic search. Referrers such as chatgpt.com, perplexity.ai or gemini.google.com (or utm_source=chatgpt.com) are AI assistants. No referrer is Direct: do not guess.
  3. Write those values into hidden form fields next to the click IDs, so every lead record carries its channel and landing page.
  4. Report closed revenue by channel and landing page in the CRM. Group closed-won deals by those fields. Now you can say which organic pages produce SQLs and revenue, not just traffic.

You can also skip the CRM grouping for day-to-day reporting by putting a stage-weighted value on the website conversion itself (the $300 per lead from the example above). SEOConversion works this way for organic search and AI assistants: one script records conversions such as form submits and calls, you assign each conversion a value, and it reports conversions and value by landing page. When an assistant sends no referrer, the visit stays Direct. For the full measurement setup, read SEO conversion tracking and, for assistants, AI conversion tracking.

Offline Sales With No Click at All

Some offline sales never touch a trackable click: a store visit after seeing a social post, a call from a number read on a podcast, a purchase after an influencer mention. Click-based tracking cannot see them. Use these instead:

  • Unique promo codes per campaign or creator, recorded at the register or in the order system.
  • Call tracking numbers per source, which attribute calls (and, with call imports, the sales that follow) to campaigns.
  • “How did you hear about us?” on forms and at checkout, stored in the CRM.
  • Store visit and store sales measurement in Google Ads, available only to eligible advertisers with enough store locations and volume.
  • Geo or time-based lift tests for big campaigns: compare sales in exposed and unexposed regions.

4 Ways to Send Offline Conversions

MethodBest forCostWatch out for
Manual file or Google Sheet uploadLow volume, testing whether your data matches at allFreeDepends on someone remembering; formatting and time zone errors; one platform per file
Native CRM integration (HubSpot, Salesforce and others)Teams on a supported CRMIncluded in some CRM plansLimited control over values and stages; check which platforms and identifiers it sends
Automation tool (Zapier, Make, n8n)Medium volume, no developersPaid plans at real volume; n8n self-hosted trades fees for maintenanceYou still handle field mapping, hashing, time zones and failed runs, which can fail quietly
Server-side or direct API (incl. server-side tagging)High volume, several platforms, full controlDeveloper time and hostingYou own monitoring, retries and API changes, such as Google’s move to Data Manager

Dedicated offline conversion platforms sit between options 3 and 4: they capture identifiers, hash, upload to several platforms and show match rates, for a subscription. If you already run server-side GTM, a CRM webhook into that container can feed every platform from one place.

Privacy and Consent

  • Hashed data is still personal data. SHA-256 is a one-way function, but anyone with the original email can produce the same hash. Treat uploads as sharing personal data.
  • Disclose it. Your privacy policy should say you share customer data with ad platforms for measurement.
  • Carry consent with the lead. Store the consent state captured on the form on the CRM record and exclude records without consent from uploads where the law requires it. For Google uploads, pass the consent field. For EEA and UK traffic, see our guide to Consent Mode v2.
  • Honor opt-outs. In California and other US states with opt-out rules, sharing data with ad platforms for advertising can count as sharing. Respect Global Privacy Control signals and opt-out requests in the upload logic.
  • Send only what matching needs. Do not push every form field to a platform.

This is general information, not legal advice. Check your obligations with counsel for the regions you sell in.

Common Errors and How to Fix Them

SymptomLikely causeFix
Rows rejected as too oldUploaded more than 90 days (GCLID) or 63 days (enhanced conversions for leads) after the clickUpload an earlier stage; upload daily instead of monthly
Rows rejected or missing for recent clicksUploaded within a day of the clickDelay uploads by a day; include the previous day in each run
Conversions before their click, or off by hoursUTC timestamps read as local timeSend times with an explicit offset; standardize the CRM export
Click ID field empty on many leadsRedirects strip parameters, cookie not set, form step drops the field, auto-tagging offTest every form path from an ad URL; store the ID in a cookie on the landing page
Low match rate on hashed dataNot normalized before hashing, phone not in E.164, data hashed twiceNormalize, then hash once; test a known email against the expected hash
Conversions counted twiceRepeated uploads or CRM edits re-sending the same stageSend a stable order ID or event ID; upload each stage once per lead
Uploads succeed but campaigns show nothingConversion action paused or removed, or name in the file does not matchAudit action names and statuses whenever someone edits conversions
GA4 offline events show as UnassignedMissing client_id or session_id, or event sent too lateStore both IDs at lead creation; use GA4 only for fast stages

How to Check Offline Conversion Tracking: A Monthly Capture Audit

Diagnostics tell you whether the rows you uploaded were valid. They cannot tell you about the deals you never uploaded. Once a month, count the whole chain from the CRM side. The numbers below are illustrative.

StepCountRateIf this is low, look at
Closed deals this month80
Of those, lead source says Google Ads50Your UTM and source fields
Have a GCLID or email on the record4646 ÷ 50 = 92%Form capture, redirects, cookies
Uploaded to Google Ads4444 ÷ 46 = 96%Pipeline failures, clicks past the window
Reported as matched by Google4040 ÷ 44 = 91%Normalization, hashing, consent filtering
End-to-end coverage40 ÷ 50 = 80%

In this example Google sees 40 of the 50 deals the CRM credits to it. Each row points to a different owner: capture is a website problem, upload is a pipeline problem, and match is a data quality problem. Track the end-to-end rate monthly; a sudden drop usually means a form, redirect or integration changed. Also look at the 30 deals not credited to Google Ads: how many came from organic search, AI assistants or Direct is the question the section on organic leads answers.

Where the Top Guides Disagree

  • “Google matches on a single parameter.” At least one popular guide says Google relies on one identifier while Meta takes many. Google’s API documentation says otherwise: a conversion can carry a click ID plus up to five user identifiers. Meta does accept more field types, but Google is not single-key.
  • How long imports take to show. Guides give anything from a few hours to two days, and Google’s own help pages are not consistent with each other. Google’s import guidelines say about 3 hours. Treat a day as the safe wait before troubleshooting.
  • Upload windows for Microsoft, LinkedIn, TikTok and Pinterest. Third-party guides list specific day counts that do not always agree. We only state the windows we confirmed in Google’s and Meta’s documentation; check the others before you rely on them.

Offline Conversion Tracking Tools and Cost

The platform side is free: Google Ads, Microsoft Advertising, Meta and LinkedIn do not charge for importing offline conversions. What you pay for is the plumbing. Tools fall into four groups:

  • Call tracking tools, for businesses where most leads phone in. They attribute calls to sources and some send call outcomes to ad platforms.
  • Offline conversion platforms, which capture click IDs, hash and upload CRM stages to several ad platforms with match-rate reporting.
  • Server-side tagging and automation tools, which move events you define from your CRM to platform APIs.
  • Attribution and analytics tools, which report revenue by source but may not send anything back to ad platforms. Check which job you need before you compare prices.
Quick checklist

1. Pick one primary stage and value it from your own close rates.

2. Capture click IDs, email, landing page, referrer and consent on every form.

3. Upload daily, with order IDs and explicit time zones, inside the 63 or 90 day window.

4. Run the capture audit monthly, including deals from organic search and AI assistants.

FAQ

How can I track offline conversions in Google Ads?

Create a conversion action of the import type for conversions from clicks, capture the GCLID and the lead’s email or phone when the form is submitted, and store both in your CRM. When the lead reaches the stage you care about, upload the click ID or hashed contact data with the conversion name, time and value by file, Data Manager or the API. Google’s guidelines reject uploads more than 90 days after the click for GCLID imports and 63 days for enhanced conversions for leads.

What does conversion tracking mean?

Conversion tracking means recording when a visitor completes an action you care about, such as a purchase, a lead form or a call, and tying it to the source that brought them. Online conversions are recorded by a tag on the page. Offline conversion tracking extends this to actions that happen later in a CRM, on the phone or in a store.

When should I use offline conversions?

Use them when the outcome you get paid for happens away from the website: a sales call, a signed contract, a store purchase or a qualified lead in your CRM. If your ad platforms only see form fills and many of those leads never buy, offline conversions are how you tell the platform which clicks produced customers. If every sale completes in an online checkout, you usually do not need them.

How do I check that offline conversion tracking is working?

Submit a test lead from an ad-tagged URL and confirm the click ID and email land in the CRM record. Then run a monthly audit: of the deals your CRM attributes to a platform, count how many have a stored identifier, how many were uploaded, and how many the platform reports as matched. Each step that drops points to a different fix: capture, pipeline or normalization.

Is the Meta Conversions API free?

Meta does not charge for sending events through the Conversions API. What costs money is the system that sends them: a developer’s time for a direct integration, a server-side tagging host, an automation tool like Zapier, or a dedicated offline conversion platform. Your CRM may also offer a native Meta integration on some plans.

Is there a free way to do offline conversion tracking?

Yes. Manual file uploads to Google Ads, Microsoft Advertising and Meta cost nothing beyond someone’s time, and a scheduled Google Sheet can automate Google Ads imports. A direct API integration is also free to run but needs a developer to build and maintain. Paid tools mainly save the labor and add diagnostics.

See which organic pages and AI answers produce leads worth paying for.

SEOConversion records conversions from organic search and AI assistants with one cookieless script, lets you put a value on each one, and reports conversions and value by landing page.

Start free