Naveed Abbas profile photo
Naveed Abbas
CRM Administrator
HubSpot Admin · Module 8

HubSpot
Workflows

The automation engine of your CRM — the layer where everything connects. Triggers, filters, actions, branches, delays, and the essential workflows every portal must have.

Triggers + filters + actions 7 system rules Branches & delays 8 essential workflows 3 case studies Naming conventions
Foundation · 01
What Is a Workflow?

An automated sequence of actions that executes when conditions are met — the digital employee who never sleeps, never forgets, and scales to any volume.

Core definition

A HubSpot Workflow is a rule-based automation: "When [trigger] happens, and [conditions] are true, execute [actions] in sequence." Once activated, a workflow runs 24/7 without any human input — for every contact that qualifies, forever.

What workflows replace

Manual processWorkflow replacementImpact
Rep manually sets Lifecycle StageAuto-set when lead score hits thresholdInstant, consistent, zero missed updates
Admin emails CS when deal closesWorkflow sends Slack notification instantlySeconds vs hours — no dropped handoffs
Rep creates follow-up tasks each morningTasks auto-created based on contact behaviourNothing falls through the cracks
Marketer sends welcome email manuallySent within seconds of form submissionStrikes while engagement is highest
Nobody re-engages Bad Timing contactsLead Status resets automatically on follow-up dateFree pipeline from previously dead leads
SDR manager checks for uncovered MQLsManager alerted when MQL sits untouched 48hSLA enforcement without manual monitoring
From your SDR background

Every manual task you did repeatedly as an SDR — logging call outcomes, setting follow-up reminders, updating lead statuses after calls — is something a workflow can do automatically. As an admin, you build these systems once and they run for every rep on the team, consistently, forever. That's the scale shift.

Foundation · 02
Workflow Anatomy

Every workflow has exactly three required parts. Understanding each deeply is the foundation of everything else.

Workflow structure — three required parts
Part 1
Enrollment Trigger
The event that starts the process
Form submitted
Property changed
Date reached
List joined
Deal stage changed
Part 2
Enrollment Filters
Who actually qualifies?
Lifecycle = Lead
Industry = SaaS
Score > 40
Is customer? No
Optional but critical
Part 3
Actions
What happens, in order
Set property
Send email
Create task
Notify user
Branch / Delay
PartWhat it doesAnalogy
Enrollment TriggerThe event that causes HubSpot to check whether a record should enter this workflow. Checked continuously.The alarm that rings when the condition is met
Enrollment FiltersAdditional conditions that must be true AFTER the trigger fires for a record to actually enroll. Optional but almost always needed.The bouncer checking the guest list after the alarm rings
ActionsEverything the workflow does after a record enrolls — run in sequence, top to bottom. Includes delays and branches.The step-by-step instructions in the employee handbook
Foundation · 03
Workflow Types

Workflows run on a specific object — and the object type determines what triggers, filters, and actions are available.

TypeActs onCommon use casesFrequency of use
ContactContact recordsLead nurture, MQL promotion, lifecycle updates, welcome emails, lead scoring, re-engagement~80% of all workflows
DealDeal recordsStage automation, close notifications, task creation, deal rotation, forecast updates~10%
TicketTicket recordsSLA escalation, support routing, CSAT survey triggers, category auto-tagging~5%
CompanyCompany recordsAccount lifecycle sync, ABM automation, company scoring~3%
QuoteQuote recordsApproval flows, expiry reminders, signed quote follow-up~1%
ConversationConversation recordsPost-chat follow-up, CSAT surveys, ticket linking~1%
Admin starting point

Master Contact-based workflows first — they represent the vast majority of real-world automation. Once you deeply understand trigger → filter → action logic for contacts, the same mental model applies to every other object type.

Foundation · 04
7 System Rules

How HubSpot processes workflows under the hood — know these rules before building anything.

Rule 01
Workflows process records, not people
The workflow doesn't know or care that there's a real human. It checks whether a record meets criteria and executes actions. Always ask: "What state will this record be in when this action runs?"
Rule 02
Single enrollment by default
A contact enrolls once and never re-enters — even if they re-meet the trigger. You must explicitly enable re-enrollment. This is the most common cause of workflows "stopping working."
Rule 03
Actions execute sequentially
Actions run top-to-bottom, one at a time. A delay pauses execution at that step. A branch splits execution into two simultaneous paths.
Rule 04
Enrolled contacts stay enrolled
Once a contact enters a workflow, property changes don't automatically remove them. You must configure explicit unenrollment conditions if you want contacts pulled out mid-flow.
Rule 05
"Don't overwrite" is your safety net
Every "Set property value" action can be set to not overwrite existing values. Always decide: should this action win over manually-set data, or should existing values be protected?
Rule 06
Not all triggers are real-time
Form submission triggers are near-instant. Date-based triggers run once daily. Property change triggers run within minutes. Know the processing cycle of each trigger type for time-sensitive flows.
Rule 07
When activating — check the eligible contact count first
When you activate a workflow, HubSpot will enroll all existing contacts that currently meet the trigger (unless you disable this). If you're expecting to enroll 50 new leads and see 1,200 eligible, don't activate until you understand why — or configure it to only enroll going forward.
Foundation · 05
Enrollment Modes

Three enrollment configurations — choosing the wrong one is the most common workflow mistake.

Single enrollment
A contact enters once and never re-enters — even if they re-meet the trigger conditions in the future. Default setting.
Use for: Welcome emails (one per customer), lifecycle stage promotions, deal close notifications, one-time onboarding sequences
Re-enrollment
Contact can re-enter every time they re-meet the trigger. Must be explicitly enabled. HubSpot will ask: re-enroll when they re-meet the trigger, or based on a specific condition.
Use for: Date-based reminders (fire every year), lead scoring updates, Bad Timing re-engagement, quarterly re-nurture sequences
Unenrollment conditions
Conditions under which a contact is pulled out mid-workflow — before completing all actions. Configured separately from re-enrollment.
Always set for: Nurture workflows → unenroll when Lifecycle = Customer. Lead sequences → unenroll when demo is booked. Follow-up → unenroll when contact replies.
The most expensive mistake

A lead nurture workflow without an unenrollment condition for Lifecycle Stage = Customer will keep sending "discover why you should try us" emails to people who already bought. Every time. Until someone manually removes them. Set unenrollment conditions on every nurture and sequence workflow before activating.

Building Blocks · 06
Enrollment Triggers

The event that starts every workflow — eight categories, each with a different use case.

Trigger categoryExample triggerBest forSpeed
Contact propertyLifecycle Stage changes to MQLStage-based automation, score thresholdsNear real-time
Form submissionContact submits "Demo Request" formPost-form sequences, lead follow-upInstant (~seconds)
List membershipContact joins "Hot Leads" active listList-based enrollment, segmented flowsMinutes
Date-basedContact's Follow-up Date = todayRenewals, re-engagement, anniversary emailsRuns once daily
Deal propertyDeal Stage changes to Closed WonPost-sale automation, onboarding triggersNear real-time
Email engagementContact opens or clicks a specific emailBehaviour-based branching, hot lead alertsMinutes
Page viewContact visits /pricing URLIntent-based workflows, sales alertsMinutes
Ticket / ConversationNew ticket created in Support inboxSLA workflows, support routingNear real-time
Building Blocks · 07
Workflow Actions

Everything a workflow can do — organised by category. These are your tools.

Set contact property
Write a value to any Contact property. Supports "don't overwrite" protection. The most-used action in any workflow.
Set company/deal property
Update associated Company or Deal properties. Used to sync Lifecycle Stage from Contact to Company.
Send marketing email
Send a specific published marketing email to the enrolled contact. For automated nurture and onboarding sequences.
Send internal notification
Email a HubSpot user or team with information about the contact. Instant, personalised alerts to reps.
Create a task
Generate a to-do assigned to the contact's owner or a specific user. With a due date and priority. The follow-up engine.
Add to / remove from list
Add the contact to a static list, or remove them. Used for exclusion management and post-action tracking.
Enrol in sequence
Start a sales email sequence for the contact, assigned to the contact's owner or a specified rep.
Create a deal/ticket
Generate a new Deal or Ticket record linked to the contact. Automates pipeline creation from lead behaviour.
Rotate owner
Assign the contact to the next available user in a round-robin list. For inbound lead distribution.
Set association
Link a Contact to a Company, Deal, or Ticket. Build CRM relationships automatically from import data.
Webhook / HTTP request
Send data to an external URL. Connects HubSpot to any external system — Slack (custom), Zapier, custom APIs.
Copy / clear property value
Copy a value from one property to another, or clear a property. Used in data normalisation and migration workflows.
Building Blocks · 08
Workflow Branches

If/then logic that makes workflows intelligent — routes contacts down different paths based on their data.

A branch splits the workflow into two or more paths. Each path has its own sequence of actions. After the branch, paths can rejoin or remain separate. Branches can be nested inside other branches.

Branch typeWhat it checksUse case
If/then branchA property value on the enrolled recordRoute by company size, industry, lifecycle stage, score, or any property
Is enrolled in sequence?Whether the contact is in an active Sales sequenceAvoid emailing contacts who are mid-sequence
Test branch (A/B)Random 50/50 splitEmail subject line testing, CTA testing
Weighted branchCustom percentage split (e.g. 70/30)Gradual rollout of a new email template
Time-based branchTime of day or day of weekSend different messages to contacts in different timezones
Branch example — routing by company size
Trigger
Contact submits demo request form
If/Then Branch
Company Employees ≥ 50?
YES → Enterprise path
Notify SDR immediately
Set Lifecycle = SQL
Create task: "Enterprise demo lead"
NO → SMB path
Send self-serve resources
Set Lifecycle = Lead
Enrol in SMB nurture sequence
Building Blocks · 09
Workflow Delays

Pausing execution at a specific point — the timing layer that makes automation feel human.

Delay typeWhat it doesBest for
Fixed delayWait exactly X minutes, hours, days, or weeks before the next actionEmail sequences, follow-up reminders, onboarding step spacing
Until a specific dateWait until a Contact property date (e.g. Contract End Date) is reachedRenewal reminders, anniversary emails, trial expiration
Until a day and timeWait until a specific day of week AND time of dayEnsuring automated actions fire during business hours only
The "until day and time" power move

Instead of sending an automated task creation or notification at 3am on a Sunday, add a "delay until Monday at 9:00am" action. Your automated workflows then feel like deliberate human-timed actions rather than obviously robotic blasts. This small detail dramatically improves rep adoption and response rates from automated outreach.

Building Blocks · 10
Full Workflow Architecture Map

The complete onboarding workflow — showing every node type in a real-world sequence.

Workflow: [Deal] New customer onboarding — Deal Closed Won
Enrollment Trigger
Deal Stage = Closed Won
Filter: Pipeline = New Business (not Renewal)
Action 1
Set Contact: Lifecycle Stage = Customer
Action 2
Set Contact: Customer Date = Today
"Don't overwrite" enabled
Action 3
Send internal notification to CS Slack
Includes deal value, company, contact name
Action 4
Send email: Welcome to [Company]
From: assigned CS owner
Delay
Wait 3 days
Action 5
Create task: Check in — has onboarding started?
Assigned to CS owner. Due in 1 day.
Delay
Wait 7 more days (Day 10 total)
Action 6
Send email: Day 10 onboarding tips
Delay
Wait 14 more days (Day 24 total)
Final Action
Create task: 30-day check-in call
Assigned to CS owner. Due in 6 days.
Admin Setup · 11
The 8 Essential Workflows

Every HubSpot portal needs these 8 workflows. Without them, the CRM runs on manual processes and data degrades.

  • 01Lifecycle Stage: Lead → MQL promotion
    Trigger: Lead Score ≥ threshold AND meets ICP criteria (industry, size, title)
    Set Lifecycle = MQL Set Lead Status = New Set MQL Date = Today Notify assigned SDR Create review task
  • 02Deal close → Customer promotion + onboarding
    Trigger: Associated Deal Stage = Closed Won
    Set Lifecycle = Customer Set Customer Date = Today Notify CS Slack Send welcome email Create onboarding task Enrol in onboarding sequence
  • 03Blank Lifecycle Stage — catchall default
    Trigger: Lifecycle Stage is unknown AND Contact is created
    Set Lifecycle = Lead Set Lead Status = New
  • 04Bad Timing re-engagement
    Trigger: Lead Status = Bad Timing AND Follow-up Date = today (date-based, re-enrollment enabled)
    Set Lead Status = New Clear Follow-up Date Notify owner Create re-engagement task
  • 05Stale MQL alert — SLA enforcement
    Trigger: Lifecycle = MQL AND Lead Status = New AND MQL Date > 2 business days ago
    Notify SDR manager Create urgent task for manager
  • 06Form submission — post-form follow-up
    Trigger: Contact submits [specific form]
    Set Lifecycle = Lead Set Lead Status = New Send confirmation email Notify SDR Create follow-up task
  • 07Deal stage automation
    Trigger: Deal Stage changes to [key stage]
    Create task for deal owner Send internal notification Update contact lifecycle
  • 08Date-stamp properties — funnel velocity data
    Trigger: Lifecycle Stage = MQL (or SQL, or Customer) — separate workflows per stage, re-enrollment OFF
    Set MQL Date = Today (don't overwrite) [Repeat for SQL Date, Customer Date]
Admin Setup · 12
Step-by-Step Setup
Path in HubSpot

Automation → Workflows → Create workflow

  1. Choose the object type — Contact, Company, Deal, Ticket, etc. This determines what triggers, filters, and actions are available.
  2. Choose: Start from scratch or Use a template — For learning: use templates to understand structure. For production: always start from scratch to ensure every condition is deliberate.
  3. Set the enrollment trigger — Click "Set up trigger." Choose the event type and configure the specific condition (property, form, list, date).
  4. Add enrollment filters — After the trigger, narrow who actually enrolls. This is where you add industry = SaaS, company size ≥ 50, lifecycle = Lead, etc.
  5. Configure re-enrollment — In the left panel Settings tab: decide if contacts can re-enroll. Default is off. Enable only if needed.
  6. Add actions — Click the "+" to add actions. Build in logical order: set properties first (data before actions), then send emails, then notify, then create tasks.
  7. Add delays between timed actions — Between sequential emails or tasks, insert delays. Use "until a day and time" for actions that should feel human-timed.
  8. Add branches where paths diverge — Insert an If/Then branch when different contacts should receive different experiences based on their properties.
  9. Set unenrollment conditions — Settings → Unenrollment and suppression. Add: "Contact's Lifecycle Stage is any of Customer, Evangelist" for all nurture workflows.
  10. Name the workflow with your convention[Contact] MQL Promotion — Lead Score 50+. Add a description with purpose, owner, and last-updated date.
  11. Check eligible contact count — Before activating, HubSpot shows how many existing contacts are eligible. Verify this matches your expectations. If wrong, fix the trigger/filter before activating.
  12. Activate — Toggle "Turn on." Decide: enroll existing eligible contacts, or only new contacts going forward? For most workflows: only new contacts going forward.
Admin Setup · 13
Naming & Governance

A workflow library without governance becomes unmaintainable within 6 months. Structure from day one.

The naming convention

[Contact] · [MKT] · MQL Promotion Lead Score 50+
Object prefix
Contact / Deal / Ticket
Team prefix
MKT / SALES / CS / AUTO
Purpose
What this workflow does
Trigger descriptor
What starts it

Examples

Workflow nameWhat it tells you instantly
[Contact] MKT — MQL Promotion — Lead Score 50+Contact workflow, owned by marketing, promotes MQLs when score hits 50
[Deal] SALES — Onboarding Start — Closed WonDeal workflow, sales-owned, starts onboarding on deal close
[Contact] CS — Bad Timing Re-engage — Follow-up DateCS-managed contact workflow, re-engages bad timing leads on their follow-up date
[Contact] AUTO — Lifecycle Default — New ContactAutomated catchall, sets default lifecycle on any new contact without one
[Ticket] CS — SLA Escalation — 2hr No ResponseTicket workflow, escalates when no agent response in 2 hours

Quarterly governance checklist

  • 🔍
    Review all active workflows — any that enrolled 0 contacts in 30 days should be investigated (trigger broken or audience too narrow)
  • 🗄️
    Pause and archive any workflow for a campaign or initiative that has ended — don't leave inactive workflows cluttering the list
  • 📝
    Verify every workflow has a description — purpose, owner, last updated date
  • ⚠️
    Check for conflicting workflows — two workflows both trying to set the same property can create unexpected results
  • 📊
    Review enrollment counts — any workflow with unusually high or low enrollment vs expectation needs investigation
Applied Learning · 14
Real-World Example

How building 8 core workflows transformed a B2B SaaS company's revenue operations in 3 weeks.

The situation

A 20-person B2B SaaS startup had been using HubSpot for 8 months with zero automation. Every lifecycle stage was manually updated. Every handoff (Marketing → Sales, Sales → CS) depended on a Slack message. 40% of deals closed without any post-sale CRM update. The sales manager had no idea which MQLs had been covered. The CS team found out about new customers 2–3 days after close.

Week 1 — Data foundation

  • 01
    Built Workflow 03 (blank lifecycle default) first. Ran overnight — assigned Lifecycle Stage = Lead to 840 contacts that had none. CRM data went from 43% coverage to 97% in 8 hours.
  • 02
    Built Workflow 08 (date-stamp properties). Created MQL Date, SQL Date, Customer Date custom properties. Retroactively stamped Customer Date from deal close dates via import. Now had funnel velocity data for the first time.

Week 2 — Handoff automation

  • 03
    Built Workflow 01 (MQL promotion). Facilitated joint session with CMO and VP Sales to agree on MQL criteria. Workflow activated — first 12 MQLs auto-promoted with SDR notifications within the first 3 hours.
  • 04
    Built Workflow 02 (deal close → customer onboarding). CS team notified within seconds of every new close. First week: 3 deals closed, all 3 onboarding sequences started automatically, CS manager called it "magic."
  • 05
    Built Workflow 05 (stale MQL alert). First alert fired within 6 hours of activation — an MQL had been sitting at "New" for 72 hours. SDR had "missed it in their inbox." Problem identified and fixed.

Week 3 — Pipeline automation + re-engagement

  • 06
    Built Workflow 04 (Bad Timing re-engagement). 47 existing Bad Timing contacts with Follow-up Dates populated. First week: 8 re-engaged automatically, 2 booked calls.
  • 07
    Built Workflow 06 (form submissions). Connected to all 3 active lead-gen forms. Every form submission now triggers lifecycle stage set, SDR notification, and confirmation email within 30 seconds.

30-day outcome

MetricBeforeAfter (30 days)
Contacts with lifecycle stage set43%99%
Avg. time from deal close to CS notification2.8 days45 seconds
MQLs covered within 4 hoursUnknown (no tracking)94%
New customers without an onboarding task40%0%
Revenue from re-engaged Bad Timing contacts$0$24,000 (2 closed in first month)
Admin time spent on manual stage updates~6 hrs/week0 hrs/week
Applied Learning · 15
Three Case Studies
🔄
Case 1 — The workflow that emailed 1,200 people at once
When a workflow activates without checking the eligible count
Data disasterMarketing agency
Problem
Solution
Prevention
The problem

A marketing agency built a "Welcome to our community" workflow with a trigger of "Lifecycle Stage changes to Lead." They intended this to fire for all new leads going forward. But when they clicked Activate, they missed HubSpot's warning — there were 1,247 existing contacts who currently had Lifecycle Stage = Lead. HubSpot enrolled all of them immediately. 1,247 people received a "Welcome! So glad you just joined us!" email simultaneously. Many were clients of 2+ years. Several called the account manager confused. The unsubscribe rate for that email was 14%.

  • 1.
    Added a date-based enrollment filter: Contact Create Date is after [today's date]. This immediately excluded all existing contacts — only new contacts going forward would enroll.
  • 2.
    Added an unenrollment condition: Lifecycle Stage = Customer or Evangelist. Any existing customer who somehow meets the trigger won't receive the welcome email.
  • 3.
    Sent an apology email to the 1,247 contacts — personalised to acknowledge the error.
Prevention rule

Before activating any workflow: look at the eligible contact count in the bottom left of the workflow editor. If it shows more contacts than expected, add a date filter or pause and investigate. Always disable "Enroll existing contacts that currently meet the trigger" unless you explicitly want to process historical records. This check takes 10 seconds. The cleanup takes 10 hours.

⚙️
Case 2 — The monolithic workflow nobody could debug
When one workflow tries to do everything
ArchitectureB2B SaaS
Problem
Solution
Lesson
The problem

A SaaS company's previous admin built one massive "Lead Management" workflow with 47 actions: MQL promotion, SDR notification, lead nurture emails (8 of them), deal creation for high-score leads, Slack integration, task creation, lifecycle stage updates, AND a 14-day re-engagement sequence. When a contact wasn't receiving nurture emails correctly, nobody could figure out where the failure was. The workflow had been edited 11 times by 3 different people. Actions at step 31 referenced a property that was being set by step 44 (which ran after step 31). It had become unmaintainable.

  • 1.
    Paused the monolithic workflow and rebuilt as 7 separate, named workflows: MQL Promotion, SDR Notification, Welcome Email, 14-Day Nurture Sequence, High Score Deal Creation, Slack Integration, Re-engagement.
  • 2.
    Each workflow had one job. Maximum 8–10 actions. Each had a clear name and description.
  • 3.
    The troubleshooting that had taken 4 hours in the monolithic workflow now took 8 minutes because each workflow's purpose and scope was obvious.
Architecture lesson

One workflow, one purpose. A workflow should do one thing clearly. If you find yourself saying "this workflow handles X and also Y and also Z," stop and split it. The test: can you explain this workflow's entire purpose in one sentence? If not, it's doing too much. Small, focused, named workflows are the hallmark of a mature HubSpot admin.

🎯
Case 3 — Building a multi-stage lead nurture from scratch
Systematic automation that replaced 20 hours of manual outreach per week
Lead nurtureAgency
Setup
Execution
Outcome

A digital agency had a marketing team generating 150 leads/month from content. The leads were being manually emailed by one marketing coordinator — 20+ hours/week. The coordinator could only get to about 40% of leads in the first week. The other 60% received their first email 1–2 weeks late, by which point engagement was minimal.

  • 1.
    Enrollment trigger: Lifecycle Stage = Lead AND Lead Source = Organic Search or Social. Filter: Not a current customer.
  • 2.
    Action 1: Set Lead Status = New. Action 2: Set Lead Date = Today. Action 3: Send Email 1 — "The guide you requested + 3 quick tips." Sent immediately on enrollment.
  • 3.
    Day 3 delay → Branch: Did they open Email 1? If yes: send Email 2 — case study. If no: send alternate Email 2 — different subject line angle.
  • 4.
    Day 7 delay → Branch: Did they click any email? If yes: enrol in SDR sequence (warm lead). If no: delay 7 more days, then send re-engagement email with survey link.
  • 5.
    Unenrollment: Lifecycle Stage = MQL or beyond (they've been promoted). OR Email opt-out is true. OR Contact submits any form (they self-qualified).
RevOps outcome

100% of leads now received Email 1 within 60 seconds of becoming a Lead — up from 40% in the first week. The marketing coordinator's 20 hours/week of manual emailing dropped to 2 hours/week (reviewing results and making content updates). Lead-to-MQL conversion rate increased from 8% to 17% — because timely, behaviour-branched emails significantly outperformed a manually-managed flat sequence. The coordinator's time was reinvested into content creation, which increased organic lead volume by 23% over the same quarter.

Applied Learning · 16
Common Admin Mistakes
  • 01 — No unenrollment conditions on nurture workflows
    Every lead nurture workflow must unenroll contacts when Lifecycle = Customer. Without this, paying customers receive "discover why you should try us" emails indefinitely. Add unenrollment conditions before activating any outbound sequence.
  • 02 — Not enabling re-enrollment when the trigger can fire multiple times
    A lead scoring workflow that only runs once misses contacts who later hit a higher threshold. Check: should this workflow run once per contact, or every time the trigger condition is met? Wrong setting = workflow appears to "stop working" for returning contacts.
  • 03 — Activating without checking eligible contact count
    HubSpot shows how many existing contacts will immediately enroll. If this number is wildly different from your expectation — stop. Fix the trigger or add a date filter before activating. Activating with too many eligible contacts can send thousands of unexpected emails in seconds.
  • 04 — Overwriting manually-set properties without "don't overwrite"
    A workflow setting Lead Status = New every time a contact reaches MQL erases a rep's manually-set "In Progress" or "Bad Timing" status silently. For properties reps also manage, always enable "Don't overwrite existing values."
  • 05 — Building monolithic workflows with too many actions
    A 45-action workflow that handles everything is impossible to debug, maintain, or hand off to another admin. Split into focused, single-purpose workflows. One workflow, one job.
  • 06 — No naming convention or description
    After 6 months: 80 workflows named "Test," "Copy of," "New MQL flow v3." Impossible to audit. Future admins spend hours reverse-engineering what each does. Enforce naming and descriptions from day one.
  • 07 — Testing in production
    Never build and activate a new workflow directly in your live portal. Test in sandbox. Verify triggers, filters, actions, and re-enrollment behaviour with test contacts. Then rebuild in production. This is especially critical for any workflow that sends emails.
Applied Learning · 17
Admin Best Practices
  • 📋
    One workflow, one purpose. If you can't explain a workflow in one sentence, it's doing too much. Split it. Small, focused, named workflows are infinitely easier to build, debug, maintain, and hand off.
  • 🏷️
    Naming convention on every workflow. [Object] [Team] Purpose — Trigger. Non-negotiable. Enforce it for every workflow in every portal you manage.
  • 📝
    Description field is documentation. Purpose, owner, last-updated date, any gotchas. Future-you will thank present-you every single time.
  • 🧪
    Test in sandbox before production. Always. No exceptions for workflows that send emails, set properties, or create records.
  • 🔢
    Check eligible count before activating. The 10-second check that prevents hour-long cleanup sessions. If the count is unexpected, investigate before proceeding.
  • 🚪
    Set unenrollment conditions on every nurture flow. Lifecycle = Customer is the minimum. Add: email opted out, form submission (self-qualified), sequence enrolled (already in sales outreach).
  • 📅
    Use "delay until day and time" for human-feeling automation. Actions that fire at 3am on Sunday erode trust in the system. Delays until Monday 9am make automation feel intentional.
  • 🗓️
    Quarterly workflow audit. Review all active workflows. Pause/archive inactive ones. Check enrollment counts. Look for conflicts. Governance is how you maintain a healthy system as it grows.
Applied Learning · 18
Practice Exercise

Do this in your free HubSpot sandbox — approximately 60 minutes across three workflows.

Workflow 1 — Blank lifecycle catchall (10 min)

  1. Automation → Workflows → Create workflow → Contact-based → Start from scratch
  2. Trigger: Contact property → Lifecycle Stage → is unknown
  3. Action: Set contact property → Lifecycle Stage → Lead. Enable "Don't overwrite."
  4. Name it: [Contact] AUTO — Lifecycle Default — New Contact. Add description.
  5. Before activating: check eligible count. Activate with "Enroll existing contacts" ON — you want all blank-stage contacts to get a stage.

Workflow 2 — Form submission follow-up (20 min)

  1. Create a new Contact-based workflow. Start from scratch.
  2. Trigger: Marketing → Form submission → any form you created earlier.
  3. Enrollment filter: Lifecycle Stage is not equal to Customer (don't enroll existing customers).
  4. Actions: (1) Set Lifecycle Stage = Lead. (2) Set Lead Status = New. (3) Send internal email notification to yourself. (4) Create task: "Follow up with {{contact.firstname}} — form submitted today."
  5. Unenrollment: Lifecycle Stage = Customer.
  6. Name it. Add description. Activate with "Don't enroll existing" option.
  7. Submit your test form from the previous module. Check: did the Contact get the stage? Did you receive the notification? Was a task created?

Workflow 3 — Branching based on company size (30 min)

  1. Create a new Contact-based workflow. Trigger: Lifecycle Stage changes to Lead.
  2. Filter: Lead Status = New (only newly created leads, not existing ones).
  3. Action: Delay until next business day at 9:00am.
  4. Add an If/Then branch: condition = Company Employees ≥ 50.
  5. YES path: Set Lead Status = In Progress. Create task: "Enterprise lead — call today."
  6. NO path: Set Lead Status = New. Send email: a self-serve resource email (you can use any published email).
  7. Unenrollment: Lifecycle Stage is any of Customer, Evangelist.
  8. Name it. Add description. Activate for new contacts only.
  9. Create two test contacts manually: one with Employees = 100, one with Employees = 10. Watch them flow through different paths.
Applied Learning · 19
Interview Questions
"Walk me through how you'd build a lead nurture workflow for a B2B SaaS company."
First I'd define the audience: Contacts with Lifecycle Stage = Lead who haven't had activity in the last 7 days. The enrollment trigger would be joining an active list matching those criteria. The filter would add: Lifecycle Stage is still Lead, not MQL or beyond, and Email opted out is false. Then the action sequence: Day 0 — send the first educational email immediately. Day 3 — branch: did they open the email? If yes, send a case study. If no, send a different subject line angle. Day 7 — another branch: did they click anything? If yes, enrol in an SDR outreach sequence. If no, wait 7 more days and send a re-engagement email with a survey link. Day 21 — if still no engagement, create a task for the rep to manually review. Unenrollment conditions: Lifecycle Stage moves to MQL or above, contact submits any form, or contact is added to a suppression list. I'd test the entire flow in sandbox first, check the eligible count before activating in production, and document the purpose and owner in the description field.
"What is the difference between a workflow trigger and enrollment filters?"
The trigger is the event that initiates the enrollment check — a property changes, a form is submitted, a date is reached. It's what fires the evaluation. The enrollment filter is a secondary qualification layer — after the trigger fires, HubSpot checks whether the record also meets these additional AND conditions before actually enrolling them. So I might have a trigger of "Lifecycle Stage changes to MQL" — that covers all MQL promotions. But my enrollment filter says "Industry = SaaS AND Company Employees ≥ 50" — so only SaaS MQLs with 50+ employees actually enter this workflow. Other MQLs trigger it but don't pass the filter. This separation gives you flexible, reusable triggers with precise audience control without having to build separate workflows for every scenario.
"How do you prevent a welcome email workflow from firing for 1,200 existing contacts when you first activate it?"
HubSpot asks at activation whether to enroll existing contacts that currently meet the trigger. The first line of defence is simply unchecking "Enroll existing contacts who currently meet the trigger" — this means only new contacts going forward will enroll. For additional safety, I'd add an enrollment filter with a date condition: Contact Create Date is after today's date. This structurally prevents any historical contact from enrolling even if the re-enrollment setting changes later. For welcome emails specifically, I'd also add a "Has received welcome email" custom checkbox property as a filter — contacts with that checked are excluded. This creates a permanent record of who received the email that persists even if the workflow is modified later.
"What does 'Don't overwrite existing values' do on a Set Property action, and when would you use it?"
When you set a property value in a workflow, HubSpot by default writes the new value over whatever was previously in that property — even if it was set manually by a rep. "Don't overwrite" changes this behaviour so the action only writes a value if the property is currently empty — it skips the action entirely if the property already has any value. I use it whenever the property is also managed by humans. For example, Lead Status: a workflow might set it to New when an MQL is created, but I don't want that to overwrite a rep who already manually set it to In Progress. So "don't overwrite" is enabled. Same for date-stamp properties like MQL Date — once set, I never want a re-enrollment to clear it and reset it to today. The general rule: if a property might be legitimately set by a rep or another system, protect it with don't overwrite.
Applied Learning · 20
Summary Cheatsheet
ConceptKey point
What is a workflowAutomated rule: when [trigger] + [filters] → execute [actions]. Runs 24/7 without human input.
Three required partsEnrollment Trigger + Enrollment Filters + Actions
TriggerThe event that starts the enrollment check (property change, form submit, date, list join)
FilterSecondary AND conditions — narrows who actually enrolls after the trigger fires
ActionsExecute sequentially, top to bottom. Set property, send email, create task, notify, branch, delay.
Single enrollment (default)Contact enters once, never re-enters — even if trigger fires again
Re-enrollmentMust be explicitly enabled — allows re-entry when trigger conditions are met again
UnenrollmentConditions to pull contacts out mid-workflow — ALWAYS set on nurture workflows: Lifecycle = Customer
BranchIf/then split — routes contacts down different paths based on conditions
DelayPauses execution — fixed time, until a date, or until a specific day/time (use for business hours)
"Don't overwrite"Protects existing property values from being overwritten — use for rep-managed and date-stamp properties
Object typesContact (~80%), Deal, Ticket, Company, Quote, Conversation
Naming convention[Object] [Team] Purpose — Trigger descriptor
Must-have descriptionPurpose · Owner · Last updated date — in every workflow, no exceptions
Eligible count checkAlways check before activating — if count is unexpected, investigate before proceeding
Architecture ruleOne workflow, one purpose. Split if you can't explain it in one sentence.
8 essential workflowsMQL promotion · Deal close onboarding · Blank stage catchall · Bad timing re-engage · Stale MQL alert · Form follow-up · Deal stage automation · Date-stamp properties
Admin interview gold"I build small, focused, named workflows — one purpose per workflow. Always test in sandbox. Always check eligible count. Always set unenrollment on nurture flows."
RevOps mindset on workflows

Workflows are the operational nervous system of your CRM. Every data quality standard, every inter-team handoff, every SLA — enforced through workflows. They do three things that define a mature RevOps practice: they make data quality automatic (not aspirational), they make handoffs instant and reliable (not dependent on humans remembering), and they make your CRM self-documenting (every action logged, every change traceable). A HubSpot portal with well-designed workflows runs itself at the data layer. The admin's job shifts from manual execution to system design, monitoring, and refinement. That is the transition from admin to RevOps practitioner — and workflows are where it happens.