Skip to content

Export to your accounting system

All plansAdmin

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 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 needs connecting once, under Settings → Accounts → Accounting, and so will QuickBooks when it opens. 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”
Destination What lands Live immediately?
CSV file A file you import yourself Nothing is sent anywhere
Xero Draft invoices, one per client No. A draft bills nobody until someone approves it in Xero.
QuickBooks Invoices, one per client Yes. 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 at its charge-out rate, resolved the same way the margin report resolves it: any rate you have set for that client or that project, then the person’s own rate card, then their role, then your organisation default. Expenses carry their real amount.

That matters because the two now agree by construction. The revenue you read on Margin and the figure on the draft invoice come from the same resolver, so there is no version of the month that exists only in one place.

On a fixed fee, retainer or milestone project the hours go out as non-billable quantities instead, because the fee line already carries the money. Billing both would charge the client twice for the same work.

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.

A fee or resale line has no row to stamp, so its batch claims the days it covered instead. A later export whose period overlaps an earlier one bills only the days no earlier batch has claimed. For example, after October is exported, an export for 15 October to 15 November bills 1 to 15 November: half a month of a monthly retainer or licence, the share of a fixed fee earned on those days, and any milestone completed on them. Nothing is billed twice and no day is lost. When what is left is not a whole period, the line names the dates it covers.

Look at Recent exports at the bottom of the page.

State Meaning
Completed The lines reached their destination.
Failed The provider rejected everything and definitely created nothing. Its rows are released and can be exported again.
Pending Nobody 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.

Each recurring revenue line on a billable project goes out as its own resale line, invoiced to the project’s client at the sell price for the period. A monthly licence exported for a calendar month is exactly one month’s sell price, in February as in October, and a part month is the share of that month’s days. The margin report counts the same way, so the two agree. The preview counts them as Resale lines.

On the invoice, a line that covers whole periods reads as the count, for example “Microsoft 365 E3: 1 month”, and a line that covers part of a period reads as the dates it covers, for example “Backup service: 2026-05-01 to 2026-05-31”. A retainer’s fee line reads the same way (“Retainer: 1 month”). Each line is rounded to the cent, and the margin report adds those same rounded amounts, so the two totals match exactly.

  • The supplier cost is not exported. These are invoice lines for your client. The supplier’s own bill brings the cost into your ledger, so exporting it here as well would record it twice. The margin report still shows the spread.
  • Each day of a line is exported once. A later export whose period overlaps one that already carried a line bills only the days left, the same way a fee is claimed. Releasing a failed batch frees its days again.
  • A line recorded against a client rather than a project is not exported, and is not on the margin report either, so the two still agree.