Exact Online and Procore integration
Exact Online holds your accounting records and GL accounts. Procore manages construction project costs and commitments. Connecting the two keeps your project data aligned with your books. Purchase orders and invoices created in Exact Online flow into Procore so project managers see the full commitment picture, and cost codes are mapped between systems so every charge lands on the correct GL account when it reconciles back to Exact Online.
What moves between them
Purchase orders and purchase invoices move from Exact Online into Procore as commitments and cost allocations. Cost codes in Procore are mapped to GL accounts and cost centers in Exact Online so that project commitments and spend can be reconciled to the accounting ledger. Exact Online is the source of truth for purchase orders and invoices; Procore reads this data to ensure project budgets reflect actual commitments. The flow is one-directional from Exact Online into Procore, with no writes back to Exact Online.
How ml-connector handles it
ml-connector manages the two distinct OAuth flows: Exact Online's Authorization Code grant with refresh token rotation (refresh tokens must be used within 30 days or the user re-authorizes), and Procore's Client Credentials with 1.5-hour token lifetime. Because Exact Online webhooks deliver only the entity key and action, ml-connector fetches the full purchase order and invoice records from the Exact Online REST API when a webhook fires. It polls Exact Online on a regular schedule to catch any changes not delivered via webhook, and it matches purchase order line items to Procore cost codes based on the mapped GL account and cost center. Cost codes in Procore that do not exist in Exact Online trigger a validation error, which ml-connector surfaces in the audit log so the mapping can be corrected. All records carry a full audit trail and can be replayed if a downstream cost allocation fails.
A real-world example
A mid-sized construction contractor uses Procore to manage multiple projects and budgets across sites, and Exact Online in the Netherlands to maintain the accounting books. Before the integration, the finance team manually entered purchase orders from Exact Online into Procore as commitments, often weeks after approval, causing budget overages and reconciliation mismatches at month-end. With Exact Online and Procore connected, purchase orders and invoices sync automatically into Procore within minutes of creation in Exact Online. Project managers see accurate commitment totals, cost codes map to the correct GL accounts, and the finance team reconciles Procore project costs to the Exact Online ledger in hours instead of days.
What you can do
- Sync purchase orders and invoices from Exact Online into Procore as commitments and cost allocations.
- Map Exact Online GL accounts and cost centers to Procore cost codes so project costs reconcile to the ledger.
- Bridge Exact Online OAuth 2.0 Authorization Code flow with refresh token rotation and Procore OAuth 2.0 Client Credentials.
- Fetch full purchase order and invoice data from Exact Online REST API when webhooks fire, since webhook payloads contain only entity keys.
- Validate cost codes exist in Procore before allocating costs, with full audit trail and replay on failure.
Questions
- Why does ml-connector fetch full purchase order data even when Exact Online fires a webhook?
- Exact Online webhooks deliver only the entity key and action (create/update/delete), not the full record. ml-connector must fetch the complete purchase order and invoice details from the Exact Online REST API to extract the GL account, cost center, line amounts, and other fields needed to create an accurate commitment in Procore.
- How does ml-connector handle the different token lifetimes between Exact Online and Procore?
- Exact Online access tokens expire in 10 minutes, and refresh tokens must be used at least once every 30 days or the user must re-authorize. Procore tokens expire in 1.5 hours. ml-connector refreshes Exact Online tokens proactively and monitors their expiry, and it refreshes Procore tokens on every request cycle since the 1.5-hour window is short enough that a token can expire mid-workflow without notice.
- What happens if a Procore cost code does not exist in Exact Online?
- ml-connector validates that every cost code referenced in a purchase order line maps to a GL account or cost center in Exact Online before creating a commitment in Procore. If the mapping is missing or the Exact Online account does not exist, the record is flagged in the audit log and the sync is paused until the mapping is corrected. This prevents orphaned costs in Procore that cannot reconcile back to the ledger.
Related integrations
More Exact Online integrations
Other systems that connect to Procore
Connect Exact Online and Procore
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started