How it works · Finance Dailies
From raw exports to the Monday pack.
Finance Dailies is the reporting a four-site VFX studio needs every week: show margins at completion, bench by site, bids costed on real history, payroll journals, and the checks that keep the numbers honest. It runs on a simulated studio, not Outpost's data, calibrated so its FY26 lands near Outpost's filed accounts.
How it was built
Four steps, each one a script you can rerun. Small enough to run on a laptop and serve from a static host; the same shape scales to a warehouse and Power BI.
A studio, day by day
A seeded TypeScript simulation. Artists pull shot tasks from department queues, idle hours become bench, backlog books freelancers, leavers are replaced only if the department is busy, and April pay reviews and India's Labour Codes hit payroll. Overruns, omits, change orders and a Montréal restructure are scripted from the industry research.
Files as the systems produce them
ShotGrid and ftrack schemas, a HiBob-style HR export, three payroll bureau layouts, Xero import formats, an AWS Cost & Usage Report. Real data-quality problems are planted on purpose: duplicate timelogs, an 80-hour typo, an email that doesn't match HR, an invoice with no show code, untagged render nodes.
SQL in four layers
DuckDB. Staging standardises; intermediate matches people and tasks across systems and costs every hour from payroll; show economics computes EAC and revenue for every show for every week; operations builds the P&L, utilisation, journals and forecasts. 15 tests run on every build.
React, static, fast
Vite, React and ECharts, built to static files so it runs on any web host. DuckDB-WASM powers the SQL explorer in the browser. The same marts could feed Power BI just as well. Xero has had no native Power BI connector since 2019, so its extract would run in Python.
Calibrated to the filed accounts
The inputs (headcount by site, salaries, rates, show sizes, overheads, AWS unit costs) were tuned until the synthetic FY26 landed near Outpost's filed FY26. Nothing else about Outpost is assumed to match.
| FY26 | Outpost (filed) | Synthetic studio |
|---|---|---|
| Revenue | £29.9m | £29.6m |
| Staff costs ÷ revenue | 64.6% | 65.1% |
| EBITDA margin | 3.6% | 6.7% |
| Average employees | 414 | 432 permanent, plus freelancers |
| UK share of headcount | 37% | about 40% |
What it surfaces
From the synthetic studio, so these are not claims about Outpost. They are the kind of question a weekly pack should raise early.
A show's overrun appears when its first tasks final
Kestrel S2's margin at EAC fell from 46% to 37% between mid-April and May, as its first prep, matchmove and asset tasks finished over bid. Animation's 1.5× showed at the end of May, and FX's 1.6× in July. The weekly bridge caught each one the week it happened; a review at delivery would have found them months later. Kestrel →
£358k of work before the paper
Saltmarsh is delivering a 70-shot change order the client hasn't signed. The show's margin is 28% without it and 35% with it, which makes chasing the signature a margin task, not an admin one. Saltmarsh →
One site at 100%, another with half its weeks free
Bournemouth's booked work over the next 13 weeks is 141% of its permanent capacity; Mumbai's is 48%. Moving prep and matchmove saves freelancers, and the bid builder shows the client still saves after the UK relief. Bench →
Bids don't price the studio's own history
Every delivered show used 1.1–1.2× its bid hours, and bids were priced at 1.0×. Final margins averaged 9 points below bid. Costing new bids on the P50 overrun closes most of that gap. Bid builder →
The screens
What each one is for.
| Screen | What it does |
|---|---|
| Monday overview | FY27 against budget, revenue earned this week, utilisation, bench cost, unsigned change orders, the shows in production and the next 13 weeks of capacity. |
| Weekly summary | The note to leadership and producers, written automatically from the week's numbers so it can't drift from them. |
| Show P&L | Every show's contract, % complete, revenue, margin at bid against margin at estimate-at-completion, hours against bid and unsigned change orders. Each show has a weekly margin bridge and a department table. |
| Utilisation & bench | Department × week utilisation, where non-billable time goes, and booked work against capacity for the next 13 weeks by site. |
| Bid builder | Rate card in; the studio's actual hours, overruns and cost per hour out; the client's net cost after UK and Québec incentives, and where offshore still saves the client money. |
| Group P&L & forecast | The management P&L by month against budget, an FY27 latest estimate, working capital, and cloud cost allocated by show. |
| Payroll & headcount | Three payrolls in three currencies as one labour view, and September's two Xero journals (payroll posting, labour allocated to shows) ready to import. |
| Data, KPIs & SQL | Lineage, the refresh schedule, 15 data checks with the SQL behind each, the KPI definitions, and a SQL explorer on the real tables. |