# 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.

- Workflow type: app
- Services: HoneyBook, Xero, Gmail
- Categories: Finance, Operations
- Published: 2026-08-24

## What it does

- 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 you'll need

- 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

## Prompt

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.

## How to customize

- 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

## FAQ

### Do I need a paid HoneyBook plan for this?

Yes. The API key that connects HoneyBook lives under company settings and is only available on the Essential and Premium plans, not on Starter.

### Why does the payment information come from Xero instead of HoneyBook?

HoneyBook can hand over your list of projects but not a list of invoices, so the trustworthy record of what has actually been paid is your accounting system. The desk reads projects from HoneyBook and money from Xero, then lines the two up side by side.

### Will it email my clients automatically?

No. The chase button writes a draft per client into your Gmail drafts and posts a summary back into the app. You read each one and press send yourself, so nothing goes out in your name without your say so.

### What happens when a payment cannot be matched to a project?

It shows up in an unmatched list instead of quietly disappearing. You can link it to the right project by hand once, and the desk remembers that pairing from then on.

### Will it chase a client whose wedding or event has not happened yet?

No. Anyone with a future event date is skipped by the chase assistant, even if a deposit invoice is technically past its due date, so you never nag a client before you have delivered.

Use this prompt in General Input: https://www.generalinput.com/prompts/booked-vs-collected-cash-flow-desk-for-honeybook-studios