Build Flows

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.

HubSpotProcoreWon deal → projectCompanies → directory / ownerContactsDeal ID ↔ project IDContract valueProject status
Arrows point from the system that sends to the system that receives. Dashed means it stays put.
ObjectDirectionSystem of record
Won deal → projectHubSpot to ProcoreHubSpot until won; Procore after
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 / ownerHubSpot to ProcoreHubSpot
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.)
ContactsHubSpot to ProcoreHubSpot
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 IDboth waysBoth, written once
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 valueHubSpot to ProcoreHubSpot for reference; Procore prime contract after award
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 statusProcore to HubSpotProcore
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 build

Common 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

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.