If your MQL event fires on every form fill, it’s the same as your Lead event — and your Pipeline Stages by Source report becomes useless. The whole point of an MQL is to mark a contact who’s actually marketing-qualified, which is a deal-stage transition in HubSpot, not a form action.
The standard mapping
Most B2B SaaS teams end up with the same six events mapped from HubSpot: Lead (form fill on the marketing site), MQL (lifecycle stage change), SQL (lifecycle stage change), Demo Booked (Calendly or Chili Piper webhook), Opportunity (deal pipeline stage), and Closed-Won (deal pipeline stage with deal amount).
Each event uses 'Deal Stage Updated' or 'Lifecycle Stage Updated' as the trigger inside Cometly’s HubSpot integration. The trigger fires when a contact or deal moves into the matching stage — once per contact, not per form fill.
- Lead — Form Submission trigger, on the contact
- MQL — Lifecycle Stage Updated → MQL
- SQL — Lifecycle Stage Updated → SQL
- Demo Booked — Webhook from Calendly or Contact Property change
- Opportunity — Deal Stage Updated → 'Opportunity' (or your stage name)
- Closed-Won — Deal Stage Updated → 'Closed Won' with Amount mapped to gross revenue
Edge cases
If you run multiple deal pipelines (SMB, Mid-Market, Enterprise), filter each event to a specific pipeline so the numbers don’t collide. If you use a custom MQL definition (e.g. 'downloaded a product-specific brochure OR booked a demo'), build that logic in HubSpot as a workflow that updates the lifecycle stage, then have Cometly listen on the lifecycle stage change.
Resist the urge to fire MQL on the form submission itself. The whole reason you have a lifecycle stage transition is to filter out junk leads. Letting MQL fire on every form makes the entire downstream funnel meaningless.
What to watch for.
- Firing MQL on every form fill
MQL becomes Lead with a different name. Use the lifecycle stage transition, not the form action.
- Forgetting to map deal amount on Closed-Won
Without an amount, ROAS calculates as zero. Always map the HubSpot Amount property to gross revenue.
- Mixing pipelines in a single event
If SMB and Enterprise deals share an event, your CAC averages will be meaningless. Filter by pipeline.
- Skipping a back-test
Run the new mapping against the last 30–60 days of HubSpot data and reconcile to within 95% of HubSpot’s own reports before trusting it.
Recap.
- Create a Cometly event for each meaningful stage (MQL, SQL, Demo, Opp, Closed-Won)
- Use 'Deal Stage Updated' as the trigger from the HubSpot integration
- Map deal amount as gross revenue on Closed-Won so ROAS calculates correctly
- Avoid double-counting by filtering Lead events out of MQL reports
- Use Deal pipeline filters when you have separate sales motions (e.g. SMB vs. Enterprise)