Cometly
All guides
Revenue Attribution16 min read·6 pages·Published May 2026

The B2B SaaS Attribution Stack: HubSpot + Stripe + Cometly

Most B2B SaaS teams have leads in HubSpot, payments in Stripe, and no clean way to connect the two. This guide walks through the exact setup our team configures with Cometly customers — what to track in HubSpot, what to pull from Stripe, and how to avoid the double-counting that breaks every other attribution tool.

6-page PDFInstant downloadFree
Free6-page PDF · Instant download

Get the full guide

Tell us where to send it. We'll email you the PDF and unlock the download below.

By downloading, you agree to receive occasional emails from Cometly. Unsubscribe anytime.

Key takeaways

  • Which events belong in HubSpot vs. Stripe (and which to turn off)
  • How to dedupe trial and purchase events between the two systems
  • How to map HubSpot lifecycle stages to revenue-grade conversions
  • How to attribute MRR, expansion, and churn back to ad campaigns
  • How to send the same enriched events back to Meta, Google, and LinkedIn
Chapter 01

The standard B2B SaaS data split

In a healthy B2B SaaS stack, HubSpot owns lifecycle data, leads, MQLs, SQLs, opportunities, and the human-touch activities around them, while Stripe owns the source of truth for revenue, trials, payments, refunds, and subscription changes.

Trying to make HubSpot the source of truth for revenue is the single most common mistake we see. HubSpot deal amounts are usually annual contract value entered by a rep, not the actual cash that hit your bank. The result: dashboards that don't tie out to your accounting system, and ad spend optimized against the wrong number.

Chapter 02

Configure HubSpot for lifecycle, not revenue

Send the lifecycle events from HubSpot, and only the lifecycle events. The right list, in our experience, is short and stable.

  • lead_created, when a contact's lifecycle stage becomes Lead
  • mql_qualified, when lifecycle stage becomes Marketing Qualified Lead
  • sql_qualified, when lifecycle stage becomes Sales Qualified Lead
  • opportunity_created, when a deal is created in a target pipeline
  • demo_booked, when a meeting is booked through HubSpot or Calendly
Chapter 03

Configure Stripe for revenue truth

Stripe pays you, so Stripe should tell you about money. Use Cometly's direct Stripe integration with three triggers: New Trial, New Payment, and New Customer. They fire in real time and are tied to the actual financial event, not a rep's data entry.

Critical: when you turn the Stripe events on, turn the equivalent HubSpot events off, otherwise every trial and payment is counted twice and your CAC math breaks.

  • Start Trial → Stripe "New Trial" trigger
  • Purchase → Stripe "New Payment" trigger
  • New Customer → Stripe "New Customer" trigger
  • Disable HubSpot "Trial" and "Purchase" events to prevent dedupe issues
Chapter 04

Attribute revenue back to the original campaign

Once HubSpot and Stripe are flowing into Cometly, every Stripe payment automatically inherits the touchpoints from the matched contact, the original ad click, the demo, the SQL stage change. Your dashboards now show pipeline by source, MRR by source, and LTV by source from the same model.

From there, sync those revenue events back to Meta, Google, and LinkedIn via the Conversions API. The algorithm starts optimizing toward the customers who actually pay, not the leads who fill out a form and disappear.

Chapter 05

What good looks like after 30 days

Customers who follow this setup typically see three things in the first month: their HubSpot pipeline number reconciles with their Stripe MRR, their cost-per-customer drops because the ad platforms now optimize toward paid signups instead of trials, and their CMO can answer board questions without pinging RevOps.

Put it into practice

See your pipeline by source, campaign, and ad.

Cometly connects every ad dollar to pipeline and revenue, so you can scale what’s working and cut what isn’t.