Asset 20 8 2
Does AI recommend your business? Run the free check →

Join 15,000 business owners, marketers and entrepreneurs. The Sunday newsletter you'll be annoyed only arrives once a week.

The Resource Library

The HubSpot Workflow Recipe Swipe File

18 copy-the-logic workflows for lead routing, nurture, and deal hygiene, with every enrollment trigger spelled out.

Most HubSpot portals are set up but not working. Leads sit uncontacted. Deals go cold. Follow-up depends on whoever remembers to do it. These 18 workflows fix the most common gaps in a real business HubSpot setup, from the moment a lead fills in a form to the moment a deal goes quiet for too long. Copy the logic, swap in your property names and timings, and switch them on.

What is inside
  • Lead Routing Workflows
  • Lead Nurture Workflows
  • Deal Pipeline Workflows
  • Deal Hygiene and Pipeline Health Workflows
Section 1

Section 1: Lead Routing Workflows

These workflows fire the moment a new lead comes in. Their job is to get the right lead to the right person instantly, with no manual sorting required.

1.1

Recipe 1: New Form Submission to Owner Assignment

ENROLLMENT TRIGGER: Contact submits any form on your website (or a specific form, if you want to scope it).

IF/THEN LOGIC:
- If "Company Size" = 1 to 10 employees → Set Contact Owner = [Name, e.g. your junior sales rep or yourself]
- If "Company Size" = 11 to 50 employees → Set Contact Owner = [Name, e.g. mid-market rep]
- If "Company Size" = 51 or more employees → Set Contact Owner = [Name, e.g. senior rep or you]
- If "Company Size" is unknown → Set Contact Owner = [Default owner, e.g. you]

ACTION after assignment:
- Send internal email notification to assigned owner: Subject line: "New lead assigned: [Contact First Name] from [Company Name]" Body: "[First Name] just filled in [Form Name]. Their email is [Email]. Go here to see their record: [link to CRM record]."
- Set Contact Property "Lead Source Detail" = the form name
- Set Contact Lifecycle Stage = Lead

WHY THIS WORKS: Leads go cold in minutes. Routing by company size means your best-fit leads get your best-fit rep, automatically.
1.2

Recipe 2: High-Intent Page Visit to Hot Lead Alert

ENROLLMENT TRIGGER: Contact views your pricing page, services page, or book-a-call page (set up via HubSpot tracking code, page view trigger).

FILTER: Contact Lifecycle Stage is NOT "Customer" (stops existing customers triggering sales alerts).

ACTIONS:
- Set Contact Property "Hot Lead Flag" = Yes
- Send internal Slack notification or email to owner: "[First Name] [Last Name] just visited your pricing/services page. They are in your CRM as [Lifecycle Stage]. View their record here: [link]."
- If Contact Owner is not set: assign to default owner
- Add contact to a "Hot Leads" static list for easy weekly review

DELAY: None. This fires immediately.

WHY THIS WORKS: Most HubSpot users never know when a warm lead revisits their site. This workflow turns invisible intent signals into instant sales triggers.
1.3

Recipe 3: Lead Score Threshold to Sales Task

PREREQUISITE: You have HubSpot Lead Scoring set up with at least 5 scoring criteria.

ENROLLMENT TRIGGER: Contact Property "HubSpot Score" is greater than or equal to [your threshold, e.g. 40 points].

RE-ENROLLMENT: Off (fires once per contact).

ACTIONS:
- Create a task for the Contact Owner: Task Title: "High-score lead ready for outreach: [First Name] [Last Name]" Task Body: "This contact just crossed your lead score threshold. Their score is [HubSpot Score]. Check their activity timeline before reaching out." Due date: 0 days from enrollment (today).
- Send internal email to owner with the same summary
- Set Contact Property "Sales Ready" = Yes

WHY THIS WORKS: Lead scoring is useless if no one acts on it. This workflow closes the gap between scoring and outreach.
1.4

Recipe 4: Lead Source Tagging on Form Submission

ENROLLMENT TRIGGER: Contact is created (any source).

IF/THEN LOGIC:
- If "Original Source" = Organic Search → Set Contact Property "Lead Source Category" = SEO
- If "Original Source" = Social Media → Set Contact Property "Lead Source Category" = Social
- If "Original Source" = Email Marketing → Set Contact Property "Lead Source Category" = Email
- If "Original Source" = Paid Search → Set Contact Property "Lead Source Category" = Paid
- If "Original Source" = Direct Traffic → Set Contact Property "Lead Source Category" = Direct
- If none of the above → Set "Lead Source Category" = Other

ACTION: Set Contact Property "First Seen Date" = today (if not already populated).

WHY THIS WORKS: HubSpot's native source data is granular. This workflow maps it to simpler buckets you can filter and report on without a data analyst.
Section 2

Section 2: Lead Nurture Workflows

These workflows run in the background, warming up contacts who are not ready to buy yet. They keep your name in front of the right people without any manual effort.

2.1

Recipe 5: New Lead Welcome Sequence (3 emails over 7 days)

ENROLLMENT TRIGGER: Contact Property "Lifecycle Stage" becomes "Lead" for the first time.

SUPPRESSION: Enrolled in any active deal stage (do not nurture contacts already in conversation).

EMAIL 1 (Day 0, immediate):
Subject: Your [lead magnet name] is here
Body: "Hi [First Name], here is the [lead magnet name] you asked for: [link]. One thing I would add before you dive in: [one specific tip that is not in the resource]. If you have a question after reading it, just reply here. I read every reply. Lilach"

EMAIL 2 (Day 3):
Subject: The thing most people miss in [topic area]
Body: "Hi [First Name], a quick follow-up. Most people who download [lead magnet name] get stuck at [specific sticking point]. Here is how I would approach that: [2 to 3 short, specific sentences]. If that is the bit you are working on right now, [link to relevant resource or book-a-call page]. Lilach"

EMAIL 3 (Day 7):
Subject: Worth a look if you have not already
Body: "Hi [First Name], last one from me for now. If you are thinking about [goal the lead magnet addresses], this [case study / post / resource] is the most useful thing I have: [link]. It shows [specific outcome in 5 to 8 words]. If you want to talk through how it applies to your business, you can book 20 minutes here: [link]. Lilach"

GOAL: If contact books a call or replies, unenroll them from this sequence.
2.2

Recipe 6: Long-Term Nurture for Cold Leads (Monthly Touchpoint)

ENROLLMENT TRIGGER: Contact Property "Lifecycle Stage" = Lead AND "Last Activity Date" is more than 30 days ago AND "Sales Ready" = No.

RE-ENROLLMENT: On. Re-enroll monthly if contact still meets criteria.

EMAIL (Monthly, one send per cycle):
Subject line options (rotate monthly):
- "One thing I found useful this month"
- "Still relevant if you are thinking about [topic]"
- "Quick one from me"

Body template:
"Hi [First Name], not a sales email. I came across [specific resource, post, or tool] this week and thought of you because [one-line reason specific to what they downloaded or expressed interest in]. Worth 3 minutes if [problem or goal is still relevant to them]. [Link]. As always, if things have moved on and you would like to talk, you can book time here: [link]. Lilach"

ACTION after send: Set Contact Property "Last Nurture Email Date" = today.

EXIT CRITERIA: Contact books a call, replies, or Lifecycle Stage changes to Marketing Qualified Lead or beyond.
2.3

Recipe 7: Free Resource to Consultation Offer (5-Day Conversion Sequence)

ENROLLMENT TRIGGER: Contact downloads a specific high-intent resource (e.g., a workflow guide, audit checklist, or calculator), AND has NOT previously booked a call.

EMAIL 1 (Day 0):
Subject: Your [resource name] is inside
Body: "Hi [First Name], here it is: [link]. The section most people find most useful is [specific section title or tip number]. That is a good place to start. Lilach"

EMAIL 2 (Day 2):
Subject: The part that usually takes the longest
Body: "Hi [First Name], quick follow-up. When I work with [type of business the reader runs], the part of [topic area] that takes longest is [specific bottleneck]. What usually helps is [one specific, actionable fix in 2 to 3 sentences]. Let me know if that is where you are stuck. Lilach"

EMAIL 3 (Day 4):
Subject: Worth talking through?
Body: "Hi [First Name], I offer a free 20-minute call for people working through [topic area] who want a second pair of eyes on their setup. No pitch. Just useful. If that is useful right now: [booking link]. If not, no problem at all. Lilach"

EMAIL 4 (Day 5, only if contact has not booked):
Subject: Last one from me
Body: "Hi [First Name], keeping this short. If you want to talk about [topic area], my calendar is open: [link]. If the timing is not right, no problem. I will keep sending useful things your way. Lilach"

GOAL: Contact books a call. On goal completion, unenroll and set Lifecycle Stage = Marketing Qualified Lead.
2.4

Recipe 8: Re-engagement Workflow for Unengaged Contacts

ENROLLMENT TRIGGER: Contact Property "Last Marketing Email Open Date" is more than 90 days ago AND Contact Property "Email Deliverable" = true AND Lifecycle Stage is NOT "Customer".

EMAIL 1 (Day 0):
Subject: Still want to hear from me?
Body: "Hi [First Name], quick one. I noticed you have not opened my emails in a while. That is fine. I just want to make sure I am sending you things that are actually useful, not cluttering your inbox. If you want to stay on the list and hear from me occasionally, no action needed. If you would rather I stop, you can unsubscribe below. Either way, no hard feelings. Lilach"

WAIT: 7 days.

IF: Contact opens Email 1 or clicks any link → Tag as re-engaged, move back to active nurture list, exit workflow.
IF: Contact does not open → Send Email 2.

EMAIL 2 (Day 7, non-openers only):
Subject: Last email from me (for now)
Body: "Hi [First Name], one more from me, then I will give you some space. If you ever want to talk about [primary topic area], you know where I am: [link]. Unsubscribe below if you would rather not hear from me. Lilach"

ACTION after Email 2: Set Contact Property "Engagement Status" = Cold. Suppress from future marketing sends for 60 days.

WHY THIS WORKS: Protecting your email deliverability matters more than keeping a big list. Pruning cold contacts keeps your open rates healthy.
Section 3

Section 3: Deal Pipeline Workflows

These workflows keep your deal pipeline clean and moving. They create tasks, send reminders, and flag stalled deals before they go cold quietly.

3.1

Recipe 9: New Deal Created to First Follow-up Task

ENROLLMENT TRIGGER: Deal is created in any pipeline.

ACTIONS:
- Create a task on the associated contact: Task Title: "First follow-up: [Deal Name]" Task Body: "New deal created. Review the contact record, check their recent activity, and send your first follow-up within 24 hours." Due: 1 day from enrollment. Assign to: Deal Owner.
- Send internal email to Deal Owner: Subject: "New deal created: [Deal Name]" Body: "A new deal has been created in your pipeline. Deal: [Deal Name]. Stage: [Deal Stage]. Associated contact: [Contact First Name] [Contact Last Name] ([Contact Email]). Value: [Deal Amount]. View deal: [link to deal record]."
- Set Deal Property "Days in Stage" counter = 0 (if you have this custom property set up)

WHY THIS WORKS: Deals created without a next action attached rarely close. This workflow makes the next action automatic.
3.2

Recipe 10: Stalled Deal Alert (No Activity for X Days)

ENROLLMENT TRIGGER: Deal Property "Last Activity Date" is more than [your threshold, e.g. 7] days ago AND Deal Stage is NOT "Closed Won" AND Deal Stage is NOT "Closed Lost".

RE-ENROLLMENT: On (re-fires every 7 days if deal is still stalled).

ACTIONS:
- Create a task on the deal: Task Title: "STALLED: [Deal Name] has had no activity for [X] days" Task Body: "Check in with this contact. Last activity: [Last Activity Date]. Current stage: [Deal Stage]. Decide: advance, pause, or close lost." Due: today. Assign to: Deal Owner.
- Send internal email to Deal Owner: Subject: "Deal stalling: [Deal Name]" Body: "[Deal Name] has had no logged activity for [X] days. It is currently in [Deal Stage]. This may need a nudge or a decision on whether to close it. View the deal here: [link]."

WHY THIS WORKS: Most pipelines have zombie deals that inflate forecast numbers. This workflow surfaces them before they become a reporting problem.
3.3

Recipe 11: Deal Stage Change to Automatic Next Action

ENROLLMENT TRIGGER: Deal Property "Deal Stage" changes to [specific stage, e.g. "Proposal Sent"].

ACTIONS:
- Create a task on the deal: Task Title: "Follow up on proposal: [Deal Name]" Task Body: "Proposal was sent on [today's date]. Follow up in 3 days if you have not heard back. Check your notes for any specific concerns they raised before the proposal went out." Due: 3 days from enrollment. Assign to: Deal Owner.
- Send automated email to associated contact (optional, if you send a standard follow-up):
Subject: "Following up: [Your company name] proposal for [Contact Company]"
Body: "Hi [First Name], just following up to make sure the proposal landed okay. Happy to answer any questions or talk through anything before you decide. You can reply here or book time at [link]. [Your name]"
- Log a note on the deal: "Proposal follow-up task created automatically on [date]."

REPEAT THIS RECIPE for each key stage change in your pipeline (e.g., "Discovery Call Booked," "Contract Sent," "Negotiation").

WHY THIS WORKS: Each stage in your pipeline has a natural next action. This workflow makes that action impossible to miss.
3.4

Recipe 12: Closed Won Deal to Onboarding Kickoff

ENROLLMENT TRIGGER: Deal Property "Deal Stage" = "Closed Won".

ACTIONS (fire immediately):
- Set Contact Lifecycle Stage = Customer
- Set Contact Property "Customer Since Date" = today
- Send internal email to Deal Owner and any onboarding team members: Subject: "New client: [Contact First Name] [Contact Last Name] at [Company Name]" Body: "Great news. [Deal Name] is closed. Start date: [Close Date]. Deal value: [Deal Amount]. Associated contact: [First Name] [Last Name] ([Email]). Next step: send the onboarding welcome email and schedule the kickoff call. View deal: [link]."
- Create a task: "Send onboarding welcome email to [First Name] [Last Name]" Due: today.
- WAIT: 1 hour
- Send automated welcome email to contact:
Subject: "Welcome, [First Name]. Here is what happens next."
Body: "Hi [First Name], really glad you are on board. Here is what the next few days look like: [3-step onboarding summary in plain language]. My first priority is [specific first deliverable or action]. You will hear from me by [specific day]. If anything comes up before then, reply here. [Your name]"

WHY THIS WORKS: The window between closing and onboarding is where buyer's remorse sets in. A fast, specific welcome email closes that gap.
3.5

Recipe 13: Closed Lost Deal to Win-Back Sequence (60-Day Delay)

ENROLLMENT TRIGGER: Deal Property "Deal Stage" = "Closed Lost".

WAIT: 60 days.

CHECK: If Contact Lifecycle Stage is now "Customer" (they came back another way), exit workflow.

EMAIL 1 (Day 60):
Subject: Quick check-in, [First Name]
Body: "Hi [First Name], it has been a couple of months since we last spoke. I wanted to check in to see how things are going with [the problem or goal they had when you were in discussion]. No agenda from my end. Just genuinely curious whether things have moved on. If the timing is better now and you want to pick up the conversation, I am here. Lilach"

WAIT: 21 days.

IF: Contact replies or books a call → Create a new deal, set stage to "Re-engaged", exit workflow.
IF: No response → Set Contact Property "Win-Back Attempted" = Yes and exit.

WHY THIS WORKS: A large percentage of closed-lost deals eventually do buy, just from someone else. A 60-day check-in is not pushy. It is just good timing.
Section 4

Section 4: Deal Hygiene and Pipeline Health Workflows

These workflows keep your CRM data clean without you having to audit it manually. They run quietly in the background and flag problems before they corrupt your reporting.

4.1

Recipe 14: Auto-Close Deals with No Activity After 30 Days

ENROLLMENT TRIGGER: Deal Property "Last Activity Date" is more than 30 days ago AND Deal Stage is NOT "Closed Won" AND Deal Stage is NOT "Closed Lost" AND Deal Amount is less than [your low-value threshold, e.g. 1000].

NOTE: Only auto-close low-value deals. High-value deals should always require a manual decision.

ACTIONS:
- Send internal email to Deal Owner: Subject: "Deal auto-closing: [Deal Name]" Body: "[Deal Name] has had no activity for 30 days and is below your minimum deal threshold. It will be moved to Closed Lost automatically. If this is wrong, update the deal stage or log an activity within 48 hours to stop this."
- WAIT: 48 hours
- IF: Last Activity Date is still more than 30 days ago → Set Deal Stage = Closed Lost. Set Close Date = today. Set Deal Property "Closed Lost Reason" = "No activity, auto-closed".

WHY THIS WORKS: Pipeline bloat is one of the most common CRM problems. Phantom deals make your forecast meaningless. This workflow keeps the pipeline honest.
4.2

Recipe 15: Duplicate Contact Flag

NOTE: HubSpot does not natively detect duplicates via workflow, but you can flag likely duplicates with smart criteria and manual review tasks.

ENROLLMENT TRIGGER: Contact is created AND Contact Property "Company Name" is known AND Contact Property "Email Domain" matches an existing contact's email domain (set this as a list filter, not a workflow trigger).

PRACTICAL APPROACH:
- Create a static list: "Potential Duplicate Contacts" filtered by: Email Domain = [known company domains in your target list] AND Date of Contact Creation = last 7 days.
- Set up a weekly recurring task (manual or via a workflow on a fixed date trigger): Task Title: "Weekly duplicate review: check Potential Duplicates list" Task Body: "Review the Potential Duplicates list in HubSpot and merge any true duplicates before the weekly pipeline review."

WHY THIS WORKS: Duplicate contacts corrupt attribution, split deal history, and cause embarrassing double outreach. A weekly 10-minute review is cheaper than the downstream problems.
4.3

Recipe 16: Missing Deal Property Alert

ENROLLMENT TRIGGER: Deal is created AND Deal Property "Deal Amount" is unknown OR Deal Property "Expected Close Date" is unknown.

ACTIONS:
- Send internal email to Deal Owner: Subject: "Incomplete deal record: [Deal Name]" Body: "[Deal Name] was just created but is missing key information. Missing: [list the specific properties that are blank]. A deal without a value and close date cannot be included in your forecast. Please update the record here: [link to deal]."
- Create a task: "Complete the deal record for [Deal Name]" Due: today. Assign to: Deal Owner.
- WAIT: 48 hours
- IF: Properties are still blank → Send a second internal reminder to owner and their manager (if applicable).

WHY THIS WORKS: Forecast accuracy depends on clean deal records. This workflow stops incomplete deals from entering the pipeline undetected.
4.4

Recipe 17: Contact Property Data Enrichment Request

ENROLLMENT TRIGGER: Contact Lifecycle Stage becomes "Marketing Qualified Lead" AND Contact Property "Company Name" is unknown OR "Job Title" is unknown.

ACTIONS:
- Create a task for Contact Owner: Task Title: "Enrich contact record: [First Name] [Last Name]" Task Body: "This contact has just hit MQL status but is missing company or job title information. Before reaching out, update their record. Check their LinkedIn profile or email signature for the missing details. View contact: [link]."
- Set Contact Property "Enrichment Needed" = Yes

WHY THIS WORKS: Reaching out to an MQL without knowing what company they work at or what they do is a fast way to give a bad first impression. This workflow flags the gap before outreach happens.
4.5

Recipe 18: Post-Purchase Feedback and Upsell Trigger

ENROLLMENT TRIGGER: Contact Lifecycle Stage = Customer AND Contact Property "Customer Since Date" is exactly 30 days ago.

EMAIL 1 (Day 30):
Subject: Quick check-in, [First Name]
Body: "Hi [First Name], it has been 30 days. I wanted to check in properly. How is [the service or deliverable they bought] landing for you so far? Anything that has surprised you, or anything you want to dig into further? Reply here with whatever is most on your mind. Lilach"

WAIT: 5 days.

IF: Contact replies → Log the reply in the contact record, create a task: "Client replied to 30-day check-in. Review and respond. Consider whether upsell conversation is appropriate." Assign to: Contact Owner. Exit workflow.

IF: Contact does not reply → Send Email 2.

EMAIL 2 (Day 35, non-replies only):
Subject: A quick one on what is next
Body: "Hi [First Name], I know life gets busy. Just wanted to make sure things are on track from your end. If you want to talk through what is next after [current engagement], I have a few ideas specific to where you are. Happy to run through them on a quick call: [booking link]. Lilach"

ACTION: Set Contact Property "30-Day Check-In Sent" = Yes.

WHY THIS WORKS: Most upsell conversations happen too late or not at all. A 30-day check-in is the natural moment to open that door, because you are asking about them, not pitching at them.
Free instant access

Get the full resource

Enter your name and email and the complete resource opens on this page, instantly. No spam, unsubscribe anytime.

Already on the Sunday newsletter? Your weekly email carries a one-click access link, so you never see this form.

Want this built for you?

You do not have to do this yourself.

This resource hands you the volume. The strategy, the judgement, and the bit where it all connects is the work I do for clients: lead generation, ads, SEO, workflow automation, HubSpot, and the systems that make them compound. Done for you, consulting, coaching, or training.

Book a free 30-minute call Or get the Sunday newsletter

Lilach Bullock has spent 21 years in marketing. Forbes Top 20 (twice), Oracle Social Influencer of Europe, and ranked the number one digital marketing influencer in the UK. She now builds AI-powered marketing systems for entrepreneurs, service businesses, and founders. The Sunday newsletter goes to 15,000 readers at a 70%+ open rate.

lilachbullock.com