A copy-paste reconciliation prompt pack (the directions AI actually needs)
The most useful thing anyone says about AI in finance is also the most deflating: it only helps if you tell it exactly what to do. The top-voted reply in an r/FPandA thread on whether agentic AI actually makes finance teams more effective put it plainly — "the AI solutions require very clear directions. There is a lot of learning/teaching to be done for the system to answer your questions properly." Right. And almost nobody hands over the directions. So here they are: a copy-paste pack that walks any capable assistant through reconciling two files, in order, with one rule that keeps every number yours to check — the model may parse, propose, and explain, but it never decides whether two numbers are equal. Code does that.
There is no shortage of "use AI to reconcile" advice. What is missing is the actual prompts — the literal text that turns a chatty assistant into a careful one. The other pieces here cover the why and the patterns; this is the grab-and-go version. Copy the prompts below in order, swap in your filenames and key, and you have the "very clear directions" that thread was asking for. Then keep them — the same pack works next month.
The one rule the whole pack is built on
Every prompt here enforces a single division of labor: the model handles language and judgment, code handles matching and math. The reason is not snobbery about AI — it is that a language model asked to total ten thousand rows will hand you a confident number in the same fluent tone whether it is right or invented. That failure has a name, hallucination, and you cannot catch it by reading the answer. So the matching and the arithmetic live in code the assistant writes and runs in front of you, and the model is left doing the parts it is genuinely good at: proposing a field map, guessing a key, sorting a difference list, explaining a row. For the long version of this line, see can an AI agent reconcile your data and the end-to-end walkthrough.
How to use the pack
- Paste Prompt 0 once at the top of the chat. It sets the standing rules for the whole session so you are not re-typing them.
- Then paste Prompts 1 through 7 in order, one at a time. Read the output of each before pasting the next — the point is to catch a wrong key or a misread column early, not at the end.
- Swap the placeholders for your specifics: your two filenames, the join key, and the amount column you are comparing.
- Use any assistant that can actually run code in a sandbox. The pack is tool-agnostic; the safety comes from what you ask for, not the brand.
Here is what each prompt produces and the specific trap it heads off — skim it once so the order makes sense.
| Prompt | What it gets you | The trap it avoids |
|---|---|---|
| 0 — standing rules | A model that refuses to invent numbers for the whole session | Re-improvising directions every message, and getting different behavior each time |
| 1 — census | Column names, row counts, sample rows, a field map | Reconciling files the model misread on the way in |
| 2 — join key | The unique key, confirmed by a distinct count | A bad key that silently multiplies or drops rows |
| 3 — merge code | A short, readable merge you approve before it runs | Matching logic you cannot see or re-run |
| 4 — real differences | Only the nonzero diffs, plus the missing rows | A prose summary that hides what actually broke |
| 5 — classify | Each difference tagged timing / fee / error / missing | Doing the tedious sorting by hand |
| 6 — explain one | A two-sentence cause a reviewer can act on | A confident story the numbers do not support |
| 7 — verify | A row census, file totals, and three traced rows | Trusting a result you never checked |
The prompts
These are written to be pasted as-is. The placeholders in angle brackets — <KEY>, <AMOUNT> — are the only things you change. The full set is also a single download if you would rather keep it in a file.
Prompt 0 — standing instructions (paste once)
You are helping me reconcile two data files. Follow these rules for the
whole session:
- Never state a total, count, or difference unless it was printed by code
you just ran. If you didn't run code for a number, don't give the number.
- Read all ID/key columns as text. Never let an ID become a float.
- Do the matching and arithmetic in code (Python/pandas). Use prose only to
explain what the code printed.
- When unsure, stop and ask. Do not guess a key, a mapping, or a number.Prompt 1 — census the files before matching
You are checking the assistant read the files the way you expect. No matching yet. (If it cannot even read them cleanly, that is a CSV gotcha to fix before anything else.)
Here are two files: system_a.csv and system_b.csv.
Do NOT reconcile them yet. First, for each file, run code that prints:
- the column names
- the row count
- 3 sample rows
Then list, side by side, which column in A maps to which column in B. Flag
any format differences (currency units, date formats, casing). No diffs yet.Prompt 2 — propose the join key (and justify it)
This is the one decision that quietly sinks most reconciliations, so make the model justify it and prove it. It is also where a composite key gets caught — when no single column is unique on its own.
Propose the minimal set of columns that uniquely identifies a row in each
file. Explain why a single column is or isn't enough. If no single column
is unique, propose a composite key. Then run code that counts distinct keys
vs. total rows and prints whether the proposed key is actually unique.
Reason from the column meanings; do not assume.Prompt 3 — write the merge as readable code
Two arguments do the trust work: indicator=True tags each row left_only / right_only / both, and validate="one_to_one" makes the pandas merge error out loudly if the key is not unique instead of quietly doubling rows.
Write Python (pandas) that:
- reads both files with every ID column as text (dtype=str)
- does an OUTER merge on <KEY>, with indicator=True and validate="one_to_one"
- prints the count of left_only, right_only, and both
Show me the code first. Don't run it until I say go.Prompt 4 — show only the real differences
The left_only and right_only buckets are the answer, not leftovers — those are the rows in one file and missing from the other, which is usually the whole reason you reconciled.
Go. After the merge, for rows present in BOTH files, compute the difference
in the <AMOUNT> column in code. Print ONLY the rows where the difference is
nonzero, sorted largest-first. Do not summarize the numbers in prose. Also
print the full left_only and right_only rows — those are the missing
records, not noise.Prompt 5 — classify the differences
Now the model does what it is actually good at: sorting an already-computed list into categories. Note it is told not to touch the numbers — same constraint as the standalone classify pattern.
Here is the list of nonzero differences you just printed. Do NOT change any
numbers. For each row, classify the likely cause as one of: timing,
fee/adjustment, value error, or missing record. Give a one-line reason per
row. Flag any you can't classify with confidence.Prompt 6 — explain one exception to a human
The model at its best: turning a flagged row into a sentence a reviewer can act on, while being told to flag when the story does not fit the figures.
Take row <KEY=...>. Context: <e.g. order placed May 2, refund issued May 9,
processor fee 2.9% + 0.30>. In two sentences, explain the most likely cause
of the difference for a finance reviewer. If the numbers don't support your
explanation, say so instead of forcing one.Prompt 7 — verify it did not drop rows
This is the step that separates a number you can defend from a confident guess, and it is the same thing an auditor looks for: completeness, a unique key, totals that tie, and a trail you can follow. Reading IDs as text throughout matters here — a long order number rounded into scientific notation on export is the single most common way a join silently fails.
Print three things so I can check your work:
- the row census again (left_only + right_only + both = total)
- the sum of <AMOUNT> in each original file, before the merge
- 3 specific rows traced end to end, including one that should NOT match
Then I will compare the file totals to a number I already trust.Why "save the directions" matters more than any single prompt
The reason to keep this pack as a file instead of re-improvising each month is not tidiness. It is that vague, one-off directions are exactly where AI accuracy decays. An r/BusinessIntelligence thread summarizing an AI vendor's internal write-up reported the shape of the problem — "Without skill files, their internal accuracy sits at 21%. With skill files, 95%. Without active maintenance, it drifts back to 65% in a single month." Those are a vendor's own numbers, not an independent benchmark, so hold them loosely. But the direction is the part the practitioners in that thread agreed on, and one commenter named the cause bluntly: "Drift is caused by poor design and lack of reinforcement of system prompts." A saved, reused prompt pack is that reinforcement. You write the directions once, vet them once, and stop re-teaching the model from scratch every close. (For the underlying technique, prompt engineering is just the formal name for "write down the directions and keep refining them.")
When the pack is the wrong tool
Honest limits. This pack shines on the awkward one-off — an odd export, a key you have to reconstruct, a file too messy to wrangle by hand but not worth building a pipeline for. It is not the only answer, and not always the right one.
| If you are… | Reach for | Because |
|---|---|---|
| Reconciling two messy or one-off files | This prompt pack + an assistant that runs code | The model writes the parsing you would otherwise hand-build |
| Running the same two clean files every week | XLOOKUP in Excel | A stable formula is simpler than re-prompting |
| Reconciling a supported platform monthly | A purpose-built parser (A2X, Synder, etc.) | It already knows that platform's settlement format — but it is locked to the platforms it covers |
| Handing it off entirely | A bookkeeper | Fine, but you still cannot answer how a number was reached without asking them |
The purpose-built parsers are genuinely good at what they cover; they are also retrospective money-to-ledger tools locked to specific platforms, which is a different job than matching two arbitrary exports. Use whichever fits the file in front of you — the pack is for when nothing off-the-shelf does.
The whole pack is one idea wearing seven prompts: make the assistant show its work in code, and keep yourself as the person who reads it. Do that and you get the speed the demos promise without trusting a number you cannot defend. If the assistant is ever unavailable, the same logic runs as a by-hand method you control end to end — and either way, a reconciliation you can stand behind is one where you can point at exactly how every number was reached.
Frequently asked questions
What is a reconciliation prompt pack?
A sequenced set of copy-paste prompts that walk an AI assistant through reconciling two files — from reading the files, to confirming the join key, to running a deterministic merge, to classifying the differences, to verifying nothing was dropped. The point is to hand the model the very clear directions it needs, while keeping every number in code you can re-run rather than in the model's prose.
Why not just ask the AI to reconcile the two files?
Because a language model predicts text, so asked for a total over thousands of rows it can return a fluent, confident number that is wrong, and a different one on the next run. The pack avoids this by making the model write and run code for all matching and arithmetic, and using its language only to map fields, propose a key, and explain differences.
Do these prompts work with any AI tool?
Yes, as long as the assistant can actually execute code in a sandbox rather than only chatting. The safety comes from what the prompts ask for — read IDs as text, outer merge, validate the key, print the counts, never state a number code did not produce — not from any one product, so they transfer across capable assistants.
How do I check the AI did not drop or double rows?
Run the verification prompt: print the row census from the merge indicator so left_only, right_only, and both add up to the totals; sum the amount column in each original file and tie it to a number you already trust; and trace three real rows by hand, including one that should not match. If the totals do not tie, the merge changed the data.
Should I save the prompts or rewrite them each time?
Save them. Reusing a vetted pack is what keeps the assistant consistent — re-improvised, one-off instructions are where accuracy tends to drift. Keep the standing-rules prompt and the sequence in a file or your assistant's saved-instructions field, and adjust only the filenames, key, and amount column each run.