The CRM Follow-Up Skill: Claude Drafts Every Due Follow-Up From HubSpot
Run it each morning and every overdue HubSpot deal gets a short reply in your voice, saved as a Gmail draft and never sent.
Open your HubSpot pipeline and count the deals with a next step date in the past. Each one is a follow-up nobody wrote. The chase is the easy part to put off: open the deal, find the thread, remember what they said, write something that does not read as "just checking in". Ten of those is a morning gone. The CRM Follow-Up Skill is a small folder for Claude. SKILL.md holds the procedure: search HubSpot for open deals whose next activity date is due or whose last contact is older than your quiet period, skip anything closed or marked on hold, open the real Gmail thread for each contact, work out whether this is a first chase, a second, or a break-up note, and write a reply under 120 words that names one specific thing from the last message. Each reply is saved as a Gmail draft inside the existing thread. The run ends with a report: what was drafted and why, who replied and is waiting on you, what was skipped (no email address, emailed yesterday, marked HOLD) and what has had its break-up note and should be moved. A chase-rules file holds the cadence and the hold markers; a voice file holds your sign-off, your phrases and the things you never say. This is how No Code Founders chases sponsor deals every morning, with the sponsor-specific parts removed. The skill does not send anything: Anthropic's Gmail article lists sending as its own action that asks for your approval, and this skill never calls it. It does not log activity or move deals in HubSpot unless you ask after reading the report. It needs clean data to work from: a contact with an email on each deal, and a next step or next activity date that means something. Where the record is thin, it tells you instead of guessing.
Copy the three files from modules 01 to 05, fill in the voice file, then follow HubSpot's guide to connect your account. Module 07 covers the skill upload and Gmail.
A Claude skill
A Claude skill you install once and use every week.
What it does for you
Finds what is due without you looking
Searches open HubSpot deals by next activity date and last contacted date, drops anything Closed Won or Closed Lost, and respects a HOLD marker in the next step field.
Every draft names something they said
Reads the full Gmail thread, not the preview, and the draft must reference one specific thing from the last message: their question, the option they liked, the date they gave.
A cadence you set once
First chase after three business days, second after seven, a break-up note after ten, then stop. All three numbers live in one file you can edit.
Drafts in the thread, never sends
Each follow-up is saved as a Gmail draft as a reply to the newest message, so it lands in the conversation. The skill never calls a send tool. You read and send.
Tells you what it skipped and why
The report lists drafts, replies you owe, deals skipped for no email address, quiet period or hold marker, and deals that have had their break-up note.
What is included
All three files in the skill folder, a worked example from our dry run, install and test steps from HubSpot's and Anthropic's current docs, and answers to two questions people search for.
The SKILL.md file (part 1 of 3)
The complete skill file, ready to paste into SKILL.md inside a folder called crm-follow-up. Part 1 covers the frontmatter, the HubSpot search and reading each deal's thread. Paste the bullets in order, then continue with modules 02 and 03.
- --- name: crm-follow-up description: Draft follow-up emails for HubSpot deals whose next step is due or overdue. Reads the deal, contact and last Gmail thread, saves a short reply as a Gmail draft. Never sends. ---
- # CRM Follow-Up Every morning, find the open HubSpot deals that are due a chase, read what was last said, and leave a short follow-up in the user's voice as a Gmail draft. Drafts only. Never send, never log to HubSpot, unless the user asks in the same message.
- Files: `references/chase-rules.md` holds the cadence, the quiet period and the skip rules. `references/voice-and-template.md` holds the user's voice, the three chase shapes and the report format. Read both before step 1.
- ## 1. Set the frame - Today's date, from the system. Business days skip Saturday and Sunday. - Quiet period N from chase-rules.md (default 3 business days). - Deal owner: the user. If the user has not said otherwise, only chase deals they own.
- ## 2. Find the due deals in HubSpot Search deals with the HubSpot connector. Include a deal only when every one of these is true: - `hs_is_closed` is false (not Closed Won, not Closed Lost). - The owner matches, if the user gave one.
- - It is due: `notes_next_activity_date` is today or earlier, OR there is no next activity date and `notes_last_contacted` is more than N business days ago. Pull `dealname`, `dealstage`, `hs_next_step`, `closedate`, `notes_last_contacted` and the associated contacts.
- - The next step text does not contain a hold marker (default: DNC, HOLD, WAITING, in any case). Deals with a marker go in the report under "skipped" with the marker quoted. If the search returns more than 15 due deals, stop and show the user the list before drafting any.
- ## 3. Read each due deal For each deal: the primary contact's email and first name, the company name, and the deal's last logged email or note in HubSpot. Then search Gmail for the newest thread with that contact's address and open the full thread with `get_thread`, not the search preview.
- From the thread, record: who wrote the last message (the user or the contact), its date, the unanswered run (how many messages in a row the user has sent since the contact last replied), and one concrete detail from the last message in either direction (a question, a date, a name, a number).
- If HubSpot and Gmail disagree on the last contact date, Gmail wins. If there is no Gmail thread at all, treat the deal's last HubSpot note or email as the last message and say so in the report.
The SKILL.md file (part 2 of 3)
The skip rules, the chase number and the draft itself. Paste these bullets directly after module 01 in the same file.
- ## 4. Apply the skip rules Do not draft, and list in the report with the reason, when: - The contact has no email address in HubSpot (list under "needs an address"). - The user's last message is less than N business days old (quiet period).
- - The contact wrote last and the user has not answered. That is a reply the user owes, not a chase. List it under "needs your reply" with the question they asked. Do not draft it unless the user asks. - The last message is an auto-reply saying the contact is away past today.
- - The unanswered run is already 4 (original, two chases and the break-up all sent). List under "stopped" and suggest the user moves the deal or marks it lost. Every other due deal gets a draft.
- ## 5. Pick the chase number Unanswered run of 1 (only the original message is unanswered): first chase, due N business days after it. Run of 2: second chase, due 7 business days after the first chase. Run of 3: break-up note, due 10 business days after the second chase.
- If that gap has not passed yet, skip under "not yet due", even if HubSpot's next activity date is overdue. The gaps live in chase-rules.md.
- ## 6. Write the draft Open `references/voice-and-template.md`. Write a reply in the thread, under 120 words, in the user's voice, in the shape for that chase number. It must name one specific thing from the last message (their question, the option they liked, the date they gave). No generic nudges.
- Facts: every date, price, name or promise in the draft comes from the thread, the deal record or the voice file. Nothing else. If you want to offer something (a call, a shorter option), use only offers listed in the voice file. Check the draft against the voice file's "never say" list before saving.
The SKILL.md file (part 3 of 3)
Saving the draft, the end-of-run report and the hard rules. Paste these bullets directly after module 02.
- ## 7. Save the draft Create a Gmail draft with `create_draft`: `to` the contact, `subject` "Re: " plus the thread subject, `replyToMessageId` the newest message's ID. Do not call send, reply or forward. If the draft tool fails, put the draft text in the chat and say it was not saved.
- ## 8. Report End with the report format from the voice file: drafted (deal, contact, chase number, the detail it references, draft link), needs your reply, skipped with reasons, stopped. Then one line: "Nothing was sent and nothing was changed in HubSpot." Update HubSpot only if the user then asks.
- ## Hard rules - Never send an email. Never call send, reply or forward tools. - Never write to HubSpot in this run. Logging the sent email or moving the next step is a separate request. - Never invent a detail to reference. If the last message has nothing specific, name the proposal by date.
- - One draft per deal per run. If a draft for that thread already exists in Gmail (check `list_drafts`), skip and say so. - If anything is ambiguous (two contacts on a deal, two threads), choose the most recent and note the choice in the report.
The chase rules file
Save as references/chase-rules.md. The quiet period, the cadence, what counts as due, the hold markers and the per-run limits. Change the numbers; keep the headings, because SKILL.md refers to them.
- # Chase rules Edit the numbers, keep the structure. The skill reads this file at the start of every run.
- ## Quiet period N = 3 business days. Do not chase a contact the user wrote to fewer than N business days ago, whatever the deal's next activity date says. Business days exclude Saturday and Sunday. Add your public holidays here: [none listed].
- ## Cadence (counted in business days from the user's last unanswered message) - First chase: N (3) days after the original message. - Second chase: 7 days after the first chase. - Break-up note: 10 days after the second chase. - After the break-up: stop. Report the deal under "stopped".
- ## What counts as "due" A deal is due when its next activity date (`notes_next_activity_date`) is today or earlier, or when it has no next activity date and the last contacted date (`notes_last_contacted`) is older than the gap for its chase number. The Gmail thread is the final word on dates.
- ## Hold markers Skip any deal whose Next step (`hs_next_step`) contains one of: DNC, HOLD, WAITING. Case does not matter. Add your own: [e.g. "PAUSED", "LEGAL"]. To hold a deal, type the marker and the reason in Next step, for example "HOLD: board meets 20 Nov".
- ## Who to chase Only deals owned by the user, unless they name another owner. One primary contact per deal: the one who wrote most recently in the thread. If the thread has two people from their side, write to the one who wrote last and copy nobody.
- ## Limits per run Stop and ask before drafting if more than 15 deals are due. Skip any thread where the last message is more than 60 business days old; those go under "stale" for the user to decide.
The voice and templates file
Save as references/voice-and-template.md. Fill in the voice section once from your own sent emails. The three chase shapes and the report format are what the skill writes to; the never-say list is what it checks against.
- # Voice and templates Fill in the voice section once. The skill reads it every run and checks each draft against it.
- ## Your voice - Sign-off: [e.g. "Sam"] - First-name greeting: [Hi / Hello / Hey] - Tone in three plain words: [e.g. direct, warm, brief] - Length cap: [120 words] - Contractions: [yes / no] - Things you can offer without checking: [a 15 minute call, a shorter option, a written summary]
- ## Phrases you use [Pull 5 to 10 from your own sent emails. Examples: "any questions, reply here", "happy to walk you through it", "tell me if the timing has moved".]
- ## Never say "Just checking in", "circling back", "bumping this", "touching base", "I hope this finds you well", "per my last email", "any update?", "gentle reminder". No exclamation marks. No em dashes. No apology for following up. Add your own: [ ]
- ## Shape of a first chase One line that points at the specific thing from the last message. One line that makes the next step easy (a question with a yes or no answer, or one of the approved offers). Sign-off. Three to five sentences, no more.
- ## Shape of a second chase Open with the thing they said or asked, not with the fact that you are following up. Add one new reason to reply: a date coming up, a detail from the proposal they had not asked about, or an approved offer. Close with a way out: "if the timing has moved, tell me".
- ## Shape of a break-up note Say plainly that this is the last note unless they want to pick it up. Restate what was on the table in one line, from the record. Leave the door open with one sentence and no pressure. No guilt, no "I'll assume you're not interested".
- ## Report format **Drafted (n)**: deal, contact, chase 1/2/break-up, "references: ...", draft link. **Needs your reply (n)**: deal, contact, what they asked, date. **Skipped (n)**: deal, reason (quiet period / no address / hold marker / away until date). **Stopped (n)**: deal, break-up sent on date.
Worked example: seven deals in, two drafts out
Our dry run of the procedure, step by step, against seven fictional deals for a fictional web studio. Every company, person and date below is invented. The point is to show what gets drafted, what gets skipped, and what each draft references.
- Setup: user is Sam, founder of a small web studio. Run date Friday 6 November. Quiet period 3 business days. Voice file: greeting "Hi", sign-off "Sam", can offer a 15 minute call, never says "just checking in" or "circling back".
- Deals 1 to 4: Harbor & Finch (Proposal sent, next activity 4 Nov, Sam sent two options on 29 Oct, no reply). Northwind Dental (recap sent 5 Nov). Pelican Outdoor (contact has no email). Ridgeway Fitness (Closed Lost).
- Deals 5 to 7: Lumen Coffee (proposal 9 Oct, first chase 23 Oct offering a call the week of 2 Nov, no reply; Priya had said budget resets in November). Tessellate Labs (next step reads "HOLD: board meets 20 Nov"). Oakline Physio (Jordan replied 3 Nov asking for GBP pricing and about hosting).
- Report: Drafted (2): Harbor & Finch, chase 1, references option 2 and the partners' visibility point. Lumen Coffee, chase 2, references the November budget and the missed call week. Needs your reply (1): Oakline Physio, GBP pricing and hosting, 3 Nov.
- Report continued: Skipped (3): Northwind Dental, quiet period (1 business day). Pelican Outdoor, no email address. Tessellate Labs, hold marker "HOLD: board meets 20 Nov". Ridgeway Fitness never appeared: it is closed, so the search dropped it. Nothing was sent and nothing was changed in HubSpot.
- Draft 1 (chase 1, reply in thread, 62 words): "Hi Dana, Checking you saw the proposal from Thursday 29 October. The part I most want your read on is option 2, the one that adds the quarterly review calls, since the partners wanted more visibility after launch.
- If it is easier, I can walk you through both options on a 15 minute call this week. Otherwise, any questions, reply here. Sam"
- Draft 2 (chase 2, 70 words): "Hi Priya, You said budget resets in November, so I wanted to be in front of you now rather than after it. The proposal from 9 October still stands: the shop rebuild plus the wholesale order form.
- The week of 2 November has gone, so pick any slot that suits you and I will fit around it. If the timing has moved, tell me and I will stop nudging. Sam"
- What the dry run caught: the first SKILL.md counted the unanswered run wrong (said 3 where the break-up makes 4) and had no rule for a deal HubSpot marks overdue before the cadence gap has passed. Both fixed in the file above. Both drafts passed the never-say list and the 120-word cap.
Install it and connect HubSpot and Gmail
Each step comes from HubSpot's knowledge base, Anthropic's help center or the Claude docs. The skill is the easy part; the two connectors are where setup time goes.
- 1. Make a folder named crm-follow-up. Save modules 01 to 03 as SKILL.md inside it, module 04 as references/chase-rules.md and module 05 as references/voice-and-template.md. Anthropic's docs say the folder name must match the name field in the frontmatter.
- 2. Fill in the voice section of references/voice-and-template.md before you upload: sign-off, greeting, length cap, what you can offer without checking, and five to ten phrases from your sent emails. Edit the numbers in references/chase-rules.md if three, seven and ten days are not your cadence.
- 3. Zip the folder itself, not its contents: from the parent folder run zip -r crm-follow-up.zip crm-follow-up/ or right-click the folder. Anthropic's docs say the zip must have the skill folder as its root. Check every entry starts with crm-follow-up/.
- 4. Claude.ai: skills need code execution turned on. Go to Customize > Skills, upload the zip, and turn the skill on. Anthropic lists skills on Free, Pro, Max, Ultra, Team and Enterprise plans.
- 5. Connect HubSpot. HubSpot's guide: profile icon > Settings > Connectors > Browse > search HubSpot > Connect, log in, choose permissions, click Connect app. HubSpot says this needs a paid Claude plan (Pro, Max, Team or Enterprise) and that only one HubSpot account connects at a time.
- 6. Connect Gmail. Anthropic's Google Workspace article: in the chat, click + > Connectors and toggle Gmail on, then sign in with Google. Gmail is listed as available to all users on Claude and Claude Desktop. On Team and Enterprise an Owner has to enable connectors first.
- 7. In a chat, turn both connectors on and ask: "Run the crm-follow-up skill for today." First run, watch each step. HubSpot recommends setting the connector's Write tools to Needs Approval; this skill does not write to HubSpot, but the setting protects you if you later ask it to log activity.
- 8. Claude Code: copy the folder to ~/.claude/skills/ so the file sits at ~/.claude/skills/crm-follow-up/SKILL.md, then type /crm-follow-up. It only works if Claude Code can reach HubSpot and Gmail through MCP servers you add yourself. We did not test this route.
- Plan notes: Anthropic's docs say personal skills in ~/.claude/skills do not load in Cowork or cloud sessions; enable the skill on your claude.ai account for those. HubSpot users who are not Super Admins may need an admin to approve the connector first.
Test it before you trust it
Seven checks that take about half an hour on a real pipeline. You are looking for two failures: a draft that references nothing specific, and a deal that should have been skipped and was not.
- 1. Before the first run, count by hand: open HubSpot, filter open deals you own with a next activity date of today or earlier, and note how many should be due. The report's drafted plus skipped plus needs-your-reply should match that number.
- 2. Run it and read the report before any draft. Every skipped deal needs a reason you agree with. If a deal you emailed yesterday was drafted, the quiet period is not being applied; check N in chase-rules.md and that Gmail, not HubSpot, is being used for the last date.
- 3. Open each Gmail draft. It should sit inside the existing thread as a reply, not as a fresh email with a new subject. If it is a fresh email, the replyToMessageId step was skipped; say so and rerun that deal.
- 4. For each draft, find the sentence that names something from the last message. If you cannot, the draft fails, whatever else it does well. Tell Claude which message it should have read.
- 5. Check the facts. Every date, price and offer in the draft must be in the thread, the deal record or your voice file. An offer you did not list (a discount, a free month) is an invented fact; add the rule to the voice file and run again.
- 6. Read the drafts against your never-say list and your sent folder. If they sound like a template, add five phrases you use and five you avoid to the voice file. Two or three runs usually fixes it.
- 7. Try a hold on purpose: type "HOLD: waiting on legal" into one deal's Next step, rerun, and confirm it lands under skipped with the marker quoted. Then confirm the run ended with nothing sent: check your Sent folder and HubSpot's activity timeline.
Run it every morning
How to put it on a schedule in Cowork, what Anthropic's article confirms about scheduled runs, and what we could not confirm.
- Anthropic's article on scheduled tasks in Cowork says they can use connectors, skills and plugins and "have access to the same capabilities as regular Cowork tasks". Scheduled tasks are listed on all paid plans (Pro, Max, Ultra, Team and Enterprise).
- To set one up, the article says: click Scheduled in the left sidebar, then New task, then either Create with Claude or Set up manually. Manual setup takes a name, a prompt, an approval mode, a frequency (hourly, daily, weekly, weekdays or manually) and optionally a model and folder.
- Prompt that works for the manual option: "Use the crm-follow-up skill. Today's date is the system date. Draft follow-ups for every due deal I own, save them as Gmail drafts, and end with the report. Do not send anything and do not change HubSpot." Frequency: weekdays.
- Anthropic's Claude Code docs say Cowork sessions, scheduled ones included, load the skills enabled for your claude.ai account at session start, not the skills in ~/.claude/skills on your machine. So upload the skill and turn it on under Customize > Skills before a scheduled run can find it.
- The article says scheduled tasks run remotely, so they run while your computer is asleep, and each run is its own session you review afterwards. Read the report every morning before you send anything; a draft can only use what was in the thread.
- What we could not confirm: whether a scheduled run can create Gmail drafts without a person approving each one. Anthropic's Gmail article says sending, replying and forwarding ask for approval by default and does not mention drafts. Run it by hand for a week first, then try the schedule.
- If a scheduled run stalls on an approval, the report will be missing. Switch back to a manual morning run for that day; the skill is the same either way.
Make it yours
The numbers, the markers and the voice are meant to change. The procedure in SKILL.md should not need to.
- The quiet period is the number that matters most. Three business days suits agencies selling a project; if you sell a monthly service with a longer think, try five. Change N in chase-rules.md and nothing else.
- Add your own hold markers. Many teams already type "waiting on procurement" into Next step; add PROCUREMENT to the markers list and those deals stop appearing without you touching the deal.
- Use your own owner filter. If two people sell, each runs the skill with "deals I own" and gets only their drafts. For a shared pipeline, name the owner in the request and the skill filters on it.
- Logging after you send: once you have sent a draft, ask in the same chat, "log that email to the Harbor & Finch deal and set the next step to Thursday." HubSpot's guide says the connector can create and update engagements and deals; the skill keeps that separate so a run never changes your CRM.
- The voice file grows from your edits. Every phrase you change in a draft goes into either the "phrases you use" or the "never say" list. After a few weeks the drafts stop needing the edit.
- Add a fourth shape if your sales motion has one, such as a post-demo follow-up or a renewal nudge. Copy the structure of the existing shapes: what to open with, the one new reason to reply, how to close.
- If you work several pipelines, say which in the request ("the Agency pipeline only"). The deal stage names differ per pipeline, which is why the skill filters on hs_is_closed rather than on stage names.
Can Claude write follow-up emails from HubSpot?
Short answer: yes, with the HubSpot connector and a mailbox connector. How useful the drafts are depends on how clean the deal record and the thread are.
- Yes. HubSpot's own guide says the connector for Claude can read contacts, companies, deals, pipelines, properties and engagements including emails, notes and tasks, and that Claude only sees the records your HubSpot user can already see.
- The deal record tells Claude what is due; the email thread tells it what to say. That is why this skill reads the Gmail thread for each contact rather than relying on what was logged in HubSpot, which only shows what someone remembered to log.
- What makes it fail: deals with no contact attached, contacts with no email address, next step fields that say "follow up" with no date, and threads that happened on LinkedIn or WhatsApp where Gmail cannot see them. The skill reports those instead of guessing.
- What makes it good: a next activity date on every open deal, one primary contact per deal, and a filled-in voice file. The first week of drafts will need edits; those edits go into the voice file and the drafts converge.
- HubSpot's guide also says the connector can create and update deals and log activities, so you can ask Claude to update the record after you send. This skill keeps that as a separate request on purpose.
Will it send emails on its own?
No. Here is what the skill does, what the connectors can do, and where the line sits.
- No. The skill's hard rules say never call send, reply or forward, and the only mail action in the procedure is create_draft. Every follow-up lands in your Gmail Drafts folder as a reply inside the existing thread, and you read it and press send yourself.
- The Gmail connector can send. Anthropic's Google Workspace article lists send, reply and forward among its actions, and says Claude asks for your approval before each of these by default. The skill does not use them, so you should never see that prompt during a run.
- If you ever see a send approval during a run, decline it and check that the SKILL.md you uploaded still has the hard rules section. An edited or truncated SKILL.md is the most likely cause.
- Same with HubSpot: the skill reads deals and contacts and writes nothing. HubSpot recommends setting the connector's Write tools to Needs Approval, which costs you nothing here and means any later request to log activity gets a confirmation step.
- Why drafts rather than sends: a follow-up that references the wrong message, or offers something you did not mean to offer, goes out with your name on it. Reading ten short drafts takes five minutes.
Ready to use today
Stop finding overdue deals three weeks late
Copy the three files, fill in your voice, zip the folder and upload it once. Connect HubSpot and Gmail. From then on, one request each morning turns every due deal into a short draft in the right thread, plus a list of what it skipped and who is waiting on you.
Free. Three files, two connectors. Drafts only; nothing is sent and nothing in HubSpot changes.