Marketers: Capture GCLID & fbclid for closed-loop attribution, APP 7

Closed loop attribution ties ad clicks and platform events back to real CRM-closed revenue, so your bids and ROAS reflect customer value, not vanity conversions. It works by capturing identifiers like GCLID and fbclid at the point of a lead, storing them in your CRM, then importing what actually closed, with real dollar values, back into Google Ads and Meta.
TL;DR:
- Closed loop attribution links ad clicks and platform events to actual revenue, improving ROAS measurement and campaign optimization.
- The process requires capturing unique click IDs and storing them in the CRM at lead capture, then exporting closed deals with revenue back to ad platforms.
- Proper setup involves sequential steps: URL tracking, hidden form fields, CRM data storage, validation, and integration with Google and Meta APIs, with continuous monitoring.
- Ensuring data quality demands regular checks on match and duplicate rates, reconciling CRM and platform revenue, and verifying the typical time lag between click and close.
- Compliance with privacy laws requires explicit consent flags and segmentation to prevent using personal data for marketing without proper opt-out procedures.
Table of Contents
- What closed loop attribution actually measures and why it matters
- How closed loop attribution works end to end
- Implementation checklist: step-by-step actions to set up closed loop attribution
- Privacy, consent and compliance when using CRM data for attribution
- Measuring and verifying closed loop data quality and impact
- Common pitfalls, troubleshooting and how to avoid misleading ROAS
- Ongoing maintenance and governance: weekly, monthly and quarterly tasks
- Practical checklist and examples from Senior Ad Managers’ work
- Technical requirements and infrastructure considerations for different business sizes
- Best practices for bringing in offline sales beyond your CRM
- Priorities and realistic trade-offs
- How we can help with closed loop setup
- Primary documentation and regulatory guidance
- Sources
- FAQ
What closed loop attribution actually measures and why it matters
Most accounts run on platform-reported conversions: a form fill, a call, a checkout event fired by a pixel or a tag. Those numbers tell you someone took an action. They don’t tell you whether that action turned into a paying customer, and they definitely don’t tell you what that customer was worth.
Closed loop attribution closes that gap. It connects the click that brought someone to your site with what happened after the lead left your ads platform and entered your sales process. A lead becomes an opportunity, an opportunity becomes a closed deal or a lost one, and that outcome gets matched back to the original ad click using the identifiers captured at the time.
This matters for three reasons:
- Accurate ROAS: you stop judging campaigns on lead volume and start judging them on revenue they actually produced.
- Better budget allocation: spend shifts toward the keywords, campaigns and audiences that close, not the ones that just generate form fills.
- Less wasted spend: campaigns that generate cheap leads which never convert get cut, even if their platform-reported conversion rate looks healthy.
The last-click model that most Google Ads and Meta accounts default to assumes the last touch before a conversion event deserves the credit. That’s fine for eCommerce checkouts that happen in one session. It falls apart for any business with a sales cycle, where a lead comes in on Monday and doesn’t close for three weeks. Without a way to feed that eventual outcome back to the platform, Smart Bidding keeps optimising toward the wrong signal: form fills, not customers.
Feeding real revenue back changes the story. A campaign that produces 40 leads a month at a low cost per lead can still be your worst performer if none of those leads close. A campaign with a higher cost per lead but a strong close rate is often the one worth scaling. You only see that difference once revenue, not conversion count, is what the platform is optimising against.
How closed loop attribution works end to end
The mechanics are simpler than they sound, but every step needs to happen in order or the loop doesn’t close.
- A visitor clicks your ad. Google appends a GCLID (or GBRAID/WBRAID on iOS-affected traffic) to the landing page URL. Meta appends an fbclid.
- Your site captures that identifier and persists it, either in a cookie, local storage, or both, so it survives the visit even if the lead doesn’t convert immediately.
- The lead submits a form. The click ID gets written into a hidden field alongside any user-provided data you collect, such as email or phone.
- The CRM stores the click ID against the lead record, along with a unique order or transaction ID for that specific enquiry.
- Sales works the lead. When it closes (or doesn’t), the CRM record gets updated with a status and a revenue value.
- That outcome gets exported back to Google Ads as an offline conversion or enhanced conversion for leads, and to Meta via the Conversions API, with the real dollar value attached.
Google’s own guidance on offline conversion imports is explicit that persisting the GCLID with each lead and using order IDs to control duplicates are the two things that make or break match accuracy. Session attributes and user-provided data matter too: the more identifiers you send, the better Google can match the import to the original click, particularly for leads that take weeks to close.
This is also where enhanced conversions for leads fits in. Instead of relying solely on the GCLID (which can be missing if a lead calls instead of clicking through a form), you hash identifying details like email and phone number and upload those alongside the GCLID where you have it. Google matches the hashed data to a signed-in Google account, which improves matching even across devices. Meta’s Conversions API does something similar on its side: it lets you send server-side events, including offline conversions with revenue values, tied back to the fbclid or a hashed customer identifier.
Pro Tip: Always send both a click ID and a hashed identifier when you can. If one match path fails, the other picks up the slack.
Implementation checklist: step-by-step actions to set up closed loop attribution
This is the order we follow when we set this up for a client. Skipping steps or doing them out of sequence is the most common reason closed loop projects stall.
- Add click ID capture to your site. A small JavaScript snippet reads the GCLID and fbclid from the URL on landing, then writes them to a cookie or local storage with a reasonable expiry (30 to 90 days covers most sales cycles).
- Add hidden fields to every lead form. These pull the stored GCLID and fbclid values and submit them silently alongside the visible fields (name, email, phone).
- Configure server-side capture. Whatever handles your form submission, whether that’s a CRM’s native form, a Zapier step or custom backend code, needs to write the click IDs into dedicated CRM fields, not a generic notes field.
- Set up your CRM structure. You need, at minimum: a GCLID field, an fbclid field, an order or lead ID field, a revenue field, a deal stage field and a consent flag.
- Apply a “count once” rule. Every lead gets one unique ID at creation. If the same person submits a second enquiry, it should update the existing record rather than create a new one.
- Set up enhanced conversions for leads in Google Ads. This uses your GCLID and hashed customer data together, which Google recommends as the upgrade path from older offline conversion imports.
- Set up Meta’s Conversions API. Map your CRM’s closed deal event to send server-side, with the real revenue value and the fbclid or hashed match key attached.
- Run a test batch. Import a handful of known closed deals manually before automating the feed, and confirm they show up correctly in each platform.
- Check your match rate. Anything under 50% usually means a data capture problem upstream, not an import problem.
- Wait before switching your primary conversion. Google recommends waiting roughly three conversion cycles, or about four weeks, after enabling enhanced conversions before making the imported revenue your primary bidding signal.
For CRM setup specifically:
- HubSpot: use custom contact properties for GCLID, fbclid and order ID; HubSpot’s native integrations and Zapier both support pushing deal-closed events out to Google Ads and Meta.
- Pipedrive: add custom fields on the deal object for click IDs and order ID, and use a Zapier or Make automation to trigger the export when a deal moves to “won”.
- GoHighLevel: use custom fields on the contact record, and trigger the API call to Google or Meta from a workflow automation when the opportunity status changes to won.
Pro Tip: Don’t set external attribution data on enhanced conversion uploads. Google Ads doesn’t support externally attributed imports for this import type, and trying it will quietly break your match rate.
Privacy, consent and compliance when using CRM data for attribution
Using CRM data to attribute revenue to ad clicks means you’re handling personal information, and in Australia that puts you squarely under the Australian Privacy Principles. APP 7 is the one that matters most here.
Under APP 7 guidance from the OAIC, organisations using personal information for direct marketing must give people a simple way to opt out, and must act on that opt-out within a reasonable period, generally within 30 days. Closed loop attribution itself isn’t direct marketing, but the same customer data you’re using for matchback is often also used for retargeting and email follow-up, which is.
Practically, that means:
- Add a consent flag to every CRM record that tracks whether the lead has agreed to data use for marketing purposes.
- Segment your offline conversion imports so leads who’ve opted out of marketing aren’t included in audience-building imports, even if they can still count toward attribution.
- Update your privacy policy to explicitly mention that click identifiers and customer data are used to measure ad performance and attribute revenue.
- Build a clear opt-out process and make sure whoever owns the CRM actions those requests inside the 30-day window.
This isn’t a one-off compliance checkbox. Every new integration, whether it’s a new form, a new CRM automation or a new ad platform import, needs the same consent logic applied before it goes live.
Measuring and verifying closed loop data quality and impact
Before you trust imported revenue enough to let Smart Bidding optimise against it, you need to know the data feeding it is actually clean.
Track these four things on a recurring basis:
- Match rate: the percentage of imported conversions that successfully matched to a click ID or hashed identifier in the platform.
- Duplicate rate: how many leads are being counted more than once, usually from repeat form submissions or a missing “count once” rule.
- Imported revenue versus CRM revenue: pull a monthly total from your CRM and compare it against what actually landed in Google Ads and Meta reporting.
- Time lag: how long it typically takes between an ad click and a deal closing, since this tells you how far back your validation window needs to reach.
A useful reconciliation check: pick 20 closed deals from last month, look them up in Google Ads and Meta, and confirm the revenue value matches what’s in the CRM. If fewer than 18 or 19 show up correctly, something in the pipeline needs fixing before you rely on the feed.
Google’s own guidance is to wait roughly three conversion cycles or about four weeks after turning on enhanced conversions before making imported revenue the primary signal. For a mid-size account, we’d stretch that further: three to six months of stable, clean data is a safer threshold before letting Smart Bidding fully optimise against imported revenue, because the algorithm needs enough closed deals across enough campaigns to learn a reliable pattern. Switch too early on thin data and you risk the algorithm chasing noise.
Common pitfalls, troubleshooting and how to avoid misleading ROAS
Most closed loop setups don’t fail at the technical level. They fail because of small process gaps that quietly inflate or distort the numbers.
- Duplicate leads: the same person submits two enquiries and gets counted twice. Fix this with a strict order ID or transaction ID rule tied to the contact record, not the form submission.
- Brand traffic counted as new business: someone who already knows your business searches your brand name, converts, and gets counted as new customer acquisition. Split brand and non-brand campaigns and exclude brand terms from acquisition reporting so your new-customer numbers reflect genuinely new demand.
- Missing click IDs: phone enquiries and some browsers strip click IDs entirely. When that happens, fall back to hashed email and phone matching through enhanced conversions rather than leaving the lead unattributed.
- Partial imports and timezone mismatches: a batch import that only sends half the closed deals, or a revenue figure logged in the wrong timezone, will throw off your reconciliation checks without any obvious error message.
Pro Tip: Run your reconciliation check on a Monday morning, using the previous full week’s closed deals. Weekly cadence catches problems before they compound into a month of bad bidding data.
Ongoing maintenance and governance: weekly, monthly and quarterly tasks
Closed loop attribution isn’t a set-and-forget project. It needs a maintenance rhythm or the data quietly degrades.
- Weekly: review search terms and add negatives where irrelevant queries are triggering spend, confirm GCLID and fbclid are still being captured on every live form, and check that the last week’s import ran successfully.
- Monthly: review match rate and duplicate rate trends, reconcile total imported revenue against the CRM total, and check the consent and opt-out log for anything outstanding.
- Quarterly: review the full attribution configuration (conversion actions, import settings, Conversions API mapping), run a fresh test batch through the pipeline, review the privacy policy wording, and clear any outstanding developer fixes from the backlog.
- Assign ownership: one person needs to own the CRM side of this and one person the ads account side, with a clear escalation path when match rate drops or an import fails silently.
Weekly search term review and negative keyword management aren’t optional extras bolted onto this process. They’re part of keeping the whole loop honest: if wasted clicks are still getting through on broad, loosely matched terms, no amount of clean CRM data will fix a campaign structure that’s feeding the wrong traffic in the first place.
Practical checklist and examples from Senior Ad Managers’ work
We run this as a sequence: audit, capture, CRM mapping, import, validate, scale. Skipping to import before capture is solid, or to scale before validation, is how accounts end up bidding against bad data.
- Audit first: we start every new engagement by checking whether GCLID and fbclid are actually being captured and stored, before touching spend.
- Typical quick win: a missing hidden field on one form, silently breaking capture for an entire campaign, is one of the most common things we find in a $99 AUD Google Ads audit.
- Match types stay tight: once closed-loop revenue is flowing, we still run exact and phrase match with strict negatives, never broad match, because feeding Smart Bidding good revenue data doesn’t help if the match type is pulling in irrelevant search volume alongside it.
- Bidding shifts gradually: we don’t flip an account to a revenue-based bid strategy the day imports go live. We watch match rate and reconciled revenue for a stable stretch first.
Pro Tip: If you’re briefing a developer or CRM admin on this work, hand them the six-step sequence above as the brief itself: it’s specific enough to scope without a long discovery call.
Technical requirements and infrastructure considerations for different business sizes
A sole trader running Pipedrive and a single Google Ads account needs far less infrastructure than a multi-location business running HubSpot, Meta and Google side by side.
For a small business, the requirements are modest: a way to add a script and hidden fields to your existing forms, a handful of custom fields in whatever CRM you already use, and a scheduled export, even a manual monthly one, to start. You don’t need a data warehouse or a developer on retainer to get the basics working.
For a mid-size or multi-location business, the same principles apply but at higher stakes: you likely have multiple lead sources (web forms, phone, chat) feeding one CRM, which means your “count once” and deduplication rules need to be airtight, and your Conversions API integration probably needs to run server-side through a tag manager or middleware rather than a simple Zapier trigger.
Larger accounts with high lead volume benefit from automating the whole pipeline: real-time click ID capture, server-side event forwarding, and scheduled reconciliation reports rather than manual spreadsheet checks. The principle doesn’t change with scale, only the tooling does. Every business, regardless of size, needs the same three things: identifiers captured at the point of the lead, a CRM that stores them reliably, and a scheduled process to send closed revenue back to the ad platforms.

Best practices for bringing in offline sales beyond your CRM
Not every closed sale originates in a CRM. Retail businesses close deals at a point of sale, plenty of service businesses close over the phone through a call centre, and some close through a quote sent manually by email.
The principle doesn’t change: you still need an identifier that ties the eventual sale back to the original ad click. For point of sale systems, that usually means capturing a reference (a phone number, a loyalty ID, or a voucher code issued at the point of the ad click) that the POS system can log against the transaction, then reconciling that against your CRM or a simple spreadsheet before importing.
For call centres, the practical fix is call tracking: a unique tracked number per campaign, or a click-to-call button that passes the GCLID through to the call log, lets you tie a phone enquiry back to the ad click the same way a form submission does.
Whatever the channel, the same rules apply: one unique ID per transaction, a consistent revenue field, and a regular (at minimum monthly) export into whichever system holds your import pipeline. Fragmented systems that never reconcile against each other are the most common reason “we tried offline conversions and the numbers didn’t make sense” happens. The fix is almost always a missing or inconsistent identifier somewhere between the point of sale and the CRM.
Priorities and realistic trade-offs
If you’re doing this with limited developer time, the order matters more than the tooling. Fix tracking and capture first: without a reliable GCLID and fbclid feed, nothing downstream works. Deduplication comes next, then a clean revenue feed. Only once that’s stable for a few months should Smart Bidding start using it.
Don’t rush to a revenue-based bid strategy on thin data. Manual or conversion-based bidding is a perfectly reasonable holding position while you build up a clean dataset.
— Jesse Lees
How we can help with closed loop setup
Fixing this is exactly the kind of work we do before we touch anyone’s ad spend. We check whether click IDs are being captured, map your CRM fields properly, and set up the Google Ads and Meta Ads imports so the revenue feeding your bidding is real, not a vanity number.
What this typically looks like in practice:
- A tracking check across your site, CRM and ad accounts to find where the click ID chain is broken.
- A CRM field and deduplication review so every lead is counted once, and brand enquiries are split from new-customer demand.
- A clear setup plan for enhanced conversions for leads on Google and Conversions API on Meta, with real revenue values attached.
New clients typically start with a $99 AUD Google Ads audit: https://senioradmanagers.com/99-paid-ads-audit/
Primary documentation and regulatory guidance
For the technical setup, Google’s own support documentation on enhanced conversions and Meta’s Conversions API equivalents are the authoritative references for field mapping and validation timing. For QA across geographies, some teams use tools like proxy services for ad verification to check how ads and tracking behave in different markets.
For compliance, the OAIC’s guidance on APP 7 sets out the opt-out and response obligations that apply whenever CRM data is used for direct marketing tied to attribution.
Sources
- APP 7: Direct marketing — OAIC guidance
- Upgrade offline conversion import to enhanced conversions for leads - Google Ads Help
- Manage offline conversions | Google Ads API
FAQ
What is a closed loop in simple terms?
A closed loop in marketing means tracking a customer all the way from the ad click that brought them in to the actual sale or revenue they generated, then feeding that outcome back to the ad platform. It “closes” the gap between what the platform reports and what your business actually earned.
What is an example of closed loop communication?
In a sales and marketing context, closed loop communication means a lead’s outcome, whether it closed, how much it was worth, or why it was lost, gets passed back from sales to the CRM and then back to the ad platform that generated it. Without that final step back to the platform, the loop stays open.
What does “closed loop” mean in business?
In business more broadly, closed loop describes a process where the outcome of an action feeds back into the system that triggered it, creating a continuous cycle of information rather than a one-way flow. In marketing attribution specifically, that means ad performance data is continuously corrected by real sales outcomes rather than judged on interim signals alone.
What are types of attribution models?
Common attribution models include last-click (all credit to the final touch before conversion), first-click (all credit to the first touch), and multi-touch models that spread credit across several touchpoints in the journey. Closed loop attribution isn’t a credit-splitting model itself: it’s the data foundation that feeds real, CRM-verified revenue into whichever model or bidding strategy you choose to use.
Recommended
Keep reading
How we can help
Next step
Find out where your ad spend is going.
Get a $99 AUD Google Ads audit. We'll show you where money is being wasted and which leads you're missing out on.
Show me my current ad mistakes →