Build Flows

Integration guide

Procore and Oracle Primavera P6 integration

The schedule stays the system of record for dates; Procore reads milestones, and write-back into P6 is rare and needs a scheduler's sign-off. We built this pair as a read path in our Procore and P6 analytics reference build.

System facts last verified October 2026 against the vendors' documentation (sources below). Confirm details with Procore Technologies and Oracle before you build.

Procore and Primavera P6 side by side

API style
ProcoreREST/JSON. Procore states that direct database access and RDBMS, XML or SOAP integrations aren't supported.
Primavera P6REST/JSON and SOAP, both installed with P6 EPPM Web Services. Our P6 MCP server's OpenAPI spec held 585 operations across 101 entities. XER and XML files cover P6 Professional and offline work.
Authentication
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.
Primavera P6REST: basic authentication, or an OAuth bearer token, which Oracle says applies only to P6 hosted on Oracle Cloud Infrastructure and is enabled by service request (ROPC and JWT user assertion grants). SOAP: username token, SAML token, HTTP cookies (on-premises) or OAuth.
Webhooks / events
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.
Primavera P6No HTTP webhooks. On-premises “eventing” publishes XML messages to a JMS queue for business object creates and updates and operations such as Schedule, Level and Publish Project.
Rate limits
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.
Primavera P6Not published. Confirm with vendor.
Sandbox
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.
Primavera P6No free developer sandbox found. Use a non-production P6 instance; confirm with vendor.
Exports and files
ProcoreNo bulk export API confirmed; reporting integrations page through list endpoints. Procore Analytics is a separate product.
Primavera P6REST export and import of projects as XML. XER export and import live in P6 Professional (File > Import > Primavera PM (XER)); Oracle notes risk data isn't imported from XER.
Marketplace / partners
ProcoreProcore App Marketplace and the Procore Technology Partner Program (application, technical review, certification, agreement, listing).
Primavera P6Oracle PartnerNetwork. Not confirmed for P6 specifically.

Who owns what

  • The schedule stays the system of record for dates; project management reads milestones.
  • Write-back into the schedule is rare and needs a scheduler's sign-off.

What syncs between Procore and Primavera P6

The typical shape for this pair. Every row is typical: confirm it against your configuration in discovery.

ProcorePrimavera P6Project matchMilestones and key datesActivities, dates and percent completeRFIs and submittals tied to activitiesDates written back into P6
Arrows point from the system that sends to the system that receives. Dashed means it stays put.
ObjectDirectionSystem of record
Project matchnot syncedCrosswalk owned by the integration
Typical frequency: At setup. Notes: P6 projects sit under the EPS with their own IDs. Keep a crosswalk from Procore project ID to P6 project ID instead of matching names.(Typical: confirm against your configuration.)
Milestones and key datesPrimavera P6 to ProcorePrimavera P6
Typical frequency: After each schedule update. Notes: Read once the scheduler has statused and published the update, not mid-edit. Procore shows them; P6 stays the record.(Typical: confirm against your configuration.)
Activities, dates and percent completePrimavera P6 to ProcorePrimavera P6
Typical frequency: After each schedule update. Notes: Usually read into reporting rather than into Procore tools. Progress is statused in P6 by the scheduler.(Typical: confirm against your configuration.)
RFIs and submittals tied to activitiesnot syncedProcore
Typical frequency: Polled daily for reporting. Notes: Link them with an activity ID field on the RFI or submittal and join in reporting. When we checked for our build, Procore's webhook events didn't cover RFIs and submittals, so we polled.(Typical: confirm against your configuration.)
Dates written back into P6not syncedPrimavera P6 (scheduler)
Typical frequency: Rare. Notes: Field information informs the next update; the scheduler decides what changes. Automated write-back needs explicit sign-off.(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 Procore App Marketplace and Oracle PartnerNetwork listings 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

  • P6 authorizes per object: without access the API can return 401 or 404, which looks like a missing activity. Test with the integration user's real permissions.
  • Oracle documents OAuth only for P6 hosted on Oracle Cloud Infrastructure, enabled by service request. On-premises EPPM uses basic authentication, so plan where that credential lives.
  • Neither side gives you the events you'd want: P6 has no HTTP webhooks (on-premises eventing goes to a JMS queue), and Procore's events didn't cover RFIs and submittals when we checked. Plan on polling.
  • If you run P6 Professional without EPPM there is no REST API; the integration reads XER or XML exports. Verify a round trip before trusting one (Oracle notes risk data isn't imported from XER).

Sources

Frequently asked questions

Can Procore and Primavera P6 sync?

Yes, usually as a read path: P6 milestones and dates flow to Procore or into a shared reporting model, matched by a project crosswalk. Writing dates back into P6 is rare and needs a scheduler's sign-off.

Does Primavera P6 have webhooks?

No HTTP webhooks. On-premises P6 EPPM can publish eventing messages to a JMS queue; most integrations poll the REST API after each schedule update instead.

What if we only have P6 Professional?

P6 Professional has no REST API of its own; it exchanges XER and XML files. Schedule an export, parse it, and verify the round trip. Our XER tools analyze exported files offline with no live connection.

Next step

Connecting Procore and Primavera P6?

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.