Booked vs collected cash flow desk for HoneyBook studios
See every HoneyBook project's booked revenue next to what actually landed in your bank, chase what is late, and bill the next payment in one click.
Build me a cash flow desk for my creative studio that answers one question without a spreadsheet: what have I actually been paid, and who still owes me. I run client work in HoneyBook and my books in Xero, and today I rebuild the same reconciliation by hand every month.
The main tab is a booked versus collected view. Load every project from HoneyBook with List Projects, following the cursor until there are no pages left, and show one row per project with the client name, project type, event date, budget, and stage. Roll the budgets into booked revenue by month using the event date, with a month selector or a compact month strip across the top. Next to that, show what really landed in the bank: pull sales invoices from Xero with List Invoices (accounts receivable only, so ACCREC, including authorised, paid, and voided so I can see the full picture) and actual cash received with List Payments, and roll the payment dates into collected revenue by month. Every month should show booked, collected, and the difference, and the project table should show, per client, total booked, total collected, and a running outstanding balance.
Matching between the two systems has to be fuzzy, because HoneyBook and Xero do not share IDs. Match Xero invoices and payments back to HoneyBook projects on client name (normalise case, punctuation, and things like "and" versus "&", handle partner names such as "Sarah and Tom Whitfield") and on amount as a supporting signal. Use Xero List Contacts to get the canonical client record and email address behind each invoice. Show a confidence indicator on matched rows. Anything you cannot match confidently must appear in a visible Unmatched panel rather than being silently dropped, with a control to link an unmatched Xero contact or invoice to a HoneyBook project by hand. Store those manual links so the desk remembers them on every later load, and prefer a stored link over a fuzzy guess.
The second tab is an aging board of overdue Xero invoices, grouped by client. For each client show the total overdue, and under it each invoice with its number, amount due, due date, days late, and the HoneyBook project the money belongs to. Bucket the invoices into 1 to 14 days late, 15 to 30, 31 to 60, and 60 plus, and sort clients by money at risk. Show the client's event date on the row too, and visually mark anyone whose event has not happened yet, since those are deposits I do not chase. Keep the unmatched overdue invoices visible in their own group at the bottom of this tab as well.
Give every project row on the main tab a "Bill this project" action. It opens a small form prefilled with the remaining balance on that project (budget minus everything collected against it), a suggested due date, and a description, lets me edit the amount, due date, and description, then raises the next payment request through HoneyBook Create Invoice against that project. After it succeeds, show the new invoice on the row and refresh the project's numbers. Handle the failure case with a clear message rather than a silent no-op.
Add a "Draft chase emails" button on the aging tab that kicks off a background agent. The agent should read the overdue Xero invoices with List Invoices, resolve each one to a client and email address with Xero List Contacts, match it back to the right HoneyBook project using List Projects and the same name and amount logic plus any manual links I have saved, then write one reminder email per client covering all of that client's overdue invoices together (never one email per invoice). It creates each reminder with Gmail Create a Draft in my own drafts folder and never sends anything.
The chase rules matter. Wording should be gentle and apologetic for anything under 14 days late, noticeably firmer and more direct past 30 days, and it should reference the specific project and event by name so it reads like a person wrote it. Never chase a client whose event date is still in the future, no matter what the invoice says. Skip clients I have already chased in the last seven days, and record the chase date so that rule works on the next run.
When the agent finishes, it must post a summary back into the app so I can review before I send anything from Gmail. The summary should list each client it drafted for, the amount and days late, the matched project, a link or reference to the Gmail draft, and a separate section for anyone it deliberately skipped (future event, recently chased) and anyone it could not match. Store these runs so the aging tab shows the last chase run and I can open previous ones.
Important API constraints to design around: HoneyBook has no list-invoices and no list-contacts operation. Its only bulk read is List Projects with cursor pagination, plus Get Company and Get Current User, and its only writes are Create Project, Create Invoice, and Create Contact. That is exactly why payment status comes from Xero rather than HoneyBook, and why the matching is done on client name and amount. Do not build any view that assumes you can list HoneyBook invoices or contacts. Xero needs the tenant ID on every call, returns dates in .NET JSON date format that must be parsed, and rate limits at 60 calls per minute per organisation, so page through invoices and payments carefully and cache the loaded data in the app rather than refetching on every interaction.
This is for me, the studio owner, opening it a few times a month around invoicing and month end, so favour density and one glance clarity over a wizard. Format money with currency symbols and thousands separators, show days late as a plain number, and make the outstanding balance the most prominent number on the screen.
What does this prompt do?
- One screen lists every project you have in HoneyBook with its budget and event date, rolled up into booked revenue by month, sitting next to the money that really landed in your bank account.
- A running outstanding balance per client shows the gap between what you booked and what you have actually been paid, so you stop rebuilding the same spreadsheet every month.
- A second tab is an aging board of overdue invoices grouped by client, showing how many days late each one is, the amount, and which project the money belongs to.
- Bill the next payment on any project row without leaving the desk, and hand the reminder writing to a background assistant that drafts a chase email per client and reports back what it wrote.
What do I need to use this?
- A HoneyBook account on the Essential or Premium plan, since the API key lives in company settings and is not offered on Starter
- A Xero organisation where you raise client invoices and record the payments that come in
- A Gmail account you send client email from, so reminder drafts land in your own drafts folder
- Client names spelled close enough to match between HoneyBook and Xero, though anything the app cannot match is shown to you rather than hidden
How can I customize it?
- Move the chase tone thresholds, which start gentle under 14 days late and get firmer past 30 days
- Decide whether clients whose event has not happened yet are ever chased, or keep them permanently off the list
- Roll booked revenue up by event date or by the date the project was booked, and filter the desk to one project type or one year
FAQs
Do I need a paid HoneyBook plan for this?
Why does the payment information come from Xero instead of HoneyBook?
Will it email my clients automatically?
What happens when a payment cannot be matched to a project?
Will it chase a client whose wedding or event has not happened yet?
Related templates
A calibration board that lines up every candidate's answer to the same question, hides names until your panel has scored, and writes the agreed rating back.
Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.
Open one board every morning to see every outstanding quote by age and value, decide on each one, and send follow-ups only after you approve them.
A month by month view of every booked date, what it is worth, and which weekends are still open, with your personal calendar layered on top.
Compare weddings against portraits against corporate work, with real costs from your books, so you know what to raise, hold, or retire.
Paste a customer email or license key and see every purchase, license, and membership in one place, then refund or reset a key right from the row.
Stop rebuilding the cash flow spreadsheet every month.
Open one desk that shows what you booked, what you were actually paid, and who is still holding your money.