Export to your accounting system
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.
Connect first, or use CSV
Section titled “Connect first, or use CSV”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.
A connection lapses if you stop using it
Section titled “A connection lapses if you stop using it”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.
Preview writes nothing
Section titled “Preview writes nothing”Steps
- Open Accounting export from the sidebar.
- Set From and To. It opens on last month, because an export is run after a period closes.
- Choose a Destination: CSV file, Xero, or QuickBooks.
- 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.
Hours go out unpriced
Section titled “Hours go out unpriced”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.
Rows older than the period you asked for
Section titled “Rows older than the period you asked for”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.
The same period cannot be exported twice
Section titled “The same period cannot be exported twice”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.
When an export does not finish cleanly
Section titled “When an export does not finish cleanly”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. |
Fixed fees, retainers and milestones
Section titled “Fixed fees, retainers and milestones”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.
Resale is not included yet
Section titled “Resale is not included yet”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.
Related
Section titled “Related”- Track rebillable expenses, which is where the expense half comes from.
- See your margin, which reads the same approved rows and should agree with what you exported.
- Choose a billing model.
- Track resale margin, which the export does not yet cover.
Was this helpful?
Thanks for your feedback!