MetaHub MCP · for HubSpot

Sell more. Maintain less.

Your AI — the one you already pay for — handles your HubSpot so you can fully focus on sales. Data entry, follow-ups, prioritisation, cleanup, quotes: it does the admin, you do the selling. Smarter than Breeze, on a model you actually picked.

Built by metawork.studio. HubSpot Solutions Partner — running HubSpot for clients since 2016.

Claude · MetaHub connected
▸ what's on my plate today?
2 deals advanced overnight.
3 tickets waiting on a reply.
1 quote stuck in negotiation since Friday.
Want me to draft the ticket replies?
The way sales reps already talk. The way AI should already work.

Built for two people

Sell. Or run the people who sell. Either way, HubSpot stops being your job.

Most «AI for HubSpot» tools assume you'll learn a new interface. MetaHub assumes you're busy and need shit to be done. The AI is already on your screen, and the CRM should just do what you ask in plain convo.

For reps + founder-sellers

Stop maintaining your CRM. Sell.

  • The data entry, the follow-ups, the cleanup — your AI does them while you're on the phone.
  • No tutorials, no YouTube binge. You already know how to talk to Claude / ChatGPT. That's the whole interface.
  • Draft personalised first-touch emails in seconds — informed by lifecycle stage, last touchpoint, the contact's source.
  • Quotes, notes, calls, deal updates — dictated, not typed.

For sales directors + founders managing a team

Set the strategy in conversation. Watch it land in real time.

  • Daily + weekly briefings — who closed what, who's stalling, where pipeline is leaking.
  • Live stats on demand — no dashboard hunt, no «can someone pull me a report».
  • Pipeline forecasts that update themselves — and a forecast you can interrogate, not just read.
  • Coaching signal — see who's flying, who's stuck, where you'd want to step in.

Try saying this to your AI

Four sentences. Four jobs done.

Plain English. No property names, no internal IDs, no clicking around. Your AI handles the HubSpot end, you keep selling.

  • "What's on my plate today?"

    6 things. 2 deals advanced overnight, 3 tickets need a reply, 1 quote stuck in negotiation since Friday. Want me to draft the ticket responses?

  • "What stalling deals need my immediate attention?"

    Acme ($72k, untouched 16 days), Nordwind ($28k, demo never followed up), Globex ($140k, decision-maker dropped off two weeks ago). Pulling the last engagement on each.

  • "Pull all the contacts I need to reach out to today, then draft a personalised first-touch email for each one."

    14 contacts on today's list, including 4 from the re-engagement workflow. Wrote each email against the contact's lifecycle stage and the last touchpoint. Review before I queue them?

  • "Write a quote for Acme: 50 Pro seats, annual, 15% discount."

    Done. €54,000 list, €45,900 after 15%. Filed as a line-item-backed deal under Acme, attached to the open thread with their procurement lead. Ready to send when you say go.

Everything it handles

One assistant. Your whole HubSpot.

There's no feature menu to learn — just things you can ask for, in plain words. Here's the range of what MetaHub takes off your plate.

  • Set up HubSpot from scratch

    Full, hands-off configuration so you can onboard yourself — pipelines, properties, custom objects, automations, built to spec the moment you ask.

  • Get data in and out

    Pull exactly what you need out of HubSpot and push exactly what you want back in — in plain language, no exports, no view-building.

  • Smart import

    Hand it a messy spreadsheet and it maps the columns, cleans the values, and files every record where it belongs.

  • Smart data management

    Keep the portal tidy as you work — fix properties, fill gaps, reshape records — all on request, never by hand.

  • Our HubSpot expertise, baked in

    Ask for something and MetaHub does the technical part the way we would do it for you. Right the first time.

  • Your daily agenda

    A 30-second morning briefing from your real portal: which deals moved, who is waiting, what to send today.

  • Stats + reports on demand

    Funnels, forecasts, win/loss, leaderboards, campaign metrics — answered in chat, never built by hand in HubSpot.

  • Enrich + reach out

    Pull lookalike contacts from Apollo, craft sharp first-touch emails, and update the portal — without ever opening it.

  • Chat becomes CRM work

    The progress you make in conversation lands back in HubSpot as tasks, activities and tickets automatically.

  • Launch campaigns from chat

    Roll out a sales campaign across your pipeline right where you are already typing.

  • Powerful deduplication

    A dedicated workspace that finds and merges duplicate contacts and companies fast. Fully GDPR compliant: your data never leaves your browser or reaches AI.

  • Weekly updates

    We constantly update the functionality and playbooks. Any update to HubSpot, any change in their API, anything we add that simplifies and boosts productivity is included in free updates to your license.

The number that matters

~5h 30min

per sales rep, per week, on CRM admin

The average rep loses about five hours a week updating HubSpot. Logging activities, copying notes, chasing overlooked leads, figuring out the UI, cleaning up overdues, trying to find most important things. MetaHub gives most of that time back, because the AI you already use can do it in seconds when asked.

For a team of five, that's roughly a full extra selling day per rep, every week. That's the headline. Everything else on this page is just how.

Smarter than Breeze

Use the AI you actually picked. Not the one HubSpot picked for you.

HubSpot's Breeze is a single, locked-down model with locked-down prompts. You can't choose the model, you can't bring your own context, you can't compose it with the other AI work you already do. That's a design choice that ages quickly — every new generation of Claude or GPT leaves Breeze further behind.

MetaHub is the inverse. It plugs into the AI you chose — Claude, ChatGPT, Gemini, Copilot, or any MCP-compatible client. The same chat you already use for email drafts, research, planning, code — now it also runs your CRM. When your AI upgrades to the next model, your CRM gets smarter the same day. No vendor lock-in, no waiting for HubSpot's roadmap.

HubSpot Breeze

  • One model, picked for you
  • Locked prompts, locked output style
  • No model choice as new generations ship
  • Siloed from the AI you actually use

MetaHub

  • Bring your own AI — Claude, ChatGPT, Gemini, Copilot, or any MCP client
  • Always the strongest model you already pay for
  • Same chat as the rest of your work — one window, one assistant
  • Custom objects, lists, pipeline vocabulary all first-class

Works with the AI you already use

  • ClaudeClaude
  • ChatGPTChatGPT
  • GeminiGemini
  • Microsoft CopilotMicrosoft Copilot
  • GitHub CopilotGitHub Copilot

Under the hood, every common HubSpot action is covered — custom objects, vocabulary-aware properties, reporting, dedup, the lot. You don't need to learn any of it. You just talk.

Setup

Three steps. Five minutes.

No code. No agency call. No consultant on retainer.

  1. 1
    Start a free trial

    Pick a plan below and check out. 30 days free, cancel anytime.

  2. 2
    Paste one address into your AI

    In Claude, ChatGPT, or Gemini, add MetaHub as a connector. We'll show you exactly where to click — under a minute.

  3. 3
    Connect your HubSpot

    Type connect to my hubspot, authorize connection, you're done.

Detailed setup

Pick the AI you already use.

Step-by-step for Claude, ChatGPT, and Gemini — plus Microsoft Copilot and GitHub Copilot.

Works in claude.ai (no install), Claude Desktop, and Cursor — same address, same login.

↓ Download Claude Desktop (optional)

Claude.ai requires Pro, Team, or Max for custom connectors. On the free plan? Use Claude Code, Cursor, ChatGPT (Developer Mode), or Gemini CLI instead — same MetaHub app, no subscription gate.

  1. 1

    Pick a plan — see pricing below — and complete checkout.

  2. 2

    Open claude.ai → click your profile picture → Settings → Connectors → Add custom connector.

  3. 3

    Paste this address into the URL field: https://metahub.metawork.studio/mcp/

  4. 4

    Click Add. A sign-in screen opens — choose Google, Microsoft, or email, using the same address you used at checkout. MetaHub recognises your license and connects automatically.

  5. 5

    First time only: ask MetaHub to connect your HubSpot. Type connect my hubspot and paste your HubSpot Private App token when prompted.

Important: this requires the ChatGPT desktop app, not the website. The browser version of ChatGPT doesn’t support tool connections.

↓ Download ChatGPT Desktop (macOS / Windows)
  1. 1

    Pick a plan — see pricing below — and complete checkout.

  2. 2

    Open the ChatGPT desktop app → Settings → scroll to the bottom → enable Developer Mode.

  3. 3

    In Settings → Connectors → Add connector. Leave authentication set to OAuth.

  4. 4

    Paste this address into the URL field: https://metahub.metawork.studio/mcp/

  5. 5

    Click Connect. A sign-in screen opens — choose Google, Microsoft, or email, using the same address you used at checkout. MetaHub recognises your license and connects automatically.

  6. 6

    First time only: type connect_hubspot and paste your HubSpot Private App token when prompted.

Gemini CLI is Google’s free AI assistant that runs in your computer’s terminal (command line). To use it, you need Node.js installed — it’s free and takes 2 minutes.

  1. 1

    Pick a plan — see pricing below. Copy your license key from the confirmation email or your license account page.

  2. 2

    Open your terminal (Mac: search «Terminal» in Spotlight · Windows: search «Command Prompt») and run: npm install -g @google/gemini-cli

  3. 3

    Open the file ~/.gemini/settings.json in any text editor (create it if it doesn’t exist) and add the following — replacing YOUR_LICENSE_KEY with the key from step 1:

    {
      "mcpServers": {
        "metahub": {
          "httpUrl": "https://metahub.metawork.studio/mcp/",
          "headers": {
            "Authorization": "Bearer YOUR_LICENSE_KEY"
          }
        }
      }
    }
  4. 4

    Back in your terminal, type gemini and press Enter. MetaHub’s tools will be available immediately.

  5. 5

    First time only: type connect_hubspot and paste your HubSpot Private App token when prompted.

MetaHub is a remote MCP server (Streamable HTTP + OAuth 2.1), so it plugs in with just its address and a browser sign-in. Add it in Microsoft Copilot Studio and use it inside your Microsoft 365 Copilot agents.

Heads-up: the consumer Copilot (Windows / copilot.microsoft.com) doesn’t support custom MCP servers — you connect through Copilot Studio.

  1. 1

    Pick a plan — see pricing below — and complete checkout.

  2. 2

    In Copilot Studio, add a tool, choose Model Context Protocol, and point it at https://metahub.metawork.studio/mcp/. Sign in with the address you used at checkout, then add the agent to Microsoft 365 Copilot.

  3. 3

    First time only: type connect_hubspot and paste your HubSpot Private App token when prompted.

↗ Full step-by-step on your account page

MetaHub is a remote MCP server (Streamable HTTP + OAuth 2.1), so it connects with just its address and a browser sign-in. Use it in GitHub Copilot agent mode inside VS Code or Visual Studio.

  1. 1

    Pick a plan — see pricing below — and complete checkout.

  2. 2

    In VS Code, open Copilot → Agent mode → Add MCP server and point it at https://metahub.metawork.studio/mcp/. Sign in with the address you used at checkout.

  3. 3

    First time only: type connect_hubspot and paste your HubSpot Private App token when prompted.

↗ Full step-by-step on your account page

Why pay for this

HubSpot ships a free MCP. Here’s where it stops.

HubSpot’s own MCP is free, first-party, and genuinely fine for basic lookups — we’ll be the first to say so, and it reaches further than at launch, into campaigns, conversations and marketing email. On the CRM itself it’s still a dozen-odd generic tools: no custom objects, no schema building, no CRM reports, no duplicate cleanup, no workflows, no deletes of any kind, one portal. MetaHub is the operator layer that starts where the free one ends:

Capability MetaHubHubSpot’s own MCPFree community MCPs
Hosted + one-click sign-in (OAuth) Yes Yes Partial mostly token in config
Read & write core CRM — contacts, companies, deals, tickets Yes Yes Partial
Custom objects + build schema, properties, pipelines, stages Yes No can’t touch custom objects Partial read-only
Builds workflows — triggers, actions, custom-code steps, on/off Yes No no automation tools No
CRM reports — funnels, forecasts, win/loss, leaderboards Yes No marketing-campaign metrics only No
Finds and merges duplicates Yes No No
Safe deletes — archive vs permanent/GDPR, the right recipe Yes No no delete or archive tools at all No
Our HubSpot method baked in — no loose tasks, won’t wipe enum options Yes No No
Email → CRM filing, daily briefing, summaries Yes No No
Works marketing email + inbox conversations No we stay on the CRM Yes No
Runs multiple portals / clients from one seat Yes No one portal per connection No
First-party, maintained by the CRM vendor Partial we maintain the adapter Yes No mostly stale
Price from $29/seat/mofreefree

Credit where it’s due: HubSpot’s own MCP is free, first-party, and genuinely fine for basic lookups and edits on one portal. If what you mostly want is marketing email and the inbox, it covers ground we deliberately don’t — take it, and we’ll tell you so. MetaHub earns its price the moment the work gets real: modelling custom objects, building workflows, reporting, cleaning duplicates, deleting safely, and running more than one portal — none of which the free option does.

GDPR & your data

Your customer data never lands on our servers.

MetaHub is built data-minimal by design. We don't keep a copy of your portal, and the heavy lifting that touches real records runs in your own browser — so GDPR compliance is a side-effect of the architecture, not a checkbox.

  • Nothing is stored

    Every request runs live against your HubSpot and returns. We don't cache, copy, or warehouse your deals, contacts, or emails — there's no MetaHub database holding your CRM.

  • Dedup runs in your browser

    The deduplication workspace analyses your records locally, on your machine. When you merge, only the record IDs travel to us to action the merge — never the record content — and those jobs auto-delete within 24 hours.

  • Hosted in the EU

    MetaHub runs on servers in Germany. The only thing we persist is your connection credential — encrypted at rest — plus the email tied to your license.

  • Your AI, your agreement

    The CRM data your AI reads to do its work goes only to the assistant you already chose — Claude, ChatGPT, Gemini — under your own provider agreement. MetaHub adds no extra AI in the middle.

Pricing

Cheaper than the expert you'd hire to do it.

A couple of hours with a HubSpot specialist costs more than a year of MetaHub — and MetaHub runs your portal every day, not just the hour you booked. 30-day free trial on both plans. No setup fees. Cancel anytime.

Single user

$3929/mo

billed monthly billed annually — save 26%

  • 1 license token
  • Every MetaHub capability included
  • All future capabilities included
  • 30-day free trial
  • Cancel anytime
Start free trial

Changelog

What’s shipped, recently.

Every license includes future additions — no tier upgrade, no extra invoice. Recent-first.

  1. Improvement Your per-user HubSpot connect link is personal

    When MetaHub offers the per-user HubSpot app, the link it hands you is a one-click invite made for you on your licence, not a generic page. If the invite can't be fetched right now, MetaHub says so and tells you who can send one, instead of showing a link that wouldn't work.

  2. Improvement Groundwork for acting with your own HubSpot permissions

    MetaHub is getting a second, per-user HubSpot app: once you install it, MetaHub acts with your own HubSpot permissions instead of portal-wide access. HubSpot only supports part of its API that way so far, so MetaHub uses the per-user connection where it can and the existing app everywhere else — nothing you use today changes. whoami now shows both connections, and results say which one answered. The per-user app isn't available to install yet.

  3. Improvement More specific file and ticket permissions

    HubSpot is splitting its broad "files" and "tickets" permissions into more specific ones, and MetaHub now asks for those instead: read and write access to files (not delete — MetaHub never deletes files), and separate permissions for tickets and ticket properties. Nothing changes for existing connections; they keep working exactly as they do.

  4. Fix A conversation summary says when it couldn't read the whole thread

    When MetaHub summarises an inbox conversation it fetches the full text of messages HubSpot shortens. If one of those fetches failed, the summary used to go ahead on the shortened text without saying so. It now flags it plainly, so you know the summary may be missing part of what was said. Also corrected: the marketing-email permission is described as needing Marketing Hub Professional.

Show older entries (89 more) ↓ Hide older entries ↑
  1. Improvement Before a big run, MetaHub asks how hard to use your API limits

    Working through thousands of records uses HubSpot API capacity your portal shares: with every other MetaHub chat, and for searches with every integration you have. Before a large run, MetaHub now counts the requests it will take, reads the limits your connection actually has (for private apps, including the daily limit and how much of it is left), and asks how you want it run: aggressive, moderate, or background — a process that runs on its own until the job is done, paced so nothing else notices. It suggests the cheaper approach first, too — batches of 100 instead of one call per record, and HubSpot's own importer when the data is in a file.

  2. Improvement Exports that say when they're incomplete, clearer permission errors, and leads

    Several things found by re-reading HubSpot's own documentation. Exports: HubSpot quietly caps each row at 1,000 associated records, so an export used as a backup could be missing links without saying so — MetaHub now tells you when that cap applies and lets you lift it. The download link is also described accurately: it lasts five minutes and anyone holding it can open it without logging in, so treat it like the data itself. Imports: the import list only shows imports MetaHub made, and now says so. Permissions: if an export permission is missing, the message now mentions that HubSpot only lets a Super Admin grant it; several subscription requirements were corrected; and leads now get a clear explanation instead of a raw error when the permission isn't there. When HubSpot asks us to slow down, MetaHub now waits and retries short bursts and tells you plainly when a daily limit was hit instead. Searches can return up to 200 records per page. Workflow tools warn that HubSpot still treats that API as a preview that can change without notice. Cancelling or completing a marketing event created by another app (Zoom, Eventbrite and the like) now explains why HubSpot refuses it. And a drafted inbox reply always reads the full text of the message it's answering.

  3. Fix A booking that never reached a calendar no longer reports success

    HubSpot can record a meeting booking "offline" — it saves the booking but creates no calendar event and sends no invite. MetaHub was still reporting that the organiser's calendar had been updated, and booking has no undo, so the mistake was only visible when nobody showed up. The result now says plainly when this happened and what to do about it. Two smaller ones alongside it: marking a marketing-event attendee as a no-show is refused, because HubSpot treats that as a status you read and not one you can write, and a participation cannot be deleted once created; and in owned-only mode a search with many filters could exceed HubSpot's own filter limit and fail outright — it now falls back to filtering the results here, without ever dropping the ownership restriction or one of your filters.

  4. Improvement Enrol a reviewed batch in one go — and see up front what sequence enrollment cannot do

    Enrolling ten people used to mean ten previews and ten confirmations. hs_enroll_sequence now takes a list of contacts (up to 25) for the same sequence and sender, previews the whole set once, and enrols it on a single confirmation — and because that approval is the list you saw, adding or dropping a name afterwards invalidates it. A contact with no email address stops the whole batch rather than quietly shrinking it, and if HubSpot refuses some of them the result says exactly who is enrolled and who is not. Every preview and every result now also states plainly what HubSpot's API cannot do that its own enroll screen can: there is no start date (the cadence begins when you enrol), no timezone (the send window belongs to the sequence and follows the SENDING user, not the contact), no per-person step notes (task notes and call scripts live on the sequence and are the same for everyone), and still no unenroll — checked against HubSpot's newest release, so enrolment stays one-way. Separately, the workflow tools now explain themselves when HubSpot has not granted workflow access: HubSpot publishes no separate workflow permission, and on at least one portal reconnecting to gain sequences removed workflows, which used to surface as a bare error.

  5. Fix Reconnecting now clears a permission error straight away

    If MetaHub told you a HubSpot permission was missing and to reconnect, reconnecting could look like it had changed nothing: for up to 25 minutes afterwards the same message came back, because MetaHub was still reading the permissions your OLD connection had. People reconnected several times over days against that stale copy. Now, before refusing anything for a missing permission, MetaHub re-reads what your connection actually holds right now — so a reconnect takes effect on your very next call, and if the permission is still missing the message lists what you hold today rather than what you held half an hour ago.

  6. Improvement A permission an admin has switched off now says so, instead of sending you round again

    There is a fourth reason a HubSpot permission can be missing, and it is the one where our previous advice wasted your time: an admin can disable a permission for the app itself. HubSpot then shows it greyed out on the connection screen — "This permission is disabled for this app by an admin" — and reconnecting cannot help, however many times you try. The message now names that case, tells you to stop reconnecting and have an admin re-enable it, and only suggests contacting us when the permission is one you can actually tick. Before, anyone who could merely SEE the permission was told the fault was ours.

  7. Fix Meeting links now show their durations and free slots

    Fix from testing against a real portal: asking a meeting link what it offers came back empty — no meeting lengths, no available times — even for links that plainly advertise 15, 30 and 60 minute options. HubSpot returns that part of the answer keyed by meeting length rather than as a plain list, and MetaHub was reading it the other way, so it found nothing and said so without complaining. Booking was never at risk: a slot that never appeared could not be offered or booked. Reading a link's durations and availability now works, and both shapes are accepted so a change on HubSpot's side cannot quietly empty the answer again.

  8. Improvement When a HubSpot permission is missing, the message now names all three reasons

    A missing HubSpot permission has three quite different causes, and until now we named only two — so people were told to reconnect, did, and hit the same wall. It can be that your connection was made before we started asking for that permission (reconnecting fixes it, and each person does it for themselves — the licence holder cannot do it on your behalf); that your own HubSpot user isn't allowed to grant it, in which case it simply won't appear on the consent screen and a Super Admin has to change your seat or access; or that the portal's subscription doesn't include it at all, which no reconnect changes. The middle one is easy to miss: HubSpot decides permissions per person, so colleagues on the same portal genuinely end up with different ones — we have seen six people on one account hold six different sets. The refusal now says which fix applies, and whoami lists what your own connection is missing.

  9. Marketing event custom properties are sent in the shape HubSpot expects

    Fix from testing against a real portal: custom properties on a marketing event were being sent in the wrong shape. HubSpot expects a list of name/value pairs, both when writing an event and when reading one back, and MetaHub was sending an empty object instead — so a custom property set through the tool would not have landed. You can now pass them the natural way, as a simple mapping of property name to value, and they arrive in HubSpot's shape; reading an event flattens them back into a mapping so they are legible. Listing and reading events, their registrants and attendees, and their associated lists were all confirmed working against a live account at the same time, as were the form tools.

  10. Keep people to the tools their HubSpot seat and role actually cover

    MetaHub can now decline to run a family of tools for someone whose HubSpot user doesn't cover it, in two different senses. The first needs no setup: sequences run on a Sales or Service seat and the marketing tools on a Marketing seat, and without one HubSpot refuses the call anyway — MetaHub now says so up front, naming the seat you hold and the one the tool needs, instead of surfacing a permissions error halfway through a task. The second is a choice an admin makes: hs_policy takes a map from HubSpot role name to the tool groups that role should not use here (automation, marketing, conversations, imports and exports, files, lists, reports, schema, records, deletion, admin), and those tools then disappear from the assistant's menu and are refused if it tries anyway. Worth being precise about what that second one is: HubSpot's API exposes a role's name and nothing else — no list of what the role permits — so this is your rule, enforced by MetaHub, and every refusal says so rather than implying HubSpot blocked it. Super Admins are never gated, a rule naming a role your portal doesn't have is refused rather than silently doing nothing, a rule whose role is renamed later is reported the next time anyone reads the policy, and the tools that explain a restriction stay reachable to the person restricted.

  11. Improvement Action needed: reconnect HubSpot once to switch the new tools on

    Everything MetaHub has added recently — sales sequences, spreadsheet imports and exports, meeting booking, marketing events, forms, and subscription preferences — needs permissions HubSpot did not grant when you first connected. HubSpot applies an app's new permissions to NEW connections only, so an existing connection keeps exactly the access it was created with: the tools appear, and then refuse with a permissions error. One reconnect fixes all of it at once. Open MetaHub and run connect_hubspot(), or use the connect link on your licence page, and approve the consent screen again — it takes a few seconds, changes nothing about your data, and every member of a team connects individually. Two things worth knowing: sequences additionally need Sales Hub Professional or Enterprise on your HubSpot subscription, which no reconnect can substitute for; and if you connected MetaHub with a pasted private-app key rather than the one-click flow, your key already carries whatever you ticked when you made it, so there is nothing to do.

  12. Booking permissions: ask for the one HubSpot will register

    Housekeeping behind the scenes: one of the permissions MetaHub asked for when booking meetings — HubSpot's own purpose-built name for it — turns out not to be registrable on an app at all, and asking for it stopped the whole permission list from updating. Booking works through the alternative HubSpot's API accepts, which is the contact-write permission MetaHub already holds and which a booking needs regardless, since it creates or updates the contact. Nothing changes for anyone using the tools; the permission list can now be published.

  13. Including former colleagues no longer excludes the current ones

    Fix: asking hs_teams to include deactivated colleagues used to hand back only the deactivated ones. HubSpot's owners endpoint treats "archived" as a filter rather than an addition — the same way it does for records — so the option that was meant to widen the answer silently replaced it, and a portal with 54 active people and 51 former ones reported 51. Both sides are now fetched and merged, so the same call returns 105. Found by running the tool against a real portal rather than trusting the API's parameter name.

  14. Consent: read it freely, change it carefully

    Consent now has a home in MetaHub, and the two halves of it are treated very differently. Reading is ordinary: hs_subscriptions lists the account's subscription types, shows what one contact is subscribed to and whether they have opted out of everything, and answers the same for up to a hundred addresses at once — which is the explanation behind "why did the sequence send them nothing" and "may we email this person at all". Writing is a claim about what somebody agreed to, so it is deliberately harder. Recording someone as subscribed requires a legal basis AND a sentence saying where it came from, HubSpot's own fields for exactly that, and then still asks for confirmation while quoting your stated reason back to you. Unsubscribing, and opting someone out of everything, ask too — for the opposite reason: only the person themselves can undo it. The alternative is offered in every refusal, and it is usually the right one — generate the contact's own preferences link and send it to them, so the choice is genuinely theirs. One practical note the tool enforces: these preferences are keyed on the email address, not the contact record id.

  15. Who is on which team, and both of a person's ids

    "Who is on the DACH team?" and "turn this email address into the id that other tool wants" now have an answer. hs_teams lists every team in the account with its members, opens one by name or id, and looks a single person up by email, by either of their two ids, or by name. It also does the small thing that saves real confusion: HubSpot gives a person an owner id AND a user id, records carry the owner id while sequences, meeting links and admin checks want the user id, and mixing them up produces a puzzling not-found three steps later — so both are on every row, labelled. People who belong to no team are listed rather than quietly missing, and deactivated colleagues are left out by default but can be included, because a leaver still owns deals and a report that silently drops them is worse than one that names them. Changing who is on a team stays in HubSpot's settings.

  16. See what a form captures, and what people consented to

    MetaHub can now see the account's forms and, more usefully, what each one actually captures: every field with its label and type, which are required, which object they write to, the lifecycle stage the form sets, whether it creates a contact for an unknown email address, and the exact consent text and checkboxes someone agreed to when they filled it in — the last of which decides whether you may email them at all. That is the answer to "where did this property come from", and the thing to check before an import that has to line up with fields a form already writes. Two honest limits, both stated in the tool: it reads definitions, not submissions — who filled a form in lives on the contact's timeline, in an older API this does not touch — and it does not edit anything, because a form is customer-facing web content and deleting one breaks every page that embeds it.

  17. Webinars and events: who registered, who showed up

    Webinars and events now have a home in MetaHub. hs_marketing_events lists the account's marketing events with HubSpot's own counters — registered, attended, no-show, cancelled — opens one, finds the HubSpot record behind an id from the platform the event actually runs on, and answers both directions of the attendance question: who was on this event and in what state, and which events did this person come to. It records attendance too, for a list of contact ids or of email addresses, in any of the four states HubSpot recognises, split into batches of a hundred with the event's counters read back afterwards. That write asks first, for two reasons worth knowing: participation cannot be deleted, only corrected by recording a different state, and the email form creates a contact for every address HubSpot does not already know — a CRM write hiding inside "record attendance". Events can also be created, renamed, associated with a list, cancelled or marked complete. Creating one needs the ids the event carries in the system it lives in, and MetaHub will not make those up: an event with invented ids can never be reconciled with its source.

  18. Book a meeting from chat, with the time said twice

    MetaHub can now find a rep's meeting links, read what a booking page asks for, list its free slots and book one. Times are the part that goes wrong, so every slot is given twice — in the timezone you name for the attendee and in UTC — and the timezone is required rather than assumed. The slot and the length are HubSpot's own numbers: a time that is not actually on offer is refused with the real ones next to it, and a duration the link does not sell is refused with the durations it does. Booking creates the calendar event and emails the person, and HubSpot has no unbook endpoint, so it asks first: the opening call shows the link, the attendee, the local time, the duration and which HubSpot account it would happen in, and books nothing until a second call carries the one-time token from that preview — which is tied to that exact slot, length and attendee. Two things it will not invent on anyone's behalf: a booking page's required form fields, and the legal-consent checkboxes some links carry — it quotes the text the person has to agree to and waits for you to confirm they did.

  19. Work on a marketing email, not just report on it

    MetaHub could list marketing emails and tell you which ones underperformed; now it can work on them. hs_marketing_email opens one email, reads its draft — the unpublished buffer a published email keeps its pending edits in — edits either the draft or the email itself, creates a new one, clones an existing send as the safe way to reuse it, adds an A/B variation, and walks the revision history: who saved what and when, with any old version restorable either into the draft or over the live email. It also pulls statistics for a window, either aggregated or as a time series by hour, day, week or month, so 'when did the opens actually happen' has an answer. Three actions overwrite content — discarding a draft, and the two restores — so each asks first and names the HubSpot account it would act in. Publishing is deliberately not here: publishing a marketing email IS the send, HubSpot mails it to the whole list and there is no recall, so that button stays yours in HubSpot, where the audience count and the send time are on screen.

  20. Records you create are yours, and an optional mode that keeps you in your own lane

    HubSpot's app permissions are account-wide: connecting individually gives each person their own credential, but not their own permissions — HubSpot's own documentation says an access token does not reflect what a user can or cannot do in the account. Two changes follow from that. First, anything created from your chat is now owned by you in HubSpot unless you say otherwise, so the record trail reads correctly instead of everything landing under whoever installed the app. Second, hs_policy turns on an optional owned-only mode for an account: with it on, MetaHub refuses to change records owned by other people and filters them out of what it lists back to you — and says when it has hidden something, so a short list is never mistaken for missing data. It can be widened to your HubSpot team, and Super Admins are exempt from it — reading who is one needs a permission added at the same time, so it takes effect after a reconnect; until then MetaHub says it cannot tell rather than guessing. This is MetaHub's own guardrail rather than a HubSpot permission: reports, lists, conversations, files, imports and sequences are not filtered, and it does not change what your HubSpot login itself can reach. The message a teammate gets when connecting no longer claims otherwise.

  21. Fix Sequences and imports: the permissions they need are now actually requested

    A customer connected through the HubSpot Marketplace found that every sequences call came back as a permissions error, with reconnecting making no difference. The cause was ours: when the sequences and import tools shipped, the MetaHub app was never updated to ask HubSpot for the permissions they need, so no amount of reconnecting could grant them. It now asks for all three (viewing sequences, enrolling a contact, and importing records), and the permission list is generated from the tools themselves rather than kept in step by hand — a tool that needs a new permission can no longer ship without the app requesting it. Two related fixes: a connection made through the Marketplace now reports which permissions it actually holds, so a tool can say 'this connection wasn't granted X' before calling instead of passing HubSpot's raw error through, and whoami lists what is missing. And the File Manager tools checked for a permission name HubSpot doesn't use, which would have refused perfectly good connections. Anyone already connected needs to reconnect once for the new permissions to reach them — HubSpot applies permission changes to new connections only. Sequences additionally require Sales Hub Professional or Enterprise on the portal.

  22. Fix Pipeline history now says what actually changed

    Checking the new history tool against a real HubSpot account turned up a gap between HubSpot's published specification and what its API really sends: the snapshot attached to each audit entry is documented as an object but arrives as text. The effect was that the 'what changed' line was never worked out, and each entry instead carried several kilobytes of unreadable raw data. Both are fixed. A pipeline's history now reads as plain statements — who renamed the pipeline and from what, who moved a stage, who changed a stage's win probability from 0.7 to 0.6 — and the bookkeeping fields that change on every single edit are left out so a rename is not buried among four timestamps. Stage changes are named per stage rather than reported as 'the stage list changed', and the snapshot each entry carries is trimmed to a readable summary, cutting a typical history from around ninety kilobytes to twenty.

  23. Who changed this, when, and what it said before

    MetaHub can now answer the question every CRM admin eventually asks. hs_history reads a record's change history — when a deal moved stage, who moved it, what the amount or the owner was before — as a single timeline across all the properties that matter for that object type, newest first, with the raw ids turned into the names people recognise: a stage id reads as its stage name, an owner id as the person, and the user behind each change as a name and email. The same tool reads HubSpot's audit trail for a pipeline or one of its stages, which records every rename, reorder and change ever made to the definition, and works out what each entry changed by comparing it with the entry before it. Alongside that, the delete recipes for pipelines and stages now carry HubSpot's own safety guards in the URL, so HubSpot refuses the delete while deals or automations still point at what is being removed — the 'move the records first' rule enforced by HubSpot rather than by memory, with the recipe explaining that a refusal is the guard working.

  24. The File Manager: find a file, share a private one safely, tidy the folders

    Uploading a document into HubSpot and putting it on a record has been possible for a while; hs_files covers everything after that. Search the File Manager by name, extension, folder, type or date; open one file; look one up by its path; browse and create folders; or have HubSpot pull a file straight from a URL into the account without the bytes passing through the chat. The part worth knowing: CRM attachments should stay private, and the right way to let one person see a private file is a signed link — hs_files issues one that expires in five minutes by default (up to a day), says plainly that anyone holding it can read the file until then, and records that it was issued, because it hands out customer data. Making a file public is the other direction, so it asks for confirmation, spells out that search engines can index a fully public file, and tells you afterwards what access level it ended up at. Renaming a folder is confirmed too, since it rewrites the path of everything inside. Deleting files stays where every other delete is: hs_deletion_recipe now writes the file recipe, including the permanent variant, and MetaHub does not run it. hs_upload_file also gained the options it was missing — upload into a folder by id, re-use an identical file already in the account instead of adding another copy, or overwrite one by name.

  25. Import a spreadsheet through HubSpot's own importer, and export what you ask for

    hs_import runs a CSV or spreadsheet through the same import engine HubSpot's own import screen uses — which means it can do what batch writes cannot: create the records' list, import associations, and report exactly which rows failed and why. Before anything is uploaded it checks the things that otherwise fail an hour later: that every column named in your mapping exists in the file's header, that an update or upsert has an ID column to match records on, and how many data rows the file actually holds — then shows you that, the date format in force and the HubSpot account, and waits for confirmation. Columns you didn't map are imported as ignored and listed back rather than silently shifting the file. Dates default to year-month-day, so a European sheet fails loudly instead of quietly turning 3 September into 9 March. Afterwards hs_import reports HubSpot's own row counters and the per-row errors, with each failing row's values, so you can fix and re-import just those. Cancelling says plainly that rows already imported stay imported. hs_export starts an export of a search result or a list and hands back the download link once HubSpot has built the file, with a reminder that the link is short-lived and holds customer data.

  26. Sales sequences: see them, and enrol a contact with a confirmation first

    MetaHub can now work with HubSpot sales sequences — the per-rep follow-up cadences that send one-to-one email from a person's own inbox. hs_sequences lists the sequences a given user can see, opens one to show its steps (which are emails, which are task reminders, and how many days apart), and answers "is this contact already in a sequence?" for any contact. Because HubSpot scopes sequences per user, every read says whose view it answered from. hs_enroll_sequence starts a cadence for one contact — and because the first email can go out within minutes and HubSpot's API has no way to un-enrol anyone, it asks first: the opening call reads the sequence and the contact, shows you the steps, the recipient, who it would send as and which HubSpot account it would happen in, and enrols nothing. Only a second call carrying the one-time token from that preview goes ahead, and the token is tied to that exact sequence, contact and sender, so a change after you approved it invalidates it. A contact with no email address is refused outright, and one who has opted out of email is flagged on the preview. Creating or editing a sequence, and stopping one, remain HubSpot UI work — the API offers neither.

  27. Import by upsert, and merge duplicate records with a preview

    Two writes HubSpot's API has had for a while are now in MetaHub. hs_batch_upsert creates or updates up to 100 records per call keyed on a unique property — email for contacts, domain for companies, the Record ID for anything — so an import can be re-run without creating duplicates: matching records are updated, the rest are created, and the result says which was which using HubSpot's own flag. It is verified the same way updates are: property names HubSpot would silently ignore are refused before anything is sent, and every record HubSpot hands back is compared with what was sent, so a dropped value is reported as a failed write rather than a success. hs_merge folds one record into another for contacts, companies, deals, tickets and custom objects. Because a HubSpot merge cannot be undone, the first call only reads both records and shows you what would survive and what would be archived, names the HubSpot account it would happen in, and asks for confirmation; after the merge it re-reads the merged record to confirm it is really gone. Bulk archiving stays where the other deletes are: hs_deletion_recipe now writes the batch-archive recipe for a list of ids instead of MetaHub executing it.

  28. Put records on a list, take them off, and see which lists a record is on

    HubSpot lists were create-only in MetaHub; now they are fully workable. hs_list_memberships adds records to a static (MANUAL or SNAPSHOT) list, removes them, does both in one call, or copies every member of another list across — any number of records, chunked to HubSpot's 100-per-call limit for you. It also answers "who is on this list" (with the properties you ask for, most-recently-added first if you like) and "which lists is this contact on", for one record or a hundred. hs_lists finds a list by name or search (every row carries its size), renames it, replaces a dynamic list's filter, restores a deleted list within HubSpot's 90-day window, and manages list folders. The safety rules from the rest of MetaHub apply: a DYNAMIC list is defined by its filter, so membership writes on it are refused before anything is sent, with the fix spelled out; every membership write reports the list's size before and after alongside HubSpot's own per-record receipt; removing members, copying a whole list in, and replacing a filter each ask for confirmation first and name the HubSpot account they would act in; and a folder is only deleted once it is empty.

  29. Improvement Every parameter HubSpot's current API offers on the tools you already use

    We compared MetaHub's tools against HubSpot's latest published API specifications (the 2026-03 release, all 117 APIs) and closed the parameter gaps on the tools that were already there. Records can now be fetched and updated by a unique property instead of an id — a contact by email in one call, no search first — and any read can ask for a property's full change history (when a deal changed stage, who changed the owner). Property creation and updates now cover everything HubSpot's own form does: hidden, display order, form field, unique values (which then also work as lookup keys), calculated properties, owner pickers, number and currency formatting, and Sensitive Data marking. The marketing email list filters server-side on created, updated and published dates, email type, campaign and published state, sorts, and pages. Inbox search can look through archived threads. The same audit produced a prioritised list of HubSpot API families MetaHub does not cover yet; those are separate work.

  30. Fix A write that HubSpot quietly ignored no longer reports success

    HubSpot answers some writes with a normal success response and then does nothing with them: a property that is read-only or calculated — marketing contact status is the common one — is accepted by the API and dropped, with no error, and the record's last-modified date never moves. MetaHub used to pass that straight through as a successful update, which is worst of all in bulk: a run over a few thousand contacts could report every one of them updated while nothing in HubSpot changed, and the first sign of trouble would be a number that refuses to drop weeks later. Two things changed. Before an update is sent, MetaHub reads the portal's own property definitions and refuses the ones HubSpot marks read-only, naming the way the change actually has to be made — for marketing contact status that's the contacts index bulk action, a "Set marketing contact status" workflow, or an import, and it also says that contacts set as non-marketing stay billable until the portal's next update date. After a write, MetaHub compares what it sent against what HubSpot handed back: a value that came back different is reported as a failed write with the two values side by side, not as an update, and a bulk call counts only the records that really changed. Creates are treated differently on purpose — the record does exist, so a dropped property is a loud warning that names it rather than a failure that would tempt a retry and duplicate the record. The comparison tolerates HubSpot's own normalisation (true/false, numbers, dates), so ordinary writes stay silent.

  31. Improvement Tool descriptions no longer talk about Pipedrive

    A number of MetaHub's tool descriptions introduced themselves as "the HubSpot counterpart of" a Pipedrive tool — a leftover from how the two products were built side by side. On MetaHub those references point at tools that don't exist here, which at best wastes the AI's attention and at worst sends it looking for them. The descriptions now just say what each tool does. No tool names, arguments, or behaviour changed.

  32. Fix A self-hosted deployment whose database is down now starts, says so, and heals itself

    Self-hosted deployments store their state in PostgreSQL, and when that database was unreachable — a stopped server, a network hole — the service used to hang during startup forever: the health endpoint never answered, so a plain database outage looked like anything but one. Startup is now bounded. The service comes up degraded, /health answers ok:false with db "postgres:unreachable" and HTTP 503 — loudly distinguishable from healthy, so a deploy pipeline's health gate still refuses to promote a build that can't reach its database — and the logs name the actual connection error. Once the database answers again, the service finishes its deferred boot work and returns to healthy on its own, no restart needed. Every database connection attempt is also bounded now (METAPIPE_DB_CONNECT_TIMEOUT, default 10 seconds). Hosted deployments on SQLite are untouched.

  33. Fix Switching HubSpot accounts now actually holds for the next call

    On a licence that covers several HubSpot accounts, hs_use_account reported the switch, handed back an account_token to keep the chat on that account — and then the next write was refused for having no account selected. The token was the only thing tying the two calls together, and no tool advertised it as something you could send, so assistants dropped it. The switch now also holds for the rest of the connection on its own, and the token is a documented argument on every tool, so a chat stays on the account it picked even when the connection is shared with another chat or restarted underneath it.

  34. Fix Everyone on a team licence can connect their own HubSpot — asking no longer looks like the licence is full

    A licence covers one HubSpot portal, and everyone on it connects to that same portal individually, so MetaHub acts as each person with exactly their own permissions and scopes. Asking MetaHub to connect used to count portal slots instead of people: with the one slot in use it answered that the licence was full and offered removing a colleague's connection, which would only have moved the problem. The error you hit mid-work pointed at your account page, which on a team licence with its portal already connected shows nothing to press. Both now hand you a one-click link that connects you personally to the portal the licence already uses — no extra slot, nobody displaced. The account page says so on the HubSpot card, and the Team members card can mint a connect link for any teammate.

  35. Improvement MetaHub now warns you when a HubSpot token you pasted ends up in the chat history

    Connecting HubSpot by pasting a Private App token or Service Key means typing a live credential into a conversation, and it stays in that conversation's history — including anywhere the chat is exported, screenshotted or shared. We keep credentials out of our own logs and out of tool results, but not out of your message. So connect_hubspot now says so afterwards: the connection works and the token is fine, but if the portal matters, treat the key as exposed, rotate it in HubSpot under Settings → Integrations → Private Apps, and reconnect with the one-click install. The one-click link is what MetaHub offers first everywhere now, with the reason attached. Pasting a token still works and isn't going away — some setups have no browser to run an install in. whoami also reports which connection is actually in play, so "why is it still using the old token" is answerable without guessing.

  36. Improvement Every answer now says which HubSpot portal it came from

    One chat can be pointed at several Pipedrive accounts, and each answer carries a small block of metadata telling your AI which one is active. Until now that block said nothing at all when no account had been picked — it left the field empty. But empty did not mean the call went nowhere: it went to the default account. So a chat that had been pointed at a client's Pipedrive and then lost that pointer (a server restart is enough) looked like it had no account selected, while it was quietly reading and writing somewhere else. The field is never empty now. If no account was picked, it says so and names the one being used instead, marked as the default so it can never be confused with an account you chose. Same for MetaHub, where no account selected means the call would fail rather than fall back — it now says that too, instead of leaving your AI to infer it.

  37. Improvement A pinned HubSpot account now survives a reconnect

    hs_use_account lets you point one chat at a specific client's HubSpot, and metawork_context lets you name that pointer so several chats can deliberately share it. Both work by handing your AI a signed token to carry on every following call — the token, not the connection itself, is what keeps the chat locked to that account, because the connection your AI client happens to be using can change without warning: a reconnect, a network hiccup, or us deploying an update all hand out a fresh one. Until now, naming a pointer with metawork_context (or pointing hs_use_account at one by name) skipped that token, so it relied on the connection staying the same after all. When it didn't, the chat lost its HubSpot context silently — no error, just the wrong portal or none at all. Every named pointer now gets a token too, so reconnects no longer reset it.

  38. Improvement Every confirmation prompt now names the HubSpot portal it means

    MetaHub asks you to confirm before anything irreversible — deleting a workflow, creating or updating records in bulk, sending an inbox reply. Until now those prompts named the record and stopped there, which reads exactly the same whether it is about to happen in your own portal or in a client's — and one chat can be pointed at several portals. Every confirmation now says which HubSpot account it would act in, and hands your AI that account as a separate field so it can show it to you before you answer; the send-reply preview carries it too, which matters because HubSpot has no unsend. The receipt after the write names the same account, matching what the audit log recorded. If the account cannot be worked out, the prompt says so loudly instead of quietly leaving it out. One related fix: a dry-run workflow delete no longer reports itself as a success — nothing was deleted, and the audit log now agrees.

  39. Improvement whoami reports your HubSpot, and nothing else

    `whoami` — the check your AI runs first to confirm it's connected to the right account — described both HubSpot and Pipedrive, whichever product you bought. On MetaHub that meant every check also reported on Pipedrive: a line saying no Pipedrive is connected, and suggesting you install MetaPipe from the Pipedrive Marketplace — inside a HubSpot product that has no Pipedrive tools to use it with, with a lookup against our licence service behind it every single time. Your AI reads that answer, so it could pass the suggestion on to you unasked. It now describes the CRM this product actually drives: your HubSpot connection, which portal this chat is pointed at, and who on your team has connected. The same fix repairs something that mattered more if you run several HubSpot portals on one license: after switching a chat to another portal, the short confirmation MetaHub attaches to each answer — the one naming the active account and carrying the token that keeps the chat locked to it — was looking at the Pipedrive slot, found nothing, and stayed silent. It now names your HubSpot portal, so a chat can't drift onto another one unnoticed.

  40. Improvement Tool changes can't break your connection silently any more

    Every connection now reports which version of the tool set it is serving, and your AI can see it. That matters because of a quiet failure the protocol allows: your AI client caches the list of MetaHub tools when it connects, and nothing ever tells it that list went out of date. When we rename or merge a tool, a client still holding the old list keeps offering the old name — and the call fails at the moment you need it, with an unhelpful "unknown tool". From now on: the version and a short fingerprint of the tool set ride along with every connection, `whoami` reports them, and a call made under a retired name either runs anyway (we forward it) or tells you exactly which tool replaced it and that reconnecting will refresh your list. Nothing about your CRM data changes; this is about MetaHub never breaking silently underneath you.

  41. Marketing email performance, judged against your own numbers

    Ask which email underperformed and you get an answer, not a table. MetaHub pulls every send in a window and scores each one against your account's own median — because "22% open rate" means nothing on its own, and "22% against your usual 31%, with unsubscribes up threefold" is the thing you actually needed to know. Deliverability problems (bounces, unsubscribes, spam complaints) are flagged separately from dull copy, because a list quietly dying is the bigger problem. The campaign report was also rebuilt. It had been returning campaigns with every field blank — name, status, dates, budget, metrics, assets, all null — because it was asking HubSpot the wrong questions. It now returns real attribution (sessions, new and influenced contacts) and a per-asset breakdown with each asset's own numbers: emails with their sends and opens, landing pages with views and submissions, forms with conversion rates. One honest limitation: HubSpot retired the API that listed exactly who opened a given email back in October 2025. You get exact counts, plus the contacts the campaign is credited with — and MetaHub tells you which is which rather than passing one off as the other. These tools need Marketing Hub Professional; HubSpot won't allow access below that plan whatever your permissions say. On a lower plan they say so in one line instead of failing with an error code.

  42. MetaHub works your inbox now — read it, triage it, reply to it

    MetaHub can now see the conversations inbox: ask what's unanswered, read a thread, summarise it, file it against a deal, and reply to it. The useful part isn't the reading — it's "who's waiting on us". HubSpot has no way to ask that; MetaHub works it out by comparing when the customer last wrote to when you last answered, sorts by how long they've been waiting, and puts the people with an open deal behind them at the top. Ask "what's unanswered in the inbox" and you get a worklist, not a list. Replying is deliberately two steps. MetaHub drafts, shows you the exact wording, who it's going to and whose name it goes out under — and sends nothing until you say yes. If you change a word after that, it asks again, because what gets sent should be what you read. HubSpot has no unsend, so this isn't negotiable. Internal notes never reach the customer, and WhatsApp threads can be read but not replied to (HubSpot doesn't allow it through the API on any plan). Summaries include inbox conversations now too, so a deal recap stops missing the exchange that actually moved it. Ask hs_playbook('conversations') for the method. One thing to do: this needs new HubSpot permissions, and HubSpot only applies permission changes to new connections. Reconnect HubSpot once from your account page — everything else keeps working in the meantime.

  43. Improvement Connect HubSpot as any user, not just the one that bought the license

    Connecting HubSpot used to fail unless the HubSpot user approving it was the license's billing email or a listed team member — everyone else landed on "isn't on this license" with nothing they could do about it. That check is gone. Whoever you happen to be signed in to HubSpot as can approve the connection, and the account that approved it is recorded so you can see who connected what. If your HubSpot login differs from the address you pay with, or you manage a client's HubSpot, connecting works now.

  44. Add another HubSpot account with one click

    Agency licenses no longer need a Service Key pasted for each extra HubSpot account. Ask your AI to connect and it hands back an authorization link — approve it in HubSpot and that account joins your authorized set. Disconnecting works per account too, so removing one client's HubSpot leaves the rest in place. Before it answers, each chat verifies which account it's actually pointed at, so a question about one client can't be answered out of another client's CRM.

  45. Improvement Move your license to a different HubSpot

    Solo licenses cover one HubSpot account at a time, and moving to another one was always allowed — but once you had connected an account the page offered no way to do it, so the only route was reinstalling MetaHub from the marketplace. There's now a "Connect a different HubSpot" button on your account page. Sign in to the account you want before you press it: it replaces the one you had, and MetaHub stops reaching the old one.

  46. Improvement Solo plans now sign in through your browser

    Connecting a Solo license by pasting your license key into a config file no longer works — you sign in through your browser instead, the same way Claude and ChatGPT already connect. A license key identifies the license, not the person holding it: one Solo key pasted into five configs looks exactly like one person working from five machines. Signing in fixes that at the root. If you connect MetaHub through Claude, ChatGPT, Microsoft Copilot or GitHub Copilot you were already signing in and there's nothing to do; Gemini CLI now signs in too. Team plans keep license-key access; they're seat-counted and tied to their CRM account already.

  47. Improvement Gemini CLI connects with a browser sign-in

    Setting up Gemini CLI used to mean pasting your license key into ~/.gemini/settings.json. It signs in through your browser now, like every other client: add the server, run /mcp auth metahub, and approve it in the window that opens. Nothing secret sits in a config file on disk anymore.

  48. Improvement Slow token service no longer looks like a missing connection

    When our HubSpot token service answered slowly (cold start plus a token refresh), the error shown was the onboarding message — telling an already-connected customer to reinstall the app. A slow broker now says exactly that («temporary, retry in a few seconds»), and the timeout budget was raised to cover the slow path.

  49. Improvement Activity log names the account it wrote to

    Every entry in the activity log now records WHICH portal/account the write dispatched against — relevant when a team operator switches between clients, and for dedup merges, which carry the account they ran on. Filter with account= to see one account's history.

  50. Improvement Dedup understands deals now

    Deals join contacts and companies as a dedup entity — same review-and-merge flow, same audit trail. Recurring deals are handled: two deals in the same series (retainers, renewals) are recognized as siblings, not flagged as duplicates.

  51. Improvement Dedup manual mode requires an invite or sign-in

    The paste-a-token mode of the dedup page is now gated behind a client invite link or Google/Microsoft/email sign-in, and every merge is attributed to the person who clicked it in the audit log.

  52. Improvement Activity log keeps two years

    Audit entries older than two years are pruned automatically.

  53. Improvement Audit log now covers dedup merges too

    Last week's activity log didn't catch merges made through the dedup tool — they run on a separate path and slipped past it. They're logged now too, one line per merge naming the record that was merged away and the one that survived, so «why is this duplicate gone» has an answer there as well.

  54. An activity log for every change, with the reason why

    Every write your AI makes — updates, archives, merges, pipeline changes — now lands in an activity log you can ask about directly: «why did we change that» or «why is this deal missing» gets a real answer instead of a guess. Tell your AI why you're making a change and it notes the reason down too, so it survives past the conversation it happened in. Available on every plan.

  55. Improvement Search filters that actually filter

    Filtered HubSpot searches could silently come back unfiltered if the filter conditions arrived in a slightly different shape than expected. That's fixed — a filtered search now filters, and if something about the filter still doesn't parse, you get a clear error instead of a full, unfiltered result set.

  56. Find and merge duplicate custom objects

    The dedup tool now works on your custom objects, not just contacts and companies. Pick a custom object — your Aufträge, Ausgaben, or whatever your portal uses — and MetaHub finds likely duplicates by name and your searchable fields, shows them side by side, and merges the ones you confirm. Available on HubSpot Enterprise portals, where custom objects live. As always, merges can't be undone, so review before you confirm.

  57. Workflows that react to line-item changes

    MetaHub can now build HubSpot workflows that trigger on line-item changes — a product added to a deal, a quantity or price updated — which HubSpot doesn't offer as a native trigger. Ask your AI to automate something that should happen 'whenever a line item on the deal changes' — re-run pricing, flag the deal for review, notify the owner — and MetaHub sets up a flow that reliably picks those changes up. Line-item-driven automation that just works, no special add-ons required.

  58. Improvement Labels on linked records now apply correctly

    When MetaHub links two records in HubSpot — tagging a contact as the 'Billing Contact' on a company, or the 'Decision Maker' on a deal — the label you ask for now actually sticks. Custom association labels your team defined in HubSpot were sometimes rejected or applied with no label at all; MetaHub now reads your portal's exact label definitions and applies the right one every time. Ask your AI to link a contact to a deal 'as the billing contact' and the labelled relationship shows up correctly in HubSpot.

  59. Improvement Custom-code workflow steps, and properties that file correctly

    MetaHub can now assemble HubSpot workflows that include custom-code steps — it knows the exact step format, the Node runtime, and that the workflow secret must exist in your portal before the workflow is created (a missing secret used to fail with an unhelpful server error). It also knows line items can't trigger a workflow on their own, so it builds deal-triggered flows that walk the deal's line items instead. And creating a deal property now lands in HubSpot's correct built-in group on the first try; for custom objects it asks which group to file into rather than guessing wrong.

  60. Improvement Add credit & discount lines to deals

    MetaHub can now put a negative-value line on a deal — a credit, rebate, or give-back — even though HubSpot won't accept a negative unit price. Ask for a line at a negative amount and it records the value as a line discount so the deal total comes out right. When a quantity is involved and it's unclear whether you mean the whole line or each unit, it asks first instead of guessing.

  61. Build HubSpot workflows from your AI

    MetaHub can now create, edit, turn on or off, and delete HubSpot workflows for you — set up an automation just by describing it. Ask it to enroll contacts when they submit a form, wait a day, then send an email or create a follow-up task, and it assembles the whole workflow and hands you a link to review it in HubSpot. New workflows are created switched off, so nothing runs on your records until you've checked it and flipped it on. To stop a workflow it disables it rather than deleting, since a deleted workflow can't be restored without HubSpot Support.

  62. Improvement Linking records just works, even without naming the connection

    When you ask MetaHub to link two records — or to create them already linked — without spelling out the relationship type, it now uses HubSpot's default association for that pair instead of erroring out. So 'link this contact to that company' works on its own, no need to know the association type.

  63. Attach files to HubSpot records

    You can now upload a file and attach it to a deal, contact, company, or ticket straight from your AI. The file is added through a note on the record — HubSpot's standard way of surfacing attachments. Attach by link (a Google Drive or Dropbox 'anyone with the link', or any public/signed URL) for instant, no-wait uploads, or drop a small file straight into chat. Ask 'how should I upload files?' for the best path.

  64. Clean & dedupe your spreadsheet before importing

    Big imports into HubSpot now start with a clean-up pass. Drop your contacts, companies, or deals sheet into the dedup tool and it tidies and de-duplicates the rows for you — matching exact first, then fuzzy, and ignoring legal suffixes and industry boilerplate when it compares — then hands back an import-ready CSV with your original columns intact: the winning record kept, absorbed duplicates removed. The method is built into the playbook too — ask your AI to plan an import and it steers large files through clean-then-import, counting rows in vs. out so nothing is silently lost.

  65. Built-in CRM playbook — hs_playbook

    Ask your AI to design a pipeline, create properties, model a custom object, plan an import, or run any task the Metawork method covers, and it now follows a documented playbook instead of improvising. hs_playbook() lists the topics (import · pipelines · properties · tasks · data_safety · crm_choice · tools); hs_playbook(topic) returns the full method. Property-group hygiene is baked in — it checks existing groups and asks where to file before creating properties.

  66. Create & edit pipelines and stages from your AI

    New hs_create_pipeline, hs_update_pipeline, hs_create_stage, and hs_update_stage tools — build or reshape a deal or ticket pipeline from the chat, with the method's data-safety guards applied so stages and their records stay intact.

  67. Improvement Every task links to a record — no orphan activities

    Creating a task now requires associating it to the contact, company, or deal it belongs to — HubSpot won't accept a loose, unlinked task through MetaHub. Keeps your activity timeline attached to something you can actually find again.

  68. Improvement Dedup: sessions are long-lived and survive deploys

    The dedup queue is for long work — matching takes minutes, triage can take days, and the tab tends to stay open across breaks. Sessions are now a 5-day sliding window (any activity extends them) instead of a 15-minute hard cap. On top of that, the page transparently re-mints the session token if the server returns 401 — so a deploy restart or a long break no longer ends with "Session token expired" the moment you click merge.

  69. Improvement Dedup: manual-API-key users get the full feature set

    When you connect by pasting your HubSpot Private App token directly into the dedup page (instead of going through hs_dedup), the SPA now mints a server-side session token automatically. Practical impact: merges no longer fail with "Missing session token", and the new settings UI (visible fields, match rules, audit log, export/import) shows up. Settings persist per-token, so reconnecting with the same token brings your configuration back.

  70. Improvement Dedup: horizontal scroll for wide clusters

    When a cluster has more records (or more visible fields) than fit on screen, the comparison table now scrolls horizontally instead of squeezing columns. The field-label column on the left stays sticky as you scroll so you don't lose context.

  71. Improvement Dedup settings: export / import + audit log

    Save a snapshot of your dedup configuration to JSON and roll back at any time — Export downloads the full license doc (team defaults + everyone's personal overrides), Import replaces it atomically with the same validation a normal save uses. The new Audit log tab records the last 50 changes (who, when, which scope, which fields) so it's easy to spot when a teammate changed something that affects everyone's queue. Import is recorded in the log too.

  72. Dedup match rules now support per-rule conditions

    Each discriminator / identifier / soft signal can carry an optional condition that gates when it fires: minimum value length, non-empty, or a regex pattern (case-insensitive full match). Useful for rules like «treat customer_number as a discriminator only when it's at least 5 chars» or «promote to definite if both tax IDs match DE.+». Backward compatible — existing rules without conditions keep working unchanged.

  73. Personal overrides on top of team dedup settings

    Team-license members can now keep their own visible-field choices and match rules separate from the team defaults without forking the whole config. The settings modal grows a Team / Personal toggle: edit team defaults in the Team scope (everyone sees the change), or build a personal layer in the Personal scope that overrides the team field-by-field per entity. A Reset to team default button cleans up overrides you no longer want. Solo licenses don't see the toggle — there's no team to override.

  74. Dedup: configurable visible fields + three-bucket match rules

    Every team works the dedup queue differently — some live by tax ID, some by customer number, some only ever look at title and country. The new ⚙ Fields & rules modal (top of the page, also reachable from any expanded cluster) lets each license decide which fields show in the comparison view per entity, and define three buckets of match rules: discriminators (values differ → not a duplicate, cluster hidden), identifiers (values match → promoted to Definite), and soft signals (contributes to Likely/Possible). Settings are shared across the whole Team license so the queue looks the same for everyone; last-edited-by stamped so you can see who changed what.

  75. hs_summarize — one-call recap data for contacts, companies, deals, tickets

    «Brief me on Acme», «what happened with the Smith deal», «catch me up on this ticket» — hs_summarize gathers everything your AI needs to compose a coherent recap in a single tool call: entity context, activities (open + done), notes, emails, files, and (in broad scope) the history attached to the linked contact and company via HubSpot's Engagements + Associations APIs. Asks you up-front whether you want narrow (just the entity) or broad (linked records too), and recent (past 6 months) or all-history — the AI can't silently pick for you.

  76. Dedup — server-side merge queue (close the laptop, walk away)

    Large dedup runs no longer require the browser tab to stay open. Clicking «Merge this group» or «Merge selected» now hands the work off to the server — only the IDs travel, never the record content. You can close your laptop, the lid will keep merging. The dedup tab shows live progress and reattaches automatically when you come back. Job files hold only the merge plan (entity type + survivor + loser IDs) and your already-resolved API token; they auto-delete 24 hours after the job finishes so credentials don't linger on disk. Works on both MetaPipe (Pipedrive) and MetaHub (HubSpot).

  77. Improvement hs_create_property_group + hs_associate_schema_to fix

    New tool to create custom property groups on any object type, so onboarding a complex data model (40+ fields across products, deals, line items) no longer needs UI clickwork before properties can be filed cleanly. Also fixed hs_associate_schema_to which rejected friendly names, IDs, and FQNs — the body now sends the correct objectTypeId format and the default association name is sanitized to HubSpot's ^[a-zA-Z][a-zA-Z0-9_]*$ rule.

  78. Milestone hs_dedup — browser-based HubSpot deduplication

    Same hosted browser tool as MetaPipe's pd_dedup, now for HubSpot contacts and companies. Fuzzy name matching with Levenshtein gating, E.164 phone normalization, marketplace + social-host blocklists, address gate (different city/country = sister offices not duplicates), persistent decisions across re-analyses, Flag-and-skip via Note writes, shift-click range select. Data never leaves your browser — merges call HubSpot directly via the v3 /crm/v3/objects/{type}/merge endpoints.

  79. hs_summarize — entity recap data on demand

    Ask your AI to summarize a contact, company, deal, or ticket — it pulls notes, calls, meetings, emails, tasks (and for broad scope on deals/tickets, the engagement history of associated contacts + company) and composes a recap covering what happened, what was discussed, outstanding next steps, and accomplishments. The tool asks first: narrow vs broad (engagements often live on the contact, not the deal), and recent (6 months) vs all-history.

  80. Owner + property search, portal info, campaign report

    hs_search_owners (optional open-deal-count enrichment), hs_search_properties (text search + sensitive-field gate), hs_get_portal_info, hs_campaign_report (Marketing Hub list + metrics + assets in one call).

  81. Improvement PHI sensitive-property filter

    Properties flagged with HubSpot’s dataSensitivity=sensitive are hidden from property listings by default. Pass include_sensitive=True to opt in explicitly. Matches HubSpot’s own MCP posture.

  82. Reporting + forecasting tool surface

    Added hs_pipeline_funnel, hs_pipeline_forecast, hs_activity_report, hs_conversion_report, hs_won_deals_report, hs_lost_deals_report, hs_new_contacts_report, hs_stale_deals, hs_user_leaderboard. Ask your AI for any common HubSpot report by name.

  83. Milestone MetaPipe + MetaHub split into distinct products

    Same codebase, two deployments. HubSpot tools live at metahub.metawork.studio, Pipedrive at metapipe.metawork.studio. Buy what you need, no bundle pressure. Internal split via METAPIPE_SCOPE.

  84. Gemini CLI support

    Drop MetaHub into ~/.gemini/settings.json with a Bearer token. Same tool surface as the Claude + ChatGPT paths.

  85. Improvement Multi-account team mode polish

    hs_use_account / hs_list_accounts. Pipedrive and HubSpot active-account state is now decoupled per team caller — operate as client A in PD while operating as client B in HS in the same session. connect_hubspot accepts HubSpot’s newer Service Keys alongside Private App tokens.

  86. ChatGPT Developer Mode connector

    OAuth flow in ChatGPT Settings → Connectors. Email match against your checkout account; no separate token.

  87. Custom-object handling — first-class

    hs_create_custom_object_schema, hs_associate_schema_to, hs_list_associations, hs_list_association_types, hs_disassociate. Service contracts, products, partners, projects — whatever you model, your AI can operate it.

  88. Vocabulary-aware property handling

    MetaHub resolves portal-specific list names, pipeline names, and property labels server-side. Your AI doesn’t have to guess what «the re-engagement list» means in your portal.

  89. Milestone Public beta on Claude.ai

    Phase-1 launch with 31 tools covering objects (contacts, companies, deals, tickets, custom), properties, search, associations, batch reads/updates.

Stop maintaining your HubSpot. Start selling.

The AI you already pay for, doing the CRM work you'd rather not. 30 days free, then less than two hours of a specialist's time for the whole year, cancel any time.

Start 30-day free trial

Running an agency or consultancy? MetaHub also handles multi-portal dispatch, per-client credentials, and tenant-isolated team mode — the way we built it for our own client work. Contact us →