Outpost VFX

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.

01

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.

1 · Simulate

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.

2 · Export

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.

3 · Transform

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.

4 · Report

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.

FY26Outpost (filed)Synthetic studio
Revenue£29.9m£29.6m
Staff costs ÷ revenue64.6%65.1%
EBITDA margin3.6%6.7%
Average employees414432 permanent, plus freelancers
UK share of headcount37%about 40%
02

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.

Margin

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 →

Commercial

£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 →

Capacity

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 →

Bidding

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 →

03

The screens

What each one is for.

ScreenWhat it does
Monday overviewFY27 against budget, revenue earned this week, utilisation, bench cost, unsigned change orders, the shows in production and the next 13 weeks of capacity.
Weekly summaryThe note to leadership and producers, written automatically from the week's numbers so it can't drift from them.
Show P&LEvery 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 & benchDepartment × week utilisation, where non-billable time goes, and booked work against capacity for the next 13 weeks by site.
Bid builderRate 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 & forecastThe management P&L by month against budget, an FY27 latest estimate, working capital, and cloud cost allocated by show.
Payroll & headcountThree 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 & SQLLineage, the refresh schedule, 15 data checks with the SQL behind each, the KPI definitions, and a SQL explorer on the real tables.