Epicor Kinetic and Expensify integration
Epicor Kinetic is your ERP for finance and operations. Expensify is where your employees submit and get approval for expenses and corporate card transactions. Connecting them keeps your general ledger in sync with your expense cycle without manual journal entry. Approved expense reports flow from Expensify into Epicor's GL, allocated to the cost centers and projects your team charged them to. Every entry is audited and can be replayed if a downstream step fails.
What moves between them
Approved expense reports flow from Expensify into Epicor. ml-connector polls Expensify for reports in Approved status, sums expenses by category within each report, maps Expensify categories to Epicor GL accounts, and posts a summary GL entry for each report into Epicor's general ledger. Each line item references a cost center or project tag from Expensify if configured. The sync runs on a schedule tied to your approval workflow, typically daily or weekly. GL entries in Epicor are read by finance for reconciliation and close; Expensify is the single system of truth for expense data and cannot be overwritten by the integration.
How ml-connector handles it
ml-connector stores both API credentials encrypted. On the Epicor side, it uses the tenant-specific URL or on-premises hostname provided per customer, and holds the API Key in addition to the bearer token, refreshing the bearer token when it expires (typically after 1 hour). On the Expensify side, it polls for expense reports via scheduled requests with date range and status filters, then transforms each approved report by summing expenses per category. Before posting to Epicor, ml-connector validates that each category maps to a valid GL account in Epicor's chart of accounts and reserves a cost center or project dimension if tags are configured. It then calls GetNewAPInvtDtl to create a GL entry skeleton and UpdateMaster to finalize the journal lines. Because both systems are polling-only, the integration cannot rely on webhooks and instead maintains a high-water mark timestamp to avoid duplicate syncs. Expensify runs only against production, so ml-connector includes a full audit trail and supports manual replay if a downstream GL posting fails.
A real-world example
A mid-sized services firm uses Epicor Kinetic to manage finance and operations, with offices in two cities, and uses Expensify for all employee expense reporting and corporate card reconciliation. Before the integration, the accounting team exported approved expense reports from Expensify weekly, manually assigned cost centers and GL accounts based on project codes and submission notes, and hand-keyed the totals into Epicor's GL. With the integration, each expense report that an approver marks as Approved in Expensify flows directly into Epicor's GL, tagged with the project and cost center from Expensify tags, and the manual re-keying step is eliminated. Month-end close starts with expense accruals already booked.
What you can do
- Post approved Expensify expense reports to Epicor's general ledger, summarized by expense category and cost center.
- Map Expensify expense categories to Epicor GL accounts automatically, with validation before posting.
- Preserve expense data lineage: every GL entry includes a reference to the source Expensify report and carries a full audit trail.
- Handle Epicor bearer token refresh (1-hour expiry) and Expensify's production-only API transparently.
- Poll both systems on a schedule without relying on webhooks, with retries and manual replay support for failed GL postings.
Questions
- Which direction does data move between Epicor and Expensify?
- The main flow is from Expensify into Epicor. Approved expense reports are pulled from Expensify and posted as GL entries into Epicor's general ledger. Employees and cost centers may be synced in the opposite direction so Expensify policies reference valid Epicor dimensions, but GL posting is the primary flow.
- How does ml-connector handle the two-step GL write pattern in Epicor?
- Epicor requires a GetNewAPInvtDtl call to create a GL entry skeleton, then UpdateMaster to finalize the journal lines and GL account assignments. ml-connector calls both steps in sequence for each approved expense report summary, ensuring GL accounts and cost centers are valid before posting.
- Why does the integration poll instead of using webhooks?
- Epicor Kinetic has no native outbound webhook mechanism for cloud or on-premises, so polling with OData date filters is the only option. Expensify also offers polling only. ml-connector maintains a high-water mark timestamp to avoid duplicate syncs and includes a full audit trail on every record for reconciliation and replay.
Related integrations
More Epicor Kinetic integrations
Other systems that connect to Expensify
Connect Epicor Kinetic and Expensify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started