ml-connector
Microsoft Dynamics GPExpensify

Microsoft Dynamics GP and Expensify integration

Finance teams often track employee expenses separately from the general ledger. Microsoft Dynamics GP stores your financial records, but approved expenses in Expensify have to be re-keyed by hand into GL journal entries, a source of lag and error. Connecting Microsoft Dynamics GP to Expensify closes that gap. Approved expense reports from Expensify flow into your Microsoft Dynamics GP general ledger automatically, allocated to the cost centers and GL accounts you define, so month-end close is faster and your expense records stay in sync with your financial books.

How Microsoft Dynamics GP works

Microsoft Dynamics GP is an on-premises ERP installed on a Windows Server with SQL Server backend. It exposes vendors, payables invoices, purchase orders, GL accounts, cost centers, and GL journal entries through a REST Service Based Architecture (SBA) endpoint or SOAP Web Services, both accessed at customer-defined server URLs. Authentication requires a Windows domain account mapped to a GP user, as Microsoft Dynamics GP does not support OAuth2 or API keys. The system does not support webhooks or push notifications, so integrations must poll the SBA or SOAP endpoints with ModifiedDate filters at intervals the customer defines.

How Expensify works

Expensify is a cloud-based expense management platform accessed via REST API. All requests are POST calls to an integrations endpoint with JSON payloads, authenticated using an API key pair (partnerUserID and partnerUserSecret) generated in the platform and passed with every request. Expensify exposes expense reports, individual transactions, employee records, approval status, and corporate card data. The platform does not offer webhooks or a sandbox environment; all API calls run against production. Expensify Classic is the API surface in use; expense categories hold GL account codes as properties, and tags function as accounting dimensions for allocation.

What moves between them

The main flow runs from Expensify into Microsoft Dynamics GP. After expense reports are approved in Expensify, ml-connector polls them on a schedule and reads the approved expenses with their amounts, merchant names, and assigned cost center tags. For each report, ml-connector creates a GL journal entry in Microsoft Dynamics GP, mapping the Expensify cost center tag to the matching Microsoft Dynamics GP cost center dimension and the expense category to the GL account configured for that expense type. The journal is created in unposted (Work) status so your finance team can review before posting. Employee data and cost center reference tables can also be synced between the systems to keep dimension values aligned.

How ml-connector handles it

ml-connector stores both credential sets encrypted: the Windows domain account for Microsoft Dynamics GP and the Expensify API key pair. For Microsoft Dynamics GP, it presents the Windows credentials via Negotiate/Kerberos at the SBA REST or SOAP endpoint defined for each customer. For Expensify, it includes the API key pair in every POST request payload. Since neither system offers webhooks, ml-connector polls Expensify on a schedule tied to your expense approval cycle and reads new or updated reports. It maps Expensify cost center tags to Microsoft Dynamics GP cost center and GL account dimensions, checks that the target GL account exists and the fiscal period is open in Microsoft Dynamics GP, and creates the journal entry in unposted status. If an expense report has already been posted to Microsoft Dynamics GP, ml-connector skips it on the next poll to avoid duplicates. Because Microsoft Dynamics GP does not have a built-in idempotency mechanism, ml-connector tracks which reports have been posted and prevents re-posting if the Expensify API returns the same report again. Every transaction carries an audit trail with the source Expensify report ID, the GL entry number, and the date posted, so you can trace back if reconciliation issues arise.

A real-world example

A professional services firm with 50 employees uses Microsoft Dynamics GP for accounting and Expensify for travel and meal expenses. Each month, the finance team manually exported approved expense reports from Expensify and re-keyed them into the GL as department-wise journal entries, a task that took 4-6 hours and often contained typos because the cost center codes had to be looked up and entered by hand. With Microsoft Dynamics GP and Expensify connected, approved reports sync automatically into the GL each week, allocated to the correct department cost center, and the finance team reviews the entries in batch before posting. The re-keying step is gone, and reconciliation at month-end now starts with expense accounts already up to date.

What you can do

  • Post approved Expensify expense reports into Microsoft Dynamics GP as GL journal entries, allocated to the cost center and GL account for each expense type.
  • Authenticate Microsoft Dynamics GP via Windows Active Directory and Expensify via API key credentials, securely stored and refreshed as needed.
  • Map Expensify cost center tags to Microsoft Dynamics GP cost center dimensions so expenses land on the right department or project.
  • Poll Expensify on a schedule tied to your expense approval cycle, with full audit trail linking each GL entry back to the source Expensify report.
  • Prevent duplicate postings and handle approval workflow changes with idempotency tracking and error replay on failure.

Questions

Which direction does data flow between Microsoft Dynamics GP and Expensify?
The main flow is from Expensify into Microsoft Dynamics GP. Approved expense reports and transactions move from Expensify into Microsoft Dynamics GP as GL journal entries, allocated to the cost center and GL account for each expense category. Employee and cost center reference data can be synced in both directions to keep dimension values aligned across both systems.
Does Microsoft Dynamics GP's on-premises architecture require special setup for the integration to work?
Yes. Microsoft Dynamics GP must be accessible at a customer-defined server URL with a valid SSL certificate, either directly or through a firewall. A Windows domain account with GP user permissions must be created by your IT team and provided to ml-connector for authentication via Negotiate or NTLM. Expensify API calls happen from our cloud infrastructure, so only Microsoft Dynamics GP needs to be firewalled or accessed through a local network.
How does the integration handle the differences between Expensify's free-text expense model and Microsoft Dynamics GP's structured GL accounts?
Expensify expense categories are mapped to Microsoft Dynamics GP GL accounts, and Expensify cost center tags are mapped to Microsoft Dynamics GP cost center dimensions during setup. This mapping is defined once per customer and reused for all subsequent expense reports. If an Expensify expense does not have a cost center tag or the tag does not have a matching Microsoft Dynamics GP cost center, ml-connector flags the report for manual review instead of posting it to the GL.

Related integrations

Connect Microsoft Dynamics GP and Expensify

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

Get started