Integration guide
HubSpot and Procore integration
This is a one-direction hand-off at project start: a won deal creates the Procore project, stamped with the HubSpot deal ID. After setup, Procore owns delivery data; push status back to HubSpot only if sales needs it.
System facts last verified October 2026 against the vendors' documentation (sources below). Confirm details with HubSpot and Procore Technologies before you build.
HubSpot and Procore side by side
- API style
- HubSpotREST/JSON, with date-versioned APIs.
- ProcoreREST/JSON. Procore states that direct database access and RDBMS, XML or SOAP integrations aren't supported.
- Authentication
- HubSpotOAuth 2.0 authorization code for apps installed in many accounts; static access tokens for single-account (private) apps. Legacy private app tokens don't expire and can be rotated.
- ProcoreOAuth 2.0, registered as an app in the Procore Developer Portal: authorization code (acts as a specific user) or client credentials through a Developer Managed Service Account (DMSA) with company and project permissions. Traditional service accounts were sunset on March 18, 2025.
- Webhooks / events
- HubSpotYes. Subscriptions for creation, property change and association events on contacts, companies, deals, tickets and more, signed with X-HubSpot-Signature and retried up to 10 times over 24 hours.
- ProcoreYes. Company- or project-level create, update and delete triggers; Procore recommends payload v4.0 for new integrations. Delivery is best-effort with retries, and events are discarded after 12 hours of continuous failure, so pair webhooks with a periodic reconciliation sync.
- Rate limits
- HubSpotPrivate apps: 100 requests per 10 seconds on Free and Starter (250,000 per day per account), 190 per 10 seconds on Professional (625,000 per day) and Enterprise (1,000,000 per day). Marketplace OAuth apps: 110 per 10 seconds per installing account.
- ProcoreAn hourly (60-minute) limit and a 10-second spike limit, reported in X-Rate-Limit-Limit, -Remaining and -Reset headers; exceeding either returns 429, and 503 with Retry-After signals platform load. Procore publishes no fixed default: its rate-limiting page uses sample headers (600 per hour, 25 per spike window), warns not to assume a fixed window such as 3,600/hour, says values can change, and lets apps request an increase. Every request counts, including failed ones.
- Sandbox
- HubSpotYes. Free developer test accounts (up to 10) with a 90-day trial of many enterprise features; standard and development sandboxes require Enterprise.
- ProcoreYes. A developer sandbox with seed data is created when you register an app (you can have many). Customers can also enable on-demand and monthly sandboxes; the monthly one is refreshed from production each month. Not available to Federal Zone customers.
- Exports and files
- HubSpotNot confirmed. Confirm with vendor.
- ProcoreNo bulk export API confirmed; reporting integrations page through list endpoints. Procore Analytics is a separate product.
- Marketplace / partners
- HubSpotHubSpot App Marketplace (listing and certification requirements apply).
- ProcoreProcore App Marketplace and the Procore Technology Partner Program (application, technical review, certification, agreement, listing).
Who owns what
- One direction at project start: a won deal creates the project, stamped with the CRM deal ID.
- After setup, the project system owns delivery data; push status back to the CRM only if sales needs it.
What syncs between HubSpot and Procore
The typical shape for this pair. Every row is typical: confirm it against your configuration in discovery.
| Object | Direction | System of record | |
|---|---|---|---|
| Won deal → project | HubSpot to Procore | HubSpot until won; Procore after | On stage change (webhook) |
| Typical frequency: On stage change (webhook). Notes: Trigger on one won stage in one pipeline, and write that rule down. Acknowledge the webhook fast and create the project from a queue.(Typical: confirm against your configuration.) | |||
| Companies → directory / owner | HubSpot to Procore | HubSpot | On deal won |
| Typical frequency: On deal won. Notes: Look for an existing Procore directory company before creating one, and store the Procore ID back on the HubSpot company.(Typical: confirm against your configuration.) | |||
| Contacts | HubSpot to Procore | HubSpot | On deal won |
| Typical frequency: On deal won. Notes: Only the contacts the project team needs, not the whole CRM.(Typical: confirm against your configuration.) | |||
| Deal ID ↔ project ID | both ways | Both, written once | At project creation |
| Typical frequency: At project creation. Notes: Write the deal ID onto the Procore project and the project ID back onto the deal, so reporting can join pipeline to delivery without matching names.(Typical: confirm against your configuration.) | |||
| Contract value | HubSpot to Procore | HubSpot for reference; Procore prime contract after award | On deal won |
| Typical frequency: On deal won. Notes: Seed as a reference value. The prime contract in Procore becomes the record once the project starts.(Typical: confirm against your configuration.) | |||
| Project status | Procore to HubSpot | Procore | Daily, optional |
| Typical frequency: Daily, optional. Notes: Only if sales needs it: a project stage property on the deal or company. Nothing else flows back.(Typical: confirm against your configuration.) | |||
Directions, owners and frequencies are the typical pattern from our integration guides and mapping workbook. Confirm each one against your configuration in discovery.
Is a native connector enough?
We haven't confirmed a documented native connector for this pair. Check the HubSpot App Marketplace and the Procore App Marketplace for a partner connector first: if one moves the records you need with your cost structure and approvals, configure it. Build when the mapping needs governing, when failures need routing to a person, or when you also need cross-system reporting.
Compare native connectors with a custom buildCommon gotchas
- HubSpot treats webhook responses slower than five seconds as timeouts and retries them, so a slow Procore call inside the handler creates duplicate projects. Queue first, then create.
- HubSpot's daily API limit is shared by every app in the account; the burst limit is per app. A backfill of historic deals competes with the customer's other tools.
- Use a Procore Developer Managed Service Account with company-level permissions for server-to-server project creation; traditional service accounts were sunset in March 2025.
- Pick one won stage in one pipeline as the trigger. Two pipelines with their own won stages is the usual cause of projects created twice or not at all.
Sources
- HubSpot: authentication overview
- HubSpot: API usage guidelines and limits
- HubSpot: webhooks
- HubSpot: account types (test accounts, sandboxes)
- Procore developer documentation
- Procore: choosing an OAuth grant type
- Procore: rate limiting
- Procore: webhooks
- Procore: development environments
- Procore: financial tools tutorial
- Procore: partner program overview
Frequently asked questions
Can HubSpot create a Procore project automatically?
Yes. A webhook subscription or workflow on the deal stage starts a flow that creates the Procore project through the Procore API and stamps the HubSpot deal ID on it, so both systems share a key from day one.
Should a HubSpot and Procore sync be two-way?
Rarely. HubSpot owns the pursuit and Procore owns delivery. Push a project status back only if sales needs it; contract, cost and schedule data belong in reporting, not in the CRM.
How do HubSpot deals and Procore projects stay matched?
By writing each system's ID onto the other at project creation. In our Procore, QuickBooks Online and HubSpot reporting build the systems shared no common ID, so a project crosswalk had to link them after the fact.
Next step
Connecting HubSpot and Procore?
Bring one real job and the records you want to move. We'll walk through what syncs, who owns each record, and what to check first.