QuickBooks Online and Expensify integration
Your team submits expenses in Expensify. Your accountant enters them by hand into QuickBooks Online. ml-connector closes that gap. Approved expense reports flow from Expensify into QuickBooks Online as bills or expense transactions, mapped to the cost centers and GL accounts in your chart of accounts. Your accounts payable and expense ledgers stay current without re-keying, and you have a complete audit trail of every imported report.
What moves between them
Approved expense reports move from Expensify into QuickBooks Online on a daily or weekly schedule you configure. Each report becomes a bill in QuickBooks Online mapped to a QBO vendor (typically an internal clearing account or department), with line items allocated to the correct GL accounts based on the expense category and cost center tags in Expensify. Reimbursable and non-reimbursable expenses are separated by report type. The sync is one-way - reports flow into QBO but are not modified or reversed in Expensify by ml-connector.
How ml-connector handles it
ml-connector stores the Expensify API key pair encrypted and presents it on every request to the Expensify integration endpoint. On the QuickBooks Online side, it performs OAuth2 authorization code flow once to obtain the initial access token, handles token refresh when calls return 401, and captures the realmId from the OAuth callback so subsequent calls target the correct company. The integration polls Expensify for new or updated approved reports on a schedule tied to your expense close cycle, then creates matching bill records in QuickBooks Online. Before posting, it validates that each GL account and cost center referenced in an Expensify policy exists in the QBO chart of accounts - mismatched dimensions are flagged in the audit log and held for manual review. If a bill creation fails or a downstream validation fails, ml-connector retries with exponential backoff and maintains a full audit trail so reports can be replayed once the issue is resolved. Expensify's lack of hard-delete semantics is handled by tracking report IDs, so revisions to a submitted report are recognized and the corresponding QBO bill is updated rather than duplicated.
A real-world example
A professional services firm with 50-100 billable consultants uses Expensify for employee expense submission and approval, and QuickBooks Online for financial accounting. Before integration, the office manager reviewed approved reports in Expensify every Friday, transcribed the details into a spreadsheet, and then manually created one bill per report in QuickBooks Online on Monday morning. With Expensify and QuickBooks Online connected, approved Friday reports are automatically posted to QBO as bills over the weekend, allocated to the correct cost codes and projects. The office manager now runs a monthly audit and reconciliation instead of doing data entry, and the accounts payable cycle closes a week earlier.
What you can do
- Import approved Expensify expense reports into QuickBooks Online as bills, with line items mapped to GL accounts and cost centers.
- Authenticate Expensify with API key pairs and QuickBooks Online with OAuth2, handling token refresh and credential encryption.
- Poll Expensify on a schedule aligned with your expense close cycle and validate GL dimensions before posting to QuickBooks Online.
- Track Expensify report changes and update corresponding QuickBooks Online bills when reports are revised or corrected.
- Maintain a full audit trail of every imported report and support replay if a bill creation or validation fails.
Questions
- Does ml-connector post expenses back into Expensify or modify submitted reports?
- No. The sync is one-way from Expensify into QuickBooks Online. ml-connector imports approved reports and creates bills in QBO but does not write or modify records in Expensify. This protects the expense approval workflow and the single source of truth in Expensify.
- How are Expensify expense categories and cost center tags mapped to QuickBooks Online accounts?
- Expensify policies assign GL account codes and tags (project, cost center, department, etc.) to each expense category. ml-connector maps those tags to the corresponding GL accounts in your QBO chart of accounts. If a tag or account does not exist in QBO, ml-connector flags it in the audit log and holds the report for manual review to avoid posting to a wrong or missing account.
- What happens if QuickBooks Online bill creation fails or an OAuth token expires during a sync run?
- ml-connector retries failed bill creations with exponential backoff and maintains a complete audit trail. If a token expires, the OAuth2 refresh is triggered automatically on the next call. All transaction attempts - successes, failures, and retries - are logged and can be replayed once the underlying issue is resolved.
Related integrations
More QuickBooks Online integrations
Other systems that connect to Expensify
Connect QuickBooks Online and Expensify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started