Alan Vourc'h · FP&A, finance and data together

I automate the monthly close so finance can spend the month with the business.

After ten years in FP&A, I've learned the value isn't in producing the reports, it's in the time they free up to partner with the CFO and the business managers. This project shows how I use data analysis, automation and AI agents to run a monthly close cleanly and safely, so an analyst spends less time assembling numbers and more time acting on them.

1 · The data

A realistic company, built from scratch

EventCo is a fictional events agency I created a full dataset for. It mirrors the numbers a real finance team works with every month: the full P&L plus the operational drivers behind it, headcount and projects delivered, for four business lines over thirty months.

EUR100Mannual revenue
4business lines
30 monthsbudget, actuals, prior year
P&L + FTErevenue, costs, headcount, volumes
It arrives messy, on purpose. See the raw export →

Every problem below is one I have met in a real close: mixed date formats, typos in names, amounts typed as text, a duplicate row, and one revenue figure with an extra digit (EUR52m in a EUR5m month).

monthbusiness_linerevenue_budgetrevenue_actual
2024/08Brand Events2302070.5694810892309849.1588302534
2024-12-01Brand Evnets4276001.4838336334309897.281548161
October 2025Brand EventsEUR4,819,7094785780.885165885
November 2025Brand Events5238445.24444554552243583.97067126
April 2026Digital/Inlfuence2616866.79417056122687265.017168981
April 2026Digital/Inlfuence2616866.79417056122687265.017168981

All synthetic and generated from a fixed seed. No real employer data, no client names.

2 · How it works

The machine does the legwork. I keep the judgment.

Data in

Raw sources

Accounting export, business notes, HR and operations. Unclean, from several systems.

Agent · 1

Clean & structure

Fixes dates, names, duplicates and text amounts. Flags anything that looks like an entry error.

Agents · 3

Analyse

Variance vs budget, rolling forecast, and a check that no raw data leaves the company.

Me

FP&A analyst

Explains the gaps the data can't, runs manual controls, edits the commentary and signs off.

Results

Reports out

Variance analysis, forecast, executive summary, and a one-pager for each business line.

Automated agent, same result every run My input, where finance judgment is needed

The system flags 20 material variances. It explains only the 4 backed by a documented note. The other 16 come to me: I explain 14 after following up with the business, and 2 stay openly unexplained. Every line in the pack shows which of the three it is.

3 · The results

Real reports, not mockups

FY2025 waterfall from EUR52.0M budgeted net result to EUR48.9M actual, named drivers solid and a hatched block for items sent to the analyst.
"Three stories dominate the variances: a EUR2.08 million cost overrun on a client project, a currency swing on an international contract, and a cost-savings programme that ran ahead of plan."

The opening of the executive summary, and the full-year walk from budget to actual behind it, reconciled to the euro.

One page per business line, generated automatically, ready to hand to each manager: budget-to-actual bridge, what drove payroll and revenue, and the open follow-ups.

4 · Why this matters

Better reports, because it isn't fully automated

The point isn't to replace the analyst. It's to hand the analyst back their time, with the data cleaner and the controls already run.

The close stops eating the calendar

The mechanical work runs in minutes, identically every month. The time goes into the two open questions, not into reformatting dates.

Commentary you can defend

Every cause in the pack is either documented, signed by the analyst, or marked openly unexplained. In a board meeting, that difference matters.

No invented numbers

The AI only rewords analysis that is already computed and checked. Every figure is traced back to a source, and an untraceable one fails the run.

The data stays in-house

Only one step talks to an AI service, and only with aggregated summaries. The raw ledger never leaves the machine, and a check confirms it every run.

A concrete example: one line in the export read 52,243,584 in a business line whose normal month is EUR5 million, with costs and payroll unchanged. A rushed close turns that into a growth story. Here it was flagged as a probable typo, kept out of every number and every sentence, and sent to me for correction. The operations data agreed: a normal month, 17 projects delivered against 17 planned.

5 · See it run

One command, the whole close

$ python orchestrator.py

--- Data Ingestion ---
Raw rows: 124 -> cleaned rows: 120
BU typos corrected: 7   Duplicates removed: 4
Flagged as likely data errors: 1

--- Variance & Root-Cause ---
Material items: 20
  corroborated by business notes: 4
  explained by analyst input (labeled): 14
  still open, no clear driver: 2

--- Rolling Forecast ---
Horizon: 2026-07, 2026-08, 2026-09

--- BU One-Pagers ---
Wrote 4 one-pagers (.md + .pdf)

--- QA / Reviewer ---
QA checks: 8 passed, 0 failed

PIPELINE COMPLETE. DRAFT ONLY.
Nothing sent anywhere. Awaiting sign-off.
The Brand Events business line one-pager: scorecard, budget-to-actual bridge, driver commentary, variances and outlook on one page.

Every run is identical and reproducible. The output above is real, and every report it names is one click up the page.

6 · About
Alan Vourc'h FP&A · finance and data, together

EventCo is fictional, but its monthly close is not. I ran this cycle for real at a EUR100M events agency, including stepping in to close the books when the finance director was out. The overruns, the currency hits and the fat-fingered digits in this dataset are the ones that actually happen. I built this to show what the close looks like when software does the repetitive part and a human keeps the final word.

If you'd like to see what this could look like on your numbers, or your clients', I'm happy to walk you through it.