On Pro, connect HubSpot, Salesforce or Pipedrive, or send counts from any CRM by CSV or API, and Pacing Console shows contacts, MQLs, SQLs, opportunities and customers next to each campaign's spend, with the cost per stage.
Connect your CRM
- Open the CRM cardIn Pacing Console, open Connect platforms and find CRM lifecycle stages (marked Optional, Pro). You need to be an owner or editor.
- Choose your CRMUnder Choose your CRM, press HubSpot, Salesforce, Pipedrive, Other CRM: CSV or Other CRM: API.
- Enter read-only credentials
- HubSpot: in Settings, Integrations, Private apps (newer accounts: Development, Legacy apps), create an app named Pacing Console with the
crm.objects.contacts.readscope only. Paste the token (it starts withpat-) and press Connect HubSpot. - Salesforce: in Setup, App Manager, create a New Connected App with the
apiscope and Enable Client Credentials Flow, and set Run As to an integration user that can read Leads and Opportunities. Enter My Domain, Consumer key and Consumer secret, then press Connect Salesforce. - Pipedrive: copy your personal API token from Personal preferences, API, and press Connect Pipedrive. For matching, add deal fields named
utm_campaignandutm_source, or use Pipedrive's Channel and Channel ID fields.
- HubSpot: in Settings, Integrations, Private apps (newer accounts: Development, Legacy apps), create an app named Pacing Console with the
- Make sure ads pass the campaignAds should land with
utm_campaignset to the ad campaign's name or ID. That is how CRM records are matched to campaigns. - Read the resultsA CRM column appears in the Pacing table with contacts, MQLs, SQLs and opportunities per campaign. The campaign window shows Cost per MQL and Cost per SQL, and Insights shows Pipeline by campaign with cost per stage.
Any other CRM: CSV upload
Works with Microsoft Dynamics 365, Zoho CRM, Salesforce reports and others. Export the leads or contacts created this month with these columns, choose the file and press Upload:
utm_source(or source), and optionallyutm_mediumutm_campaign(or campaign): the ad campaign name or IDstage(or lifecycle stage, status), for example Lead, MQL, SQL, Opportunity, Customer- Optional
count, if each row is already a total
Any other CRM: API
For a CRM that can call a webhook through Zapier, Make or Power Automate. Send this month's records in one call with your workspace key (the same key your scripts use):
POST https://pacing.planconversion.com/api/crm/ingest
{
"key": "your workspace key",
"records": [
{ "utm_source": "linkedin", "utm_medium": "paid_social",
"utm_campaign": "ABM tier 1", "stage": "MQL", "count": 12 }
]
}
Good to know
- HubSpot, Salesforce and Pipedrive refresh twice a day, at about 11:37 and 23:37 UTC. Press Sync now for an update straight away.
- Only records created this month are counted. Each stage counts records that reached it or a later stage, grouped into contact, MQL, SQL, opportunity and customer.
- Uploading a CSV again replaces this month's CSV data, and each API call replaces this month's API data.
- Credentials are encrypted before they are stored and are never shown again. We store counts per campaign and stage, not contact names or emails.
- Disconnect removes the connection and the stage counts it sent. The same connection also powers the Link Console attribution check.