Get your B2B SaaS tracking to 95%+ accuracy guaranteed in writing.
If your pipeline runs on booked demos, the ad platforms are optimizing toward the cheapest form fill they can find, because that's the only signal you gave them. The stages that predict revenue live in Salesforce or HubSpot and never make it back. I wire the CRM into the ad platforms so bidding follows meetings that get held and deals that get won.
Free30 minutesNo obligation
B2B SaaS · what breaks
Where demo-led attribution falls apart — B2B SaaS
- 01
Volume optimization finds the cheapest humans
Tell Meta or Google to maximize form fills and they will, from the cheapest inventory available. You get students, job seekers, offshore agencies and competitors, all reported as conversions.
- 02
Booked is not held
Chili Piper, Calendly and Qualified fire on booking. A meaningful share of those never show, and the platforms keep bidding as if they did, because nobody ever sends the no-show back.
- 03
gclid dies at Lead Conversion
In Salesforce the click ID sits on the Lead. Convert to Contact and Opportunity without mapped fields and it's gone, which is why closed-won offline imports come back with terrible match rates.
- 04
Closed-won lands outside every window
A 90-day sales cycle means the deal closes long after Meta's 7-day click window shut. Setting closed-won as your optimization event just starves the algorithm of signal.
B2B SaaS · the fix
What changes when the CRM becomes the scoreboard — B2B SaaS
Optimization moves to qualified meeting held
The earliest stage that is both inside the ad platform window and predictive of revenue. For most demo-led products that's days after the click, not months.
Junk never reaches the platform as a conversion
The server container checks email domain, enrichment and firmographics before forwarding. A free-mail signup outside your ICP never becomes a Lead event in Meta or Google.
Every stage carries a value
Meeting held, SQO, pilot and closed-won each get a value derived from your own stage conversion rates and average contract value, so bidding weights pipeline instead of activity.
Reporting and optimization stop fighting
Closed-won still imports for measurement with the original click ID attached. It just isn't the thing you ask the algorithm to chase.
B2B SaaS · architecture
Where the CRM plugs into the ad platforms — B2B SaaS
Ad click, content or demo form, scheduler, meeting held, SQO, closed-won. Only the first two live in the browser; everything that predicts revenue lives in Salesforce or HubSpot.
- 1
Click IDs captured and written to the Lead
gclid, gbraid, wbraid, fbclid, li_fat_id and msclkid land in hidden form fields and onto the Lead record at the moment it's created.
- 2
Field mapping that survives Lead conversion
In Salesforce the same fields exist on Contact, Account and Opportunity and are mapped, so converting a Lead no longer erases the attribution.
- 3
The ICP gate runs server-side
Domain checks, free-mail exclusion, enrichment, headcount and region rules run in the container before anything is forwarded as a conversion.
- 4
Scheduler and CRM report the stages
Chili Piper, Calendly, Default or Qualified send booked, while CRM flows or workflows send held, no-show, SQO, closed-won and closed-lost.
- 5
One server feed, four destinations
The same event stream fans out to Google offline import, Meta CAPI, LinkedIn CAPI and Microsoft UET, deduplicated by event_id.
B2B SaaS · events
Pipeline stages as events, with one optimization target — B2B SaaS
Exactly one stage is the optimization event so the algorithm isn't split across three competing signals.
| Event | Fires when | Key parameters | Sent from / role |
|---|---|---|---|
| content_download | A gated asset form submits | gclid, li_fat_id, em (hashed), form_id, event_id | Browser + server, deduped by event_id · reporting only |
| demo_requested | A demo or contact-sales form submits and clears the ICP gate | gclid, em (hashed), company_domain, event_id | Server · reporting only |
| meeting_booked | Chili Piper, Calendly or Qualified confirms a slot | gclid or em (hashed), meeting_id, event_id | Server · reporting only |
| meeting_held | The rep marks the meeting attended in the CRM | gclid or em (hashed), value (stage expected value), currency, conversion_date_time | Server · optimization (primary) |
| meeting_no_show | A scheduled meeting passes with no attendance recorded | meeting_id, no value | Server · reporting only, suppresses meeting_booked |
| sqo_created | The opportunity reaches sales-qualified stage | gclid or em (hashed), value (stage expected value), currency, opportunity_id | Server offline import · reporting only |
| closed_won | The opportunity closes won | gclid or em (hashed), value (ACV or first-year margin), currency, transaction_id | Server offline import · reporting and value calibration |
| closed_lost | The opportunity closes lost with a reason | opportunity_id, loss_reason | Server · reporting only, feeds the ICP gate rules |
B2B SaaS · prove
Verified against the CRM, not against the ads interface — B2B SaaS
Salesforce or HubSpot is the scoreboard. Each month we check that the platforms received what the CRM says actually happened.
Source of truth
Meetings held, SQOs and closed-won opportunities in Salesforce or HubSpot
- Export meetings held, SQOs and closed-won for the month with the click ID and source stored on each record.
- Check the click-ID fill rate on Opportunity, not just on Lead — a drop there means the conversion mapping broke again.
- Compare meeting_held counts to Google Ads and Meta reported conversions by conversion date.
- Review the ICP gate log: how many leads were filtered, and would any of them plausibly have become real pipeline?
- Re-derive stage values from the last four quarters of pipeline and update the conversion actions if the rates moved.
- Separate window and model differences from unmatched records, and fix only the unmatched records.
B2B SaaS · free audit
What we check in the free audit
- Volume optimization finds the cheapest humans
- Booked is not held
- gclid dies at Lead Conversion
- Closed-won lands outside every window
Checked against
Meetings held, SQOs and closed-won opportunities in Salesforce or HubSpot
Free30 minutesNo obligation
B2B SaaS · when not to buy
When a SaaS team shouldn't build this
Four cases where the right answer is to wait.
- Pre-product-market-fit with a handful of demos a month. A spreadsheet is more accurate than any attribution system at that volume.
- Nearly all pipeline comes from outbound, partnerships or the founder's network. Instrument the small paid slice and skip the stack.
- Your reps don't use CRM stages consistently. Fix stage hygiene first, or we'd be optimizing toward a field nobody fills in.
- You're pure self-serve with no sales motion. Signup, activation and paid conversion all happen on your own domain, which is a smaller job.
B2B SaaS · what we deliver
What we build for a demo-led SaaS funnel
Click-ID persistence through the CRM object chain
gclid, gbraid, wbraid, fbclid, li_fat_id and msclkid captured, written to the Lead, and mapped so they survive conversion to Contact, Account and Opportunity.
Stage-change webhooks from Salesforce or HubSpot
Flows or workflows fire on the transitions that matter — meeting held, SQO, closed-won, closed-lost — into the server container in near real time.
ICP gate inside the server container
Domain checks, free-mail exclusion, headcount and region rules run server-side, so only leads that match your ideal profile are forwarded as conversions.
Booked, held and no-show as separate events
Scheduler events from Chili Piper, Calendly, Default or Qualified split from actual attendance, with no-shows suppressing the conversion rather than quietly inflating it.
Stage-weighted values from your own funnel math
We calculate expected value per stage from your last four quarters of pipeline, write those into the conversion actions, and revisit them quarterly as the rates move.
One server feed to LinkedIn, Google, Meta and Microsoft
A single server-side event stream fans out to LinkedIn CAPI, Google offline import, Meta CAPI and UET, deduplicated by event_id so browser and server events never double count.
Written guarantee
95%+ tracking accuracy
Measured against Meetings held, SQOs and closed-won opportunities in Salesforce or HubSpot. Miss it and we keep working at no cost.
FAQ
B2B SaaS questions, answered
Because algorithms need volume and recency, and a B2B account rarely produces enough closed-won events inside the attribution window to train anything. Optimize on the earliest stage that correlates with revenue; report on closed-won. Two different jobs, two different events.
Meta's own guidance is roughly 50 optimization events per ad set per week to exit learning. Most demo-led SaaS accounts can't produce that many SQOs, which is the practical reason meeting-held usually wins as the optimization event and SQO becomes a reporting stage.
Often easier. The hutk cookie plus the Forms API gives a clean join between the browser session and the contact record, and workflow webhooks handle stage changes. The click-ID problem is smaller too, since HubSpot has no equivalent of Salesforce's Lead conversion dropping your fields.
Yes, and that's the point. Your reported conversion count drops, cost per conversion in the interface goes up, and the meeting-held rate in your CRM improves. Decide in advance which number you're managing to, or week one will look like a failure to whoever reads the ad account.
They're separate funnels and get separate events. Self-serve gets signup, activation and paid-conversion; sales-led gets meeting held and SQO. Collapsing both into one conversion action is how accounts end up optimizing for whichever motion happens to be louder that month.
We can, and often it's the right call. Rebuilding the data and handing it to someone still bidding on the old assumptions wastes the build, so we run Google, Meta, Microsoft and LinkedIn for clients where that makes sense. If your team is strong, we'll just do the data work.
Pre-product-market-fit with a handful of demos a month, your own spreadsheet is more accurate than any attribution system — build it later. Same answer if nearly all pipeline comes from outbound, partnerships or founder network: instrument the small paid slice properly and don't buy the full stack.
More on B2B SaaS
- GuideOffline Conversion Tracking: Send Closed Deals Back to Google Ads and Meta
- SaaSOptimizing your SaaS ads for sign-ups means paying to acquire users who never pa…
- Trial to paidAttributing paid subscriptions back to the campaign that produced the trial
- SaaSConversion tracking for SaaS, from signup through to the payment that matters
Free · 30 min
Make the CRM the thing your bidding follows
Free30 minutesNo obligation
