ml-connector
Workday Financial ManagementExpensify

Workday Financial Management and Expensify integration

Workday Financial Management handles your general ledger, AP, and cash. Expensify handles employee and corporate card expenses. When you connect the two, approved expense reports from Expensify post into Workday's general ledger as journal entries, allocated to the cost centers and GL accounts your team has set up. Employee reimbursements and corporate card reconciliation move from spreadsheet to automaton.

How Workday Financial Management works

Workday Financial Management exposes a full financial data model through two API surfaces: a primary SOAP/XML endpoint at tenant-specific URLs with WS-Security UsernameToken authentication (Integration System User + password), and a secondary REST/JSON endpoint using OAuth2 refresh-token flow. The key entities for this integration are general ledger accounts, journal entries, cost centers (via Worktags), and payment dimensions. Workday does not expose webhooks or change-data-capture, so all reads are by polling with date-range filters on financial operations. Safe polling intervals are 15 to 60 minutes for most entities, with a minimum safe floor of 5 minutes to avoid tenant-level throttling.

How Expensify works

Expensify exposes expense reports, individual expenses, approval workflows, and corporate card transactions through a REST API that accepts JSON requests via a single POST endpoint, authenticated with an API key pair (partnerUserID and partnerUserSecret). The platform is expense-management only: it has no vendor master, invoice, or payment entities, and no read endpoint for employee details directly. Expense categories carry GL account codes as properties, and tags on the workspace configure dimensions like project, class, and cost center for allocation. Expensify has no webhooks and no sandbox, so all integrations poll production and operate against real data from day one.

What moves between them

The main flow runs from Expensify into Workday Financial Management. When an expense report reaches Approved status in Expensify, ml-connector reads it and the underlying expenses, maps each expense category and tag set to a Workday GL account and cost center, then submits a journal entry into Workday's general ledger. The journal entry groups expenses by GL account and cost center, with the corporate card bank account as the offsetting entry. Employee reimbursement reports (paid via check or ACH) post to an A/P liability account instead. Reads happen on a schedule you set, typically daily or after payroll cycles, since Expensify does not push events. No data flows back to Expensify.

How ml-connector handles it

ml-connector stores both credential sets encrypted and bridges the two API styles: it authenticates to Workday using either SOAP WS-Security (Integration System User) or REST OAuth2 depending on the operation, and to Expensify using the API key pair. Because Workday Financial Management exposes no webhooks, ml-connector polls the Expensify API on a schedule you set, typically daily or post-payroll, and filters by report status and date range. For each Approved report, it reads the underlying expenses and applies the expense category to GL account mapping and the tag set to cost center mapping. Complex journal entry submission goes through Workday's SOAP endpoint, which fully supports journal creation with GL accounts, amounts, and dimensions in a single operation, while the REST endpoint has narrower breadth. Tags on the Expensify policy must match cost center IDs in Workday; a missing cost center tag causes that expense to route to a suspense GL account pending manual review. Expense reports in Expensify are read-only, so ml-connector never modifies them, and failed Workday submissions are tracked in the audit log so they can be retried or inspected. Rate limits on both sides are respected, and the integration handles temporary outages by backing off and retrying.

A real-world example

A mid-sized professional services firm runs Workday for finance and Expensify for employee expense management across three offices. Before the integration, the accountant downloaded approved expense reports from Expensify each week, manually coded them to the correct GL accounts and cost center codes for each office, then batch-posted them to Workday's general ledger. With Workday and Expensify connected, each week's approved reports post automatically to the GL, allocated by the office tag and expense category, and the manual coding step is gone. Month-end close starts with expense accruals already recorded.

What you can do

  • Post Expensify approved expense reports to Workday Financial Management's general ledger as journal entries grouped by GL account and cost center.
  • Map Expensify expense categories to Workday GL accounts and tags to cost center (Worktag) dimensions, with fallback to a suspense account for unmapped expenses.
  • Authenticate Workday via SOAP WS-Security (Integration System User) or REST OAuth2 depending on the operation, and Expensify via API key pair.
  • Poll Expensify on a daily or post-payroll schedule without webhooks, filtering by report status and date range, and respect rate limits on both sides.
  • Track submitted journal entries and failed submissions in the audit log so reports can be replayed or investigated if a Workday submission fails.

Questions

Which direction does data move between Workday Financial Management and Expensify?
The main flow is Expensify into Workday Financial Management. Approved expense reports and their underlying expenses move from Expensify into Workday as journal entries allocated to the correct GL accounts and cost centers. No data flows back to Expensify, which remains the source of truth for expense reports.
How does the integration map Expensify categories and tags to Workday GL accounts and cost centers?
Each Expensify expense category is configured with a GL account code in the expense policy. Each Expensify tag (project, class, cost center) is matched to a Workday Worktag cost center ID. When a report is submitted, ml-connector groups expenses by category and tag, looks up the GL account and cost center, and posts a single journal entry per group to Workday's general ledger with both dimensions.
What happens if an Expensify expense has a tag that does not match a Workday cost center?
The expense routes to a suspense GL account and the transaction is recorded in the audit log. The finance team can then manually assign the correct cost center in Workday, or adjust the tag in Expensify and request a replay of that report through ml-connector.

Related integrations

Connect Workday Financial Management and Expensify

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

Get started