HubSpot
Can a HubSpot Contact and Company Have Different Lifecycle Stages?
Yes. HubSpot contacts and companies share one lifecycle stage option set but hold independent values, unless a sync setting is overwriting them.

Key Takeaways
- The lifecycle stage option set is shared between contacts and companies; the values stored on each record are not.
- Different stages become impossible only when a sync setting is enabled, and HubSpot's sync will never move a stage backwards.
- If you need genuinely separate stage lists per object, keep the native property on one object and build a custom lifecycle property on the other, driven by a workflow.
- A lifecycle stage cannot be deleted while anything still writes to it; on one portal we found 13 assets still setting a stage the team believed was retired.
- Audit which workflows, forms, imports and integrations set the stage before you change anything, because the last writer wins.
Yes, a contact and its associated company can sit in different lifecycle stages, and in most real portals they should. This comes up constantly because HubSpot's own interface implies the opposite: open Settings, Objects, Companies, Lifecycle Stage, and HubSpot tells you to go and edit contact lifecycle stage settings instead. That message is about the list of available stages, not about the value on the record.
We hit this on an end client portal earlier this year where the client's HubSpot admin and their assigned HubSpot rep had both told the team that different stages were impossible, and the whole data model had been built around that belief. It was not true, and unpicking the assumption was a bigger job than configuring the thing correctly would have been in the first place.
What is actually shared between contacts and companies?
One thing: the option set. HubSpot maintains a single list of lifecycle stages, and both the contact object and the company object draw their dropdown options from that list. Add a stage and it appears on both. Reorder the stages and they reorder on both. That is the entirety of the coupling.
The value stored on each individual record is independent. A company record can hold Customer while three of its associated contacts hold Subscriber, Lead and Opportunity respectively, and HubSpot is perfectly happy about it. Nothing reconciles them unless you ask it to.
This distinction matters because the shared option set is the thing people notice, and the independent values are the thing people need.
The sync settings that make the values move together
The reason experienced admins say "you can't do that" is usually that they inherited a portal where lifecycle stage syncing was already on and had never seen the two objects diverge. HubSpot's lifecycle stage sync settings live under Data Management in your object settings and control exactly this.
The behaviour worth knowing before you touch anything:
- Company to contact. With the company sync enabled, the lifecycle stage on a primary company record is applied down to its associated contacts. This is the one that convinces people the values are shared.
- Deal driven transitions. Creating or closing a deal can push both the associated contact and the associated company forward automatically.
- Stages never move backwards. HubSpot's sync only advances a record. In HubSpot's own worked example, a company set to Lead updates an associated Subscriber contact to Lead but leaves an Opportunity contact where it is. Set the company to Customer and both contacts move.
That last rule is the one that generates the most confused support tickets. Someone corrects a company's stage backwards, expects the contacts to follow, and nothing happens. The sync is working exactly as designed.
It also produces a diagnostic finding that looks worse than it is. On a portal audit we ran on a 462-workflow account, 32 of the flagged workflow errors were "cannot set lifecycle stage backwards" failures. They were deliberate. The team had decided that accepting a logged error was cheaper than building branching logic around HubSpot's forward-only rule. That is a defensible call, and it is why an audit finding always needs a conversation attached to it rather than a red square on a slide.
When you genuinely want different stages on each object
Plenty of B2B models break if you force one stage across both objects.
Multi contact buying committees. A single company runs one buying process, but the eight people attached to it are at wildly different points. The champion is an Opportunity. The procurement contact who appeared last week is a Lead. The four people who downloaded something in 2023 are Subscribers. Flattening all of them to the company's stage destroys your ability to segment the nurture.
Account based motions. Here the company is the unit that progresses and the contacts are supporting evidence. You want the company stage to be authoritative and the contact stages to stay descriptive.
Parent and child company structures. A subsidiary can be a Customer while the parent is still an Opportunity for a different product line. Syncing anything across that relationship produces nonsense.
Partner and reseller models. The company is a Customer in the sense that it buys, while its contacts are Evangelists, Other, or something you invented. These are different questions wearing the same property name.
The general test: if the stage answers "where is this deal" then it belongs on the company or the deal, and if it answers "how well do I know this person" then it belongs on the contact. Most portals are trying to make one property answer both questions at once, and that is the actual problem behind the question this post is answering.
How to give one object its own stage list
Sometimes independent values are not enough and you genuinely need different stage options per object. Company stages might be Prospect, Pilot, Customer, Churned, while contact stages stay on HubSpot's defaults. The shared option set will not do that.
The workaround is straightforward and we build it regularly:
- Keep the native lifecycle stage property on whichever object needs HubSpot's built in behaviour. Usually contacts, because that is where the reporting, the stage date properties and the lifecycle funnel report all live.
- Create a custom dropdown property on the other object with exactly the options you want. Name it clearly, because a property called "Lifecycle Stage (Company)" sitting next to the native "Lifecycle Stage" is a support ticket waiting to happen.
- Drive it with a workflow rather than leaving it to manual entry. Company property changes, deal stage changes and associated contact activity are the usual triggers.
- Repoint your reporting at the custom property on that object.
Know what you give up. The custom property does not get the progress bar interface at the top of the record. It does not get HubSpot's automatic "entered stage" and "exited stage" date properties, so if you want stage duration reporting you build date stamp workflows yourself, one per stage, each writing to a dedicated date property. That is real hours, not a footnote, and it is worth quoting honestly when a client asks for it.
We hit exactly this pattern on lead status recently, which has the same gap: lifecycle stage gets entered and exited dates for free, lead status does not. The fix was a folder of date stamp workflows, one per status. It works, it is maintainable, and nobody enjoys building it.
What breaks downstream when the two objects disagree by accident
Deliberate divergence is fine. Accidental divergence is expensive, and it is worth knowing which reports go wrong so you can check them rather than wait for a client to find them.
The lifecycle funnel report is contact based. If your commercial reality lives on the company object and your funnel report reads contacts, the funnel will describe a different business from the one the sales team recognises. This is the single most common source of "the numbers in HubSpot are wrong" complaints that turn out to be neither wrong nor right, just measuring a different thing.
List membership drifts. Active lists filtering on contact lifecycle stage will silently include or exclude people when a company-level sync fires. A nurture audience can change size overnight because somebody closed a deal.
Attribution gets ambiguous. Any model that credits a stage transition to a source needs to know which object's transition counts. If both objects transition on different days for different reasons, the model has two candidate dates and no rule for choosing.
Sales notifications fire on the wrong trigger. A rep alerted when a contact becomes an Opportunity will be alerted again for every contact at that company if a sync pushes the stage down.
The reconciliation playbook when you find a portal in this state:
- Decide which object is authoritative for the commercial process, and write it down somewhere the next admin will find it. In most B2B portals it is the company, and most portals have never made the decision explicitly.
- Export the current values on both objects before changing anything. There is no built-in undo for a bulk lifecycle change, and the previous value is not retained anywhere convenient.
- Fix the writers before the records. Correcting values while a workflow is still setting them wrongly just gives you a slower version of the same problem.
- Backfill in one controlled pass rather than record by record, and run it outside business hours so the notification storm does not reach the sales team.
- Re-point the reporting at the authoritative object, and tell whoever reads those dashboards that the numbers will move. A dashboard that changes without warning costs more trust than the original error did.
Sequencing matters on the backfill. Where a one-time correction and an ongoing automation both write the same property, run the one-time pass first, confirm it, and only then switch the ongoing automation on. Doing it the other way round means the automation fights the backfill and neither result is trustworthy.
Why you cannot delete a stage you no longer use
The other half of this question, and it usually arrives about ten minutes later: HubSpot will not let you delete a lifecycle stage while it is still in use.
"In use" is broader than most people check. It includes records currently sitting in the stage, but also every asset that can write the value: workflows, forms with a lifecycle stage field, lists filtering on it, active imports, and any integration mapping a field into it. On one portal where the team was certain a stage had been retired months earlier, we found 13 assets still writing to it. Records kept reappearing in a stage nobody believed existed.
The retirement sequence that works:
- Inventory every writer. Search workflows for actions setting the stage, check form field mappings, check integration field mappings, and check for scheduled imports.
- Repoint each one to the stage you actually want, and turn off anything that no longer has a purpose.
- Move the remaining records off the stage in bulk.
- Then delete the option, and confirm nothing repopulates it over the following week.
Skipping step one is how you end up doing steps two through four twice.
Before you change a lifecycle stage setting on a live portal
Lifecycle stage is load bearing. It drives reporting, list membership, email sends, sales notifications and quite often revenue attribution. Changing how it is set is not a settings tweak.
The check we run before touching it on a client portal:
- Who writes it today? Workflows, forms, imports, integrations, manual edits by reps. Rank them, because the last writer wins.
- What reads it? Lists, reports, dashboards, workflow enrollment criteria, sales notifications. Every one of these changes meaning if the stage logic changes.
- Is a sync setting currently on? If it is, someone chose that, possibly years ago, possibly by accident. Find out which before you switch it off.
- What is the rollback? Lifecycle stage changes are difficult to reverse in bulk because the previous value is not stored anywhere convenient. Export the current values first. It takes two minutes and it is the only undo you get.
If you are inheriting a portal rather than one you built, this is exactly the kind of thing a structured white-label HubSpot audit surfaces before it becomes a client conversation. Lifecycle architecture is one of the dimensions we score, and it is consistently one of the worst performing.
The bottom line
Contacts and companies share a list of lifecycle stages, not a value. Different stages on the two objects are supported, normal, and usually correct for B2B. If your portal cannot do it, something is syncing them, and that setting has a name and a location.
The harder question is not whether HubSpot allows it. It is whether your lifecycle model is trying to make one property answer two different questions. Answer that first, then configure. If your team is carrying a portfolio of inherited client portals with this problem in most of them, our white-label HubSpot support team untangles lifecycle architecture under your brand, and the workflow automation work that keeps the stages accurate afterwards is the same engagement.
Sources
Frequently Asked Questions
Can a contact and a company have different lifecycle stages in HubSpot?
Yes. HubSpot stores lifecycle stage independently on each object, so a company can be a Customer while an associated contact is still a Subscriber. The two values only move together when one of the lifecycle stage sync settings is enabled in your Data Management object settings.
Why does HubSpot say to add stages in contact settings?
Because the lifecycle stage option set is shared across contacts and companies. HubSpot maintains one list of stages for both objects and edits it in one place, which reads as though the stage value itself is shared. It is not; only the list of available options is.
Does the company lifecycle stage overwrite the contact lifecycle stage?
Only if the company-to-contact sync setting is on. When it is, the primary company's stage is applied to associated contacts, but HubSpot will not move a contact backwards. A contact at Opportunity stays put when the company is set to Lead.
How do I give contacts and companies separate lifecycle stage lists?
Keep the native lifecycle stage property on whichever object needs HubSpot's built in reporting, then create a custom dropdown property on the other object and drive it with a workflow. You lose the progress bar interface and the native stage date properties on the custom side.
Why can't I delete a HubSpot lifecycle stage?
HubSpot blocks deletion while the stage is still in use by records or assets. Find every workflow, form, list, import and integration that writes the stage, repoint each one, move the remaining records off it, and only then delete the option.
HubSpot Portal Audits
What's Hiding in Your Clients' Portals?
A meticulous white-label audit turns messy portals into a prioritized roadmap, and into your next retainer conversation.
Related Articles

White-Label HubSpot Development for Agencies
How agencies deliver white-label HubSpot development under their own brand and say yes to every build: 11,800+ projects, zero confidentiality breaches.

