Connect your CRM
Push every completed briefing's executive summary and key insights — or any organizational profile — straight into your HubSpot, Salesforce, or Attio account. One click creates (or updates) a record on the matching company. Available on all paid plans (Basic, Pro, and Enterprise).
Connect a provider
Pushing a briefing or organization profile to your CRM
- 1Open any completed briefing.
- 2Top-right of the title bar: click Push to CRM.
- 3A small dialog lists every CRM you've connected. Pick one. We'll search your CRM for a company / account matching your customer name. If we find one, we'll attach a Note (HubSpot, Attio) or Task (Salesforce) with the briefing's executive summary and key insights. If we don't find one, we create a new company first, then attach.
- 4On success, a small Pushed to {Provider} badge appears in the metadata row right under the briefing title. Click Push to CRM again any time to re-sync — identical content sends nothing ("Already up-to-date"), changed content updates the existing Briefing in your CRM in place. We never create duplicates, even if you've manually deleted the prior copy in your CRM.
What we transmit: title (vendor → customer), generated date, your briefing's executive summary (up to 3000 chars), and the first 2000 chars of the strategic alignment. Playbook details, stakeholder maps, and downloadable files are not pushed — they stay in SalesCanvas.ai. We're a CRM enrichment layer, not a CRM replacement.
Security & data handling
- Token encryption at rest. Every access token, refresh token, and API key is AES-256 (Fernet) encrypted in our database before it touches disk.
- No tokens leave the backend. Our UI shows "Connected since …" — never the actual token. There's no API endpoint, internal or external, that exposes raw tokens.
- Disconnect = full wipe. Clicking Disconnect on a CRM row immediately removes the access token, refresh token, API key, and instance URL from our database. The connection row stays for audit visibility but becomes inert.
- Minimal scopes. HubSpot: companies + notes only (not contacts.write, not deals). Salesforce:
api refresh_tokenonly. Attio: Records + Notes only. - Connect-time validation. We hit each provider's identity endpoint before saving — if the token doesn't actually work, you see an error immediately, never a silent broken connection.
- No duplicates on re-push. A re-push to your CRM does not duplicate. We remember what was sent and update it, unless the update we're sending is identical to that already sent. In that case, we do not send it. If you've manually deleted the briefing in your CRM, you don't need to do anything special — just re-push from SalesCanvas.ai and a fresh copy is created in your CRM automatically.
- Privacy disclosures. HubSpot, Salesforce, and Attio are listed under Sub-processors → CRM Integrations with the explicit note that data only flows when you connect.
- Outcome sync-back (HubSpot & Salesforce only). Once per hour we re-read the most-recently-modified Deal (HubSpot) or Opportunity (Salesforce) on Companies/Accounts you've previously pushed briefings to. We use it only to infer outcome (won / lost / advanced / stalled) and stamp it back on the corresponding briefing. We never read contacts, notes, emails, or attachments. Pause or resume per-connection at Profile → Integrations. Attio does not currently support sync-back.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "Connect" button is greyed out | You're on the Free Trial. | Upgrade to Basic, Pro, or Enterprise. CRM Push is included on every paid plan. |
| OAuth "Connecting an unverified app" red banner (HubSpot) | Expected — we're not on the HubSpot Marketplace. | Tick the "I understand" checkbox and click Connect app. Safe to accept. |
| Salesforce consent rejected | Your org requires admin pre-authorization, or you used a sandbox login on the production endpoint. | Use the manual flow (Option B) with a token your admin issues, or have admin pre-authorize the app. |
| "Could not verify hubspot credentials" | Wrong / expired Private App token, or token's scopes are missing. | Regenerate the token with the four scopes listed above. Try again. |
| "Could not verify attio credentials: Attio returned 400" | API key is missing one of the required scopes. | Regenerate the Attio key with Records (R/W) + Notes (R/W) + Objects (R). |
| Push fails with "Failed to create note: NOT_FOUND" (Salesforce) | Some Salesforce orgs don't have ContentNote enabled. | We push as a Task instead — this should never happen on a current build. Reconnect and try again; if it persists, contact support. |
| Push works but creates a duplicate company | Your CRM stores the customer with a slightly different name (e.g. "Stanford Healthcare" vs "Stanford Health Care") and our fuzzy match missed it. | Manually merge the duplicate in your CRM. We're shipping an explicit Account Picker to fix this. |
| Connection shows "Session expired — reconnect" | OAuth refresh failed permanently, or manual token expired. | Click Disconnect → Connect again. Takes 10 seconds. |
| I want to switch HubSpot accounts / Salesforce orgs | Each user can have one connection per provider at a time. | Disconnect the current one in Profile → reconnect, picking the new account/org during OAuth. |
Ready to connect?
Head to your Profile to set up HubSpot, Salesforce, or Attio.