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.
On this page
- Before you start
- Step 1: Check the connection status
- Step 2: For ‘Token expired’ or ‘Disconnected’
- Step 3: For a stuck sync (Connected but Last sync is hours old)
- Step 4: For missing contacts
- Step 5: For “contacts sync but no properties update”
- Step 6: For “pipelines not loading”
- Step 7: How to disconnect
- When to email support
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
- Open Setup -> CRM -> HubSpot in SourceLoop.
- 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’
- Click Reconnect on the HubSpot card.
- SourceLoop runs the OAuth flow with HubSpot again. Sign in if prompted.
- Authorise SourceLoop on HubSpot’s consent screen.
- 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 [email protected] with the exact error.
Step 3: For a stuck sync (Connected but Last sync is hours old)
- Open the HubSpot card’s three-dot menu and click Sync log (or View errors) to see the most recent failure.
- 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.
- 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:
- 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.,
[email protected]vs[email protected]) count as different contacts. - 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.
- Exclude / include lists. Some HubSpot accounts have list-based sync filters configured on SourceLoop. Open the HubSpot card and check the Sync Filters tab.
- 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:
- Confirm Outbound sync is enabled on the HubSpot card.
- Open the Field Mapping tab. Confirm at least one outbound mapping exists. See Push UTMs to HubSpot for what should be there by default.
- For each mapping, confirm direction is outbound or bidirectional, not inbound (inbound mappings only read; they don’t write).
- 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:
- The connecting HubSpot user needs
crm.objects.deals.readandcrm.pipelines.deals.readscopes. 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. - Click Reconnect with a Super Admin user.
Step 7: How to disconnect
If you need to fully remove the HubSpot integration:
- Open the HubSpot card in SourceLoop’s CRM tab.
- Click the three-dot menu and select Disconnect.
- 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 [email protected] 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.