---
title: "HubSpot Sales Plugin for Claude: what it writes to your CRM"
description: HubSpot's Sales Plugin for Claude is open source. Here is what each skill writes to your CRM, where confirmation really lives, and what to check first.
image: https://allgusto.com/hubfs/brand-2026/blog/hubspot-sales-plugin-for-claude/hubspot-sales-plugin-for-claude-og.png
---

[Skip to content](https://allgusto.com/blog/hubspot-sales-plugin-for-claude#main)

[![All Gusto](https://allgusto.com/hs-fs/hubfs/All%20Gusto%20-%20Logo%20-%20Black%20-%20Transparent-1.png?width=340&height=226)](https://allgusto.com/)

- [Home](https://allgusto.com/)
- [About](https://allgusto.com/about)
- [Blog](https://allgusto.com/blog)
- [Contact](https://allgusto.com/contact-us)

[Blog](https://allgusto.com/blog)

# I read the source code of HubSpot's Claude Sales Plugin. Here's what it writes to your CRM

Oct 5, 2026

Share

<https://twitter.com/intent/tweet?url=https%3A%2F%2Fallgusto.com%2Fblog%2Fhubspot-sales-plugin-for-claude&text=I+read+the+source+code+of+HubSpot%27s+Claude+Sales+Plugin.+Here%27s+what+it+writes+to+your+CRM> <https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fallgusto.com%2Fblog%2Fhubspot-sales-plugin-for-claude> <https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fallgusto.com%2Fblog%2Fhubspot-sales-plugin-for-claude>

## What HubSpot shipped on Sep 25

On September 25, HubSpot announced the HubSpot Sales Plugin for Claude: a free plugin with eight skills you run as slash commands inside Claude ([HubSpot Community announcement](https://community.hubspot.com/t/introducing-the-hubspot-sales-plugin-for-claude/159825)). The skills are Call Prep, Daily Brief, Log Call, Follow Up, Pipeline Pulse, Contact Lookup, Import Contacts, and a catch-all HubSpot skill. You install it in Claude through Add, then Upload Plugin, and the [product page](https://www.hubspot.com/claude/sales-plugin) says "One click downloads the HubSpot connector and all packaged skills."

The part the launch posts skip: the plugin is eight skill files riding on the existing HubSpot connector for Claude, and those files decide what Claude writes into your portal. So this post covers the plugin, not the connector alone, not [building your own MCP server for Agent Builder](https://allgusto.com/blog/hubspot-custom-mcp-server), and not the [write toggles inside HubSpot's own agents](https://allgusto.com/blog/hubspot-mcp-agent-builder). It is also a different job from having Claude design your CRM, which I covered in [the portal architecture post](https://allgusto.com/blog/claude-hubspot-portal-architecture).

![HubSpot Sales Plugin for Claude skill grid on hubspot.com, eight skills](https://allgusto.com/hubfs/brand-2026/blog/hubspot-sales-plugin-for-claude/hubspot-sales-plugin-skill-grid.png)

HubSpot's eight skills at the Sep 25 launch.

## The plugin is public, and a skill is just a markdown file

The source sits in a public GitHub repo, [HubSpot/hubspot-mcp-plugins](https://github.com/HubSpot/hubspot-mcp-plugins), under Apache-2.0. I cloned it on October 5. HEAD was commit a0c5960 from September 11, and the Sales plugin inside is version 2.3.0. Everything I quote comes from that public repo version (2.3.0). I did not compare it with the build you download from hubspot.com, so if your installed copy behaves differently, the build may differ.

A skill is a markdown file called SKILL.md: a description that tells Claude when to trigger, then numbered phases in plain English. Search for the contact, build a plan, show a confirm block, call this tool, write these properties. The prompt is the program. A bundled `.mcp.json` points Claude at `https://mcp.hubspot.com/anthropic`, HubSpot's remote MCP endpoint, so every write goes through the connector's tools, mostly `manage_crm_objects`. Good news for anyone who runs a portal: you can read exactly what a vendor feature does to your records, and you should before reps type `/log-call`.

## The write map: what each skill reads, creates, and updates

Only /contact-lookup is pure read. /call-prep saves the brief as a note with no ask step in the file. /daily-brief and /pipeline-pulse suggest tasks and write only after you reply "add all" or name them. /log-call, /follow-up, and /import change records on their main path. The catch-all HubSpot skill does quick updates on request.

| Skill | Reads | Creates | Updates |
| --- | --- | --- | --- |
| /call-prep | Contact, deal, notes, tasks; email and calendar if connected | Note on the contact and deal with the full brief (no ask in the file); a new contact only if the person is missing and you say yes | Nothing |
| /daily-brief | Tasks, contacts, deals, meetings | Suggested tasks, only after you reply "add all" or name them | Task status to COMPLETED when you ask |
| /pipeline-pulse | Open deals, tasks, associated contacts | Suggested tasks, only after "add all" or named | Deal `hs_next_step` when you ask |
| /contact-lookup | Contact, deals, last 3 notes, open tasks, company | Nothing (offers to create a contact if none is found) | Nothing |
| /log-call | Contact, associated deal, deal stage options | Note on contact and deal; follow-up task, every time | Deal: `dealstage`, `hs_next_step`, `closedate`, `hs_priority`, `amount`. Contact: `hs_lead_status`, `lifecyclestage` |
| /follow-up | Contact, deal, last 5 notes, open tasks, email threads if an email connector exists | Follow-up task (type EMAIL) when the email implies a next action | Deal: `hs_next_step`; `dealstage` only after asking |
| /import (import-contacts) | File, pasted list, or connected app; contacts by email; companies by name | New contacts; companies not found by name; history notes (cap of 100); deals only if you say yes | Existing contacts matched by email, including `hubspot_owner_id` |
| HubSpot (catch-all) | Any contact, company, deal, or task you name | Tasks and contacts on request | Any field you name; deal stage to `closedwon` or `closedlost` (Quick updates in `hubspot/SKILL.md`, version 2.3.0) |

![Table graphic of the eight HubSpot Sales Plugin skills and what each reads, creates, and updates in HubSpot](https://allgusto.com/hubfs/brand-2026/blog/hubspot-sales-plugin-for-claude/what-each-slash-command-writes.png)

What each slash command writes, read from the HubSpot-Sales 2.3.0 skill files.

## /log-call up close

Tell Claude you just got off the phone with a buyer, and it finds the contact and their deal, then builds one confirm block covering a note, deal fields, contact fields, and a task. The file is explicit: "do not write until confirmed."

The contact update is where an admin should slow down. Phase 6 maps what you said to fixed values. Quoted exactly from `HubSpot-Sales/skills/log-call/SKILL.md` (version 2.3.0, commit a0c5960):

```
| Signal | Field | Value |
|---|---|---|
| Reached them, had a real conversation | `hs_lead_status` | CONNECTED |
| Actively progressing | `hs_lead_status` | IN_PROGRESS |
| Voicemail / no answer | `hs_lead_status` | ATTEMPTED_TO_CONTACT |
| They said call back later | `hs_lead_status` | BAD_TIMING |
| Not a fit | `hs_lead_status` | UNQUALIFIED |
| Now has an open deal | `hs_lead_status` | OPEN_DEAL |
| Qualifies as a sales opportunity | `lifecyclestage` | opportunity |
| Decision to buy likely | `lifecyclestage` | salesqualifiedlead |
```

Those are HubSpot's default lead status values, hardcoded. The skill does not look your options up first, and what happens when it sends `BAD_TIMING` to a portal without that option is untested. There is one guard: "Only update if the signal is clear. Skip if ambiguous."

The task is not optional. Phase 7 opens with "Always create a task," and with no next step mentioned it defaults to a follow-up in 7 days, type CALL, priority MEDIUM. Every logged call, one more task in somebody's queue.

Deal stage is the part HubSpot got right. Resolution is fail-closed: it pulls the real `dealstage` options for the deal's own pipeline and matches your words against actual labels. If the pipeline is missing, the lookup fails, or two labels look plausible, it drops the stage change and asks. The phrase "never guess" shows up more than once. I wish lead status got the same treatment.

## /follow-up up close

`/follow-up` drafts an email from deal context, notes, and email history, then shows it in an editable card with an "Open in HubSpot" button. That button is a deep link to the contact record with `initialEmailSubject` and `initialEmailBody` in the URL.

Now put the launch copy next to the source. The announcement says the Follow Up "draft is saved to HubSpot, where you can send directly or schedule." Phase 5 of `HubSpot-Sales/skills/follow-up/SKILL.md` (version 2.3.0) says:

```
Do not save a note. Do not store the draft body in HubSpot.
```

Both can feel true from a rep's seat, since the draft opens inside HubSpot's compose panel. But in the public repo version, nothing is stored on the record until a person sends it. Builds may differ.

Phase 6 is the quieter finding. After the rep opens the email, the skill updates deal fields proactively: "don't ask unless it's ambiguous." If the email implies a next action, it updates `hs_next_step` and creates a task titled "Follow up with \[firstName\] if no reply," type EMAIL. Deal stage is the one change that gets a second question, per "Confirm before executing any deal stage change." The next step and task can land without a separate ask.

> [@the.ai.sales.guy](https://www.tiktok.com/@the.ai.sales.guy?refer=embed)

*"It even created a check-in task 17 days out ... I never asked for that." (Sep 8, HubSpot connector for Claude, not necessarily the Sales Plugin.)*

## /import up close

`/import` runs the `import-contacts` skill. It takes a CSV, a pasted list, or a connected app like Gmail, and its selection widget doubles as the confirmation step.

Dedupe is by email only. The skill searches contacts in batches of 50 with `email IN [...]` and labels each row New or Existing. It drops anyone on your own email domain, so colleagues stay out. Rows with no email cannot be checked at all; they show unchecked with a "No email" label.

Existing contacts are included "checked by default, with the status badge." Click Import and they go out as `updateRequest` calls. In Phase 3, every confirmed contact gets `hubspot_owner_id` set to the current user's ID, and nothing in the file exempts matched records. Runtime behavior is untested.

Companies are matched by name. The association step, quoted from `HubSpot-Sales/skills/import-contacts/SKILL.md` (version 2.3.0):

```
For contacts with a company name:
1. `search_crm_objects` companies, filter: name = [company name]
2. If found, associate via `manage_crm_objects` with association type `contact_to_company`
3. If not found, create via `manage_crm_objects` createRequest, objectType: companies, then associate
```

No domain lookup appears in that step. I have not tested what that does in a real portal. One more pair of numbers: the skill writes in batches of 50, while HubSpot's KB caps connector bulk create and update at 10 records at a time. Whether the client splits those calls is untested.

## Where "confirm" actually lives

HubSpot's announcement promises: "Before Claude writes anything to your account, it shows you the proposed change and asks you to confirm." That confirmation lives in three places, and none of them is a HubSpot permission.

First, the skill prompt, and each file sets its own rule: `/log-call` waits for a yes, `/follow-up` Phase 6 does not unless things are ambiguous. Second, Claude's tool setting. HubSpot's [connector KB](https://knowledge.hubspot.com/integrations/set-up-and-use-the-hubspot-connector-for-claude) recommends Needs Approval for write tools and warns: "If you set the connector to Always allow, edits may occur without asking." Third, the MCP tool. The `manage_crm_objects` description I read through an MCP client requires a confirmation table, then adds on the first one: "Want to skip confirmations for this chat? Just ask." That text came from a different endpoint than `/anthropic`, so the plugin's version may differ.

So confirmation is a prompt convention plus a client toggle, and a rep can talk their way past it. It is a speed bump, not a lock. The limits that hold sit on HubSpot's side, per the KB: 10 records per bulk write, conditional property rules and pipeline stage validation applied (association label validation is not), no delete, and every write in the Audit Log attributed to the user and the connector.

![HubSpot KB note on Claude connector write tools Needs Approval and 10-record bulk limit](https://allgusto.com/hubfs/brand-2026/blog/hubspot-sales-plugin-for-claude/hubspot-kb-claude-connector-needs-approval-10-record-limit.png)

HubSpot's own advice: keep write tools on Needs Approval.

## Pre-rollout checks for an admin

None of this says skip the plugin. These are checks, not predictions, and each maps to a line in the source. If the portal underneath is messy, start with [the hygiene work to do before agents touch HubSpot](https://allgusto.com/blog/hubspot-ready-for-ai-agents). The skills read your records as context before they write.

1. **Lead status options.** Compare the internal values on `hs_lead_status` to the six the skill hardcodes. Any gap deserves a test call in a sandbox.
2. **Pipeline labels.** `/log-call` matches spoken words to stage labels and asks when unsure, so distinct labels mean fewer questions. `/follow-up` cites default stage IDs as examples; check how it handles your custom stages.
3. **Company dedupe key.** If domain is your source of truth for companies, know that `/import` searches by name. Decide whether reps import at all.
4. **Owner rules.** If accounts are assigned by territory or rotation, check that against an import setting owner to the importing rep, and whether owner-based workflows would fire.
5. **Task volume.** One task per logged call, plus email tasks from `/follow-up`. Decide if that is the cadence you want.
6. **Needs Approval as the org default.** Set write tools to Needs Approval, tell reps to decline the skip-confirmations offer, and read the Audit Log after week one.

## FAQ

### Is the HubSpot Sales Plugin for Claude free? Does it need a paid Claude plan?

The plugin is free, according to HubSpot's announcement and product page. It rides on the HubSpot connector for Claude, and HubSpot's KB says the connector requires a paid Anthropic plan. Depending on your plan, the account owner may need to enable skills access. So the plugin costs nothing, but the Claude seat it runs in does.

### Can the plugin delete HubSpot records?

Not through the connector. HubSpot's KB says the HubSpot connector for Claude cannot delete records, and none of the three write skills I read includes a delete step. The skills update existing records, including lead status, lifecycle stage, deal fields, and contact owner on import. The Audit Log attributes every write to the user and the connector.

### Does Claude ask before it changes my CRM? How do I force it to?

It depends on the skill. `/log-call` shows one confirm block and waits. `/follow-up` asks before a deal stage change but can update the next step and create a task without a second ask, per its source. To force approvals, set the connector's write tools to Needs Approval in Claude, as HubSpot's KB recommends, and tell reps not to accept the offer to skip confirmations for the chat. Treat it as a workflow habit, not a security boundary.

### Will /import create duplicate contacts or companies?

I have not tested it, so here is the mechanism instead of a prediction. Contacts are checked against HubSpot by email only, and existing matches are pre-checked for update. Rows without an email cannot be checked and appear unchecked with a "No email" label. Companies are searched by exact name, and if none is found, the skill creates one and associates the contact. If your companies are keyed by domain, test an import in a sandbox first.

### Can a partner use it across multiple client portals?

HubSpot's KB says one Claude account connects to one HubSpot account at a time. The skills run against whichever portal is connected at that moment. The repo also ships a separate HubSpot-Partner plugin, which I did not review for this post. If you work in several portals, check which one is connected before you run a write skill.

## Related

- [Is your HubSpot ready for AI agents?](https://allgusto.com/blog/hubspot-ready-for-ai-agents)
- [Claude will build your HubSpot portal wrong, with confidence](https://allgusto.com/blog/claude-hubspot-portal-architecture)

Primary sources: [HubSpot/hubspot-mcp-plugins](https://github.com/HubSpot/hubspot-mcp-plugins) (public repo, commit a0c5960, hubspot-sales 2.3.0, Apache-2.0, opened October 5, 2026), [Introducing the HubSpot Sales Plugin for Claude](https://community.hubspot.com/t/introducing-the-hubspot-sales-plugin-for-claude/159825) (HubSpot Community, September 25, 2026), and [Set up and use the HubSpot connector for Claude](https://knowledge.hubspot.com/integrations/set-up-and-use-the-hubspot-connector-for-claude) (HubSpot Knowledge Base, updated September 24, 2026).

If you want a second set of eyes on your lead status values, pipeline labels, and company rules before your reps install the Sales Plugin, use the contact form on allgusto.com.

Business Email \*

First Name \*

Last Name \*

Phone Number

What's your biggest challenge in sales and marketing?

Company Website

Send Message

© 2026 All Gusto, LLC

- [Home](https://allgusto.com/)
- [About](https://allgusto.com/about)
- [Blog](https://allgusto.com/blog)
- [Contact](https://allgusto.com/contact-us)
- [Privacy](https://allgusto.com/privacy)
- [Terms](https://allgusto.com/terms)

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Derek Reynolds",
    "url" : "https://allgusto.com/about#derek-reynolds"
  },
  "datePublished" : "2026-10-05T15:28:11.000Z",
  "headline" : "HubSpot Sales Plugin for Claude: what it writes to your CRM",
  "image" : [ "https://allgusto.com/hubfs/brand-2026/blog/hubspot-sales-plugin-for-claude/hubspot-sales-plugin-for-claude-og.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://allgusto.com/blog/hubspot-sales-plugin-for-claude",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://allgusto.com/hubfs/brand-2026/lockup-header-light.png"
    },
    "name" : "All Gusto"
  }
}
```

```json
{
  "@context" : "https://schema.org",
  "@type" : "FAQPage",
  "mainEntity" : [ {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "The plugin is free, according to HubSpot's announcement and product page. It rides on the HubSpot connector for Claude, and HubSpot's KB says the connector requires a paid Anthropic plan. Depending on your plan, the account owner may need to enable skills access. So the plugin costs nothing, but the Claude seat it runs in does."
    },
    "name" : "Is the HubSpot Sales Plugin for Claude free? Does it need a paid Claude plan?"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "Not through the connector. HubSpot's KB says the HubSpot connector for Claude cannot delete records, and none of the three write skills I read includes a delete step. The skills update existing records, including lead status, lifecycle stage, deal fields, and contact owner on import. The Audit Log attributes every write to the user and the connector."
    },
    "name" : "Can the plugin delete HubSpot records?"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "It depends on the skill. `/log-call` shows one confirm block and waits. `/follow-up` asks before a deal stage change but can update the next step and create a task without a second ask, per its source. To force approvals, set the connector's write tools to Needs Approval in Claude, as HubSpot's KB recommends, and tell reps not to accept the offer to skip confirmations for the chat. Treat it as a workflow habit, not a security boundary."
    },
    "name" : "Does Claude ask before it changes my CRM? How do I force it to?"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "I have not tested it, so here is the mechanism instead of a prediction. Contacts are checked against HubSpot by email only, and existing matches are pre-checked for update. Rows without an email cannot be checked and appear unchecked with a \"No email\" label. Companies are searched by exact name, and if none is found, the skill creates one and associates the contact. If your companies are keyed by domain, test an import in a sandbox first."
    },
    "name" : "Will /import create duplicate contacts or companies?"
  }, {
    "@type" : "Question",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "HubSpot's KB says one Claude account connects to one HubSpot account at a time. The skills run against whichever portal is connected at that moment. The repo also ships a separate HubSpot-Partner plugin, which I did not review for this post. If you work in several portals, check which one is connected before you run a write skill."
    },
    "name" : "Can a partner use it across multiple client portals?"
  } ]
}
```