> ## Documentation Index
> Fetch the complete documentation index at: https://docs.consile.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# HubSpot CMS

> Pages, blog, HubDB and traffic analytics from your HubSpot CMS, plus creating and editing drafts with confirmation before publishing, directly from your AI.

*[Læs siden på dansk](https://docs.consile.ai/connectors/hubspot.md)*

The HubSpot CMS connector gives your AI access to the content in your HubSpot portal:
site and landing pages, blog (posts, tags, authors), HubDB tables and rows
and read-only traffic analytics. It can also create and edit drafts for
you behind clear guardrails. You approve the Consile HubSpot CMS app with your
HubSpot login, and your AI never sees the access token itself.

> [!NOTE]
>
> **Read + guardrailed write.** The read tools change nothing. Drafts require no
> confirmation, but everything that publishes to your live site or discards a
> HubDB draft requires your explicit confirmation. See
> [Actions & guardrails](https://docs.consile.ai/en/essentials/actions-and-guardrails.md).

> **Access**
>
> Read + guardrailed write

> **Authentication**
>
> HubSpot login (OAuth)

> **Hosting**
>
> Hosted in the EU · Frankfurt

* **Price:** 299 DKK/month excl. VAT. No lock-in,
  cancel at any time. The price covers 1 user and 1 HubSpot portal. Each extra
  user and each extra HubSpot portal costs 149.50 DKK/month excl. VAT. See
  [Pricing](https://docs.consile.ai/en/portal/pricing.md). HubSpot CMS is also included in
  [the Consile Studio membership](https://docs.consile.ai/en/portal/membership.md) and
  [the free edition](https://docs.consile.ai/en/portal/free-edition.md).
* **Users:** whoever buys HubSpot CMS automatically gets the included access.
  If more colleagues need the connector in their AI, an administrator gives them
  access under **Team** in the portal (choose **All tools** next to HubSpot CMS
  on the person's page). An extra user is billed pro rata from the day
  access is given. A colleague without access can still see the tools in their AI, but
  every call is refused with a message to ask an administrator for access. With
  **All tools**, the user gets the tools the organization has switched on (by
  default all 23), and with **Custom** the administrator chooses exactly
  which ones. One access covers all your HubSpot portals. If you have
  [the Consile Studio membership](https://docs.consile.ai/en/portal/membership.md), an administrator
  instead gives one membership licence per person, and it also covers HubSpot CMS. See
  [Team](https://docs.consile.ai/en/portal/team.md).
* **Endpoint:** `https://mcp.consile.ai/hubspot/mcp` (your own named connector in Claude).

> [!NOTE]
>
> **Multiple HubSpot portals.** You can connect several HubSpot portals under the same
> subscription. The Consile portal calls each connection an agreement, so each
> HubSpot portal is its own agreement. Each extra agreement costs 149.50 DKK/month
> excl. VAT. An administrator adds it in the [portal](https://app.consile.ai):
> open HubSpot CMS, and click **Add agreement (149.50 kr/mo.)** on the
> **Connections** card. When the new agreement is ready, you click **Connect** next to it
> and approve the HubSpot portal you want to connect. A connected agreement is
> normally shown with the HubSpot portal's id, for example *HubSpot-portal 12345678*. Each agreement has
> its own URL: the first is `https://mcp.consile.ai/hubspot/mcp`, the next
> `https://mcp.consile.ai/hubspot-2/mcp` and so on. You add each URL in your AI as a
> separate connector, so your AI keeps the portals apart. Under
> [the Consile Studio membership](https://docs.consile.ai/en/portal/membership.md#one-more-agreement-in-a-system)
> there is no button to add an agreement, so write to
> [support@consile.dk](mailto:support@consile.dk) instead.
>
> An administrator removes an extra agreement with the menu next to it (the three
> dots): choose **Remove the agreement**, and confirm with **Remove agreement**. Payment
> for it stops. When an agreement has been removed, the address of one of the remaining
> agreements can change. Check the setup of the HubSpot connectors in
> your AI afterwards. The last agreement is removed by cancelling the subscription under
> **Subscription**.

## Requirements for your HubSpot portal

The connected HubSpot portal must be on CMS/Content Hub or Marketing Hub
Professional/Enterprise. The permissions the connector uses (`content`, `hubdb`
and `business-intelligence`) only exist on those plans. If the portal cannot grant
all of them, the connection is not completed. Traffic analytics also requires
Marketing Hub Professional/Enterprise.

## Prerequisites

**1. Connector bought**

An administrator buys HubSpot CMS in the [portal](https://app.consile.ai): open
**Marketplace**, choose **HubSpot CMS** and click **Add connector**. See
[Buy a connector](https://docs.consile.ai/en/portal/buy-a-connector.md).

**2. Your AI connected**

See [Connect Claude](https://docs.consile.ai/en/connect/connect-claude.md) or
[Connect ChatGPT](https://docs.consile.ai/en/connect/connect-chatgpt.md).

**3. HubSpot connected**

Click **Connect now** on the HubSpot CMS page in the portal, log in with HubSpot
and approve the Consile HubSpot CMS app for the portal you want to connect.
Access is renewed automatically, so you do not have to keep approving it. See
[Connect HubSpot CMS](https://docs.consile.ai/en/connect/connect-hubspot.md).

## What can it do? (tools)

You do not need to know the tool names. You ask in natural language, and your AI picks
and calls the right tool itself. Your AI sees each tool as
`hubspot__<tool>` (for example `hubspot__list_pages`), and on an extra agreement as
`hubspot-2__<tool>` and so on. Below, the bare names are shown for readability. The connector
also has the `connect_account` tool, which gives you a link to connect
(or reconnect) your HubSpot portal directly from the chat. The link works for 10
minutes. Reconnecting requires an administrator.

The connector provides **23 tools** in total: 14 read-only (pure
reading) and 9 write tools, of which the 4 that publish or discard
require confirmation.

### Reading (14 read-only)

**Pages**

| Tool | What it does |
| - | - |
| `list_pages` | Site or landing pages with paging; set `archived:true` for archived ones |
| `get_page` | One page in the live/published version, fetched by id |
| `get_page_draft` | The page's unpublished draft, so you can see pending changes before publishing |
| `list_page_revisions` | Earlier published revisions of a page (id, time, author) |

**Blog**

| Tool | What it does |
| - | - |
| `list_blog_posts` | Blog posts with paging; set `archived:true` for archived ones |
| `get_blog_post` | One post by id (body, meta, tags, publishing status); `draft:true` reads the draft |
| `list_blog_tags` | Blog tags with paging |
| `list_blog_authors` | Blog authors with paging |

**HubDB**

| Tool | What it does |
| - | - |
| `list_hubdb_tables` | The portal's HubDB tables: id, name, label, column metadata, row count, publishing status |
| `get_hubdb_table` | One table's full definition incl. column schema (types, options, foreign id) |
| `list_hubdb_rows` | Rows in a published HubDB table with paging, cell values per column |
| `get_hubdb_row` | One published row by `rowId` |
| `export_hubdb_table` | Export a table's data as CSV; returns the file content as text |

**Analytics**

| Tool | What it does |
| - | - |
| `get_traffic_analytics` | Traffic and page views over a date range, optionally broken down by content, source, geo or UTM (requires Marketing Hub Pro/Enterprise) |

### Writing (9 tools, 4 of them with confirmation)

These nine tools are the only ones that change anything in your HubSpot portal. Drafts
require no confirmation. The four that publish to the live site or discard
a draft require `confirm: true`. Without confirmation you only get a
preview (dry-run), and nothing is sent to HubSpot.

| Tool | What it does | Requires confirmation? |
| - | - | - |
| `create_page_draft` | Creates a new site or landing page as a draft (forced to DRAFT, never goes live on creation) | No |
| `update_page_draft` | Edits a page's draft (name, slug, SEO title/description); the live page is not touched | No |
| `publish_page` | Pushes a page's draft changes live to the public website (updates an already published page) | Yes |
| `create_blog_post_draft` | Creates a new blog post as a draft (forced to DRAFT) | No |
| `update_blog_post_draft` | Edits a post's draft (title, slug, body, SEO); the live post is not touched | No |
| `publish_blog_post` | Pushes a post's draft changes live to the public site | Yes |
| `upsert_hubdb_row_draft` | Creates (without `rowId`) or updates (with `rowId`) a row in a table's draft; invisible on live pages until publishing | No |
| `publish_hubdb_table` | Publishes a HubDB table's draft (schema + rows) to live pages; required for HubDB changes to take effect | Yes |
| `reset_hubdb_draft` | Discards all unpublished draft changes on a HubDB table and rolls back to the published version | Yes |

> **[Building on top yourself? See the API reference](https://docs.consile.ai/developers/tools/hubspot.md)**
>
> Full reference with arguments, paging, filters, guardrail fields and return values
> for each tool.

## How the guardrail works

The write tools have safe default settings built into the connector itself.
This is logic in the connector, not an unbreakable platform guarantee:

1. **New content is created as a draft.** A new page or a new blog post is forced
   to `DRAFT` and never goes live on creation. HubDB rows land in the table's
   draft and are invisible on live pages until the table is published.
2. **Editing only hits the draft.** Updating a page, a post or a
   HubDB row changes the draft, not the published content.
3. **Publishing and discarding require `confirm: true`.** Pushing a draft live
   or discarding a HubDB draft requires your AI to send an explicit confirmation.
   Without it, you get a structured preview of what would happen, and
   no call is sent to HubSpot.

In practice your AI can work on drafts without changing what your visitors see.
Only a confirmed publish makes the change visible on your website. Some
AI clients, for example Claude, can also ask you to approve each call to a
write tool. That barrier comes from the client and is independent of Consile's
confirmation.

> [!TIP]
>
> Read the whole confirmation model, which applies across all write connectors,
> under [Actions & guardrails](https://docs.consile.ai/en/essentials/actions-and-guardrails.md).

## Try asking

> **Pages**
>
> > *"List my landing pages and show which ones have an unpublished draft."*
>
> > *"What has changed in the draft of page 12345 compared with the live version?"*
>
> > *"Create a draft of a new page 'Spring 2026' with an SEO title and slug."*

> **Blog**
>
> > *"Show the latest 20 blog posts with their publishing status."*
>
> > *"Fix the SEO description on post 67890 in the draft."* (draft, no confirmation)
>
> > *"Publish post 67890."* (you get a preview and must confirm)

> **HubDB**
>
> > *"List the rows in the HubDB table 'locations' and show the columns."*
>
> > *"Add a row to the 'locations' table with these values."* (lands in the draft)
>
> > *"Publish the HubDB table 'locations'."* (you are asked to confirm)

> **Analytics**
>
> > *"Show the traffic for the last 30 days broken down by source."*
>
> > *"Which pages had the most page views last month?"*

> [!TIP]
>
> Mention a date range (for example "last 30 days" or specific dates) in
> your analytics question, so you get a precise answer right away. Inspect a
> HubDB table's schema with `get_hubdb_table` before you write rows, so the cell values
> match the column types.

## Limitations

* **Writing is guardrailed, not unrestricted.** The connector can create and edit
  drafts, but publishing and discarding only happen behind the confirmation barrier above.
  The guardrail consists of safe default settings in the connector and is not an
  absolute guarantee.
  See [Actions & guardrails](https://docs.consile.ai/en/essentials/actions-and-guardrails.md).
* **Page content is edited in HubSpot.** For pages, the connector can set name, slug,
  SEO title and meta description (and template, when the page is created). It cannot change
  text and modules on the page itself.
* **Blog posts:** the connector can set title, slug, body text (HTML), SEO title and
  meta description. You set tags, author and featured image in HubSpot.
* **A new page is published for the first time in HubSpot.** `publish_page` only pushes
  draft changes live on a page that is already published.
* **HubDB:** the connector can create and update rows in an existing table.
  It cannot create tables or change columns.
* **HubDB drafts cannot be read back.** `list_hubdb_rows` and `get_hubdb_row`
  only show the published table. A row your AI has just created or
  changed can therefore not be seen again until the table is published.
  The preview before `publish_hubdb_table` does not show the individual
  changes either. Check the draft in HubSpot before you confirm publishing.
* **No deleting or archiving.** Pages, posts and HubDB rows cannot be
  deleted or archived via the connector.
* **Plan requirements.** The portal must be on CMS/Content Hub or Marketing Hub
  Professional/Enterprise. Traffic analytics requires Marketing Hub
  Professional/Enterprise.
* **Error messages.** If access to HubSpot has expired or been revoked, for example
  because the app has been uninstalled, the tools answer with a message that HubSpot
  must be connected again. Other errors at HubSpot, for example when the portal's plan does not cover
  the feature, only give the message `Tool invocation failed.` without further details.
* **Remove access completely.** If an administrator disconnects next to the agreement
  on the **Connections** card, the stored access to that
  HubSpot portal is deleted at Consile immediately. If you also want to remove
  access at HubSpot, uninstall the Consile HubSpot CMS app in HubSpot. See
  [Connect HubSpot CMS](https://docs.consile.ai/en/connect/connect-hubspot.md), also for how to
  reconnect.

Is something not working as expected? See [Troubleshooting](https://docs.consile.ai/en/troubleshooting.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.