Lead
Status
The sales activity layer of your CRM — how to configure, govern, and extract maximum pipeline value from this fully-customisable contact property.
A Contact property that tracks the sales team's day-to-day working state with a lead — from first contact to conversion or disqualification.
Lead Status is a customisable dropdown property on Contact records that tells you what the sales team is currently doing with a lead. While Lifecycle Stage tells you the big-picture funnel milestone (which chapter), Lead Status tells you what's happening right now (which page). It is owned and managed by the sales team — reps update it as they work their leads.
Why the sales team needs it
| Sales question | How Lead Status answers it |
|---|---|
| Which leads have my reps actually worked? | Filter: Lead Status ≠ New |
| Which leads are sitting untouched? | Filter: Lead Status = New AND Create Date > 48h |
| Which reps are most active right now? | Count Lead Status changes by owner this week |
| Why aren't MQLs converting to SQLs? | Report on Unqualified + Bad Timing reason breakdown |
| What future pipeline is sitting in Bad Timing? | Count Bad Timing × avg conversion rate × ACV |
| Which leads should I resurrect next quarter? | Active list: Lead Status = Bad Timing AND Follow-up Date = this month |
The most important distinction in HubSpot contact tracking. These two properties serve completely different purposes.
| Lead Status | Lifecycle Stage | |
|---|---|---|
| Purpose | Sales working state — what the rep is doing today | Funnel milestone — how far the contact has come |
| Analogy | The current page of the book | The chapter of the book |
| Used by | Sales team only | All teams — Marketing, Sales, CS |
| Options | 7 defaults + fully customisable | 7 fixed — cannot add or rename |
| Direction | Any direction, any time — no restrictions | Forward by default — backward needs explicit logic |
| Drives | Rep activity reports, coaching, disqualification analysis | Funnel reports, MQL/SQL counts, conversion rates |
| Who sets it | Reps + workflows | Workflows + automation (with rep input on SQL) |
| Syncs to Company? | No | Yes — via workflow |
Lifecycle Stage = the chapter of the book. Lead Status = what's happening on the current page. A contact can be in the SQL chapter while their Lead Status is "In Progress" (rep is actively calling) or "Bad Timing" (spoken to them, right fit, not ready). The chapter doesn't change — only the page does. Never use Lead Status for funnel milestone reporting, and never use Lifecycle Stage for rep activity tracking.
Click each status to see the full definition, who sets it, when to use it, and admin notes — including perspective from your SDR background.
Five rules that govern how HubSpot handles Lead Status — know these before building any automation.
| Rule | What it means | Admin implication |
|---|---|---|
| Any direction, any time | Lead Status has no direction enforcement. New → Bad Timing → New → In Progress — all valid. | No safety net. A careless rep can overwrite important statuses. Build required Reason properties to capture context before status changes. |
| Fully customisable | You can add, remove, and rename any option at any time. | Never delete an option that has contacts assigned — it blanks those contacts' Lead Status. Archive instead. |
| Does not sync to Lifecycle Stage | Changing Lead Status has no automatic effect on Lifecycle Stage and vice versa. | You connect them via workflows. Build explicit automation to bridge them (e.g. deal created → Lead Status = Open Deal). |
| Contact property only | Lead Status lives on Contact records. It does not exist on Deal or Company records. | When a Deal moves through pipeline stages, you must build a workflow to update the associated Contact's Lead Status if needed. |
| No history protection | Every change overwrites the previous value. No forward-only protection exists. | Use property history logs for auditing. Build required Reason fields to capture context at the point of change, not after. |
The default 7 cover the basics — but most real sales teams need more granularity to capture their actual process.
| Option | When to use it | Why it's valuable |
|---|---|---|
| Contacted — no response | Outreach attempted (call/email) but no reply yet | Distinguishes "actively trying" from "haven't started." Shows reps who are running cadences vs sitting on leads. |
| Meeting booked | Demo or discovery call is scheduled but hasn't happened yet | Milestone before meeting completion. Enables no-show re-engagement workflows. |
| Wrong person — find DM | Right company, but speaking to the wrong contact | Tells the next rep exactly what to do: find the decision maker. Better than leaving it In Progress. |
| Referral given | Contact referred the rep to the right person at their company | Tracks referral activity. Trigger follow-up task for the referred contact. |
| Closed lost — nurture | Deal closed lost but contact is worth nurturing for future | Different from Unqualified. These people could return — enrol them in a long-term nurture sequence. |
| Sequence enrolled | Contact is in an active email sequence | Filter "who is currently in a sequence" — prevents reps from manually emailing someone already receiving automated sequences. |
Keep total Lead Status options under 12. More options = less adoption. If you have 18 options, reps either pick randomly or always pick the same 3. Run a quarterly usage report: any option with fewer than 5% of contacts assigned should be reviewed — either retrain the team on it or remove it.
Settings → Properties → Contacts → Search "Lead status" → Click to edit options
- Export current distribution — Before editing, check how many contacts are at each current option. Go to Contacts → filter by Lead Status = each value → note the counts. This prevents accidentally removing a status 300 contacts are using.
- Review default options — Decide which defaults to keep, which to rename, and which to remove. "Open" is commonly unused — if your team skips it, remove it to reduce noise.
- Add custom options — Click "Add option." Name it clearly. Set display order: active outreach options first (New, In Progress, Connected), then exit options last (Unqualified, Bad Timing). This ordering guides rep behaviour.
- Set a default value — In the property settings, set "New" as the default value. Every contact created manually or imported without a Lead Status will start at New automatically.
- Update MQL workflow — In your MQL promotion workflow, add: Set Lead Status = New. This ensures every MQL lands in the SDR queue as a fresh, unreviewed contact.
- Build Open Deal automation — Workflow: Deal is created AND associated Contact exists → Set Contact Lead Status = Open Deal. This removes a manual step reps consistently forget.
- Create the Reason property — Create a custom dropdown: "Lead Status Reason." See the Disqualification Reason section below for the full option list.
- Create Follow-up Date property — Custom Date picker property on Contact: "Lead Status Follow-up Date." Reps fill this when setting Bad Timing. The re-engagement workflow uses it as a trigger.
- Build the Bad Timing re-engagement workflow — This is the most valuable setup step. See the Workflows section for full details.
The diagnostic data that improves your entire upstream process — most companies don't build this. Those that do see compounding returns.
Setting a contact to Unqualified or Bad Timing without capturing why is like a doctor discharging a patient without writing a diagnosis. You lose the data that would improve your lead generation targeting, your MQL criteria, and your content strategy. This one property, collected consistently over 6 months, drives more strategic improvement than almost any other admin initiative.
Recommended option list by category
Build a monthly report: count of Unqualified contacts by Lead Status Reason, segmented by Lead Source. If the top reason is "Wrong industry" from leads that came via Google Ads → your ad targeting is wrong. If it's "No budget" → add budget confirmation to your MQL criteria or your forms. This feedback loop makes your entire demand generation engine smarter over time.
Four workflows that every portal with a sales team needs — in priority order.
- Set Lead Status = New
- Notify assigned SDR: "New MQL — {{contact.firstname}} at {{contact.company}}"
- Create task for owner: "Review this MQL — due in 4 hours"
- Set associated Contact Lead Status = Open Deal
- Create urgent task for owner: "MQL sitting at New for 48h — review immediately"
- Notify SDR manager via email
- Set Lead Status = New
- Clear Lead Status Follow-up Date
- Notify owner: "Time to re-engage — {{contact.firstname}} at {{contact.company}}. You marked them as Bad Timing on {{lead_status_follow_up_date_original}}."
- Create task: "Re-engagement call — {{contact.firstname}}"
Workflow 1 is highest operational priority — every MQL must land in a rep's queue. Workflow 4 is highest ROI — it generates revenue from leads most teams forget. Build both in your first week of any new HubSpot setup.
How a complete Lead Status system transformed a sales team's pipeline visibility and created a re-engagement revenue engine.
A 15-person B2B SaaS company was generating 80 MQLs per month. Sales was complaining leads were garbage. Marketing said sales wasn't working them. Neither had data. Lead Status was being used — but with no custom options, no disqualification reasons, and no automation. Every dead lead was just "Unqualified" with no further context.
What the admin built
- 📋Added 5 custom options: "Contacted — no response," "Meeting booked," "Wrong person — find DM," "Closed lost — revisit," and "Sequence enrolled"
- 🔢Created "Lead Status Reason" dropdown with 12 specific disqualification options across 4 categories
- 📅Created "Lead Status Follow-up Date" date property — reps required to fill when setting Bad Timing
- ⚙️Built all 4 workflows above: MQL arrival, Open Deal auto-set, Stale lead alert, and Bad Timing re-engagement
- 📊Built a Lead Status dashboard: contacts by status per rep, stale New count, Bad Timing pipeline forecast, and Disqualification Reason breakdown
Results after 3 months
| Metric | Before | After |
|---|---|---|
| Avg time from MQL to first outreach | 3.2 days | 6 hours |
| MQLs sitting unreviewed at any time | 40+ contacts | 0–3 contacts |
| Disqualification reason data | None | 12 specific reasons tracked |
| Bad Timing contacts re-engaged/month | 0 (manually impossible) | 23 automatically |
| Revenue from re-engaged Bad Timing | $0 | ~$50k ARR/month |
| Marketing's top ad targeting fix | Unknown | "Wrong industry" = 41% of Unqualified → fixed Google Ads audience |
A sales manager noticed their pipeline was stagnant. Looking at the CRM, 240 contacts had been sitting at Lead Status = In Progress for more than 30 days. Reps were calling them "active" but in reality, most hadn't been touched in weeks. Nobody wanted to move leads to Unqualified because it looked like they were failing to convert. The sales manager had no visibility into which reps were actually working their queue vs using "In Progress" as a comfort blanket.
- ⚙️Admin built a workflow: Lead Status = In Progress AND Last Activity Date > 14 days → Create urgent task for owner: "This lead has been In Progress for 14 days with no activity. Review and update status today." → Notify manager.
- 📊Built a "Stale In Progress" dashboard widget: count of contacts per rep that have been In Progress 14+ days with no logged activity. Updated daily. Visible to the sales manager.
- 📋Added "Contacted — no response" as a new Lead Status option. Now reps had a honest place for leads they were genuinely trying to reach but getting no reply — without the psychological weight of "Unqualified."
- 🗓️Added a weekly 15-minute "pipeline hygiene" task to every rep's recurring tasks: review all In Progress leads and update statuses. This normalised honest status reporting.
Within 6 weeks, the 240 stale In Progress contacts were resolved: 60 moved to Connected after re-engagement, 80 moved to Bad Timing with follow-up dates, 70 moved to Unqualified (honest disqualification), and 30 moved to "Contacted — no response" (genuine attempts with no reply). The pipeline became accurate. The sales manager could finally trust the data and coach reps on real issues rather than chasing ghost leads.
A 30-person digital agency was generating strong pipeline from inbound, but the VP of Sales noticed that about 35% of qualified leads were being marked Bad Timing and then forgotten forever. Reps would tell contacts "I'll follow up in Q3" but then never do — because there was no system to remind them. The agency estimated it had "forgotten" $800k+ in potential ARR from qualified leads over the past 18 months.
- 📅Created "Lead Status Follow-up Date" custom Date property. Made it visible in the contact sidebar. Added it to the default view alongside Lead Status.
- ⚙️Built Bad Timing re-engagement workflow (Workflow 4 above). When Lead Status = Bad Timing AND Follow-up Date = today → reset to New, notify owner, create task.
- 📊Built a "Bad Timing forecast" report: count of contacts with Lead Status = Bad Timing by follow-up month × average historical conversion rate × average ACV = projected future pipeline per month. Shared in the monthly exec review.
- 🔔Added validation: when a rep sets Lead Status = Bad Timing, a workflow creates a task: "Fill in Follow-up Date for {{contact.firstname}} — Bad Timing contacts without a follow-up date will be automatically re-engaged in 90 days." This ensured the date was always set.
In the first 6 months after implementation: 180 Bad Timing contacts were automatically re-engaged by the workflow. Of those, 34 (19%) converted to SQL. 12 (35% of SQL) became customers. Average ACV $18k → $216k in revenue directly attributed to the re-engagement system. The VP of Sales called it "the best ROI of any admin project we've ever done." The system required zero rep effort after setup.
A B2B technology company was spending $45k per month on Google Ads generating 150 MQLs. Sales was accepting only 30 (20% acceptance rate) and closing 5 per month. The CMO and VP of Sales were in constant conflict — CMO claimed volume was strong, VP claimed quality was terrible. They had been arguing about it for 6 months with no resolution because there was no objective data on why 120 MQLs per month were being rejected.
- 📋Admin built Lead Status Reason property with 12 specific options. Required field via workflow task when Lead Status = Unqualified or Bad Timing.
- ⚙️Added "Lead Source" as a cross-dimension in the disqualification report. Now could see disqualification reasons broken down by where the lead came from.
- 📊After 30 days of data: built the disqualification report. Shared it in a joint Marketing-Sales monthly review.
The data was decisive. 62% of disqualified leads from Google Ads had "Wrong industry" as their reason. Investigation revealed a broad keyword strategy was pulling in B2C companies and non-target verticals. The CMO immediately restructured the Google Ads campaigns: tighter keyword targeting, industry exclusions, negative keyword lists. Within 60 days: MQL volume dropped from 150 to 70, but acceptance rate jumped from 20% to 58%. SQL count actually increased from 30 to 41 per month with half the unqualified leads. Ad spend efficiency nearly doubled. The CMO and VP of Sales stopped fighting. The argument was resolved with data.
- 01 — Using Lead Status for funnel reportingLead Status = In Progress doesn't tell you about pipeline health — it tells you about rep workload. Reporting on Lead Status as a funnel metric confuses activity with progression. Use Lifecycle Stage for funnel analysis. Use Lead Status for rep activity analysis.
- 02 — Not capturing disqualification reasonsSetting Unqualified or Bad Timing with no reason loses your most valuable diagnostic data. Fix: build the Lead Status Reason property and make it required via a task workflow that fires on these transitions.
- 03 — Letting In Progress become a parking lotLeads that stay In Progress for 30+ days are either being ignored or the rep is avoiding a difficult disqualification decision. Fix: build the 14-day stale In Progress alert workflow. Normalise honest disqualification.
- 04 — Not automating Open Deal statusRelying on reps to manually set Lead Status = Open Deal when they create a deal results in 30–50% of contacts never getting updated. The data becomes unreliable. Fix: build the workflow. Always.
- 05 — Deleting a Lead Status option instead of archivingDeleting a Lead Status option removes the value from every contact who had it set — replacing their status with blank. Their Lead Status history is lost and any workflows referencing that option break silently. Fix: always archive, never delete.
- 06 — Creating too many Lead Status options18 options means reps pick the first three they see or the same one every time. Data quality drops to near-zero. Fix: start with 8–10 options maximum. Quarterly review: remove options with less than 5% adoption.
- 07 — Forgetting to build the Bad Timing loopBad Timing contacts without a re-engagement system are forgotten pipeline. Every one of them was a qualified lead who just wasn't ready. Without automation, they never come back. Fix: Workflow 4 is non-negotiable. Build it in every HubSpot setup.
- 🔄Build the Bad Timing re-engagement loop as standard. Every HubSpot setup you do, this workflow goes in. It is the highest-ROI single automation in a sales CRM.
- 📊Report on Lead Status transition velocity. How many days does a contact spend at New before moving to In Progress? Average days at In Progress before Connected? These benchmarks identify process bottlenecks and individual rep patterns worth coaching.
- 🔍Use disqualification data as a coaching tool. A rep with mostly "Wrong industry" in their Unqualified reasons is getting bad leads. A rep with mostly "Ghosted" is not running enough touchpoints. The data tells the coaching story.
- 📋Align options with your actual sales motion. An inbound-only team may not need "Open" or even "New" the way an outbound SDR team does. Customise to reflect how your team actually works, not how an imaginary team works.
- 🗓️Quarterly Lead Status audit. Review usage counts per option. Remove or retrain on options with less than 5% adoption. Review whether new options are needed based on rep feedback.
- 🔔Make the SDR manager's alerts automatic. A weekly "stale MQL" summary email, auto-generated by HubSpot workflow, that shows the manager which reps have the most uncovered New contacts is a simple admin build with significant operational impact.
Do this in your free HubSpot sandbox — approximately 40 minutes.
- Review default Lead Status options — Settings → Properties → Contacts → search "lead status." Look at the 7 defaults. Note which you'd keep, rename, or remove for a typical B2B sales team.
- Add 3 custom options — Add: "Contacted — no response," "Meeting booked," and "Wrong person — find DM." Set them in a logical display order after the defaults.
- Create the Reason property — New dropdown property: "Lead Status Reason." Add 8 options across 3 categories (wrong fit, budget, timing). Put it in a new group called "Sales Tracking."
- Create the Follow-up Date property — New Date picker property: "Lead Status Follow-up Date." Put it in the same "Sales Tracking" group.
- Build the Bad Timing workflow — Contact-based workflow. Enrolment: Lead Status = Bad Timing AND Follow-up Date = today. Actions: Set Lead Status = New, clear Follow-up Date, create task for owner. Activate on 5 test contacts. Set one's Follow-up Date to today and watch it fire.
- Build the Stale New alert — Contact-based workflow. Enrolment: Lead Status = New AND Create Date is more than 2 days ago. Action: create task "Stale MQL — review and update status." Test with a contact you created 3 days ago.
- Build the Lead Status dashboard — Contacts → Create a saved filter for Lead Status = each value. Note the counts. Build a simple "contacts by Lead Status" bar chart report. This is the rep activity view your sales manager needs.
| Concept | Key point |
|---|---|
| What is it | A customisable Contact property tracking the sales team's day-to-day working state with a lead |
| vs Lifecycle Stage | Lead Status = current page. Lifecycle Stage = chapter. Never confuse them. |
| Direction | Any direction, any time — no forward-only protection |
| Customisable | Fully — add, remove, rename via Settings → Properties → Contacts → Lead status |
| New | Untouched lead. Auto-set by MQL workflow. Monitor for 48h+ inactivity. |
| In Progress | Active outreach underway. Key rep activity metric. Alert if stale 14+ days. |
| Connected | First real two-way conversation. Conversion rate from here = qualifying conversation quality. |
| Unqualified | Wrong fit — always capture the reason. Data drives ICP refinement. |
| Bad Timing | Right fit, wrong timing — build re-engagement automation. This is free future pipeline. |
| Open Deal | Deal created — automate via workflow. Never rely on rep manual update. |
| Critical custom options | Contacted — no response · Meeting booked · Wrong person — find DM |
| Disqualification Reason | Required custom property when Unqualified/Bad Timing. Monthly report drives upstream improvements. |
| Follow-up Date | Custom date property reps fill with Bad Timing. Re-engagement workflow fires on this date. |
| Highest ROI workflow | Bad Timing + Follow-up Date → auto-reset to New. Generates 15–25% of pipeline at well-run companies. |
| Admin interview gold | "I build Bad Timing re-engagement loops as standard. It consistently generates revenue from leads most teams forget entirely." |
| Never do this | Delete a Lead Status option — always archive. Deletion destroys historical data on contacts. |
Lead Status is the activity data layer of your CRM. It enables three things Lifecycle Stage cannot: rep accountability reporting (who is working their queue?), disqualification analysis (why are leads failing, and what does that tell marketing?), and future pipeline prediction (Bad Timing contacts with known re-engagement dates = quantifiable projected revenue). Companies that build this system seriously — with custom options, disqualification reasons, and re-engagement automation — consistently outperform those that treat Lead Status as a simple dropdown they fill in manually. The difference is not the property itself — it's the system built around it.