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

# HubSpot Integration

> Publish articles from ChatFeatured to your HubSpot-hosted blog

The HubSpot integration publishes ChatFeatured articles to a blog hosted on HubSpot. You connect with a private app token, choose which blog to publish to, and then publish, schedule, or update posts from the article editor, the agent, or MCP.

**Status:** Available | **Setup time:** 10 minutes | **Complexity:** Beginner

## Before you start

Check these requirements before setting anything up.

<Warning>
  **You need a HubSpot-hosted blog and at least one blog author.** On a new portal, go to **Content → Blog** and start a post to create the blog and its listing page. Then use **Configure → Authors → Add new author**.
</Warning>

<Warning>
  **Your blog has to be hosted on HubSpot.** Plenty of teams use HubSpot as their CRM while running their blog on WordPress, Webflow, or Framer. If that's you, connect that platform instead — this integration only publishes to HubSpot-hosted blogs.
</Warning>

You also need a HubSpot **Super Admin** to create the legacy private app. HubSpot now recommends Service Keys for new single-account integrations, but ChatFeatured currently accepts a private app token beginning with `pat-`.

<Info>
  This integration publishes **blog posts**. HubSpot landing pages and site pages are built from theme templates and module slots rather than a body field, so they can't be published to from ChatFeatured.
</Info>

***

## Setup

### Step 1: Create a legacy private app in HubSpot

1. In HubSpot, click the **settings** gear icon in the top navigation.
2. Go to **Integrations → Private Apps**.
3. On the **Your private apps have moved** screen, click **Go to Legacy Apps**.
4. Click **Create legacy app → Private**.
5. Acknowledge HubSpot's legacy-app notice and click **Continue with legacy private app**.
6. On the **Basic Info** tab, name it something recognizable — "ChatFeatured" works.

### Step 2: Select the scope

1. Open the **Scopes** tab.
2. Click **Add new scope**, search for and select `content`, then click **Update**.
3. Click **Create app**, then **Continue creating**.

<Tip>
  The single `content` scope covers everything the integration needs: listing your blogs and authors, and creating, updating, scheduling, and publishing posts. You don't need to add anything else.
</Tip>

### Step 3: Copy the access token

1. Open the **Auth** tab of your new private app.
2. Click **Show token**, then **Copy**.

The token starts with `pat-`. Private app tokens don't expire, so you won't need to reconnect unless you rotate or delete the app in HubSpot.

<Warning>
  Treat this token like a password — it can read and write all your HubSpot content. Don't paste it into a shared document or a support ticket.
</Warning>

### Step 4: Connect in ChatFeatured

1. In ChatFeatured, go to **Integrations → HubSpot**.
2. Paste the token into **Private app token** and click **Connect**.
3. Pick the **blog** you want to publish to.
4. Pick a **default author**.
5. Click **Connect blog**.

Your HubSpot blog now appears as a publish destination.

<Info>
  **Why an author is required:** HubSpot refuses to publish a post that has no author. ChatFeatured asks you to choose one up front so publishing doesn't fail later. You can still override it on any individual publish.
</Info>

If the author list is empty, create one in HubSpot under **Content → Blog → Configure → Authors → Add new author**, then click **Connect** again to refresh the list.

### Connecting more than one blog

If your portal has several blogs, repeat Step 4 for each one — paste the same token and pick a different blog. Each connection is a separate publish destination, so you choose which blog an article goes to at publish time.

***

## Publishing articles

From the article editor, click **Publish** (or **Schedule**) and choose your HubSpot blog. You have three options:

| Option | What happens in HubSpot |
| - | - |
| **Publish now** | The post goes live immediately. |
| **Save as draft** | The post is created as a draft for you to review and publish in HubSpot. |
| **Schedule** | The post is handed to HubSpot's scheduler and goes live at the time you set. |

Scheduling uses HubSpot's own scheduler, so a scheduled post publishes on time whether or not ChatFeatured is running.

### Updating a published article

Edit the article in ChatFeatured and publish to HubSpot again. This updates the post that's already there — it doesn't create a duplicate.

### What gets sent

| ChatFeatured | HubSpot |
| - | - |
| Title | Post title |
| Content | Post body (HTML) |
| Slug | URL slug |
| Meta description | Meta description |
| Excerpt | Post summary |
| Featured image | Featured image |

Featured images stay hosted on ChatFeatured's CDN and are referenced by URL rather than copied into your HubSpot file manager, so there's only ever one copy of each image.

### Live URL tracking

Once a post is live, ChatFeatured records its HubSpot URL automatically and starts attributing AI citations of that page to the article. Drafts and scheduled posts aren't tracked until they're actually published, since their URLs aren't reachable yet.

***

## Publishing with the agent and MCP

HubSpot works the same way through automation as it does in the editor.

* **The agent**: ask it to publish an article and it will offer HubSpot alongside your other destinations.
* **MCP**: `list_integrations` returns each HubSpot connection with its available authors and tags (with their ids), and `publish_article` accepts the connection's `integrationId`.

HubSpot addresses authors by id rather than email. If a connection has no default author, pass `hubspotAuthorId` when publishing — `list_integrations` reports this as `requiresAuthorId`.

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="HubSpot denied access to the blog API">
    The private app may be missing the `content` scope, or the portal's subscription may not include the Blog API.

    Check the scope first. In HubSpot, go to **Settings → Integrations → Private Apps → Go to Legacy Apps**, open your app, and confirm `content` is selected on the **Scopes** tab. If it is, check your portal's product access under **Settings → Account Management → Billing**.
  </Accordion>

  <Accordion title="HubSpot rejected the private app token">
    The token was rotated or the app was deleted in HubSpot. Create a new token (or a new private app) following the setup steps above, then reconnect in ChatFeatured with the new token.
  </Accordion>

  <Accordion title="HubSpot requires an author to publish">
    The connection has no default author, or the author you picked was removed in HubSpot.

    Reconnect the blog and pick an author. If the author list is empty, create one in HubSpot under **Content → Blog → Configure → Authors → Add new author**.
  </Accordion>

  <Accordion title="HubSpot requires a meta description to publish">
    HubSpot won't publish a post without one. Add a meta description to the article in ChatFeatured — the excerpt is used as a fallback if there's no meta description — and publish again.
  </Accordion>

  <Accordion title="HubSpot is rate limiting this portal">
    HubSpot's burst limit is shared across everything connected to your account, so a busy CRM sync can use it up. ChatFeatured retries automatically; if it still fails, try again in a moment.

    If the error says the **daily** limit is reached, your portal is out of API requests for the day. Publishing resumes after the limit resets at midnight in your portal's time zone.
  </Accordion>

  <Accordion title="That HubSpot portal has no blogs">
    The account is on a plan that includes the blog API but no blog has been created yet. In HubSpot, go to **Content → Blog** and create one, then reconnect.
  </Accordion>
</AccordionGroup>

***

## Related

<CardGroup cols={2}>
  <Card title="All integrations" icon="plug" href="/integrations/overview">
    Every CMS and analytics integration ChatFeatured supports.
  </Card>

  <Card title="Integration guides" icon="book" href="/getting-started/integration-guides">
    Step-by-step setup for each platform.
  </Card>
</CardGroup>
