> ## Documentation Index
> Fetch the complete documentation index at: https://zenofirm.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Your first batch

> Plan a batch, read the approval table, post it, and reverse it again

The workflow is three steps: plan, read, approve. This page walks one small batch end to end, including undoing it, so you can try it on a real file without committing to anything.

Install [read-only](/docs/quickbooks-desktop/install#installing-read-only) first if you'd rather watch it work before it can write.

Claude is the client in the examples; ChatGPT and Codex drive the [same tools](/docs/quickbooks-desktop/clients) the same way.

## Planning

Open QuickBooks with your company file, then tell Claude what you want posted. Anything it can read works — a CSV, a PDF statement, a folder of bills, or a list you type out:

*"Here's the March Amex statement. Plan a batch of credit card charges against the Amex Platinum account, coding them the way we did last month."*

Claude calls `qb_plan_batch`, which reads your company file and prepares the batch for review:

* Resolves every account, vendor, customer, class, and item against the file's real lists. A name that doesn't exist is blocked, with the closest matches suggested.
* Applies your saved [coding rules](/docs/quickbooks-desktop/recipes#teaching-it-a-coding-rule).
* Checks whether each entry has already been posted, both by this software and by someone typing it into QuickBooks by hand.
* Assigns each entry a key derived from its content, so applying is safe to retry.

**Nothing is written during planning.** Plan as many times as you want and discard any of them.

## Reading the table

Claude shows you a table. The software renders it, so it looks the same on every run:

```
**March Amex import** — Ridgeline Properties LLC

Plan `plan-20260803-141500-9f2a` · prepared by emandel · 3 Aug 2026 14:15

12 entries · 9 ready · 1 to check · **1 blocked** · 1 already posted

**16,840.12 to post across 10 entries.**

### 1 blocked — will not post

| # | Date | Type | Name | Amount | Coding | Ref |
|--:|---|---|---|--:|---|---|
| 4 | 2026-03-11 | Bill | Ridgeline Supply | 1,204.00 | Repairs & Maintenance | INV-88 |

- **Line 4** — No vendor named 'Ridgeline Supply' in this company file. Did you mean: 'Ridgeline Supply Co'?
```

Work down it in order:

1. **The total.** That's the number you're approving.
2. **Blocked entries.** These can't post as written, and each says why.
3. **Entries to check.** These will post, but something about them deserves a look first — an amount well outside a vendor's normal range, a date in a closed month, a name resolved to something close but not identical.
4. **Ready entries.** Above 40 of them, the table shows totals by type instead of every row. Ask Claude for the full list if you want it.

On a large batch, verify the shape rather than each line: sixty bills totalling what the statement says, dated inside the right range.

## Clearing blocked names

The usual cause of a blocked line is a vendor or customer that isn't in the file yet.

If the name is a near match for one that exists — `Ridgeline Supply` against `Ridgeline Supply Co` — correct the entry. Adding a second spelling gives the client two vendors for the same company, and every report from then on splits that company's activity between them.

If it's genuinely new, ask Claude to create the names the plan is waiting on. It shows you the list first, creates them in one approved step, and re-plans so those entries come back ready.

<Warning>
  A name can't be deleted from a QuickBooks company file afterwards, only made inactive. Read the list before you approve it.
</Warning>

## Approving

Say yes. Claude calls `qb_apply_batch` with the plan id.

If some lines are still blocked, tell Claude which way you want it: fix them and re-plan so everything posts together, or approve now and handle the blocked lines separately. It won't pick for you.

The result names what landed and what didn't:

```
**Run `run-20260803-152233-77bc`** — Ridgeline Properties LLC

10 posted · 1 failed · 1 skipped

### 1 failed

- **Line 7** (CreditCardCharge) — QuickBooks rejected it (status 3180): The posting period is closed.
```

One entry failing doesn't abandon the rest. Each posting is independent, and the failure comes back with QuickBooks' own message.

### Approving somewhere other than the chat

A plan is also readable in the [console](/docs/quickbooks-desktop/console#reviewing-a-plan), where a reviewer goes line by line and excludes what shouldn't post. Applying still happens in the chat, but it honours those decisions and records who made them.

Use this when the person preparing a batch and the person accountable for it aren't the same person.

## Undoing it

Every run returns an id that reverses it:

*"Reverse run-20260803-152233-77bc."*

That voids each transaction the run posted. Voiding keeps them in the register with zeroed amounts, so the audit trail survives.

<Warning>
  Funds transfers can't be voided or deleted through the QuickBooks SDK. A transfer this software posts has to be removed by hand in the account register. See [limits](/docs/quickbooks-desktop/limits#transfers-are-a-one-way-door).
</Warning>

## Checking it afterwards

Open **Start Menu → Zeno → Zeno for QuickBooks Desktop**. Every run is listed with who approved it, what it posted, and what failed. Click one to see its entries and their QuickBooks transaction ids.

Six weeks later, `qb_explain_transaction` answers from the other direction: give it a transaction id and it tells you which batch posted it, who approved that batch, and which source document it came from.
