Lists & Segments
The segmentation engine of HubSpot — how to build, manage, and leverage Active and Static lists across workflows, campaigns, reports, and lead routing.
A saved, named segment of CRM records — the bridge between your data and every action HubSpot takes.
A List is a saved segment of records in HubSpot — a named group of Contacts (or Companies, or Deals) that match criteria you define. Think of it as a smart filter you name and reuse. Instead of rebuilding a filter every time you want to send a campaign or trigger a workflow, you define the audience once as a list and reference it everywhere.
Why lists are infrastructure, not just filters
| What you want to do | How lists make it possible |
|---|---|
| Send a targeted email campaign | Set the list as the recipient audience in the email tool |
| Trigger an automation workflow | Use the list as the enrolment criteria — anyone who joins the list enters the workflow |
| Pull a segment report | Filter your report by list membership over time |
| Suppress contacts from a send | Create a suppression list and exclude it on every campaign |
| Route leads to the right rep | Build a list for each territory or segment, trigger assignment workflows |
| Monitor data quality | Build a "Contacts with no owner" list — when it's empty, your data is clean |
Lists sit between your data layer and your action layer. Objects and Properties are how data is stored. Workflows, campaigns, and reports are how you act on that data. Lists are what connect them — they answer the question "who?" before every action your CRM takes.
The most important decision you make when creating a list — and the one beginners get wrong most often.
- +Contacts join when they match the rules
- +Contacts leave when they stop matching
- +Always reflects current reality
- +Best for ongoing workflows and live campaigns
- —Cannot manually add members
- —Membership fluctuates — can't be "frozen"
Workflow enrolment · Recurring campaigns · Real-time segments · Data quality monitoring · Lead scoring audiences
- +Membership is permanent once set
- +Can add or remove members manually
- +Properties on members still update
- +Best for one-time sends and historical records
- —Will not pick up new matching contacts
- —Cannot convert to active after creation
Event attendees · One-time import sends · A/B test control groups · Historical snapshots · Manual curation
You cannot convert an Active list to Static or vice versa after it has been saved. If you choose the wrong type, you must delete the list and rebuild it. Make the decision deliberately before clicking "Create list."
The key difference in plain terms
An Active list is like a classroom roll that updates every semester — students come and go as they meet the criteria. A Static list is like a yearbook photo — everyone who was in the room on that specific day, frozen forever.
| Active | Static | |
|---|---|---|
| Membership updates | Continuously, automatically | Never (without manual action) |
| Add members manually | No | Yes |
| Remove members manually | No | Yes |
| Member properties update | Yes | Yes (properties always update) |
| Requires criteria/rules | Yes — mandatory | Optional (can be empty and manually filled) |
| Best trigger for workflows | Yes — always current | Only for one-time enrolment |
| Example | "All MQLs in SaaS with score >50" | "October webinar attendees" |
Everything you can filter on when building a list — properties, behaviours, and list membership.
Property filters match contacts based on the values stored in their properties — every field on a Contact, Company, or Deal record can be used as a filter.
| Property type | Available operators | Example |
|---|---|---|
| Dropdown / Checkbox | is equal to · is not equal to · is any of · is none of · is known · is unknown | Lifecycle stage is equal to MQL |
| Text (single/multi-line) | contains · doesn't contain · starts with · ends with · is equal to · is known · is unknown | Job title contains "Director" |
| Number / Currency | is equal to · is greater than · is less than · is between · is known · is unknown | Lead score is greater than 50 |
| Date | is equal to · is before · is after · is between · is within last X days · is more than X days ago | Create date is within last 30 days |
| Boolean (single checkbox) | is equal to true · is equal to false · is known · is unknown | Has signed NDA is known |
For Single checkbox properties, "is known" means the checkbox has been set (checked). "is equal to true" means it is explicitly checked. Unchecked does not mean false — it means unknown. Always use "is known" unless you're certain the field has been deliberately set on all relevant records.
Behaviour filters match contacts based on actions they have taken — email interactions, website visits, form submissions, and more. These are the most powerful filters for engagement-based segmentation.
| Behaviour category | Example filters | Use case |
|---|---|---|
| Email engagement | Opened email · Clicked link in email · Was sent email · Has not opened in 90 days | Re-engagement campaigns, nurture sequences |
| Form submission | Submitted any form · Submitted specific form · Never submitted a form | Lead capture follow-up, form abandonment |
| Page views | Visited specific URL · Viewed pricing page · Spent more than X seconds on page | Intent-based scoring, sales alerts |
| Meetings | Has a meeting booked · Meeting outcome = completed · No meeting in last 30 days | Sales pipeline management |
| Marketing events | Registered for event · Attended event · Did not attend (no-show) | Post-webinar follow-up sequences |
| Calls / sequences | Was called · Is enrolled in sequence · Replied to sequence email | Sales activity tracking |
Behaviour filters with time windows are especially powerful. "Opened an email in the last 30 days" keeps your re-engagement list constantly fresh. "Has not visited the site in 90 days" automatically identifies at-risk contacts. Time-windowed behaviour filters are the basis of most good engagement-based segments.
List membership filters let you build lists based on other lists — enabling nested segmentation and suppression logic. This is where list building becomes genuinely powerful.
| Operator | What it means | Example use |
|---|---|---|
| Is member of list | Contact must be in the referenced list | "All MQLs" AND "Is member of UK contacts list" |
| Is not member of list | Contact must NOT be in the referenced list | Targeting list AND "Is NOT member of [SUPPRESS] Customers" |
The most important use of list membership filters is suppression. Build a master suppression list ("All current customers"), then add "Is NOT member of [SUPPRESS] Customers" to every prospecting campaign list. Any contact who becomes a customer is automatically excluded from all future prospecting — without touching each campaign individually.
The single most important concept in list building — and the most common source of targeting mistakes.
AND logic — the contact must match every filter in the group. Narrows the segment.
OR logic — the contact must match at least one filter. Widens the segment.
How HubSpot structures filter groups
HubSpot uses a two-level logic system. Within a filter group, all filters are connected by AND. Between filter groups, the connection is OR. This lets you build complex compound logic without needing to understand Boolean algebra.
"Give me all contacts who are MQLs AND in SaaS AND in the UK — OR any SQL with a lead score above 60."
The two groups are independent. A contact only needs to satisfy one entire group, not both.
| Logic type | Effect | When to use | Risk if wrong |
|---|---|---|---|
| AND | Narrows — fewer contacts match | Tightly targeted campaigns, qualified lead lists | Too narrow — you miss valid contacts |
| OR | Widens — more contacts match | Catch-all segments, broad awareness sends | Too wide — you include contacts who shouldn't be there |
| Groups (AND within, OR between) | Flexible compound logic | Multi-persona campaigns, combined qualification criteria | Misreading which group a filter belongs to |
Step-by-step walkthrough with the exact path, decisions, and admin considerations at each stage.
Contacts → Lists → Create list (top right button)
- Choose the record type — Contact-based, Company-based, or Deal-based. Most lists are Contact-based. The record type determines which properties and behaviours you can filter on.
- Choose Active or Static — this is permanent. Active if the membership should update over time. Static if it's a one-time, fixed group. When in doubt: active is usually safer for ongoing use.
- Name the list — use your naming convention (see Naming Conventions section below). A good name explains what's in the list without opening it. Example: [MKT] MQLs — SaaS — UK
- Add filter group 1 — click "Add filter" and choose your first criterion. Select the property, the operator, and the value. Add more filters to the same group using AND logic.
- Add additional filter groups (if needed) — click "Add filter group" to create a second group connected by OR. Use this for multi-persona or multi-scenario targeting.
- Preview the count — before saving, HubSpot shows a live preview of how many records match. Always check this. If the number is 0 or suspiciously large, your logic has an error.
- Save the list — for Active lists, HubSpot immediately begins evaluating all contacts. For large portals, this can take a few minutes to process.
Ask yourself three questions: (1) Does the count look right for my expected audience? (2) Are my AND/OR operators correct? (3) Have I added a suppression filter to exclude anyone who shouldn't be in this list?
The difference between a manageable list library and an unusable one is naming discipline.
Without a naming convention, lists accumulate over months and become impossible to navigate. "Test List 3," "Sarah's leads," and "Campaign June" tell you nothing without opening each one.
The standard admin naming format
| List type | Example name | What it tells you |
|---|---|---|
| Marketing campaign target | [MKT] Webinar invite — SaaS MQLs — Q4 2024 | Team, purpose, segment, when |
| Workflow enrolment | [AUTO] Lead nurture entry — Score 20–50 | Automated, what triggers it, score range |
| Suppression list | [SUPPRESS] Current customers | Type immediately obvious |
| Data quality monitor | [ADMIN] Contacts with no owner | Admin purpose, what's wrong |
| Sales segment | [SALES] Hot leads — UK — score >70 | Team, urgency, geography, threshold |
| Reporting segment | [REPORT] MQL count — monthly snapshot | Purpose is reporting, what it tracks |
Establish your naming convention on day one of any HubSpot setup. Document it in your admin handbook. Enforce it with every new list request — never allow exceptions. One inconsistently named list becomes the precedent for twenty more.
The safety net every HubSpot portal needs before the first bulk email send.
Emailing an unsubscribed contact even once is a compliance violation under GDPR and CAN-SPAM. Emailing a current customer a prospecting message damages your brand. Suppression lists are the mechanism that prevents both. They are not optional — they are infrastructure.
Core suppression lists every portal needs
In HubSpot email tool: when sending a campaign, look for the "Don't send to" or "Exclude" field in the recipients settings. Add your suppression list there. In workflows: use an "Is not member of [SUPPRESS] list" filter in your enrolment criteria, or add a branch that removes contacts who join the suppression list.
Lists are not just for contacts — you can segment Companies and Deals too.
| List type | Filters on | Used for | Example |
|---|---|---|---|
| Contact-based | Contact properties and behaviours | Email campaigns, lead workflows, nurture sequences | All MQLs in SaaS with score >40 |
| Company-based | Company properties | Account-based marketing (ABM), account segmentation, Company-level workflows | All companies with >200 employees in FinTech |
| Deal-based | Deal properties and pipeline stage | Pipeline reporting, deal-level automation, sales ops workflows | All deals in Negotiation stage open >14 days |
A deal-based list called "Stale deals — no activity 14d" is one of the most valuable admin tools in a Sales Hub setup. When any deal enters this list, a workflow fires — notifying the deal owner and creating a follow-up task. The list is always accurate because it's active. This replaces a weekly manual pipeline review with an automated alert system.
How a real admin builds a complete list ecosystem for a product webinar campaign.
A B2B SaaS company wants to run a quarterly product webinar. Their target audience: decision-makers at SaaS companies who are currently MQL or SQL, have engaged with at least one email in the past 60 days, and are not already customers.
Step 1 — Build the targeting list (Active)
Step 2 — Build post-webinar lists (Static)
| List name | Type | How populated | Used for |
|---|---|---|---|
| [MKT] Webinar — Attended — Q4 | Static | Synced from Zoom via Marketing Events integration | Thank you + next steps sequence |
| [MKT] Webinar — No-show — Q4 | Static | Synced from Zoom (registered, didn't attend) | Recording follow-up sequence |
Step 3 — Connect to workflows
Outcome
The admin built 3 lists total — one for targeting, two for post-event follow-up. Every workflow, email, and report in the campaign references one of these lists. When the next webinar runs next quarter, the targeting list auto-refreshes. The admin only needs to rebuild the static post-event lists from the new Zoom export.
An e-commerce brand's marketing team sent a "We miss you — come back for 20% off" re-engagement campaign to a segment of "inactive contacts." The list was built on last email open date, but had no suppression applied. 180 current customers received the discount offer, costing the company $14,000 in unnecessary discount codes redeemed. Several customers replied angrily asking why they were being treated like lapsed prospects.
Admin solution
- 1.Created [SUPPRESS] Active customers — an active list filtering Lifecycle Stage = Customer AND create date is known. 2,400 contacts auto-populated.
- 2.Added "Is NOT member of [SUPPRESS] Active customers" as a required filter in all campaign targeting lists going forward.
- 3.Built a campaign checklist: before any email send, the marketing team must confirm suppression lists are applied. Admin reviews all sends over 500 contacts before scheduling.
- 4.Created a workflow: when any contact's Lifecycle Stage changes to Customer, they are automatically added to the suppression list within seconds.
Zero suppression errors in the following 8 months. The process of requiring suppression list review before sends also caught two other segmentation errors before they went out — one would have emailed a competitor's CEO.
A SaaS startup's SDR team noticed that new inbound leads were not entering their lead nurture workflow. The workflow had been running fine for two months, but stopped enrolling contacts three weeks ago. The sales manager assumed it was a workflow bug.
Admin investigation
- 1.Checked the workflow enrolment criteria — it was enrolling from a list called "Inbound leads — nurture entry."
- 2.Opened the list — it was a Static list. It had been created from an import 2 months ago with 340 contacts. No new contacts had been added since.
- 3.The original admin who built the list had chosen Static, assuming the criteria-based filter would keep updating. It doesn't — only Active lists do that.
Admin fix
- 1.Created a new Active list with identical filter criteria: Lifecycle = Lead AND Create date is within last 90 days AND Lead status = New.
- 2.Updated the workflow to enrol from the new Active list.
- 3.Manually enrolled the 87 leads who had been missed during the 3-week gap.
- 4.Added a note to the admin handbook: "Workflow enrolment lists must always be Active unless the workflow is a deliberate one-time send."
This mistake costs pipeline every time it happens. A new lead who doesn't enter nurture within 3 days of signing up has a statistically lower conversion rate. Estimated pipeline impact over 3 weeks: 87 leads × 18% conversion × $4,200 ACV = ~$65,000 in at-risk pipeline.
A RevOps consultant is setting up HubSpot from scratch for a 25-person B2B software company. They have 3,400 contacts migrated from Salesforce. No lists exist yet. The company needs to start sending campaigns and trigger workflows within 2 weeks.
Admin's 5-category list framework
| Category | Lists built | Priority |
|---|---|---|
| Suppression (build first) | [SUPPRESS] Unsubscribed · [SUPPRESS] Customers · [SUPPRESS] Competitors · [SUPPRESS] Internal team | Day 1 — before any send |
| Lifecycle segments | [SEG] All leads · [SEG] MQLs · [SEG] SQLs · [SEG] Opportunities · [SEG] Customers · [SEG] Churned | Day 1 — foundation of all reporting |
| Workflow entry points | [AUTO] Lead nurture entry · [AUTO] MQL handoff to sales · [AUTO] Win/loss notification · [AUTO] Customer onboarding | Day 2 — before workflows are built |
| Data quality monitors | [ADMIN] No owner · [ADMIN] No lifecycle stage · [ADMIN] Duplicate emails · [ADMIN] Blank company | Day 3 — then reviewed weekly |
| Campaign targets | Built per campaign as needed, following naming convention | Ongoing |
By building lists in this order — suppression first, lifecycle segments second, workflow triggers third — the consultant ensured no campaigns went out before suppression was in place, and all workflows had valid enrolment lists before they were activated. Zero suppression errors in the first 6 months. The data quality monitor lists caught 340 contacts with no lifecycle stage on day 3, which were corrected before the first campaign went out.
- 1. Using Static when you meant Active — the "dead workflow" mistakeA static list connected to an ongoing workflow stops enrolling new contacts the moment it's created. New leads that should enter the workflow are silently missed. Fix: default to Active for any list connected to a recurring workflow. Only use Static for deliberate one-time sends.
- 2. Wrong AND/OR logic — the "too broad" mistakeBuilding a list with OR instead of AND results in a segment 3–5× larger than intended. "Lifecycle = MQL OR Industry = SaaS" captures every MQL regardless of industry, plus every SaaS contact regardless of lifecycle. Fix: always preview the count before saving and sanity-check whether the number makes sense for your intended audience.
- 3. No suppression lists before first send — the compliance mistakeSending a campaign without suppression applied risks emailing unsubscribed contacts, current customers with prospecting content, or competitors. Fix: build all four core suppression lists before any bulk send goes out. Make suppression review part of every campaign checklist.
- 4. No naming convention — the "what is this list?" mistakeAfter 12 months: 200 lists, half named "Test" or "Campaign" or people's names. Nobody knows which to use. Fix: naming convention on day one. [TEAM] Purpose — Segment — Date. Enforce it on every request.
- 5. Never archiving old lists — the cluttered library mistakeLists from past campaigns, old workflows, and deprecated segments pile up. The list picker becomes unusable. Fix: quarterly list audit. Archive anything unused for 6+ months. Archived lists still exist but are hidden from active views.
- 6. Using "is equal to true" on a single checkbox — the "missing contacts" mistake"Has signed NDA is equal to true" misses contacts where the property was never set (unknown state). Fix: use "is known" to catch all contacts where the checkbox has been set, regardless of whether it's explicitly checked.
- 7. Building targeting lists without suppression filters built in — the "belt and braces" mistakeEven if you apply suppression at send time, building it into the list itself means the list count is accurate and the suppressed contacts never even appear as targets. Fix: add "Is NOT member of [SUPPRESS] Customers" as a filter inside every prospecting targeting list.
Do this in your free HubSpot sandbox account. It takes about 30 minutes and covers the full list workflow.
- Create 4 suppression lists first — [SUPPRESS] Unsubscribed, [SUPPRESS] Customers, [SUPPRESS] Do not contact, [SUPPRESS] Internal team. Use Active lists with the appropriate property filters for each.
- Create a lifecycle segment — Active list named [SEG] All MQLs. Filter: Lifecycle stage = Marketing Qualified Lead. Note the count.
- Create a campaign targeting list — Active list: [MKT] Product demo invite — SaaS leads. Filters: Lifecycle = Lead AND Industry = SaaS AND Is NOT member of [SUPPRESS] Customers. Note the count vs your MQL list.
- Create a data quality monitor — Active list named [ADMIN] Contacts with no lifecycle stage. Filter: Lifecycle stage is unknown. This is your ongoing data quality alert.
- Create a static list — Go to Contacts, filter for contacts created in the last 7 days, manually select 5–10 contacts, and add them to a new Static list named [TEST] Recent imports — static. Notice that this list count will never change even as new contacts are created tomorrow.
- Check the difference — Go back to your Active MQL list and add a test contact with Lifecycle = MQL. Watch them appear in the list within seconds. Change their lifecycle to SQL — watch them disappear. This is live Active list behaviour.
| Concept | Key point |
|---|---|
| What is a list | A saved, named segment of CRM records — contacts, companies, or deals |
| Active list | Updates automatically — contacts join when they match, leave when they don't |
| Static list | Frozen snapshot — membership never changes automatically after creation |
| Type is permanent | Cannot convert Active to Static or vice versa after creation |
| Filter categories | Properties · Behaviours/activities · List membership |
| AND logic | Contact must match all filters — narrows the segment |
| OR logic | Contact must match any filter — widens the segment |
| Filter groups | Within a group = AND logic · Between groups = OR logic |
| Suppression list | Excludes contacts from sends — build before first campaign |
| Core suppressions | Unsubscribed · Customers · Competitors · Do not contact · Bounces |
| Naming convention | [TEAM] Purpose — Segment — Date/Quarter |
| Workflow rule | Always use Active lists for workflow enrolment — Static lists stop updating |
| Preview count | Always check before saving — 0 or unexpectedly large = logic error |
| Object types | Contact · Company · Deal — most lists are contact-based |
| RevOps superpower | Lists as data quality monitors — "Contacts with no owner" = 0 means clean CRM |
Lists are not just a marketing feature — they are the segmentation infrastructure of your entire CRM. Every workflow trigger, every campaign audience, every suppression rule, and every data quality alert runs through lists. A well-governed list library — with clear naming, consistent types, and maintained suppression lists — is the difference between a CRM that runs reliably and one that requires constant firefighting. Build your list library deliberately, document it, and treat it as infrastructure you maintain — not a side task you do once.