Microsoft Dynamics GP and Procore integration
Microsoft Dynamics GP runs accounting and payables for construction firms on premises, while Procore tracks project costs and budget in the cloud. Connecting the two keeps vendor master data and GL account structure synchronized across both systems, and allows payables invoices from Dynamics GP to flow into Procore's cost tracking without manual re-entry. ml-connector handles the distinct authentication schemes on each side, respects Dynamics GP's polling-only model, and surfaces every sync event in a full audit trail.
What moves between them
The main flow runs from Microsoft Dynamics GP into Procore. Vendors and GL accounts are synced from Dynamics GP to Procore first, establishing a master list in Procore. Payables invoices created in Dynamics GP are then polled and transformed into Procore requisitions or direct costs, tagged with the synced vendors and cost codes. The sync runs on a schedule controlled by the customer; there is no push from Dynamics GP, so polling frequency is set based on when payables invoices are typically entered and posted.
How ml-connector handles it
ml-connector stores the Windows domain account credentials encrypted and uses them to authenticate against the customer's on-premises Dynamics GP instance via SBA REST. The Procore OAuth2 token is obtained at sync time and refreshed if a call returns 401. Because Dynamics GP is on premises and does not support webhooks, ml-connector polls the SBA endpoint with a ModifiedDate filter to find records changed since the last successful sync. GL accounts and vendors are synced first, then mapped to Procore cost codes and vendors by name or ID. Payables invoices are then polled and transformed into Procore direct costs with references to the corresponding cost codes and vendors. The integration respects Dynamics GP's constraint that only unposted transactions can be written, so invoices are read from Dynamics GP and never written back. Each sync run creates an audit record so failed syncs can be diagnosed and replayed if a downstream call to Procore fails.
A real-world example
A regional construction firm runs Microsoft Dynamics GP on premises for accounting and payables across multiple projects and job sites. They use Procore in the cloud for project tracking and budget control. Before the integration, the accounting team entered vendor invoices in Dynamics GP, and the project management team manually entered the same invoices again in Procore, mapping them to the correct project and cost code. With the integration, each payables invoice entered in Dynamics GP flows into Procore as a direct cost on the associated project, using vendor and cost code data synced from Dynamics GP. The finance team spends less time on double entry, and project managers see committed costs in Procore in near real time after invoices are posted in Dynamics GP.
What you can do
- Sync vendors and GL accounts from Microsoft Dynamics GP into Procore as vendors and cost codes on a schedule you control.
- Automatically transform payables invoices from Dynamics GP into Procore direct costs tagged with the correct cost codes and vendors.
- Handle Windows Authentication to Dynamics GP and OAuth 2.0 to Procore, refreshing tokens and managing credentials securely.
- Poll Dynamics GP on intervals you define, respecting the constraint that only unposted transactions are readable from the ERP.
- Track every sync event in a full audit trail so failed syncs can be debugged and replayed if a Procore call fails.
Questions
- Which direction does data move between Dynamics GP and Procore?
- The main flow is from Dynamics GP into Procore. Vendors and GL accounts are synced from Dynamics GP first to establish the master list in Procore. Payables invoices from Dynamics GP are then transformed and posted into Procore as direct costs on the correct project and cost code. No data flows back from Procore to Dynamics GP.
- How does ml-connector handle the fact that Dynamics GP is on premises and does not support webhooks?
- ml-connector polls the Dynamics GP Service Based Architecture (SBA) endpoint on a schedule you define, filtering by ModifiedDate to find records changed since the last sync. There is no push from Dynamics GP, so polling frequency is set based on when you typically enter invoices. The sync runs with controlled concurrency and delays to avoid overloading the on-premises system.
- What happens when a payables invoice in Dynamics GP is in posted status versus unposted status?
- Only unposted invoices can be read reliably from Dynamics GP via the API. Once an invoice is posted, the record becomes read-only in Dynamics GP. ml-connector syncs payables invoices before they are posted or only reads them after posting without attempting to modify them. The audit trail shows the status of each invoice at the time of sync.
Related integrations
More Microsoft Dynamics GP integrations
Other systems that connect to Procore
Connect Microsoft Dynamics GP and Procore
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started