Skip to content
SourceLoop
HubSpot

How to map HubSpot lifecycle stages and lead status

Translate SourceLoop's internal lifecycle stages into HubSpot's lifecyclestage and hs_lead_status properties. Custom stages supported.

On this page
  1. Before you start
  2. How the mapping works
  3. Step 1: Open the HubSpot drawer
  4. Step 2: Map HubSpot lifecycle stages to SourceLoop stages
  5. Step 3: Map HubSpot lead status to SourceLoop stages
  6. Step 4: Verify the mapping is taking effect
  7. Custom SourceLoop stages
  8. What about deals?
  9. What’s next

SourceLoop tracks visitors through internal lifecycle stages (New, Contacted, In Progress, Converted, Lost by default, plus any custom stages you add). HubSpot has its own vocabulary: the lifecyclestage property with 8 default values (subscriber, lead, marketingqualifiedlead, salesqualifiedlead, opportunity, customer, evangelist, other) plus hs_lead_status for finer-grained status inside the lead stages.

This article walks through mapping the two together, both directions, so SourceLoop dashboards show your real funnel and HubSpot contacts show SourceLoop’s stage as a property your reps can filter on.

Before you start

You’ll need:

  • HubSpot connected to SourceLoop
  • Admin or Owner role in SourceLoop
  • A clear list of what your HubSpot lifecycle stages are (the standard 8, plus any custom ones you’ve added if you’re on Pro+)

How the mapping works

The mapping is per-connection (one HubSpot account ↔ one set of mappings) and bidirectional:

  • Inbound (HubSpot → SourceLoop): when SourceLoop pulls a contact from HubSpot, it reads the lifecyclestage value (e.g., salesqualifiedlead) and translates it to the matching SourceLoop stage (e.g., In Progress). The mapped stage drives funnel dashboards in SourceLoop.
  • Outbound (SourceLoop → HubSpot): when a SourceLoop contact’s stage changes (e.g., from New to Converted based on a Stripe charge), the mapping translates back to the HubSpot value (customer) and updates the contact property on HubSpot’s side.

Lead status maps the same way, just against hs_lead_status instead of lifecyclestage.

Step 1: Open the HubSpot drawer

  1. Sign in to SourceLoop.
  2. Open Setup -> CRM -> HubSpot. The drawer opens with the connection status, sync toggles, and two stacked sections relevant here: Lead status mapping and Lifecycle stage mapping (plus Deal stages and Field mappings below).
SourceLoop HubSpot drawer showing the Lead status mapping (with New mapped) and Lifecycle stage mapping (with Subscriber) sections, each with an Edit button
  1. Each mapping section has its own Edit button on the right. Click Edit next to the section you want to configure.

Step 2: Map HubSpot lifecycle stages to SourceLoop stages

  1. Find each HubSpot lifecycle stage value in the left column. The defaults are:
    • subscriber — someone who opted in but hasn’t engaged
    • lead — captured email
    • marketingqualifiedlead — engaged enough for marketing to consider qualified
    • salesqualifiedlead — handed off to sales
    • opportunity — open deal
    • customer — closed-won
    • evangelist — vocal advocate
    • other — fallback bucket
  2. For each, pick the matching SourceLoop stage in the right-column dropdown.
  3. A sensible default mapping:
    • subscriber → New
    • lead → Contacted
    • marketingqualifiedlead → In Progress
    • salesqualifiedlead → In Progress
    • opportunity → In Progress
    • customer → Converted
    • evangelist → Converted
    • other → (leave unmapped)
  4. Click Save.

If you’ve added custom lifecycle stages in HubSpot, they’ll appear in the left column too. Map them to SourceLoop stages the same way.

Step 3: Map HubSpot lead status to SourceLoop stages

hs_lead_status is a finer-grained sub-status used while a contact is in the lead or SQL lifecycle stage. HubSpot’s default values:

  • NEW
  • OPEN
  • IN_PROGRESS
  • OPEN_DEAL
  • UNQUALIFIED
  • CONNECTED
  • BAD_TIMING

Map each one to a SourceLoop stage. A typical mapping:

  • NEW → New
  • OPEN → Contacted
  • IN_PROGRESS → In Progress
  • OPEN_DEAL → In Progress
  • CONNECTED → In Progress
  • UNQUALIFIED → Lost
  • BAD_TIMING → Lost

Click Save.

Step 4: Verify the mapping is taking effect

  1. Wait 15 minutes for the next delta sync, or click Resync now on the HubSpot card.
  2. Open a contact in SourceLoop’s Contacts Hub. Its Lifecycle stage column should reflect the HubSpot value (translated to your SourceLoop stage).
  3. Open the same contact in HubSpot. The lifecyclestage and hs_lead_status properties should show the values SourceLoop pushed.

If a contact shows blank, see the troubleshooting article: Troubleshoot HubSpot sync issues.

Custom SourceLoop stages

The five default SourceLoop stages (New, Contacted, In Progress, Converted, Lost) cover most teams. If your funnel is more complex, you can add custom stages, for example, Proposal, Negotiation, On hold.

  1. In SourceLoop, open Settings -> Lifecycle stages.
  2. Click Add stage.
  3. Name the stage and (optionally) mark it as “won” or “lost” for funnel reporting.
  4. Save.

The new stage appears in the dropdown on the HubSpot Stage Mapping panel. Map a HubSpot value to it (you may need a custom HubSpot lifecycle stage to map from for full round-trip support).

What about deals?

HubSpot deals have a different stage system (dealstage) scoped to deal pipelines. SourceLoop handles deal stages separately, on the inbound sync, deal pipelines and stages are pulled into SourceLoop’s own pipeline tables for reporting. The Stage Mapping tab above is for contact lifecycle, not deal stages.

If you want deal pipeline reporting in SourceLoop dashboards, just make sure inbound sync is enabled. Pipelines and stages flow in automatically; no per-pipeline mapping is needed because SourceLoop preserves your HubSpot pipeline structure as-is.

What’s next

If sync is working but a specific contact isn’t getting the mapped stage, the troubleshooting article walks through the common causes: Troubleshoot HubSpot sync issues.

Frequently asked questions

  1. What's the difference between HubSpot's lifecycle stage and lead status?

    HubSpot's lifecycle stage is the broad funnel position (subscriber, lead, marketing qualified lead, sales qualified lead, opportunity, customer, evangelist, other). Lead status (`hs_lead_status`) is a finer-grained sub-status within the lead / SQL stages (New, Open, In Progress, Open Deal, Unqualified, Connected, Bad Timing). SourceLoop maps to both, but they're independent.

  2. Do I need HubSpot Sales Hub or Marketing Hub for lifecycle stages to work?

    No. Lifecycle stage is a standard property on every HubSpot account, including Free. HubSpot Sales Hub adds automation around stage transitions but the property itself works on every tier.

  3. Can I add custom lifecycle stages in HubSpot and map them?

    Yes. HubSpot lifecycle stages can be customised on Pro+ tiers. Add your custom stages in HubSpot first, then they'll appear in SourceLoop's stage-mapping dropdown the next time it syncs your HubSpot property schema.

  4. SourceLoop's internal stages are different from mine. Can I rename them?

    Yes. The five default SourceLoop stages (New, Contacted, In Progress, Converted, Lost) can be renamed and you can add custom ones. The mapping to HubSpot is per-connection, so renaming on SourceLoop's side doesn't break the mapping.

  5. What happens if SourceLoop sees a HubSpot stage I haven't mapped?

    The raw HubSpot value is preserved on the contact in SourceLoop's `lifecycle_stage_raw` field, but the contact's mapped `lifecycle_stage_id` stays NULL. You can map it later, and the next sync will pick up the mapping retroactively for all existing contacts in that stage.

  6. Does the mapping run on every sync or just on connect?

    Every sync. Each delta sync (every 15 minutes) re-applies the mapping for any contacts whose stage changed in HubSpot since the last run. So changes to the mapping take effect immediately, no full re-import needed.

Track every conversion to its true source

Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.

Without SourceLoop

Untagged

Kayden Floyd

kayden@abc.com

  • SourceUnknown
  • MediumUnknown
  • CampaignUnknown
  • Landing pageUnknown
Journey
No touchpoints captured

With SourceLoop

Auto-tagged

Kayden Floyd

kayden@abc.com · Acme Co.

  • Channel Paid Social
  • CampaignFree_demo
  • Landing page/pricing
Journey
Synced to HubSpot Google Ads Meta