Weekly VAT Report as a Claude Skill: 55min to 4min (3

Anthropic's "Record a Skill" demo shows a one-take capture and a working automation. That's not how it went when I pointed it at a real weekly VAT reconciliation with a sales CSV, a bank export in a different column order, and half the invoices in EUR. It took three recordings before the skill survived the next Monday's files. Here's exactly what broke each time, and the version that's now held for six weeks at four minutes end to end.
The task I picked, and why it looked like a slam-dunk
Every Monday I prep a VAT reconciliation for a small business client. The manual version takes about 55 minutes and looks like this:
- Pull the weekly sales CSV from their invoicing system
- Categorize each line by tax rate (20% standard, 10% reduced, 0% zero-rated exports)
- Reconcile totals against a bank export CSV that comes with columns in a different order
- Convert EUR invoices to local currency at the week's rate
- Produce a one-page markdown summary the accountant signs off on
The reason I thought this was a perfect Record-a-Skill candidate: the shape of the work never changes. Same two files, same three tax buckets, same output. What changes is the data — new invoices, new bank rows, sometimes a new column, occasionally a blank tax rate cell.
That distinction — stable logic, changing data — is the entire game. Miss it and you'll re-record forever.
Recording one: I clicked, Claude copied the clicks
I opened Claude, hit record, and did what the demo shows. Uploaded sales CSV, asked Claude to group by tax rate, uploaded the bank export, asked it to match totals, exported the summary. Took about 12 minutes because I was being careful.
Next Monday I dropped in the new files. The skill replayed the shape of what I did but had no idea why. Two failures:
- It grouped by the wrong column. The new CSV had one extra field at the front and everything shifted one column right. Claude clicked "column D" because that's what I clicked, not because column D was the tax rate.
- It matched the bank total against gross instead of net sales, because I'd happened to click the gross column when eyeballing totals.
Output was garbage. Lesson: silent clicks record positions, not intent. If you don't say out loud "this column is the tax rate," the skill has no anchor when the data shifts.
Recording two: narration helped, hard-coded filenames killed it
Second attempt, I narrated:
"Group by the column named
tax_rate, not by position. Match the bank exportnetcolumn against the salesnettotal."
That week it worked beautifully. The next Monday it broke instantly. Why? During the recording I'd referenced files by name — Sales_week_45.csv, Bank_week_45.csv. Come Monday the files were week_46. Claude went looking for last week's filenames and found nothing.
Lesson: never hard-code identifiers inside a recording. Files, dates, sheet names, exchange-rate values — all of it should be referenced by pattern or asked for at runtime.
Rewrite anything like this:
# BAD - baked into the recording
Open Sales_week_45.csv
Use exchange rate 117.20
# GOOD - resolved at run time
Open the newest file matching Sales_week_*.csv in this folder
Use the exchange rate the user pastes at the start of the run
Things that must never be hard-coded in a skill recording
- Filenames with dates, week numbers, or client codes
- Exchange rates, VAT rates, or thresholds that change
- Absolute row counts ("row 47 is the total")
- Sheet tab names that get renamed weekly
Recording three: narrate every branch like you're training a junior
Before recording the third time I did something the demo skips entirely: I spent 10 minutes with pen and paper writing down every if-then I actually hit during the manual run. That decision tree was the difference between recording three working and going back for recordings four, five, six.
Here's the tree I wrote, roughly:
FOR each row in sales CSV:
IF tax_rate is blank:
flag row, do not include in totals
IF currency == "EUR":
convert net using rate provided at run start
bucket by tax_rate value (0, 10, 20)
FOR reconciliation:
compare sales.net_total to bank.net_credits
NEVER compare gross to net
delta = sales.net_total - bank.net_credits
OUTPUT:
markdown table, one section per tax rate
final line: "Reconciliation delta: <value>"
Then I recorded, narrating every branch out loud. The recording took 18 minutes because I kept stopping to explain edge cases I usually handle in my head — the blank tax rate, the EUR row, the gross-vs-net trap. That's not wasted time, that's the whole point. The stuff you handle in your head is invisible to the skill unless you say it.
Next Monday, four minutes end to end. The Monday after that, four minutes again. Six weeks in, still four minutes.
The narration rules that actually mattered
- Name columns by header text, not screen position ("
tax_ratecolumn," not "column D") - State the comparison basis every time ("net to net")
- Say what to do with bad data, not just good data ("if blank, flag and skip")
- Reference files by pattern ("newest
sales_week_*.csv") - Ask for volatile inputs at run time ("use the FX rate I paste at the start")
When Record-a-Skill actually pays back
Recording a skill only pays off when the decision logic is stable and the data changes. That's the filter. Apply it before you hit record or you'll burn afternoons.
| Task type | Record it? | Why |
|---|---|---|
| Weekly VAT reconciliation | Yes | Same logic, new files every week |
| Monthly payroll summary | Yes | Fixed structure, changing numbers |
| Recurring client status report | Yes | Templated output, live data |
| Quarterly board deck narrative | Maybe | Structure stable, commentary bespoke |
| One-off data cleanup for a migration | No | You'll never run it again |
| Ad-hoc "why did revenue dip" analysis | No | Logic is what you're figuring out |
| Anything you're still designing | No | Record it after it's stable, not during |
My rule of thumb: if I've done the exact same task at least four times, and I could write the steps on an index card without thinking, it's a recording candidate. Otherwise I do it manually and move on. Four runs is roughly where the time saved starts beating the time spent recording and debugging.
Rough math on the VAT skill:
- Manual: 55 min/week × 52 weeks = 47.7 hours/year
- Skill: 4 min/week × 52 weeks + ~40 min total build/rebuild = 4.1 hours/year
- Net saved: ~43 hours/year, on one recurring task, for one client
Do that across three or four recurring tasks and you've bought back a full work-week per month.
The pre-flight checklist I use before hitting record
I don't hit record anymore until I can answer yes to all of these. Ten minutes of paperwork saves three re-recordings.
- I've run this task manually at least 4 times
- I can write the decision tree on one index card
- I know every branch: what happens for blank cells, missing files, wrong currency, wrong totals
- File inputs are referenced by pattern, not name
- Volatile values (FX rates, dates, thresholds) are asked for at run time
- I've named the exact columns by header text I'll reference out loud
- The output format is fixed and I can describe it in one sentence
- I know what "success" looks like so I can test next week's run objectively
If any of those is a no, don't record yet. Either you need more manual reps to stabilize the logic, or you need to design the task better before automating it.
Why bizflowai.io helps with this
Most of what I ship for small business clients through bizflowai.io is exactly this shape — recurring, multi-file, decision-heavy reports that a founder or bookkeeper was doing by hand every week. VAT reconciliations, weekly sales roll-ups against Stripe payouts, monthly payroll summaries, recurring client reports pulled from three CSVs and a Google Sheet. The pattern is always the same: map the decision tree first, hard-code nothing volatile, narrate every branch including the failure paths, and test on next week's real data before you call it done. Skills, agents, or plain Python — the tool matters less than getting that pre-flight right.
What I'd tell you before you record your first skill
Three things I wish I'd internalized before recording one:
- Clicks aren't logic. If your fingers know something your voice doesn't, the skill won't have it. Narrate the why of every action, not just the action.
- Filenames are data, not structure. Anything that changes week-to-week — filenames, dates, rates, row counts — gets referenced by pattern or asked for at runtime, never baked in.
- Map the tree before you record. Ten minutes on paper beats three re-recordings. Every if-then you handle in your head is invisible to the skill until you write it down.
Do that and your first recording has a real chance of surviving Monday. Skip it and you'll be on take four, wondering why the demo lied.
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 Record a Skill in Claude and when does it actually work?
Record a Skill lets Claude replay a task by capturing your clicks and narration. It works reliably only when the decision logic stays stable and just the data changes week to week, like VAT reconciliations, payroll summaries, or recurring client reports. For one-off cleanups or ad-hoc analysis where you're figuring out steps as you go, recording wastes more time than it saves.
Why do recorded Claude skills break the next time you run them?
Recorded skills break when Claude captures clicks without understanding intent. If you click column D silently, Claude remembers the position, not that it's the tax rate, so a shifted CSV breaks everything. Hard-coding filenames like sales_week_45.csv also fails when next week's file is named week_46. Fix this by narrating logic out loud and referencing files by pattern, not name.
How do I record a Claude skill that doesn't break?
Narrate every decision out loud as if training a junior. Reference columns by name, not position. Match files by pattern and take the newest. Spell out edge cases: currency conversions, blank fields, net-vs-gross comparisons. Before recording, write the full decision tree on paper, capturing every if-then from a manual run. Then record once, cleanly, instead of re-recording four or five times.
When should I record a skill versus just doing the task manually?
Record only if you've done the exact same task at least four times and could write the steps on an index card without thinking. Recurring work with stable logic and changing data—weekly reconciliations, monthly reports—pays off. Anything exploratory, one-off, or where you make decisions as you go should stay manual. Recording unstable tasks costs more hours than it saves.
Why does mapping the decision tree before recording matter?
Mapping every if-then on paper before recording takes about ten minutes but lets you narrate cleanly in one pass. Without it, you'll remember edge cases halfway through—like EUR needing conversion—and end up on your fourth or fifth re-recording. A written decision tree turns a messy 18-minute recording into a skill that runs in four minutes every week afterward.