Media and tracking · 13 min read
Offline Conversion Tracking: Connect Ads to the Outcomes That Matter
Scope offline conversion tracking from CRM stages to permitted platform events. Plan identifiers, consent, deduplication, and QA before you build.
Your ad platforms count form submissions. Your sales or admissions team counts something else: qualified inquiries, attended appointments, signed contracts, enrolled students. The two numbers drift apart, and the platforms keep optimizing toward the one that is easy to measure rather than the one that pays.
Offline conversion tracking closes that gap by sending later outcomes from your CRM back to Google or Meta, matched to the ad interaction that started them. Done well, it lets bidding learn from qualified leads instead of raw form fills, and it gives you a report you can reconcile with the business.
It is also a project that touches marketing, operations, engineering and privacy at once. This guide is a scoping brief for that project: what to decide, in what order, and what to check before you trust the result. It is not a code tutorial, and nothing here certifies that a particular setup is permitted for your business.
Define the business outcome before the event
Most failed offline conversion projects start with the integration and end with a debate about what the uploaded event means. Decide the outcome first.
Qualified inquiry, attended appointment, accepted opportunity and sale
Pick the stage that best predicts revenue and still happens often enough for the platform to learn from it. The later the stage, the closer it is to money and the fewer events you will have.
| Stage | Example definition | Who confirms it | Typical lag after click | Volume |
|---|---|---|---|---|
| Qualified inquiry | Meets written criteria: service, location, eligibility, timing | Intake or sales, using a CRM status | Hours to days | Highest of the four |
| Attended appointment | Consult, tour or demo actually took place | Scheduler or front desk | Days to weeks | Lower |
| Accepted opportunity | Proposal or plan agreed, pending signature or start | Sales | Weeks | Lower still |
| Sale or start | Revenue event: signed, enrolled, first fill, first visit | Finance or operations | Weeks to months | Lowest |
Two constraints shape the choice. First, platform windows: Google’s click-through conversion window can be set from 1 to 90 days, with a default of 30 (Google Ads Help, conversion windows), and Meta’s CRM integration requires that the stage you optimize for “occurs within 28 days of leads being generated” (Meta for Developers, Conversions API for CRM). A stage that usually lands after those windows cannot be the main optimization signal. Second, volume: a stage that happens a handful of times a month gives bidding little to learn from. Many teams send two stages, an earlier one for optimization and a later one for reporting.
Status ownership, lag and stable definitions
An uploaded event is only as reliable as the CRM status behind it. Settle three things in writing:
- Who sets the status, and by when. If qualification is recorded “when someone gets around to it,” uploads will be late and incomplete.
- What the definition is. “Qualified” must mean the same thing next quarter. If the definition changes, annotate the date, because the platform will see a shift in conversion rate that has nothing to do with the ads.
- What happens to reversals. A qualified lead later marked as a duplicate or a no-show. Decide whether you adjust or retract the earlier upload, and check whether your route supports it.
Map the data journey
Draw the path from first contact to platform report before choosing tools. Each step has an owner and a way to fail.
Offline conversion data flow (annotated)
| Step | What happens | What can break | Owner |
|---|---|---|---|
| 1. Ad interaction | Click or form open; click ID captured where available (Google GCLID; Meta lead ID for instant forms) | Auto-tagging off; ID stripped by redirects or forms | Media buyer |
| 2. Lead capture | Web form, instant form or call | Form tool does not store click ID or source fields | Page owner |
| 3. Consent state | Visitor’s consent choice recorded with the lead | Consent captured on the page but not passed to the CRM | Privacy owner, page owner |
| 4. CRM record | Lead created with identifiers, source, timestamp | Duplicates; missing fields; manual entry overwrites source | CRM admin |
| 5. Outcome update | Status changes to qualified, attended, sold | No owner; inconsistent definitions; late updates | Operations |
| 6. Permitted payload | Only fields that policy and counsel allow are selected; contact fields normalized and hashed as the platform requires | Sensitive fields included by default; free-text notes exported | Implementer, with privacy review |
| 7. Transfer | Upload through the platform’s supported route | Deprecated route; expired credentials; silent failures | Implementer |
| 8. Platform diagnostics | Upload accepted, matched or rejected | Nobody checks; rejections pile up unseen | Implementer, media buyer |
| 9. Reporting and reconciliation | Platform counts compared with CRM counts by stage | Platform-attributed counts treated as total outcomes | Media buyer, operations |
Calls are a common entry point at step 2. If your outcomes start on the phone, the call journey and its disposition codes need to be in place first; our guide to call tracking before you scale covers that part, so it is not repeated here.
Choose only data the destination permits
This is the step most likely to create real risk, and the one most often treated as a formality.
Consent, platform rules and applicable privacy duties are separate checks
Three different questions, each with its own answer:
- Does the platform allow it? Google’s customer data policies require advertisers to disclose third-party sharing for ad measurement and to obtain consent “where legally required,” and they state: “You may not upload conversion information related to sensitive categories.” Health or medical information, “like purchases of medical services, prescription drugs or medical devices,” is listed among those categories (Google customer data policies). Meta prohibits sending sensitive information, including health information, through its business tools (Meta Business Help, prohibited information).
- Does the law allow it? State privacy laws, sector rules such as HIPAA, and your own contracts may restrict the transfer even where the platform would accept it.
- Did the person agree to it, in a way that covers this use? A cookie banner choice or a form tick box covers what it says, not every downstream use.
A yes to one does not answer the others. All three need a yes.
Sensitive information, URL fields and accidental disclosure
Most accidental disclosures come from fields nobody meant to send:
- Page URLs and query strings that name a condition, service line or appointment type.
- Conversion action names such as “[condition] consult booked.” The name itself tells the platform something.
- Free-text CRM notes exported along with the status.
- Custom properties carrying payer, diagnosis, balance or similar details.
Event dictionary (starting point; your counsel decides the final column)
| Field | Purpose | Default | Notes |
|---|---|---|---|
| Click ID (GCLID) or Meta lead ID | Match outcome to ad interaction | Usually allowed | Store at capture; never edit by hand |
| Event timestamp | Order events; respect windows | Usually allowed | Use the time the outcome happened, with time zone |
| Generic event name (for example “qualified_lead”) | Tell the platform which stage occurred | Usually allowed | Avoid names that reveal a condition, service or product |
| Hashed email or phone | Match when no click ID exists | Needs review | Platform consent and disclosure duties apply; hashing does not change what the data is |
| Conversion value | Weight outcomes by business worth | Needs review | Use relative values; avoid amounts that reveal a sensitive purchase |
| Page URL or path | Debugging | Needs review | Strip or generalize paths and parameters that describe a condition or service |
| Service line or product | Segment reporting | Needs review; often prohibited in healthcare | Keep in internal reporting instead |
| Diagnosis, condition, medication, payer, appointment reason | None for ad platforms | Prohibited | Never include, hashed or not |
| Free-text notes | None for ad platforms | Prohibited | Exclude by field allowlist, not by hoping nobody types sensitive details |
Build the payload from an allowlist of approved fields. Do not export a whole record and try to remove the bad parts.
Hashing is not a permission slip
Google and Meta both ask for contact details to be normalized and hashed before matching. Hashing protects the value in transit and storage; it does not change whether you were allowed to send it. The same applies to server-side transmission, a consent banner and a business associate agreement. None of these by itself makes it permissible to send health or other sensitive information to an ad platform.
For HIPAA-regulated businesses, HHS’s guidance on online tracking is the reference. A June 20, 2024 federal court order vacated the portion of that guidance treating an IP address plus a visit to an unauthenticated public page about a health condition or provider as enough to trigger HIPAA obligations. The rest of the guidance still addresses authenticated pages, information people enter on unauthenticated pages such as appointment scheduling, and when a tracking vendor is a business associate, and it says it is insufficient for a vendor merely to agree to remove or de-identify PHI after receiving it (HHS, use of online tracking technologies, last reviewed 2024-06-26). The ruling did not make healthcare tracking unrestricted, and not every public pageview is protected health information. For many regulated advertisers, the defensible answer is a generic outcome with no health context, or no upload at all, with outcomes kept in internal reporting.
Design identifiers, deduplication and error handling
Matching is never complete. Design for the records that will not match.
- Record keys. Give every lead a stable internal ID and store the click ID (or Meta lead ID) beside it at capture. Google recommends including GCLIDs “whenever possible” for accuracy, while enhanced conversions for leads can also match on hashed user-provided data captured by the tag (Google Ads Help, enhanced conversions for leads).
- One outcome, one upload. Decide the rule for repeat submissions, the same person calling and filling in a form, and status changes that bounce back and forth. Upload each stage once per lead.
- Order ID or transaction ID where the route supports it, so a retry does not create a duplicate.
- Timestamps. Send the outcome time with the time zone. Uploads with the wrong time zone can land outside the window and be rejected.
- Retries and rejection queue. Failed uploads go into a queue someone reviews weekly, with the reason code. A rejection is information: wrong window, missing identifier, malformed data.
- Browser and server events together. If you also send website events through both the Meta Pixel and the Conversions API, Meta deduplicates on matching event ID and event name, within 48 hours of the first event received (Meta for Developers, deduplication).
No design guarantees a match rate. Some people use a different email, decline consent or never had a click ID. Report the share of outcomes uploaded and matched, so nobody reads a partial picture as the whole.
Verify current Google and Meta implementation paths
Upload routes and settings changed during 2026. Check the current documentation and your own account before scoping.
Update, checked October 1, 2026: Google’s help center states that “Starting June 15, 2026, offline conversions import and enhanced conversions for leads uploads will be migrated to the Data Manager API and blocked in the Google Ads API,” and that developer tokens with no requests between January and June 2026 “will not be allowlisted for legacy access” (Google Ads Help, enhanced conversions for leads). Google’s API documentation adds that from that date, upload requests “will fail if the developer token hasn’t previously sent requests to upload offline conversions or enhanced conversions for leads” (Google Ads API, upload offline conversions). Separately, Google describes enhanced conversions accepting user-provided data from tags, Data Manager and API connections from April 2026, and enhanced conversions for web and for leads combining into one on/off setting from June 2026, with existing users migrated automatically (Google Ads Help, settings update). Not every older integration stopped working on one date. Confirm which route yours uses and read its diagnostics.
Compatibility checklist
| Check | Google Ads | Meta |
|---|---|---|
| Supported route today | Data Manager (interface or API), Google Ads API with legacy access, file upload, or a partner connector (enhanced conversions for leads) | Conversions API for CRM, from your CRM or a partner integration (Conversions API for CRM) |
| Identifier | GCLID where available; hashed user-provided data | Meta lead ID recommended; customer parameters when unavailable |
| Campaign fit | Search and other Google campaigns with the conversion action included in goals | Conversion Leads goal is “currently only compatible with Facebook/Instagram’s Lead Ads (Instant Forms)”; see lead ads vs landing pages |
| Eligibility thresholds | Check current guidance for your account | At least 200 leads per month; upload at least once per day; optimized stage within 28 days; conversion rate between 1 and 40 percent |
| Credentials | Developer token status and legacy allowlisting, or Data Manager connection | App and access tokens; existing lead download integration in place |
| Consent and policy | Customer data policies; disclosure and consent where legally required | Prohibited information rules; health and wellness restrictions |
| Diagnostics | Offline conversion diagnostics in the account | Events Manager and integration status |
Third-party connectors often handle the route for you, which is useful, but you still own the field allowlist and the policy decision.
Validate the system before changing optimization
Do not switch bidding toward the new stage until you trust the data feeding it.
Test records, consent handling and CRM reconciliation
- Submit test leads through every live capture path and confirm each arrives in the CRM with the click ID, source and timestamp.
- Repeat with consent declined and confirm the record is handled according to your policy.
- Move a test lead through each status and confirm exactly one upload per stage.
- Inspect the actual payload sent, field by field, against the event dictionary. Confirm no URL, note or custom field leaks.
- Mark a test outcome as a reversal and confirm the agreed handling.
- Remove test records from reporting afterwards.
Check upload success, matching, lag and duplicate counts
- Uploads accepted versus rejected, with reasons, for the first two weeks.
- Matched share of accepted uploads.
- Median time from outcome to upload. Daily is a sensible target; Meta’s CRM integration requires at least daily uploads.
- Platform-reported offline conversions versus CRM counts for the same stage and period. Explain the gap before using the numbers.
- Duplicate rate: uploads per lead per stage should be one.
When the tag or upload fails, the CRM is the fallback record. In one client account, a second Google Ads account turned out to have a disconnected conversion tag, so the platform showed almost nothing for a period when leads were still arriving. Leads were reconciled from HubSpot by landing page instead, which separated a measurement outage from a demand problem. That is the value of keeping identifiers and source fields in the CRM even before any upload works: you can rebuild the picture without the platform.
Interpret the report correctly
Once outcomes flow back, the platform reports will look more useful. Read them carefully.
- Attributed is not incremental. A platform-attributed qualified lead is one the platform’s model credits to an ad interaction. It does not show that the lead would not have happened without the ad. Answering that needs a controlled experiment, such as a randomized holdout, which is a separate project.
- Do not add platforms together. Hypothetical example: if Google reports 40 qualified leads and Meta reports 30, the business did not necessarily receive 70. The same person can click both. The CRM is the count of record; platform figures are each platform’s view of its own contribution.
- New measurement is not new demand. When uploads start, reported conversions at the qualified stage appear where there were none. Mark the start date and compare like with like.
- Expect lag. Recent weeks will be incomplete until late outcomes arrive. Judge changes on windows that allow for it.
- Expect disagreement. Platforms use different windows, attribution models and matching. Report the CRM count alongside each platform’s figure rather than forcing them to agree.
Responsibility matrix
| Task | Marketing | Operations | Engineering or implementer | Privacy or counsel |
|---|---|---|---|---|
| Choose optimization stage | Decides | Advises on definitions | Informed | Informed |
| Define and maintain statuses | Advises | Owns | Informed | Informed |
| Approve field allowlist | Proposes | Informed | Advises | Approves |
| Build and maintain transfer | Informed | Informed | Owns | Informed |
| Review rejections and diagnostics | Reviews weekly | Informed | Fixes | Informed |
| Reconcile platform and CRM counts | Owns | Supplies data | Supports | Informed |
You may not need an agency or a consultant for this. If your CRM has a supported native connector, your outcome stage is simple and your category carries no sensitive-data concerns, an in-house marketer and a CRM admin can scope and launch it from the checklists above. Bring in specialist help when several systems are involved, nobody owns the data journey end to end, or regulated data makes a wrong field expensive.
Bring the CRM stages, consent requirements and reporting gaps to a measurement review before commissioning an integration. Our Google Ads audit and Facebook ads audit guides show where those gaps usually surface, and why Google Ads stop converting covers a tag that fails outright. Elite Créatif’s Marketing Audit reviews what your tracking can and cannot see across ad accounts, pages and CRM, and our system page describes how measurement fits with pages, creative and media.