ml-connector
Exact OnlineExpensify

Exact Online and Expensify integration

Exact Online is your accounting and ERP backbone. Expensify is your employee expense management tool. Connecting them keeps employee spend synchronized with your general ledger without manual re-entry. Approved expense reports and corporate card transactions flow automatically into Exact Online's journal entries, mapped to the correct GL accounts and cost centers. Monthly reconciliation becomes verification rather than reconstruction.

How Exact Online works

Exact Online exposes GL accounts, journal entries, transaction lines, cost centers, cost units, and expense accounts through a region-specific REST API with OData v3 query syntax. Each customer instance has a division ID that partitions data, and the API uses a region-specific base URL (Netherlands, Belgium, UK, Germany, France, Spain, or USA). Authentication uses OAuth 2.0 Authorization Code Grant with a 10-minute access token and a 30-day rotating refresh token. The platform supports webhooks for push notifications on journal entries, GL accounts, and transaction lines, but webhook payloads contain only the entity key and action - full data must be fetched via REST.

How Expensify works

Expensify exposes approved expense reports, individual transactions, employee records, and policy configurations through a polling-only REST API where all requests POST JSON to a single integration endpoint. Authentication uses an API key pair (partnerUserID and partnerUserSecret) passed with every request. The platform has no vendor or invoice entities - vendor names appear as free-text merchant fields on individual expenses. GL account codes are configured as properties of expense categories within policies, and tags function as accounting dimensions for project, class, and cost center allocation. There is no sandbox or test environment; all API calls run against live production data.

What moves between them

Expense reports move one direction: from Expensify into Exact Online. After an expense report is approved in Expensify, ml-connector polls for the report and its line items, then creates a journal entry in Exact Online's general ledger. Each expense line is mapped to an Exact Online GL account based on the Expensify category and cost center tags. The integration polls Expensify on a daily schedule by default and posts all approved reports from the prior day into Exact Online.

How ml-connector handles it

ml-connector stores the Expensify API key pair and the Exact Online OAuth credentials encrypted. On the Expensify side, it polls the integration endpoint for approved reports and filters by date range and status. It maps Expensify expense categories to Exact Online GL account IDs by a configuration table you provide, and it reads the cost center or project tag from each expense to populate Exact Online's cost center dimension on the journal line. On the Exact Online side, it determines the correct regional endpoint (Netherlands, Belgium, UK, Germany, France, Spain, or USA) from the division ID, refreshes the OAuth token when it is within 2 minutes of expiry, and validates that each GL account and cost center exist before posting. Expensify has no test environment, so ml-connector includes a dry-run mode that constructs the journal entry but does not post it. If a GL account or cost center does not exist in Exact Online, the journal entry is quarantined and flagged in the audit log for manual review. Every transaction carries the original Expensify report ID and transaction ID for traceability.

A real-world example

A mid-sized professional services firm uses Exact Online for accounting and cost center tracking across three regional offices, and Expensify for employee expense reports and corporate card reconciliation. Before the integration, the accounting team exported approved Expensify reports twice a week and spent 4 to 6 hours manually re-keying expense lines into Exact Online's journal entry screen, mapping categories to GL accounts and assigning cost centers by office. Reconciliation at month-end meant chasing discrepancies between the expense system and the ledger. With Expensify and Exact Online connected, each approved report posts automatically to the correct GL account and cost center, the audit trail preserves the original Expensify report and line-item IDs, and the accounting team spends the freed time on analysis instead of data entry.

What you can do

  • Post approved Expensify expense reports into Exact Online's general ledger as journal entries, mapped to GL accounts and cost centers.
  • Map Expensify expense categories to Exact Online GL account codes via a configuration table.
  • Track expense tags (project, cost center, class) and map them to Exact Online cost center and cost unit dimensions.
  • Authenticate Expensify with API key pairs and Exact Online with OAuth 2.0 across any region and division.
  • Poll Expensify on a schedule, validate GL accounts and cost centers in Exact Online before posting, and quarantine entries that reference missing dimensions.

Questions

Which direction does data move between Expensify and Exact Online?
Expense reports and transactions move one way: from Expensify into Exact Online. ml-connector reads approved Expensify reports and posts them as journal entries in Exact Online's general ledger, mapped to the correct GL accounts and cost centers. Exact Online does not write data back into Expensify because Expensify is expense-management only and does not expose a write endpoint for GL account or cost center master data.
What happens if an Expensify expense references a GL account or cost center that does not exist in Exact Online?
ml-connector validates each GL account and cost center against Exact Online before posting the journal entry. If a reference is missing, the entry is quarantined and flagged in the audit log with the Expensify report ID and the missing dimension name, so your accounting team can review and either add the dimension to Exact Online or correct the category mapping in Expensify. Once the dimension exists, the entry can be replayed.
How does the integration handle Exact Online's regional endpoints and division IDs?
ml-connector accepts the division ID and region (Netherlands, Belgium, UK, Germany, France, Spain, or USA) as configuration per customer. It constructs the correct base URL for that region, fetches a current OAuth token, and refreshes it before expiry. Because Expensify has no test environment, ml-connector includes a dry-run mode so you can validate category-to-GL mappings before posting live entries.

Related integrations

Connect Exact Online and Expensify

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

Get started