UK Gambling Commission Licensed Businesses Scraper avatar

UK Gambling Commission Licensed Businesses Scraper

Pricing

from $8.00 / 1,000 per business returneds

Go to Apify Store
UK Gambling Commission Licensed Businesses Scraper

UK Gambling Commission Licensed Businesses Scraper

From $8 per 1,000 rows. Export the UK Gambling Commission business licence register: all 2,642 licensed gambling operators with head-office address, every licence (activity, type, status, dates), every trading name and every domain including White Label brands. Change monitor included.

Pricing

from $8.00 / 1,000 per business returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

🎰 UK Gambling Commission Licensed Businesses Scraper

Every company licensed to run gambling in Great Britain — and, for the first time in one row, which brand and which website each of them actually operates.

This Actor exports the UK Gambling Commission's business licence register: 2,642 licensed operators, joined to all 4,460 of their licences, all 2,408 registered trading names and all 2,231 registered domains, plus the structured head-office address. One denormalised row per company. The complete 2,642-row export runs on Apify in 5.9 seconds at 256 MB.

Every number in this README was measured against the live register on 2026-09-07 (source files' Last-Modified: Mon, 07 Sep 2026 04:30:16–18 GMT). Nothing here is estimated.


📊 What one row contains

FieldWhat it isMeasured fill
account_numberUKGC account number — the key in the Commission's own URLs2,642 / 100%
licence_account_nameLegal operator name as licensed2,642 / 100%
detail_urlThe Commission's own register page for this business2,642 / 100%
statusDerived: Active (2,143) · Pending (31) · Ceased (468)100%
address_line_1Head-office street2,112 / 79.9%
address_line_2Second address line1,571 / 59.5%
cityHead-office town2,171 / 82.2%
postcodeHead-office postcode2,111 / 79.9%
countryHead-office country, free text as published2,169 / 82.1%
is_offshoreDerived: registered outside the UK265 true · 1,904 false · 473 null (471 with no address at all, plus 2 whose address has no country)
address_completeFalse whenever the address is blank or the read failed
address_sourcecsv · zip · detail-page · none · unavailable100%
licences[]Licence number, status, type, activity, start date, end date4,460 rows
licence_count · active_licence_countTotals per businessavg 1.69, max 10
activities[]Distinct licensed activities25 in the register, max 7 per business
licence_types[]Remote · Non-Remote · Ancillary Remote
is_remote · is_non_remoteDerived1,383 online · 2,011 premises · 752 both
first_licensed_dateEarliest licence start — operator tenureearliest in register: 2007-08-30
latest_licence_start_dateNewest licence start — the new-permission trigger6 rows future-dated to 2026-10-01
latest_licence_end_dateNewest end date — the surrender / revocation trigger747 licence rows carry one
trading_names[] · active_trading_names[]Every brand, and the live ones2,408 rows; 1,204 businesses (45.6%) have ≥1 live brand
domain_names[] · active_domains[]Every registered domain, and the live ones2,231 rows; 480 businesses (18.2%) have ≥1 live domain
white_label_domains[] · has_white_labelDomains running on someone else's licence370 domains across 34 businesses (1.3%)
trading_name_count · domain_countRegister totals — they stay at the published count even when you switch the inactive entries out of the arraysmax 52 brands, max 231 domains on one licence
source_last_modifiedThe Commission's own Last-Modified header — provenance100%
scraped_atISO timestamp of your run100%

In Monitor mode each row also carries changes[] (type, licence_number, activity, from, to), change_count and is_new_business.


🎯 Why this beats reading the register yourself

1. The brand → operator → domain map exists nowhere else. 2,273 distinct trading names and 2,124 distinct domains resolve to 2,642 legal companies. Type casino into "Domain contains" and you get every licensed company running a casino site. Type bingo into "Trading name contains" and you get the legal entity behind every bingo brand. 89 domains are registered against more than one account — normally a white-label arrangement.

2. White Label is a UKGC-only field and it is the most valuable one on the row. A white-label domain is a brand trading on another operator's licence. 34 businesses carry one. No commercial company database exposes that relationship; it is a pure statutory artefact.

3. The structured address is not on the website. The register's own detail page prints the head office as one concatenated blob. This Actor reads the Commission's structured address file — separate street, city, postcode and country columns — which is not linked anywhere on gamblingcommission.gov.uk (see "How it works" below). Scraping the visible pages instead costs 2,642 page fetches (measured at 6.74 pages/second = ~6.5 minutes) for a worse-shaped result. This does five file GETs in 1.5 seconds.

4. The offshore filter, derived honestly. 265 of 2,642 operators are registered outside the UK: Malta 85, Gibraltar 37, USA 21 (+3 spelled "United States of America"), Isle of Man 18, Ireland 17, Sweden 7, Austria 7, Cyprus 6, Australia 6. 48 distinct country strings in all.

5. The register moves daily. All five source files were rebuilt at 04:30 UTC on the day this was measured, and the licence file already carried a 2026-09-04 surrender and six licences dated to start on 2026-10-01.


🔎 What you can filter on

Everything below is applied to the rows you are actually delivered and billed for — never after the fact. If you switch "Address source" to the detail-page crawl, the address filters are re-checked against the addresses that crawl republishes, and any row it re-addresses out of your filter is dropped before it is written or charged.

  • Identity — account numbers · legal name contains · trading name contains · domain contains
  • Licence — 25 activities · Remote / Non-Remote / Ancillary Remote · 6 licence statuses · derived business status · min/max licences held
  • Brand & web — has an active trading name · has an active domain · white-label operators only · include or drop inactive trading names and domains
  • Geography — UK / offshore / any · head-office countries (free text, case-insensitive) · city contains · postcode starts with · only businesses with a published address
  • Dates — first licensed after/before · newest licence started after · a licence ended after
  • Shape — sort by any of 12 fields · max businesses · drop the nested licence array for a flat CSV · plain dates or full ISO timestamps

Live counts you can filter against (2026-09-07)

Licence statusRowsLicence typeRows
Active3,650Non-Remote2,381
Surrendered660Remote1,535
Pending62Ancillary Remote544
Revoked - Non Payment of Fee52
Lapsed28Domain status
Revoked8Active1,067
Inactive794
Top activitiesWhite Label370
Society Lottery908
General Betting Limited535Trading-name status
Gaming Machine General AGC429Active1,891
Gaming Machine Technical Supplier398Inactive517
Gambling Software380
Bingo367
Casino205

🚀 Example inputs

The whole register (2,642 rows, 5.9 seconds, $21.14)

{ "mode": "full" }

Every live online operator with a website — the iGaming operator list

{ "mode": "full", "remoteOnly": true, "hasActiveDomain": true, "businessStatus": ["Active"] }

White-label brands and whose licence they run on

{ "mode": "full", "hasWhiteLabelOnly": true }

Offshore operators licensed in Great Britain — the KYC list

{ "mode": "full", "jurisdiction": "offshore", "businessStatus": ["Active"], "sortBy": "country" }

Who runs this website?

{ "mode": "full", "domainContains": "888" }

Newly licensed entrants in the last year

{ "mode": "full", "firstLicensedAfter": "2025-09-01", "sortBy": "first_licensed_date", "sortOrder": "desc" }

Surrenders and revocations — the churn signal

{ "mode": "full", "licenceStatuses": ["Revoked", "Revoked - Non Payment of Fee", "Surrendered"], "licenceEndedAfter": "2026-01-01" }

Daily change monitor (put it on a schedule; the first run saves a baseline and delivers 0 rows on purpose)

{ "mode": "monitor" }

A flat spreadsheet with no nested arrays

{ "mode": "full", "includeLicenceRows": false, "includeInactiveDomains": false, "includeInactiveTradingNames": false }

💵 Pricing

Plain pay per event. No actor-start charge, no platform-usage surcharge.

EventPriceWhen it fires
business-scraped$0.008Once per business row written to your dataset. Full export mode only.
monitor-run-completed$0.01Once per Monitor run. Monitor mode only.
licence-change-detected$0.01Per licence that is new, newly ended or status-changed since the previous Monitor run — and only on rows you were actually delivered. Monitor mode only.
  • The whole register = 2,642 × $0.008 = $21.14, once. A filtered slice costs only what it returns.
  • Rows your filters removed are never charged. business-scraped does not fire in Monitor mode, so no business is ever billed twice.
  • The first Monitor run saves a baseline, delivers 0 rows and charges no change events. Billing 4,460 changes for changes that never happened would be the obvious way to get this wrong; it does not do that.
  • Honest volume note: over the last 30 days the whole register saw 9 licences start and 14 end; over 90 days, 59 and 47; over a year, 289 and 251. Monitor is a buying-trigger feed, not a volume product. If you want volume, use Full export.
  • Delivery is budget-aware: rows are written and charged atomically, so delivered always equals billed. If your maxTotalChargeUsd or free-tier balance truncates a run, the status message says so by name — it never blames the Commission for your cap. The run also asserts delivered == charged at the end and fails rather than finish green on a mismatch.

⚙️ How it works, and what it does not hide

Five static file GETs, ~945 KB total, largest file 492 KB. Pure HTTP — no browser, no login, no API key, no CAPTCHA, no residential proxy, 256 MB.

/downloads/business-licence-register-businesses.csv 91,854 B 2,642 rows
/downloads/business-licence-register-addresses.csv 189,468 B 2,642 rows ← undocumented
/downloads/business-licence-register-licences.csv 492,390 B 4,492 rows
/downloads/business-licence-register-trading-names.csv 82,843 B 2,414 rows
/downloads/business-licence-register-domain-names.csv 88,323 B 2,231 rows

All five are joined on Account Number. Join integrity, measured, not assumed: 2,642 distinct accounts in the licence file with 0 orphans; 1,498 in trading names, 0 orphans; 627 in domains, 0 orphans; 2,640 in addresses, 0 orphans. 0 businesses have no licence row. Cross-checked against the rendered site: account 39028's own page nav reads 1 Trading name / 90 Domain names and the files give exactly 1 and 90.

Verified through the Apify proxy, not from a home IP. All five files and a detail page were re-fetched through proxy.apify.com and came back byte-identical (detail page 64,124 bytes both ways). One of six first-pass proxy requests hit a transient CONNECT failure and succeeded on retry — which is why every request here retries with backoff.

Six ways this register silently lies, and what this Actor does about each

1. The address file is not linked anywhere. The Commission's download page lists four CSVs and says the ZIP holds "Contents: 4 files". The ZIP (business-licence-data.zip, 623,627 bytes) actually holds six, including business-licence-register-addresses.csv — which also serves standalone at a stable URL with a matching Last-Modified. An undocumented file can be renamed without notice, so there are three routes: direct CSV → the copy inside the ZIP → the per-business detail pages. If all three fail, the run still ships every other field and sets address_complete=false on every row. It never reports a gap it created as the source's fault.

2. The address facet is not one row per business. 2,642 address rows, but only 2,640 distinct accounts — accounts 760 and 57464 each appear twice — and two businesses have no address row at all (101838 Hammertime Games Limited, 27216 Mr Rigby's Leisuretime Limited). A naive join swallows that silently. Duplicates are dropped and counted; the first distinct row wins.

3. The bulk files carry exact duplicate rows. 32 in licences.csv, 6 in trading-names.csv, 0 in domains, 2 in addresses. Left in, they inflate licence_count and active_licence_count on a row you paid for. They are dropped before billing, and the count is reported in the run log and in RUN_SUMMARY. This is why the Actor ships 4,460 licence rows where the Commission publishes 4,492.

4. A Licence Number is not unique. 667 licence numbers cover more than one Activity inside the same business (up to six rows share one number). Keying anything on the number alone collapses 1,027 of the 4,460 rows. (account, licence number, activity) is unique — 0 collisions — and that is what Monitor mode fingerprints, so a status change on a shared number is never missed.

5. Country is free text. The register spells home three ways — United Kingdom (1,891), Great Britain (11), Northern Ireland (2) — and carries 48 distinct values, twelve with a state appended (USA - Nevada, Germany - Berlin). country !== 'United Kingdom' would badge 13 domestic operators as offshore. All three domestic spellings are treated as UK. Gibraltar and the Isle of Man are deliberately not domestic: a British Overseas Territory and a Crown Dependency sit outside the UK, and that is the distinction a compliance buyer is filtering for.

6. The detail page cannot reproduce the structured address. Where a business has no address, its register page prints the literal sentinel "Address not available" — verified on eight such accounts. This Actor emits null and address_complete=false, never the sentinel string. And the rendered page joins address line 1 to line 2 with the same ", " that appears inside those lines, so the split is irrecoverable from HTML. On the detail-page route the whole street block ships in address_line_1 and address_line_2 is always null. Measured against the bulk file over 300 live pages on the platform: street block 100%, postcode 100%, town 99.7% (one miss collapses a double space in the town name), country 93.0%. Every country miss is the same shape — a business whose published address is town + country only, which the page renders as the bare town, and the parser will not guess which of the two a lone token is. That is 59 of the 2,171 addressed businesses register-wide. Because those rows can no longer satisfy a country or jurisdiction filter, they are dropped before delivery on this route rather than being sold to you as matches — the status message counts them.

Monitor mode

State lives in a named key-value store (ukgc-gambling-licensees-monitor-state), so the previous run's fingerprints survive between scheduled runs; an unnamed store is wiped each run and would make the whole register look new every time. State tracks the whole register regardless of your filters — scoping it to a filter would make every row look new the moment you changed one — and your filters then decide what is delivered.

Six change types are reported: new-business, new-licence, status-changed, licence-ended, licence-removed, name-changed, plus business-removed for an account that has left the register. If a cap (maxBusinesses or your charge limit) holds a changed business back, its previous fingerprint is kept so the next run reports it again instead of losing it — and the status message says how many.


🔒 Data and privacy

This Actor covers businesses only. The Commission's separate personal licence register (18,627 individual licence holders) is deliberately out of scope and is not fetched.

No director, manager or contact field exists in the source files, so no named natural person is emitted. However: some licensees are sole traders or partnerships licensed under a personal name, and their published "head office" may be a home address. The register is published by the Commission for public inspection, but if you are processing these rows under UK GDPR that is your controller obligation, not this Actor's.

Out of scope by design, each a different register surface: premises licences (8,866 records, its own file), personal licences (18,627), regulatory actions (135).


https://www.gamblingcommission.gov.uk/robots.txt, fetched 2026-09-07, verbatim:

User-agent: *
Allow: /
Disallow: /about-us/transparency/html/corporate-strategy-2021-to-2024
Disallow: /about-us/guide/our-strategy-for-the-next-three-years
Sitemap: https://www.gamblingcommission.gov.uk/sitemap.xml

Neither Disallow line touches /downloads or /public-register. This Actor reads only those two paths.

Re-use terms, stated plainly because we could not resolve them: the download page and the site's terms of use do not mention Open Government Licence, OGL, Crown copyright, re-use or commercial use anywhere we could find. So unlike some UK government datasets, the UKGC publishes this register with no re-use licence we were able to identify. That is a copyright and terms question, separate from robots.txt, and it is yours to judge before you resell or redistribute the data. We flag it; we do not decide it.

Everything here is a statutory public register the Commission publishes for public inspection. No login is used, no access control is circumvented, and the request rate is five file downloads per run.


📈 Measured performance

Every figure below is from a run on the Apify platform, at 256 MB, through the Apify datacenter proxy.

Full 2,642-row export, end to end5.9–10.8 s across five runs · peak memory 73–91 MB of 256
The 50-row demo input3.2–7.8 s · peak memory 60–69 MB · 50 items · 50 charged
Download, all five files1.1–1.9 s on the platform
Detail-page fallback throughput6.7–8.5 pages/s at concurrency 12; 368 of 368 pages read, 0 failures
Platform usage for a full 2,642-row export$0.0136 total — dataset writes $0.0132, compute $0.00022, key-value store $0.0001, internal transfer $0.00003. Residential proxy: $0.00, because none is used
Transport failures1 transient proxy CONNECT in 6 first-pass requests; recovered on retry
Daily health testPASS — 4.675 s, 50 items (re-run on build 0.1.3)

Billing verified on the platform, not asserted. A full run delivered 2,642 rows and charged exactly 2,642 business-scraped. A run capped at maxTotalChargeUsd = $0.10 delivered exactly 12 rows (12 x $0.008 = $0.096), charged 12, and said so: "Truncated by the charging limit you set (maxTotalChargeUsd / free-tier balance), not by the register." A first Monitor run delivered 0 rows and charged 1 x monitor-run-completed and zero change events; the second found no changes and did the same — proving the named store survives between runs.

Re-verified independently, 2026-09-08, by re-running the live Actor. 24 filter inputs, each row count predicted from an offline rebuild of the five source files first and then matched exactly on the platform, with delivered == charged and zero secondary events on every one of them: white label 34, offshore 265, UK 1,904, remote+non-remote hybrids 752, Malta 85, Casino 204, Ancillary Remote 531, domain "888" 3, brand "bingo" 63, "entain" 1, postcode W1 37, city Gibraltar 33, revoked 44, min 5 licences 61, max 1 licence 1,392, has address 2,171, live brand 1,204, live domain 480, Pending 31, first licensed since 2025-09-01 141, first licensed to 2010-01-01 936, newest start since 2026-09-01 5, licence ended since 2026-06-01 34, and the three-way offshore+active+online combination 208. Monitor mode was driven against a deliberately doctored baseline: it found all 7 change types, delivered 3 of 8 changed businesses under a $0.10 cap and charged exactly the 9 changes on those 3 rows plus the flat fee ($0.1000 of $0.10, not a cent over), held the other 5 back, reported all 5 on the next uncapped run, and then went quiet. A maxTotalChargeUsd of $0.005 — below the price of one row — delivered 0 rows, charged nothing, and named the cap.


❓ FAQ

Is this the same as the personal licence register? No. This is the business register — 2,642 licensed companies. Personal licences (18,627 individuals) are a separate register and are not scraped here.

Does it cover premises — betting shops, arcades, casinos? No. Premises licences are a separate register of 8,866 records with its own address and local-authority fields. This Actor covers the licensed company, including whether it holds premises-side (Non-Remote) licences.

How do I find out who runs a gambling website? Set domainContains to the domain. You get the legal operator, its licences, its other brands and whether the domain is flagged White Label — i.e. running on someone else's licence.

What exactly is a "white label" domain? A brand operating under another company's UKGC licence. The Commission flags these explicitly: 370 domains across 34 businesses. It is the single hardest relationship in this market to find anywhere else.

How fresh is the data? The Commission rebuilds all five files daily at about 04:30 UTC. Every row carries source_last_modified — the Last-Modified header of the Commission's own file — so you can prove the age of what you were sold.

Why does the licence count differ from the Commission's own file? Because 32 rows in licences.csv are byte-identical duplicates. This Actor drops them, so it ships 4,460 where the Commission publishes 4,492. Leaving them in would inflate licence_count on a row you paid for. The count is reported in RUN_SUMMARY.

Why do 471 businesses have no address? Because the Commission publishes none for them — their own register pages read "Address not available". Those rows carry null and address_complete=false, never a placeholder. Crawling the detail pages recovers nothing extra; that was tested.

Can I get regulatory fines and enforcement actions? Not here. The regulatory-actions register is a separate 135-record surface, and finding the ~5% of businesses that have any would force all 2,642 detail-page fetches — destroying the bulk win for a handful of rows. It belongs in its own Actor.

How much does the whole register cost? 2,642 rows × $0.008 = $21.14, once. There is no start charge and no usage surcharge.

What does Monitor mode actually deliver? Only businesses whose licences changed since the previous Monitor run, with a changes[] array saying exactly what moved. Realistically that is a handful per week — 9 licence starts and 14 ends across the whole register in the 30 days to 2026-09-07. It is a trigger feed for a sales or compliance workflow, not a volume product.

Will the first Monitor run bill me for the whole register? No. It saves a baseline, delivers 0 rows and charges zero change events. Only the flat monitor-run-completed fee applies.

What happens if a source file disappears? The address file falls back to the Commission's ZIP bundle, then to the detail pages, then degrades to address_complete=false with every other field intact. Any of the other four files failing on both routes fails the run outright with the file named — because shipping a business with an empty licences[] would look exactly like a real ceased operator, and that is a lie you would have paid for.

Do I need a residential proxy? No. The default Apify datacenter proxy was verified to return byte-identical content. Residential would only add cost.

Can I use my own proxy? Yes — the proxy field accepts a custom list.


Not affiliated with, endorsed by, or connected to the Gambling Commission.