Connecting your CRM

Connect HubSpot, Salesforce or GoHighLevel to bring deals, pipeline and revenue into attribution.

I'm using the platform as a
All help topics

Connecting a CRM is what turns the platform from "marketing analytics" into real revenue intelligence - it lets the funnel run all the way to closed deals and gives you true ROAS rather than platform-reported conversions.

Supported CRMs

  • HubSpot
  • Salesforce
  • GoHighLevel (GHL)

You can connect one CRM per account. If you need to switch, disconnect the current one first - the card for the other CRM stays locked until you do.

How to connect

CRMs connect by pasting a token (not a sign-in), then clicking Save & test. Your credentials are encrypted at rest. The exact details differ per CRM:

  • HubSpot - create a Private App in HubSpot -> Settings -> Integrations -> Private Apps, grant read scopes on Contacts, Deals and Pipelines, and paste the generated Private App Token (pat-...).
  • Salesforce - create a Connected App (Setup -> App Manager), enable the Client Credentials Flow with a run-as user and the api scope, then paste your Instance URL, Client ID (Consumer Key) and Client Secret.
  • GoHighLevel - create a Private Integration (Settings -> Private Integrations) with Location-level access to Contacts, Opportunities and Pipelines, then paste the token and your Location ID. After connecting, pick the pipeline to report on.

You connect each client's CRM from their connection screen using the client's own token. The setup copy on the card is personalised with your agency name and reporting email.

What it powers

  • The CRM tab - deals, pipeline stages, average deal size, win rates and top deals (with deep links back into your CRM).
  • Attribution - deals are tied back to the marketing channels that sourced them, so you see blended ROAS and true cost per acquired customer.
  • The Brain - deal events, lost-deal reasons and pipeline movement feed the Brain, sharpening reports and recommendations.

Keep your UTMs consistent so deals attribute cleanly - the CRM tab shows a UTM health score and a checklist of gaps.

When it won't connect

After Save & test, a failure shows a specific message. The common ones apply to every CRM:

Common CRM connection errors

"Your [CRM] token was rejected. Generate a new token and paste it again."

  • Why: the token is wrong, expired, or revoked (a 401).
  • Fix: generate a fresh token in your CRM and paste it again. Make sure you copied the whole token with no spaces.

"Your [CRM] token doesn't have the required scopes. Re-create it with read access to contacts, deals, and pipelines."

  • Why: the token is valid but missing read permissions (a 403).
  • Fix: re-create the token with read access to contacts, deals and pipelines, then Save & test.

"[CRM] couldn't find that account. Double-check the IDs you entered."

  • Why: a wrong ID (e.g. GoHighLevel Location ID, or a Salesforce Instance URL that doesn't resolve).
  • Fix: re-check the IDs against your CRM and try again.

"[CRM] is rate-limiting us right now. Try again in a few minutes."

  • Why: too many requests in a short window. Fix: wait a few minutes and re-test.

You can run up to 10 tests per platform per hour.

HubSpot specifics
  • Use a Private App Token (starts with pat- and a region, e.g. pat-na1-...) - not a legacy API key, which will be rejected.
  • Grant read scopes on CRM Objects: Contacts, Deals and Pipelines. A token missing one of these connects but returns gaps or a scope error.
  • The portal ID is detected automatically - there's no separate ID field.
Salesforce specifics

Most Salesforce failures are Connected App setup, and often show as a generic "Connection test failed":

  • The Connected App must have "Enable Client Credentials Flow" ticked and a run-as user set, with the api scope. This is the single most common cause.
  • Use your My Domain API URL (https://yourorg.my.salesforce.com) as the Instance URL - not the Lightning/Setup URL (*.lightning.force.com).
  • Sandbox vs production: a sandbox org's URL differs from production - use the right one for the org your token is from.
  • New Connected Apps can take a few minutes to activate, and IP restrictions on the app can block the token - relax these if needed.
GoHighLevel specifics
  • The token must be a Private Integration Token with Location-level access (not Agency/Company level), and the Location ID must match that token's location.
  • Grant access to Contacts, Opportunities and Pipelines. A token without Opportunities access can connect but report zero deals.
  • After connecting, choose the pipeline to report on; if pipelines won't load, re-check the token's scopes.

For anything else, see Error messages explained.