Guides · Billing and invoicing

How do I turn tracked hours into a draft invoice in QuickBooks or Xero?

On the paid plan, connect QuickBooks Online or Xero once in Settings → Invoicing, choose the item or account every line posts to, and map each Winnows client to a customer or contact in your books. Then pick a period on Reports → Invoicing and create the invoices. Winnows creates them unsent, for you to review and send from your accounting tool; it never sends or emails an invoice itself.

How to do it

  1. Connect your books. In Settings → Invoicing, connect QuickBooks Online or Xero. You are sent to their consent screen and back. Connecting is on the paid plan, $9 per active member a month; on the free plan the page shows what you would be setting up.
  2. Choose where lines post. Pick the service item (QuickBooks) or sales account (Xero) every line posts to, and a tax code if you charge tax. This is the one required choice: until it is made, no invoice can be created. Everything else has a default.
  3. Map your clients once. Each Winnows client is matched to a customer in QuickBooks or a contact in Xero. Anything unmatched is listed so nothing is guessed, and you can create the customer from the mapping screen.
  4. Choose the period and what to include. On Reports → Invoicing, pick the date range, then tick the clients and projects to bill. Hours still awaiting approval are excluded, and any project holding them starts unticked so you do not bill them by accident.
  5. Review the preview. The preview shows each invoice, its lines, its total and its number before anything leaves Winnows. Nothing is sent until you confirm.
  6. Create the invoices, or take a CSV. Creating them puts the invoices in your books, unsent, and records the run so the same hours are not billed twice. If you invoice somewhere else, download the same lines as a CSV instead, on any plan.

What Winnows does not do here

Winnows does not send invoices, calculate tax, take payments, or email anything to your client. It has no expenses, estimates, retainers or payment records. What it does is turn approved hours into invoices with the right rate, the right description and a number, and put them, unsent, where your accountant already looks.

That is a deliberate boundary rather than a gap waiting to be filled. An invoice that lives in your accounting tool is the one your bookkeeper reconciles, your tax is computed on, and your payment lands against. Two systems both believing they own the invoice is how numbers stop matching.

How approvals change what gets billed

If approvals are switched on, hours still awaiting approval are left out of the invoice entirely. Any project holding those hours starts unticked, so a partly-approved project cannot be swept into an invoice by a select-all. The point is that the omission is visible while you are choosing, not discovered afterwards by a client.

This is what makes it safe to invoice one project mid-month while another project for the same client is still being timesheeted. Pick the projects that are ready and leave the rest; the period stays open for the ones you skipped.

How to verify it worked

Every run is recorded against the exact entries it billed, with what was sent, when, by whom and where it landed. Open the same period again and those hours show as already invoiced instead of appearing as fresh work, which is what stops the same hour being billed twice.

If some invoices fail

A run that refuses one invoice does not silently bill the others and move on. Each invoice records its own outcome, so a retry sends only what did not land. Nothing is inferred from a partial success.

If your history came in from another tool, read the Harvest import guide first. Imported hours arrive with no record of having been invoiced anywhere, so a long history can look like a large amount of unbilled work on your first run.

Start freeFree for 2 people and 1 active project, with the CSV. Creating invoices in your books is on the paid plan, $9 per active member a month.

Questions people ask

Does Winnows send the invoice to my client?
No. Winnows creates the invoice unsent: a draft in Xero, and an open, unsent invoice in QuickBooks, which has no draft state. Your accounting tool computes the tax from the code you chose, and reviewing and sending stay there, where your accountant already looks.
Who numbers the invoices?
Winnows does, from a pattern you set in Settings → Invoicing, such as {CLIENT}-{SEQ:4}, with a run of numbers per client, per project or for the whole organization. Leave the pattern empty and your accounting tool numbers them instead. QuickBooks uses the number only if the company has custom transaction numbers switched on; otherwise it numbers the invoice itself, and Winnows records the number it used.
Does it need a paid plan?
Creating invoices in QuickBooks or Xero does: $9 per active member a month. The same lines as a CSV, the read-only API and marking hours as invoiced elsewhere are on every plan, the free one included.
What stops the same hours being invoiced twice?
A successful push records the run against those entries, and they are then excluded from later periods. Re-running a period shows what is already billed rather than billing it again.
Are unapproved hours included?
No. If approvals are on, hours still awaiting approval are left out, and any project holding them is unticked by default so the omission is visible rather than silent.
One invoice per client, or per project?
Either. The organisation sets a default and each client can override it, because some clients want one invoice for everything and others want one per project with a purchase order on each.

Related guides

Last reviewed 2026-09-18

Verified against Settings → Invoicing, Reports → Invoicing, src/dal/invoicing.ts and src/dal/invoice-push.ts on 2026-09-18, including the paid-plan gate, the required line target, the numbering pattern and the unapproved-hours exclusion.