ml-connector
QuickBooks OnlineProcore

QuickBooks Online and Procore integration

QuickBooks Online runs accounting for your business; Procore tracks construction project costs and commitments. When a vendor bill arrives in QuickBooks Online, the costs need to land on the right Procore project and cost code so your budget and actuals stay in sync. ml-connector reads bills and vendors from QuickBooks Online, maps them to Procore cost codes and budget line items, and posts payment applications back to Procore as bills are paid. Your project ledger stays current without re-keying.

How QuickBooks Online works

QuickBooks Online exposes bills, vendors, purchase orders, accounts, departments, items, and journal entries through the QuickBooks Online Accounting API. It authenticates with OAuth 2.0 and an access token valid for 1 hour, refreshed via a long-lived refresh token. QuickBooks Online sends webhooks on bill create, update, and void events, though webhook payloads contain only the entity ID and require a follow-up GET to fetch the full record. The API also supports a CDC endpoint for polling up to 30 days of change history.

How Procore works

Procore exposes vendors, purchase order contracts, requisitions, payment applications, direct costs, and budget line items through the Procore REST API. It authenticates with OAuth 2.0 Client Credentials using a Developer Managed Service Account that does not require user intervention. Procore sends webhooks for resource changes and requires all webhook destinations to be publicly accessible HTTPS endpoints that respond with 2xx status within 5 seconds. Most endpoints require both company_id and project_id to scope the data.

What moves between them

Bills flow from QuickBooks Online into Procore as requisitions and direct costs allocated to the matching cost code. Vendors are synced from QuickBooks Online to Procore's vendor list so purchase orders can reference them. When a bill is marked paid in QuickBooks Online, ml-connector posts a payment application in Procore so the commitment status reflects the cash flow. The sync runs on a schedule that matches your payable cycle.

How ml-connector handles it

ml-connector stores both credential sets encrypted and refreshes the QuickBooks Online access token before it expires every 60 minutes. It listens to QuickBooks Online webhooks for bill and vendor changes and also polls the CDC endpoint on a schedule to catch any changes missed by webhooks, since QuickBooks Online webhook delivery is best-effort. On the Procore side it accepts OAuth 2.0 client credentials and uses the company_id and project_id from the customer configuration to scope all API calls. Bill line items are mapped to Procore cost codes using a configurable lookup table so the integration adapts to your chart of accounts. When Procore API calls rate-limit or fail, ml-connector backs off and retries, and it tracks the OAuth token expiry on both sides so a stale credential does not turn into an outage. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized construction firm runs QuickBooks Online for general ledger and accounts payable and uses Procore as the system of record for project costs and budgets across five active projects. Before the integration, the accounting team received bills in QuickBooks Online, manually identified which project cost code each line item belonged to, and entered the charges into Procore by hand. This created delays, manual entry errors, and discrepancies between what QuickBooks Online showed as paid and what Procore showed as committed. With QuickBooks Online and Procore connected, each vendor bill flows into Procore immediately with the correct cost code allocation, payment applications post automatically when the bill is paid, and the project managers see accurate budget-to-actual on every project in real time.

What you can do

  • Sync vendors from QuickBooks Online to Procore and keep the vendor list in both systems aligned.
  • Map QuickBooks Online bill line items to Procore cost codes and budget line items based on your chart of accounts.
  • Post bills from QuickBooks Online as requisitions and direct costs in Procore with the correct project and cost code.
  • Automatically post payment applications in Procore when bills are marked paid in QuickBooks Online.
  • Poll for missed changes in QuickBooks Online and retry failed Procore API calls with exponential backoff and a full audit trail.

Questions

How are QuickBooks Online bill line items matched to Procore cost codes?
ml-connector uses a configurable mapping table that matches QuickBooks Online account codes and line item descriptions to Procore cost codes and cost types. The mapping is set up during configuration and can be updated without code changes. If a line item does not match any configured rule, it is flagged in the audit log so you can refine the mapping.
Does the integration handle both QuickBooks Online webhooks and polling?
Yes. ml-connector listens to QuickBooks Online webhook events for real-time bill and vendor changes, but also polls the CDC endpoint on a schedule to catch any changes that webhooks may have missed. This dual approach ensures no bills slip through even if webhook delivery is delayed or out of order.
What happens if the Procore API call fails or times out?
ml-connector backs off and retries the call up to a configured limit with exponential backoff and jitter. If the call continues to fail, the record is held in the audit queue with full context so you can investigate and replay it manually once the issue is resolved. Every failed call is logged with the Procore error response so you see exactly why it failed.

Related integrations

Connect QuickBooks Online and Procore

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started