The statutory levy did not just add a line to the compliance calendar. It quietly converted a regulatory return into a data-engineering obligation, and it charges you a percentage of a number most operators cannot yet produce cleanly.
Most of the commentary on the gambling levy has been about how much it costs and where the money goes. That is the least interesting part for anyone who has to run the systems. The interesting part is where the number that gets charged actually comes from. The Gambling Commission does not ask you to self-assess a levy figure. It takes your gross gambling yield, per operating licence, straight from your regulatory returns, multiplies it by a rate set for that licence type, and invoices you. Your returns data became the assessable base for a statutory charge. If that data has never had to reconcile to your finance ledger before, it does now.
What the levy actually charges, and on what
The Gambling Levy Regulations 2025 came into force on 6 April 2025. They require every operating-licence holder to pay an annual levy to the Commission, calculated as a percentage of gross gambling yield for the relevant period. The rates run from 0.1 per cent to 1.1 per cent depending on licence type. Most remote licences — remote casino, remote bingo, remote betting and remote gambling software — sit at the top of that range at 1.1 per cent, while land-based casinos and betting are charged 0.5 per cent and society lotteries 0.1 per cent. Where the total billable amount for a licensee is £10 or less, nothing is due.
Free · 4 minutes
When two of your systems disagree, do you know which one to believe?
Fourteen questions on ownership, lineage, and quality — the difference between a number on a dashboard and a number you could defend. Banded finding on screen, full sheet by email.
The base is GGY, not turnover and not profit. For most gambling activity that means amounts received from customers less winnings paid out, taken per licence rather than rolled up across the group. The first period carried an awkward quirk worth remembering when you reconcile historic numbers: for most operators the Commission used regulatory-returns activity from July 2024 to March 2025 and multiplied it by one and one-third to annualise nine months into a full year. Society lotteries were assessed on the full 1 April 2024 to 31 March 2025 year. From here, invoices are issued on 1 September based on the previous April-to-March financial year, with payment due before 1 October.
The key change sits underneath all of this. Since 1 July 2024 regulatory returns are quarterly for every licence type, where many operators previously filed annually. So the number that feeds the levy is now compiled four times a year, per licence, and it is the same number a supervisor can pull up alongside your published accounts.
Why clean GGY per licence is harder than it looks
On a slide, GGY is one subtraction. In a live estate it is an aggregation across systems that were never designed to agree with each other. Stakes and payouts sit in the games and betting platforms. Bonuses, free bets and cashback sit partly in a promotions engine and partly in the wallet. Voids, cash-outs, partial settlements and late-settled bets land at different times from the wager that created them. Currency conversion happens somewhere, and rounding happens more than once. Finance, meanwhile, recognises revenue on its own basis in the general ledger, and marketing counts bonus cost differently again.
The result is that most operators have several defensible GGY numbers and no single authoritative one. That was survivable when the return was a quarterly form nobody outside compliance read closely. It is not survivable now that the same figure sets a statutory charge and is filed against a fixed licence identifier every quarter. If your remote-casino GGY on the return does not tie to the revenue your finance function reports for that licence, you have a reconciliation gap that a levy invoice makes concrete and a supervisor can ask you to explain on the day.
The reconciliation a supervisor will actually ask for
The defensible position is not a spreadsheet that produces a plausible figure. It is a feed that derives GGY per licence from the transaction ledger, applies the levy rate for that licence type, and reconciles the result to a finance control total with the variance explained. The same discipline that makes a maritime reporting backbone withstand a rating challenge applies here: the regulator is not marking your headline number, it is marking whether you can show how you got there and whether it agrees with the rest of your books.
Build it as a derivation, not a data entry. Start from an immutable transaction ledger, tag every movement to an operating licence and a GB-customer flag, define the relevant period explicitly, and compute GGY as a query rather than a manual roll-up. Then run the reconciliation as part of the same job, so a break is visible before the return is filed, not after the invoice arrives.
-- Derive GGY and levy base per operating licence from the ledger,
-- with a reconciliation check against the finance control total.
-- PostgreSQL dialect. Amounts in minor units (pence) to avoid float drift.
WITH period AS (
SELECT DATE '2025-04-01' AS start_dt, DATE '2026-03-31' AS end_dt
),
ledger AS (
SELECT
l.licence_id,
l.movement_type, -- 'stake' | 'payout' | 'bonus_cost' | 'void'
l.amount_pence,
l.gb_customer
FROM bet_ledger l, period p
WHERE l.settled_at >= p.start_dt
AND l.settled_at < p.end_dt + INTERVAL '1 day'
AND l.gb_customer IS TRUE
),
ggy AS (
SELECT
licence_id,
SUM(amount_pence) FILTER (WHERE movement_type = 'stake')
- SUM(amount_pence) FILTER (WHERE movement_type = 'payout')
- SUM(amount_pence) FILTER (WHERE movement_type = 'bonus_cost')
AS ggy_pence
FROM ledger
GROUP BY licence_id
)
SELECT
g.licence_id,
r.licence_type,
ROUND(g.ggy_pence / 100.0, 2) AS ggy_gbp,
r.levy_rate, -- e.g. 0.011 for most remote
ROUND(g.ggy_pence / 100.0 * r.levy_rate, 2) AS levy_due_gbp,
ROUND(f.finance_ggy_pence / 100.0, 2) AS finance_ggy_gbp,
ROUND((g.ggy_pence - f.finance_ggy_pence) / 100.0, 2) AS recon_variance_gbp,
CASE
WHEN ABS(g.ggy_pence - f.finance_ggy_pence)
> (0.005 * ABS(f.finance_ggy_pence))
THEN 'BREAK: investigate before filing'
ELSE 'ok'
END AS recon_status
FROM ggy g
JOIN licence_ref r ON r.licence_id = g.licence_id
JOIN finance_ggy f ON f.licence_id = g.licence_id
ORDER BY levy_due_gbp DESC;
The tolerance and the movement types are yours to set against how your platforms actually book activity. The point is structural: GGY, the levy figure and the finance comparison all fall out of one query over one ledger, and a material break stops the return before it is filed.
Where this connects to everything else you report
Once GGY is a governed derivation rather than a quarterly assembly, the same feed serves more than the levy. It feeds regulatory returns, it supports the affordability and player-activity data the Commission increasingly expects, and it gives finance a licence-level revenue view that agrees with what compliance files. This is the same lineage argument that applies whenever a reported figure has to be defensible under a specific instrument — the discipline behind capturing the data a first reporting cycle demands is the discipline you need here. And if you are moving that ledger onto a modern table format so it can serve analytics and machine learning as well as reporting, the trade-offs in building an AI-ready data foundation are worth reading before you commit the architecture.
The levy is not a large number for most operators. What it exposes is whether the number you file each quarter can survive being cross-checked against your own accounts. Fix the feed while the stakes are a percentage point of GGY, because the next thing that reads the same data will not be an invoice you can pay and forget.
Most technology problems are not technology problems. They are control problems.
The systems exist. The investment has been made. The question is whether leadership can understand, direct, evidence, and sustain what those systems produce. Find out where control exists — and where it only appears to.