How it works
- Connect HubSpot. An admin approves Crumb on HubSpot's OAuth screen from Settings → Integrations. Crumb asks only to read companies.
- Companies become accounts. The first sync runs right away. Each named HubSpot company links to the Crumb account with the same name, or becomes a new account, so you don't end up with duplicates.
- ARR comes with them. Crumb reads each company's
annualrevenueproperty and stores it as the account's ARR. Companies without a value come in at $0. If you've set an account's ARR by hand in Crumb, the sync leaves that number alone. - Feedback carries the revenue. When the account name your app passes to the widget matches, every request from that customer shows its account's ARR, and the inbox and initiatives add it up.
- Keep it fresh. Admins and PMs can press Sync now at any time, and the CRM sync job refreshes every connected workspace whenever it runs. On self-host, you schedule that job with a cron.
What syncs
| What | Direction | When |
|---|---|---|
| Company name | HubSpot → Crumb | Every sync; renames follow HubSpot |
ARR (annualrevenue by default) | HubSpot → Crumb | Every sync, unless set by hand in Crumb |
| HubSpot company ID | HubSpot → Crumb | Stored to keep the link on later syncs |
| Contacts, deals, notes | Not synced | Crumb reads companies only |
| Feedback, accounts, ARR | Not synced back | Nothing is written to HubSpot |
Each sync reads up to 2,000 companies. Companies without a name are skipped, and ARR is capped at $21M per account.
Which property holds ARR?
By default Crumb reads annualrevenue, HubSpot's standard Annual revenue company property. If your team keeps ARR in a custom company property, the property name is a deployment setting, HUBSPOT_ARR_PROPERTY, so a self-hosted instance can point at it. You can also set ARR by hand on any account, and manual values are never overwritten. Prefer Salesforce? The Salesforce integration syncs accounts the same way.
Setup
Crumb Cloud: connect HubSpot in one click from Settings → Integrations, on the Team plan and up. The first sync runs on connect, and the integrations page shows how many accounts synced and when.
Self-hosted: create a HubSpot app with the crm.objects.companies.read scope and a redirect URL of /api/integrations/hubspot/callback on your Crumb domain, then set HUBSPOT_CLIENT_ID and HUBSPOT_CLIENT_SECRET. To refresh on a schedule, call POST /api/v1/internal/crm-sync from a cron with your X-Crumb-Sweep-Secret header; the README suggests every six hours.
Frequently asked questions
Does Crumb write anything back to HubSpot?
No. The sync is one-way and read-only. Crumb asks only for read access to companies, and nothing about your feedback, accounts, or ARR is written to HubSpot.
What happens to ARR I've entered by hand?
It stays. Setting an account's ARR in Crumb marks it as manual, and later syncs refresh the name and link but leave that number alone.
How is feedback matched to HubSpot companies?
By account name. The sync links each company to the Crumb account with the same name, and widget feedback lands on the account whose name your app passes in. On Cloud, forwarded emails also get an AI-suggested account for you to confirm.
Can I connect HubSpot and Salesforce at the same time?
You can, but each sync only links to accounts that aren't already tied to a CRM, so a company that exists in both ends up as two accounts. Pick one CRM as your source of ARR.
How often does Crumb sync with HubSpot?
When you connect, whenever an admin or PM presses Sync now, and whenever the CRM sync job runs. On self-host, you schedule that job with a cron. If HubSpot revokes access, the integration shows as disconnected until an admin reconnects.