Multi-entity routing before export
An expense gets assigned to the correct QuickBooks company file automatically based on the employee, department, or project it belongs to, instead of a person splitting reports by hand before each export.
Expensify has a native, official integration with QuickBooks Online and QuickBooks Desktop: approved reports export as bills, checks, or journal entries, and Expensify can pull in your chart of accounts, classes, customers, and projects so employees code expenses against real categories as they submit. Turning the connection on is the easy part. The gap we usually get called in for is everything the sync maps loosely or doesn't map at all, once a business has more than one entity, custom fields, or a job-costing setup QuickBooks wasn't built to express on its own.
Most businesses turn on Expensify's built-in QuickBooks connector directly from Expensify's settings, no middleware required. It's a real, officially supported sync, not a workaround, and it handles the common case well: an approved report exports as a vendor bill or journal entry, mapped to the categories, classes, and customers pulled from QuickBooks.
Where it gets thinner is multi-entity QuickBooks setups (the connector is built around a single company file at a time), custom fields that Expensify's standard mapping doesn't have a slot for, and job-costing structures that go deeper than QuickBooks' native class and customer fields support.
The fallback when the native sync doesn't fit a business's structure is usually a person reviewing the export before it posts, reclassifying entries, or manually splitting a report across multiple QuickBooks company files. That's the layer we build around.
The native sync assumes a fairly standard chart of accounts and a single company file. A business running multiple QuickBooks entities, a franchise group, a holding company with several subsidiaries, needs expenses routed to the right entity before export, which isn't something the stock connector decides on its own.
The other common gap is timing. The sync runs when a report is approved and exported, which is fine for routine expenses but doesn't help a finance team that needs expense data flowing into QuickBooks continuously for cash-flow visibility, not in a batch once a reporting period closes.
An expense gets assigned to the correct QuickBooks company file automatically based on the employee, department, or project it belongs to, instead of a person splitting reports by hand before each export.
When a business tracks cost detail that goes beyond what QuickBooks' class and customer fields support, we build the mapping layer that keeps that detail intact instead of letting it get flattened or dropped on export.
Multiple entities, custom fields, job costing that goes deeper than a class: describe what Expensify's QuickBooks connector flattens or drops for you and we'll take a look at it.
Most Expensify-QuickBooks friction we see traces back to one of three things: multiple entities, custom fields, or job costing that goes deeper than a class. Describe your setup and we'll say plainly whether it's a configuration fix or a real integration build. And if Expensify and QuickBooks aren't where your real integration gap is, that's fine too, we build on top of whatever accounting stack a business is already running.
Let's talk →Yes, both, as separate native connections. The Online connector syncs through QuickBooks Online's own API; the Desktop connector uses a local web connector utility since Desktop doesn't expose a cloud API the same way.
Approved expense reports export as vendor bills, checks, or journal entries, depending on how your workspace is configured, mapped against the chart of accounts, classes, and customers Expensify pulled in from QuickBooks.
The native connector is built around a single company file per Expensify workspace. Businesses running multiple entities typically need either separate workspaces per entity or custom routing logic, which is exactly the gap we build integrations to close.
Usually a mapping mismatch, a category, class, or vendor in Expensify that no longer matches what exists in QuickBooks, often after someone renames or deletes something on the QuickBooks side without updating Expensify's cached list.