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

# HubSpot Integration

> Sync Outpost members into HubSpot contacts so your CRM reflects subscriber lifecycle events.

Outpost's HubSpot integration mirrors your member list into HubSpot as contact records. When a member is created or updated in Outpost, the matching HubSpot contact is created or updated to match.

## What syncs today

When Outpost creates a contact in HubSpot, the following member data is sent:

| Outpost data | HubSpot property | Notes                               |
| ------------ | ---------------- | ----------------------------------- |
| Email        | `email`          | Used to match existing contacts.    |
| First name   | `firstname`      | Parsed from the member's full name. |
| Last name    | `lastname`       | Parsed from the member's full name. |

The contact sync is create-only today: Outpost creates or matches the contact by email and sets the name fields when a member signs up. Subscription state changes (upgrade, cancel, renew) are not written to HubSpot.

## Setup

The HubSpot integration connects via **OAuth**. You click Connect in Outpost, authorize Outpost in HubSpot, and you're redirected back with the connection live — there's no token to copy and paste.

<Steps>
  <Step title="Click Connect in Outpost">
    Go to the HubSpot integration in Outpost and click **Connect**. Outpost opens HubSpot's authorization screen.
  </Step>

  <Step title="Authorize Outpost in HubSpot">
    Sign in to HubSpot (if prompted) and approve the requested permissions. Outpost requests read and write access to CRM contacts (`crm.objects.contacts.read`, `crm.objects.contacts.write`).
  </Step>

  <Step title="Choose an import mode">
    On connect you can choose **Import Existing Members** to pull your current HubSpot contacts into Outpost as members, or **Add Only New Members** to sync from this point forward. The full import runs as a background job to avoid HubSpot API rate limits on large lists.
  </Step>
</Steps>

## When syncing happens

Outpost pushes events to HubSpot in near real-time as background jobs. Failed jobs retry automatically up to three times.

| Outpost event       | What's sent to HubSpot                                      |
| ------------------- | ----------------------------------------------------------- |
| New member signs up | Create or upsert the contact by email; set first/last name. |

Outpost pushes member creates to HubSpot. HubSpot also notifies Outpost via webhook: when a contact is created in HubSpot it's imported as an Outpost member, and when a contact is deleted (privacy deletion) the matching member is removed.

## Conflict resolution

If a contact already exists in HubSpot with the same email as an Outpost member, Outpost matches that contact rather than creating a duplicate. The match is on email — make sure HubSpot doesn't have multiple records sharing the same email or one of them will be updated arbitrarily.

## What happens when sync fails

* The Outpost member record is unaffected by HubSpot sync state.
* Transient failures (network, HubSpot API errors) retry automatically.
* If the OAuth connection is revoked in HubSpot or scopes change, syncs fail until you reconnect. Outpost refreshes access tokens automatically while the connection is authorized.
* The Outpost team monitors sync health and reaches out for persistent issues.

## Disconnecting

Disconnect the HubSpot integration in Outpost to stop syncing. Existing HubSpot contacts and Outpost members are kept — they simply stop updating each other.

## What isn't synced

Outpost sends only the contact's email, first name, and last name. Subscription state (tier, status, MRR, signup date) is not written to HubSpot custom properties today. If subscription-state sync would be valuable for your workflow, tell us at [support@outpost.pub](mailto:support@outpost.pub) so we can factor it into the roadmap.

***

## Related features

<CardGroup cols={2}>
  <Card title="Labels" icon="tag" href="/features/labels">
    Apply labels in Outpost for HubSpot-sourced or HubSpot-synced members.
  </Card>

  <Card title="Members" icon="users" href="/features/members">
    The member records that get synced.
  </Card>
</CardGroup>

***

## FAQ

<AccordionGroup>
  <Accordion title="Does Outpost sync subscription status and tier to HubSpot?">
    Not today. The integration creates contacts with email and name only — subscription state isn't written to HubSpot. If you need it, let us know at [support@outpost.pub](mailto:support@outpost.pub).
  </Accordion>

  <Accordion title="Will disconnecting delete my HubSpot contacts?">
    No. Disconnecting only stops future syncing. Existing HubSpot contacts and Outpost members remain untouched.
  </Accordion>

  <Accordion title="Can I import existing HubSpot contacts into Outpost as members?">
    Yes. When you connect, choose **Import Existing Members** to pull your current HubSpot contacts into Outpost as members. After that, newly created HubSpot contacts are imported automatically via webhook.
  </Accordion>

  <Accordion title="What HubSpot permissions does Outpost need?">
    During the OAuth authorization Outpost requests the contact read and contact write scopes (`crm.objects.contacts.read`, `crm.objects.contacts.write`). Outpost only reads and writes contact data — no other CRM objects are touched.
  </Accordion>

  <Accordion title="If I change a member's name in Outpost, does HubSpot update?">
    The contact record updates when there's a member event. Email and name fields are kept in sync via the standard upsert path. If you don't see HubSpot update after a name change, contact [support@outpost.pub](mailto:support@outpost.pub).
  </Accordion>
</AccordionGroup>
