Omit the expense first, then push. And if you need to push the same report again, ExpenseBot only sends the rows that have not already reached your accounting package.
Where Omit lives
Omit is on the expense row itself, in the Review Expenses workspace — not inside a report and not on the accountant Clients page. Reports are snapshots; the omit decision lives on your live expense list, which is why it can change what a report exports after the report already exists.
Keep an expense out of QuickBooks — exact steps
The control is the same for everyone; only how you reach the expense list differs.
If you are an accountant or bookkeeper working on a client
- In the top bar, click Acting as: Self and choose the client. The page becomes that client's dashboard. There is no Omit control on your own Clients page — you have to be in the client's account. This is the step most people miss.
- Open Reports.
- Click Review [client]'s expenses — the button above the report list, captioned "Check categories, tags, business use, and splits".
- Continue with Find the row below.
If you are working in your own account
- Open Reports.
- Click Review expenses — same button, above your report list.
- Continue with Find the row below.
Find the row and omit it
- Pick the right tab. The list opens on Not in reports. An expense that is already in a report — the usual case when you are cleaning up before a QuickBooks push — is under In reports. Active shows both.
- Click the chevron (⌄) at the right end of the row to expand it. The row's actions stay hidden until it is expanded.
- Click ⋯ More actions → Omit from reports & insights.
- Confirm Omit expense.
- Push the report to QuickBooks as usual.
Several rows at once: click Select above the list, tick the rows, then click Omit.
To undo: open the Omitted tab, expand the row, and choose Include in reports & insights.
How to check an expense is omitted
Look at the expense, not at the report. An omitted expense shows up as omitted in three places:
- An Omitted badge on the row in Review Expenses.
- The Omitted tab, which lists every omitted expense with a count.
- Your Google Sheet: the row's Notes column gains "Excluded from future ExpenseBot reports (see Expense Controls)".
The report will not show it. A report is a snapshot taken the day you created it, so an omitted expense still appears in an existing report exactly as before. That is expected — the omit is applied on the way to QuickBooks, not to the saved report.
Timing does not matter — omit works at two points
It is the same Omit either way; ExpenseBot checks your omit list twice.
- Omit before you create the report — the expense never goes into the report in the first place.
- Omit after the report already exists — the report still lists the expense, because a report is a snapshot of the day you made it. The QuickBooks push re-reads your omit list at the moment you push, so the row never reaches QuickBooks. You do not need to rebuild the report.
That second case is the one that looks like a bug and is not: seeing the expense still sitting in the report does not mean the omit failed. What matters is what arrives in QuickBooks.
This is the common invoice-plus-receipt case: a vendor emails an invoice, then emails a paid receipt for the same amount. Both are real documents and both are worth keeping in your sheet, but only one belongs in your books. Omit the one you do not want to claim and push; QuickBooks receives a single entry.
If ExpenseBot cannot read your omit list for any reason, the push stops and nothing is exported. You will see a message asking you to retry in a minute. That is deliberate: sending an expense you asked us to leave out is worse than a short delay.
Omit is reversible — restore anything from the Omitted view. See How do Personal and omitted transactions affect my reports for what else omitting changes.
Push the same report again safely
Fixing a category, adding a vendor, or correcting an amount and pushing again does not duplicate what QuickBooks already has:
- Every expense ExpenseBot successfully creates in QuickBooks is recorded against that specific QuickBooks company.
- On the next push, those rows are skipped and only the remaining rows are sent. The response tells you how many were skipped.
- If a push fails partway through, the entries that were already created are still recorded — retrying sends only what is left, not the whole report.
Two cases where ExpenseBot asks you first instead of deciding for you:
- You switch export type. Expenses already sent to that company as Purchases will not be re-sent as Bills unless you confirm, because that would put the same expense in the books twice.
- We cannot tell where an older push went. For a small number of reports pushed before this tracking existed, ExpenseBot will ask "push anyway?" rather than guess.
Connecting a different QuickBooks company is never blocked — a push to a new company is a legitimately new destination and goes through in full.
Xero, Wave and FreeAgent
Xero works the same way, per Xero organisation and per share type (bill, spend money, manual journal). FreeAgent honours omitted expenses on every push.
Wave creates one money transaction per report rather than one entry per row, so re-pushing a submitted report asks you to confirm before it creates a second transaction there.
If duplicates already exist in QuickBooks
ExpenseBot cannot remove entries you or someone else created directly in QuickBooks — delete those in QuickBooks. Then omit the copy you do not want in ExpenseBot so future reports and pushes stay clean.
