# How to troubleshoot HubSpot sync issues with SourceLoop

A checklist for diagnosing HubSpot sync problems, missing contacts, stuck syncs, OAuth errors, scope rejections, and how to disconnect or reconnect when needed.

Source: https://sourceloop.ai/help/troubleshoot-hubspot-sync/
Updated: 2026-05-28

---

If a HubSpot sync isn't behaving as expected, run through this checklist in order. Most problems fall into one of six buckets.

## Before you start

Have these open:

- **SourceLoop's HubSpot card** at **Setup -> CRM -> HubSpot** (showing **Last sync** timestamp + connection status)
- **HubSpot's Connected Apps page** at **Settings -> Account -> Integrations -> Connected Apps** (to verify SourceLoop is authorised)
- Optional: the **SourceLoop sync log** (three-dot menu on the HubSpot card) for the most recent error message

## Step 1: Check the connection status

1. Open **Setup -> CRM -> HubSpot** in SourceLoop.
2. Look at the card status:
   - **Connected** + recent **Last sync** timestamp → connection is healthy; the issue is downstream
   - **Connected** + stale **Last sync** (more than an hour ago) → the sync is stuck
   - **Token expired** → the OAuth token couldn't be refreshed; reconnect required
   - **Disconnected** → not connected; run the connect flow

For each state, jump to the matching section below.

## Step 2: For 'Token expired' or 'Disconnected'

1. Click **Reconnect** on the HubSpot card.
2. SourceLoop runs the OAuth flow with HubSpot again. Sign in if prompted.
3. Authorise SourceLoop on HubSpot's consent screen.
4. You're returned to SourceLoop. The card flips to **Connected**.

If reconnect fails immediately:

- **"App not authorised"** → SourceLoop was removed from HubSpot's Connected Apps. The reconnect should re-add it.
- **"User does not have access"** → the user authorising the connection needs Super Admin or Account Access permission in HubSpot. Sign in as a user who does.
- **"Scope rejected"** → HubSpot blocked one or more requested scopes (rare; usually a HubSpot side restriction). Email hello@sourceloop.ai with the exact error.

## Step 3: For a stuck sync (Connected but Last sync is hours old)

1. Open the HubSpot card's three-dot menu and click **Sync log** (or **View errors**) to see the most recent failure.
2. Common errors and fixes:
   - **HTTP 401 (Unauthorized)** → token expired between scheduled runs. Click **Reconnect**.
   - **HTTP 403 (Forbidden)** → a scope you previously had is no longer granted. Reconnect with a user that has the missing scope.
   - **HTTP 429 (Rate limit exceeded)** → HubSpot is throttling. SourceLoop backs off automatically; the next scheduled run (within 15 minutes) usually picks back up.
   - **Network timeout** → temporary; will retry on the next cycle. If it persists for more than 24 hours, email us.
3. To force a sync now instead of waiting for the next scheduled cycle, click **Resync now** on the HubSpot card.

## Step 4: For missing contacts

If sync looks healthy but specific contacts aren't appearing in SourceLoop or aren't getting SourceLoop properties written, walk through these:

1. **Email mismatch.** SourceLoop matches contacts to HubSpot by email. Open the contact in HubSpot and check the email is identical (case-insensitive) to what SourceLoop captured. Email aliases (e.g., `joe@example.com` vs `joe+website@example.com`) count as different contacts.
2. **Contact created before connection.** Initial sync only pulls contacts that have been modified since the connection was made. Old contacts with no recent activity may be skipped. Run **Initial sync** from the three-dot menu to pull every contact again.
3. **Exclude / include lists.** Some HubSpot accounts have list-based sync filters configured on SourceLoop. Open the HubSpot card and check the **Sync Filters** tab.
4. **HubSpot list membership.** If the contact is in a HubSpot list that's set as Exclude in the sync filters, they won't sync.

## Step 5: For "contacts sync but no properties update"

If contacts are appearing but their UTM / source / lifecycle properties aren't getting populated:

1. Confirm **Outbound sync** is enabled on the HubSpot card.
2. Open the **Field Mapping** tab. Confirm at least one outbound mapping exists. See [Push UTMs to HubSpot](/help/push-utms-to-hubspot/) for what should be there by default.
3. For each mapping, confirm direction is **outbound** or **bidirectional**, not **inbound** (inbound mappings only read; they don't write).
4. Confirm the target HubSpot property actually exists. Open HubSpot at **Settings -> Properties** and search for the property's API name. If it doesn't exist, the auto-create may have failed (e.g., due to scope issues). Create it manually in HubSpot or remap to an existing property.

## Step 6: For "pipelines not loading"

When inbound sync runs but pipelines and deal stages aren't appearing in SourceLoop dashboards:

1. The connecting HubSpot user needs `crm.objects.deals.read` and `crm.pipelines.deals.read` scopes. These are normally requested at OAuth time. If a HubSpot admin restricted these scopes for your user, you'll need to either get the restriction lifted or have someone else with full access run the reconnect.
2. Click **Reconnect** with a Super Admin user.

## Step 7: How to disconnect

If you need to fully remove the HubSpot integration:

1. Open the HubSpot card in SourceLoop's CRM tab.
2. Click the three-dot menu and select **Disconnect**.
3. Confirm.

SourceLoop stops syncing immediately, revokes the OAuth token, and clears the cached property schema. Your existing SourceLoop data (contacts, conversions, dashboards) stays intact, only future HubSpot syncs are paused. You can reconnect any time.

For a full app removal on HubSpot's side, also go to **HubSpot Settings -> Integrations -> Connected Apps**, find SourceLoop, and click **Disconnect**. This is optional, the OAuth revocation from SourceLoop's side already invalidates the token.

## When to email support

If you've worked through the checklist and the sync still isn't healthy, email **hello@sourceloop.ai** with:

- The HubSpot card's current status
- The most recent error message from the sync log
- Your HubSpot portal ID (visible on the HubSpot card)
- Approximate time the issue started

We'll dig in from our side and respond within one business day.

## Frequently Asked Questions

### My HubSpot card shows 'Token expired'. What now?

Click **Reconnect** on the card. SourceLoop runs the OAuth flow again and gets a fresh access + refresh token. Tokens usually rotate automatically (HubSpot access tokens last 30 minutes; SourceLoop uses the refresh token to renew them), but if the refresh token itself is revoked (e.g., someone removed SourceLoop from HubSpot Connected Apps), a manual reconnect is required.

### A specific contact isn't getting synced. What should I check?

Three common causes. (1) Email mismatch, SourceLoop matches by email, so if the contact's email in HubSpot is different from what SourceLoop captured, they won't link. (2) Contact created before connection, the initial sync only pulls contacts modified since the connection, very old contacts may not have a recent modification date and be skipped. Run a manual full sync to pick them up. (3) Excluded by filter, check if you have any include/exclude lists configured on the HubSpot card.

### Sync says 'Pipelines not loaded'. Why?

SourceLoop couldn't read your HubSpot pipeline schema. Most common cause is missing scope, the connecting user needs the `crm.objects.deals.read` and `crm.pipelines.deals.read` scopes. Disconnect and reconnect with a HubSpot user that has Super Admin permissions.

### My HubSpot connection works but no contact properties are being written. What's wrong?

Outbound sync may be disabled. Open **Setup -> CRM -> HubSpot** and confirm **Outbound sync** is toggled on. If it's on but properties still aren't showing in HubSpot, check the Field Mapping tab, are there any mappings, and are they set to direction 'outbound' or 'bidirectional'?

### How do I do a full re-sync (pull everything again)?

Open the HubSpot card, click the three-dot menu, and select **Run initial sync**. This bypasses the delta cursor and pulls every contact, company, and deal again. It's safe to run, all writes are idempotent.

### I'm getting 'Rate limit exceeded' from HubSpot. What now?

HubSpot rate-limits API calls per account. SourceLoop respects the limits and backs off automatically. If you're seeing repeated rate-limit errors, check whether other tools (HubSpot's own backups, third-party sync tools, custom integrations) are sharing the same daily quota.

### How do I completely disconnect HubSpot from SourceLoop?

Open the HubSpot card, click the three-dot menu, select **Disconnect**. Confirm. SourceLoop stops syncing immediately and the OAuth token is revoked. Your SourceLoop data stays intact, but no new HubSpot data will sync in until you reconnect.
