3.5 Hours to 6 Min: I Recorded My Invoice Reconciliation

Every month I burned three and a half hours matching a bank CSV against 40 invoices, hunting the one mismatched row that would bill a client wrong. I recorded the whole ritual as a Claude Skill once. Now it runs in six minutes — until month four, when one invisible byte broke it.
If you own a small business and reconciliation eats half a day every month, you already know no SaaS fits your exact bank format. Most "Record a Skill" demos show flashy one-shot tasks. I'll show you the boring monthly grind, the edge case that killed run four, and the two-line fix that made it survive.
The actual task: 40 invoices, one bank CSV, one accountant deadline
For one client I work with — a small services business running about 40 invoices a month across one operating account — reconciliation was a fixed 3.5-hour tax on the last day of every month. Export bank CSV. Open invoice list. Scroll to invoice 447, €200. Find it in the memo field of the bank export. Tick it. Next row. 40 times. Then generate a PDF for the accountant with mismatches flagged.
The pain isn't the time. The pain is the stakes. Miss one row and a client gets billed twice, or gets a "you didn't pay" email when they did. That's a real money conversation and a real relationship hit. No off-the-shelf SaaS handles this because:
- The bank export has weird column names that change per bank.
- The invoice number lives in the memo field, sometimes as
Inv-447, sometimes as447/2026, sometimes just447. - Amounts occasionally differ by cents due to wire fees.
- The output has to match what the accountant already accepts (markdown → PDF, three sections).
That's a bespoke rule set. Which is exactly what a recorded skill is good at.
Step 1: Boring, predictable input folder
Claude Skills work when the folder shape doesn't change month to month. Same file names. Same columns. Same output path. If your inputs are chaotic, the skill will be chaotic.
Here's the folder I set up:
/reconciliation/
├── 2026-09/
│ ├── bank_export.csv
│ ├── invoices_issued.csv
│ └── reconciliation_report.md (blank template)
The template file matters more than it looks. It gives the skill a target shape:
# Reconciliation Report — {{month}}
## Paid
| Invoice | Client | Amount | Bank Date |
|---------|--------|--------|-----------|
## Partial / Mismatch
| Invoice | Client | Invoiced | Received | Delta |
|---------|--------|----------|----------|-------|
## Unpaid
| Invoice | Client | Amount | Days Overdue |
|---------|--------|--------|--------------|
If your bank exports different column headers than last month (some banks do this after "system upgrades"), rename them in a preprocessing step before you record. Don't ask the skill to guess. I paid for that mistake — see section 5.
Step 2: Record the skill, and actually narrate
Open Claude, hit the + menu, choose Record a Skill. This puts Claude in a mode where it watches your actions and, more importantly, listens to your narration. Then it writes the skill definition from both.
The word that matters is narration. Not clicking. Not screen recording. You have to say out loud why you're doing each step, because that's what becomes the skill's logic. If you silently drag a file, the skill learns "drag a file." If you say "load the bank CSV, then match invoice numbers from the memo field against the invoice_number column, with a €0.01 tolerance," the skill learns the rule.
Here's the narration I gave, close to verbatim:
"Load
bank_export.csv. For each row ininvoices_issued.csv, find a matching row in the bank export where the memo field contains the invoice number. If the amount matches within one cent, mark it paid. If the amount is off by more than one cent, flag partial or mismatch. If no matching bank row exists, flag unpaid. Write the results intoreconciliation_report.mdunder the three sections. Then export to PDF."
I did every step manually while talking. Total time: about 8 minutes for the recording. Claude wrote the skill definition in the background.
What to say out loud while recording
- The rule, not the action ("match within one cent," not "click here").
- The fallback ("if no match, flag unpaid").
- The output shape ("three sections in this order").
- The file names exactly as they appear.
Step 3: First real run — 6 minutes, 40 invoices
Next month, new bank CSV, new invoice list, same folder structure. I typed run monthly reconciliation. Six minutes later, a PDF landed in the folder:
- 37 paid
- 2 partial (both wire fees — €0.35 and €1.20 short)
- 1 unpaid (client 30 days overdue, correctly flagged)
I hand-checked every row the first time. Perfect match with what I would have done manually. 3.5 hours → 6 minutes, and the 6 minutes is mostly Claude reading the CSVs and writing the PDF. My time in the loop: about 90 seconds to trigger it and skim the output.
Here's the real comparison across four months:
| Month | Manual time | Skill time | Errors caught by human review |
|---|---|---|---|
| M1 (baseline, manual) | 3h 30m | — | 1 (wrong invoice matched) |
| M2 (skill, first run) | — | 6 min | 0 |
| M3 (skill) | — | 6 min | 0 |
| M4 (skill, broke) | — | 6 min + 4 min fix | Corrupted client names |
Month 4 is where it got interesting.
Step 4: The BOM byte that broke everything
On run four, the PDF came out with garbled client names in the first column. Client instead of Client. Every lookup against that column failed silently. The paid section was half-empty. The unpaid section was full of invoices that had actually been paid.
Root cause: one client's bank exports CSVs in UTF-8 with a BOM (byte-order mark — EF BB BF at the start of the file). The CSV parser read the first header as \ufeffInvoice_Number instead of Invoice_Number. Every column-name lookup missed. The skill didn't crash — it just quietly produced garbage.
This is the failure mode you have to plan for. Skills don't fail loud. They fail plausible. A six-minute run with a clean-looking PDF full of wrong data is worse than a three-hour manual grind that catches the error.
The fix was two lines added to the skill instructions:
Before parsing any CSV: detect encoding.
- If UTF-8 BOM is present, strip it.
- If encoding is CP1250 or Windows-1252, convert to UTF-8 first.
I re-recorded just that preprocessing step (didn't need to re-record the whole skill — you can append). Ran month 4 again. Clean. 37 paid, 2 partial, 1 unpaid. Correct.
Four minutes of debugging bought every future month.
The general pattern
- Record the happy path only. Don't try to anticipate edge cases.
- Ship it. Use it on real data.
- Wait for the first break. It will happen within 3-4 runs.
- Add one guardrail. Re-record just that step.
- Ship again.
If you try to anticipate every edge case up front (encodings, currency formats, timezones, weird memo fields), you'll spend three weeks and never record the skill. The recording is cheap. The debugging is cheap. What's expensive is doing the task manually for another six months.
Step 5: Where Record a Skill actually fits (and where it doesn't)
Not every task is a good skill candidate. Here's my working filter after building four of these:
Good fit:
- Runs on a schedule (monthly, weekly).
- Same file shapes every time.
- Deterministic rules (match, sum, compare, format).
- Output is a document (PDF, markdown, spreadsheet) — not an API call with side effects.
- A junior bookkeeper could do it with a one-page instruction sheet.
Bad fit:
- Requires judgment on unstructured content (contract review, hiring decisions).
- Touches production systems with irreversible writes (invoicing, payments — you want a human confirming).
- Inputs change shape frequently (scraping web pages that redesign monthly).
- Runs so rarely (once a year) that you'll forget the folder layout before the next run.
Reconciliation sits dead center of "good fit." So does payroll matching, inventory count vs. sold count, subscription churn report, and client hours review — the boring, monthly, deterministic rituals that eat half a day and produce a PDF.
Anthropic's own Skills documentation is worth reading before you record — especially the section on inputs and outputs. The short version: keep the folder shape stupid-simple and the skill will hold up.
Step 6: The 20 other rituals hiding in your business
This isn't really about Claude Skills. It's about the pattern. Every small business I've worked with has 15-20 monthly rituals that look like this:
| Ritual | Manual time | Skill-compressible? |
|---|---|---|
| Bank ↔ invoice reconciliation | 3h | Yes |
| Payroll ↔ hours worked check | 2h | Yes |
| Inventory count vs. sold units | 4h | Yes (if inputs are CSV) |
| Subscription churn report | 1.5h | Yes |
| Client hours ↔ retainer review | 2h | Yes |
| Expense receipts → categorized report | 3h | Partial (needs OCR step) |
| Sales tax filing prep | 4h | Yes (if data lives in one place) |
That's ~20 hours a month per business. Not from a "10x productivity" pitch — from actual clients I've measured. The pattern is always: three input files, one narrated recording, one predictable output. Then wait for the break and patch it.
Where bizflowai.io fits into this
Most of what bizflowai.io builds for small business clients is exactly this shape: monthly reconciliation, invoice-to-bank matching, and the accountant-facing PDFs that come out the other end. When a client shows up with a 3-hour ritual and a folder full of CSVs, the first thing we do is map the folder shape, record the happy path, and put a two-line encoding guardrail in from day one — because the BOM bug isn't a one-off, it's the norm across US, UK and EU business banks. The point isn't Claude Skills specifically. It's compressing the boring monthly grind to something a human confirms in 90 seconds.
Want more like this?
I publish practical AI automation, GenAI engineering, and faceless content workflows on YouTube every week.
Subscribe to bizflowai.io on YouTube — never miss a new tutorial.
Planning an AI automation project or need a second opinion on your architecture?
Connect with me on LinkedIn — Lazar Milicevic, GenAI Engineer & bizflowai.io Founder.
Visit bizflowai.io for our services, case studies, and AI consulting.
Frequently asked questions
What is Claude's Record a Skill feature?
Record a Skill is a Claude feature that watches you perform a task once and automatically writes a reusable skill definition from your actions and spoken narration. You open Claude, choose Record a Skill from the plus menu, then complete the task manually while explaining your decisions out loud. Claude captures the logic in the background so you can rerun the task later with a single command.
How do I automate monthly invoice reconciliation with Claude Skills?
Prepare a folder with three consistently named files: bank_export.csv, invoices_issued.csv, and a blank reconciliation_report.md template. Open Claude, select Record a Skill, then perform the reconciliation once while narrating your matching rules aloud (e.g., match invoice numbers, flag mismatches over one cent). Claude writes the skill. Next month, drop in fresh files and type 'run monthly reconciliation' to get a PDF in minutes.
Why does file structure matter for Claude Skills?
Claude Skills work best when the folder shape is boring and predictable: same file names, same column headers every time. If your bank export uses different headers month to month, the skill will break because it can't locate the expected data. Rename inconsistent columns in a preprocessing step before running the skill, otherwise you'll spend more time debugging than the automation saves.
How do I handle CSV encoding errors in an automated skill?
Add a preprocessing instruction that detects file encoding before parsing. Specifically: if a UTF-8 BOM header is present, strip it; if the encoding is CP1250 or Windows-1252, convert to UTF-8. Re-record that step into the skill. This fixes garbled client names and missing columns caused by banks that export CSVs with non-standard encoding, which is a common silent failure.
When should I add guardrails to a Claude Skill versus keeping it simple?
Record the happy path first and ship it immediately. Don't try to anticipate every edge case upfront or you'll never finish recording. Wait for the first real break, then add a specific guardrail for that failure, re-record the affected step, and ship again. This iterative pattern keeps skills lightweight while building resilience only where actual failures occur.