Skip to content

Export to your accounting system

All plans Admin

At the end of a month you have approved hours and approved expenses, and they need to become invoices. Accounting export hands them to Xero or QuickBooks as invoice lines, or gives you a CSV to import anywhere else.

It is not invoicing. Onplana never decides what a client owes: tax, numbering, credit notes, aging and payment all stay with your accounting system, which is the thing that owns them. This prepares the lines.

Xero and QuickBooks need connecting once, under Settings → Accounts → Accounting. Connecting records which company file to post into, which matters if you have more than one: nothing can work that out from the login alone, so an export refuses rather than guessing.

CSV needs no connection at all.

Neither connection is permanent, and a lapse is not a fault. Onplana renews both quietly every time you use them, so the clock only runs while nothing is being exported.

  • Xero stops working after 60 days without use.
  • QuickBooks runs the same way on a 100 day window.

A firm that exports every month will never see this. A firm that exports once a quarter will, and the fix is the Connect button again under Settings → Accounts → Accounting. Reconnecting changes nothing that has already been exported, and it does not re-send anything.

CSV is unaffected, because it has no connection to lapse.

Steps

  1. Open Accounting export from the sidebar.
  2. Set From and To. It opens on last month, because an export is run after a period closes.
  3. Choose a Destination: CSV file, Xero, or QuickBooks.
  4. Click Preview.

You now see exactly what would be sent: how many time rows, expense rows and fee lines, the totals per currency, and one line per client invoice.

Only then does Export appear. A real export needs that second, deliberate click.

Xero and QuickBooks behave differently, and it matters

Section titled “Xero and QuickBooks behave differently, and it matters”
DestinationWhat landsLive immediately?
CSV fileA file you import yourselfNothing is sent anywhere
XeroDraft invoices, one per clientNo. A draft bills nobody until someone approves it in Xero.
QuickBooksInvoices, one per clientYes. QuickBooks has no draft state. Nothing is emailed until you send it, but the invoice is real.

QuickBooks also asks for an item id. That item carries the income account, so it decides where the revenue lands in your books, and that is your call rather than something to default. The export refuses to run without it.

Time reaches the invoice as a quantity, with no rate on it. Expenses carry their real amount.

That is deliberate. An hour’s price depends on the rate card that applies to that person on that engagement, and your accounting system is the thing that owns billing rates. Sending a figure it will disagree with is worse than sending none: somebody has to reconcile the difference, and they will find it after the client has.

Price the hours where the rates live, then send.

The preview sometimes says something like “This includes 92 rows dated before this period, the oldest from 2026-06-01.”

That is correct and worth understanding. A timesheet dated the 15th that is approved after that month has already been exported would otherwise be picked up by nothing at all: next month’s window starts after its date. It would wait forever, silently, and nobody would notice the missing revenue.

So an export sweeps up anything approved and not yet exported, whatever its date. Each line still carries its own date, so your ledger files it in the right period.

When an export runs for real, every row it takes is claimed and stamped with that batch. Claimed rows are invisible to the next export.

This is the part that stops a client being billed twice for the same month, and it is why exporting is not simply a download.

Look at Recent exports at the bottom of the page.

StateMeaning
CompletedThe lines reached their destination.
FailedThe provider rejected everything and definitely created nothing. Its rows are released and can be exported again.
PendingNobody can tell whether anything landed. The rows stay claimed.

On a project that bills a fee rather than hours, the export sends the recognised fee for the period as its own line, and the hours on that project go out marked non-billable.

The client pays the fee, not the hours. Sending both would invoice the same work twice. See Choose a billing model for how each model recognises revenue.

Recurring revenue lines, the licences and subscriptions you buy in and resell, reach the margin report but are not written to this export. An exported month is therefore short by exactly your resale revenue and its supplier cost.