# GB Gambling Business Register: Licence and Domain Check (`yappman/gambling-register`) Actor

Check gambling licences, operators, trading names and domains on the Gambling Commission's register of gambling businesses for Great Britain, as published. Dated register changes after a 15-day hold, from about 17 Nov. Lookup, search or a scheduled changes run. Not affiliated with the Commission.

- **URL**: https://apify.com/yappman/gambling-register.md
- **Developed by:** [Russell Yapp](https://apify.com/yappman) (community)
- **Security:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 register entries

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## GB Gambling Business Register: Lookup and Changes

Look up and watch the Gambling Commission's register of gambling businesses for Great Britain (England, Scotland and
Wales): business accounts, licences, trading names and domain names, as published, with dated register changes listed
15 days or more after we first see them.

This Actor is not affiliated with or endorsed by the Gambling Commission.

### Please read before relying on a result

This Actor reuses the Gambling Commission's public register of gambling businesses (Great Britain only), as published
on the date shown in each row (asPublishedOn). It is not affiliated with or endorsed by the Gambling Commission. The
Commission cannot guarantee the accuracy of the register as presented by third parties, and the register relies in
part on manual processes at the Commission. A change reported here means only that a register entry changed between
two of our daily reads: it may be the correction of an earlier error rather than a change in the business, and it
does not by itself mean that a licence was granted, suspended, surrendered or revoked. Changes are listed 15 days
after we first see them, so this is not a real-time alert. A change that is reversed within those 15 days is never
listed, whether it was a correction or a real change that was undone. To protect individuals, we leave out every
account that our name rule cannot show to be an organisation: about a third of all accounts, many of them genuine
firms as well as sole traders. A business missing from our results may still be licensed: not being found here is not
evidence of being unlicensed. Always check the Commission's own register before relying on an entry.

### What you can do

- **Merchant onboarding.** Payment providers, acquirers and fintechs can check whether a merchant's domain or trading
  name is on the register, and see when its entry changed (a delayed record, not an alert).
- **Advertising checks.** Ad networks, affiliate programmes, media owners and app-store reviewers can check a gambling
  advertiser's domain before running its ads.
- **Compliance and due diligence.** KYC and due-diligence teams at suppliers to operators can check accounts and
  licence numbers and follow changes.

The Actor reports what the register lists. It does not say whether a business may lawfully operate.

### Modes

**lookup.** Matching published entries for up to 500 each of `accountNumbers`, `licenceNumbers` and `domainNames`, and
up to 100 `tradingNames`. In a domain, a leading `http://` or `https://`, a leading `www.` and a trailing `/` are
removed from what you type; case is ignored; it matches a published domain equal to it or to `www.` plus it. Trading
names match exactly, ignoring case and repeated spaces. `withAccount` (off by default) adds each account's
businesses-file entry as its own row, charged as one entry. An input with no match is listed in the run summary's
`notFound`, each with the sentence "Not in our organisation extract; this is not evidence of being unlicensed; check
the Commission's register."

```json
{ "mode": "lookup", "accountNumbers": ["12345"], "domainNames": ["example-casino.example"] }
```

**search.** Filters on the published columns: `nameContains` (3 or more characters, matched in Licence Account Name
and Trading Name), `activity`, `type` and `status` (as the register words them, case ignored) and `files`
(`businesses`, `licences`, `trading-names`, `domain-names`). With no filter, set `exportAll: true`, or the run is
refused. At most `maxItems` entries.

```json
{ "mode": "search", "nameContains": "example-casino", "files": ["businesses", "trading-names"], "maxItems": 20 }
```

**changes.** Register changes released since a date (`since`, YYYY-MM-DD, up to 92 days back) or since your last run
(your saved store, `alertStore`: the name, not the id, of a key-value store in your own account; 3 to 63 lower-case
letters, digits or hyphens). Optional `files`, `accountNumbers` and `kinds` (`entry added`, `entry no longer listed`,
`entry changed`, `entry listed again`, `entry reverted`). Oldest first. **Use one run per saved store at a time:** two
runs on the same store at once can both deliver, and be charged for, the same changes. Only changes first seen after
1 Nov 2026 are released, each after a 15-day hold, so none is released before 17 Nov 2026. Until a change has completed the 15-day hold, a `changes` run is refused and nothing is charged; on its earliest
such run, your saved store (`alertStore`) records that day as its start, so no later release is missed.

```json
{ "mode": "changes", "since": "2026-10-01", "files": ["domain-names"], "kinds": ["entry changed"] }
```

### Output

Published columns keep the Commission's names and values as published (with spaces, no re-casing or reformatting).
Businesses file: `Account Number`, `Licence Account Name`. Licences: `Account Number`, `Licence Number`, `Status`,
`Type`, `Activity`, `Start Date`, `End Date`. Trading names: `Account Number`, `Trading Name`, `Status`. Domain names:
`Account Number`, `Domain Name`, `Status`.

An entry row (lookup, search) adds `register`, `sourceFile`, `sourceUrl`, `asPublishedOn`, `readAt` (UTC) and `notice`.
`copies` appears when the published file repeats an identical row (returned and charged once); `stale` is `true` when
our copy is more than 3 days old. All values below are made up, including the date formats.

```json
{
  "Account Number": "12345", "Domain Name": "example-casino.example", "Status": "Example status",
  "register": "Gambling Commission register of gambling businesses",
  "sourceFile": "business-licence-register-domain-names.csv",
  "sourceUrl": "https://www.gamblingcommission.gov.uk/downloads/business-licence-register-domain-names.csv",
  "asPublishedOn": "2026-11-01", "readAt": "2026-11-01T06:10:00Z", "copies": 2, "stale": true,
  "notice": "As published by the Gambling Commission on the asPublishedOn date. Not affiliated with the Commission. Check the Commission's register before relying on this entry."
}
```

A change row (changes) carries `kind`, `title`, `file`, the columns that identify the entry (`Account Number` and the
file's key columns, such as `Licence Number` and `Activity`, or `Domain Name`; for a row the file repeats, the whole
published row), `field`, `from`, `to` (the old and new values of a changed column), `firstObservedOn`,
`previousReadOn` (the read it was compared with), `gapDays` (days between those two reads), `releasedOn`, `eventId`
(a 32-character identifier), `register`, `sourceUrl` and `notice`. `reverses` (the `eventId` of the earlier change this
one reverses), `copies` (`before` and `after`, for a repeated row) and `stale` appear only when they apply. A licence
is called revoked, suspended or surrendered only by quoting the register's own `Status` value inside quotation marks.

```json
{
  "kind": "entry changed", "title": "Register entry changed: Status from 'Example status A' to 'Example status B'",
  "file": "business-licence-register-domain-names.csv",
  "Account Number": "12345", "Domain Name": "example-casino.example",
  "field": "Status", "from": "Example status A", "to": "Example status B",
  "firstObservedOn": "2026-10-10", "previousReadOn": "2026-10-09", "gapDays": 1, "releasedOn": "2026-10-25",
  "eventId": "0f3c9a1b2d4e5f60718293a4b5c6d7e8", "reverses": "9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b",
  "register": "Gambling Commission register of gambling businesses",
  "sourceUrl": "https://www.gamblingcommission.gov.uk/downloads/business-licence-register-domain-names.csv",
  "notice": "Register entry changed between two daily reads. This may be a correction rather than a change in the business. Check the Commission's register before relying on it."
}
```

### Run summary

Each run writes a `RUN_SUMMARY` record to the run's own default key-value store. `status` is `ok` for a run that
answered.

| Field | Meaning |
| --- | --- |
| `status`, `reasonCode` | `refused` (rejected before data was read; free), e.g. `noChangesListed`; `failed` (no price set) |
| `asPublishedOn`, `historyStart` | Date of our latest copy; start of the change history |
| `counts` | Rows per `sourceFile` (lookup, search) or per `kind` (changes) |
| `notFound`, `notFoundText` | Lookup: your inputs with no match (`field`, `input`, `notFoundText`) |
| `matched`, `moreAvailable` | Search: entries matched; `true` when more than `maxItems` matched |
| `runCharged`, `chargeLimitReached` | Whether `run` was charged; the run stopped reading at its charge limit |
| `reversedWithinHold` | Changes reversed inside the 15 days: a store-wide count, never per input or filter |

It also carries `stale` and `staleWarning` (when our copy is more than 3 days old), `lastReadAt` (our last read of
the register) and `lastPublishedAt`, `guidance` (the text under "Please read" above), `attribution` and `withheld`
(a sentence on the entries left out).

### Pricing

Pay per event, the same on all plans.

| Event | Charged | Price |
| --- | --- | --- |
| `run` | Once per run, when the data has been read, even if no row matches | $0.005 |
| `entry` | Each entry row returned (lookup, search) | $0.002 |
| `change` | Each change row returned (changes) | $0.005 |

- A refused run is free. A not-found input adds nothing beyond the `run` event.
- Exact duplicate rows are returned once and charged once.
- With `withAccount` on, each businesses-file row is charged as an `entry`.

Worked examples:

- Lookup of 20 domains, all found: $0.005 + 20 x $0.002 = $0.045.
- The same with `withAccount` on and 20 different accounts (40 rows): $0.005 + 40 x $0.002 = $0.085.
- Search returning 1,000 entries: $0.005 + 1,000 x $0.002 = $2.005.
- Changes run returning 3 changes: $0.005 + 3 x $0.005 = $0.020. With none in your window: $0.005.

### Limits and freshness

- Great Britain only. Not included: the premises register, individual personal licences, regulatory actions and public
  statements.
- Lookup and search serve the latest copy, as the Commission's files said on the `asPublishedOn` date. We refresh it
  once a day; your run does not contact the Commission.
- Rows are marked `stale` when our copy is more than 3 days old. After 14 days the Actor refuses to answer (free).
- Changes are listed 15 days or more after we first see them. A change reversed within 15 days is never listed, nor its
  reversal. A reversal after release is its own change. The changes history serves up to 92 days back, and not before
  `historyStart`.
- About a third of accounts are left out by our name rule, so a missing business may still be licensed.
- `maxItems`: 1 to 10,000 (prefilled at 20; 1,000 when left out).

### Personal data and removal

Returned, for organisations: the columns the Commission publishes in its four business register files (account number,
licence account name, licence number, status, type, activity, start and end dates, trading name, domain name), with
the dates and file names shown under Output. Not returned: contact details (the files hold none and the Actor reads
none), premises addresses, individual personal licences, and the accounts our name rule leaves out because it cannot
show them to be organisations, including entries held by sole traders. That rule is a heuristic, so it also leaves out
genuine firms. An individual can still appear where an organisation's trading name or domain name contains a
founder's or director's name: such rows are kept because the Commission publishes them for the business.

Requests to remove or correct an entry: info@yappman.com, with a reply within one month. Datasets of runs you have
already made are yours and cannot be recalled by us.

### Ratings

Ratings and reviews on the Store page help other buyers judge whether this Actor fits their use, whatever your
experience.

### Attribution

Contains public sector information licensed under the Open Government Licence v3.0, reused with the Gambling
Commission's written consent of 19 October 2026 for the purposes described to it. Source: Gambling Commission public
register of gambling businesses; not affiliated with or endorsed by the Commission.

# Actor input Schema

## `mode` (type: `string`):

lookup: entries matching your account numbers, licence numbers, domains or trading names; search: entries matching filters; changes: register changes released since a date, or since your last run.

## `accountNumbers` (type: `array`):

Up to 500 Commission account numbers (digits). In changes mode, only changes to these accounts.

## `licenceNumbers` (type: `array`):

Up to 500 licence numbers, as the register shows them.

## `domainNames` (type: `array`):

Up to 500 domains. A leading http:// or https://, a leading www. and a trailing / are removed from what you type, and the comparison ignores case; it matches a published domain equal to it or to www. plus it. Published values are returned exactly as published.

## `tradingNames` (type: `array`):

Up to 100 trading names, matched exactly after ignoring case and repeated spaces.

## `withAccount` (type: `boolean`):

Off by default. When on, each matching account's entry in the businesses file is returned as well, as its own row, and each such row is charged as one entry.

## `nameContains` (type: `string`):

At least 3 characters; matched, ignoring case, in Licence Account Name and Trading Name.

## `activity` (type: `string`):

A licence Activity exactly as the register words it (case is ignored). Licence entries only.

## `status` (type: `string`):

A Status exactly as the register words it (case is ignored). Licence, trading name and domain entries.

## `type` (type: `string`):

A licence Type exactly as the register words it (case is ignored). Licence entries only.

## `files` (type: `array`):

Limit to some of the four business register files.

## `exportAll` (type: `boolean`):

Search with no filter: every entry in the chosen files, up to Max entries. Each entry returned is charged.

## `maxItems` (type: `integer`):

At most this many entries (1 to 10,000). Each entry returned is charged.

## `since` (type: `string`):

Changes released on or after this date (YYYY-MM-DD), at most 92 days back and not before the start of our change history (RUN_SUMMARY historyStart). Changes are released 15 days after we first see them.

## `alertStore` (type: `string`):

The NAME of a key-value store in your own account (3 to 63 lower-case letters, digits or hyphens). Each run returns the changes released since the previous run that used it. A store id is refused. Use one run per saved store at a time: two runs on the same store at once can deliver, and charge for, the same changes.

## `kinds` (type: `array`):

Limit to some kinds of register change.

## Actor input object example

```json
{
  "mode": "lookup",
  "withAccount": false,
  "exportAll": false,
  "maxItems": 20
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("yappman/gambling-register").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("yappman/gambling-register").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 20
}' |
apify call yappman/gambling-register --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yappman/gambling-register"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AhxaLFR1yLEm1jInc/builds/kDeodIOLsvTLxkuzG/openapi.json
