Guides · Billing and invoicing
How do I turn tracked hours into a draft invoice in QuickBooks or Xero?
Connect QuickBooks Online or Xero once, map each Winnows client to a customer or contact in your books, then pick a period and push. Winnows creates draft invoices you review and send from your accounting tool; it never issues or emails an invoice itself.
How to do it
- Connect your books. In Settings, connect QuickBooks Online or Xero. You are sent to their consent screen and back. Winnows asks only for the permissions it needs to read your customers and create draft invoices.
- 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.
- Choose the period and what to include. 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.
- 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.
- Push, or take a CSV. Push creates the drafts in your books 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.
What Winnows does not do here
Winnows does not issue 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 invoice lines with the right rate and the right description, and put them somewhere 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 a push 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 push is recorded as a run 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 a push half-fails
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.
Questions people ask
- Does Winnows send the invoice to my client?
- No. Winnows creates a draft in QuickBooks or Xero. Reviewing, numbering to your own scheme, adding tax and sending all stay in your accounting tool, which is where your accountant already looks.
- 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-12
Verified against the invoicing panel and src/dal/invoicing.ts on 2026-09-12, including the unapproved-hours exclusion and the per-client grouping default.