{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Gambling Commission Licensed Businesses Scraper",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "5iG3AsCU9hZf4rE6u"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~ukgc-gambling-licensees-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-ukgc-gambling-licensees-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapersdelight~ukgc-gambling-licensees-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-ukgc-gambling-licensees-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapersdelight~ukgc-gambling-licensees-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-ukgc-gambling-licensees-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "full",
              "monitor"
            ],
            "type": "string",
            "description": "FULL EXPORT returns every business that matches your filters — the whole 2,642-business register in about 20 seconds if you set no filters at all. MONITOR returns only the businesses whose licences changed since this Actor's previous monitor run, so you can put it on a daily schedule and get a short diff instead of the whole file. The very first monitor run saves a baseline, delivers 0 rows and charges no change events; the run after that starts reporting changes. Measured change volume over the register: 9 new + 14 ended licence rows in the last 30 days, 59 + 47 over 90 days, 289 + 251 over a year — so Monitor is a buying-trigger feed, not a high-volume one.",
            "default": "full"
          },
          "maxBusinesses": {
            "title": "Max businesses",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on how many business rows are returned and billed. 0 = no cap (the whole matching set — 2,642 rows if you set no filters). The cap is applied AFTER sorting, so 'Max businesses 100' + 'Sort by latest licence start, descending' gives you the 100 most recently licensed operators, not a random 100.",
            "default": 0
          },
          "accountNumbers": {
            "title": "Account numbers",
            "type": "array",
            "description": "Look up specific businesses by their UK Gambling Commission account number — the number in the register URL, e.g. 39028 for https://www.gamblingcommission.gov.uk/public-register/business/detail/39028. Leave empty to scan the whole register.",
            "items": {
              "type": "string"
            }
          },
          "nameContains": {
            "title": "Legal name contains",
            "type": "string",
            "description": "Case- and accent-insensitive substring of the LEGAL operator name, e.g. 'entain', 'flutter', 'limited'. This is the registered company name, not the brand — use 'Trading name contains' below for brands."
          },
          "tradingNameContains": {
            "title": "Trading name contains",
            "type": "string",
            "description": "Case-insensitive substring of any TRADING NAME the business is registered under — the brand a punter actually sees. This is the reverse lookup that makes this Actor useful: type 'bingo' and you get every legal operator running a brand with 'bingo' in it. 2,414 trading names map to 2,642 operators; 1,204 businesses (45.6%) have at least one Active trading name."
          },
          "domainContains": {
            "title": "Domain contains",
            "type": "string",
            "description": "Case-insensitive substring of any registered gambling domain, e.g. 'casino', '.co.uk', '888'. Answers 'which licensed company operates this website?'. 2,231 domains across 627 operators; 89 domains are registered against more than one account, which is normally a white-label arrangement."
          },
          "activities": {
            "title": "Licensed activities",
            "type": "array",
            "description": "Return only businesses holding at least one licence for one of these activities. Licence-row counts measured 2026-09-07 after duplicate rows are dropped: Society Lottery 908, General Betting Limited 535, Gaming Machine General AGC 429, Gaming Machine Technical Supplier 398, Gambling Software 380, Bingo 367, Casino 205, General Betting Standard 187, GBS Real Event 152, Pool Betting 144.",
            "items": {
              "type": "string",
              "enum": [
                "Society Lottery",
                "General Betting Limited",
                "Gaming Machine General Adult Gaming Centre",
                "Gaming Machine Technical Supplier",
                "Gambling Software",
                "Bingo",
                "Casino",
                "General Betting Standard",
                "General Betting Standard - Real Event",
                "Pool Betting",
                "Gaming Machine General Family Entertainment Centre",
                "Game Host (Casino)",
                "General Betting Standard - Virtual Event",
                "Gaming Machine Technical Full",
                "Linked Gaming Machine Technical Supplier",
                "Linked Gambling Software",
                "External Lottery Manager",
                "Casino 1968 Act",
                "Betting Host (Virtual Events)",
                "Betting Host (Real Events)",
                "Betting Intermediary",
                "Gaming Machine Technical Software",
                "Game Host (Bingo)",
                "General Betting Standard - No Gaming Machines",
                "Casino 2005 Act"
              ]
            }
          },
          "licenceTypes": {
            "title": "Licence types",
            "type": "array",
            "description": "Non-Remote = premises / land-based (2,381 licence rows). Remote = online (1,535). Ancillary Remote = an online add-on to a land-based licence (544). A business matches if it holds any licence of a selected type.",
            "items": {
              "type": "string",
              "enum": [
                "Non-Remote",
                "Remote",
                "Ancillary Remote"
              ]
            }
          },
          "licenceStatuses": {
            "title": "Licence statuses",
            "type": "array",
            "description": "Return businesses holding at least one licence in one of these states. Licence-row counts measured 2026-09-07: Active 3,650, Surrendered 660, Pending 62, Revoked - Non Payment of Fee 52, Lapsed 28, Revoked 8. Picking 'Revoked' plus 'Revoked - Non Payment of Fee' gives you the adverse-action list.",
            "items": {
              "type": "string",
              "enum": [
                "Active",
                "Surrendered",
                "Pending",
                "Revoked - Non Payment of Fee",
                "Lapsed",
                "Revoked"
              ]
            }
          },
          "businessStatus": {
            "title": "Business status (derived)",
            "type": "array",
            "description": "Company-level status this Actor derives from the licence rows: Active if any licence is Active (2,143 businesses), else Pending if any is Pending (31), else Ceased (468). Not a field the Commission publishes — it is computed here, and it is stated as derived on every row.",
            "items": {
              "type": "string",
              "enum": [
                "Active",
                "Pending",
                "Ceased"
              ]
            }
          },
          "remoteOnly": {
            "title": "Online (remote) operators only",
            "type": "boolean",
            "description": "Only businesses holding at least one Remote or Ancillary Remote licence — i.e. licensed to take bets online (1,383 of 2,642, measured 2026-09-07).",
            "default": false
          },
          "nonRemoteOnly": {
            "title": "Premises (non-remote) operators only",
            "type": "boolean",
            "description": "Only businesses holding at least one Non-Remote licence — betting shops, arcades, bingo halls, casinos (2,011 of 2,642). Switching this ON together with 'Online operators only' is allowed and returns the 752 hybrids that hold both.",
            "default": false
          },
          "minLicenceCount": {
            "title": "Min licences held",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Only businesses holding at least this many licence rows. The register averages 1.69 licence rows per business and the largest holds 10 — so 'min 4' is a decent proxy for a large multi-activity group (61 businesses hold 5 or more)."
          },
          "maxLicenceCount": {
            "title": "Max licences held",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Only businesses holding at most this many licence rows."
          },
          "hasActiveTradingName": {
            "title": "Has an active trading name",
            "type": "boolean",
            "description": "Only businesses with at least one Active trading name — 1,204 of 2,642 (45.6%). These are the operators with a live consumer-facing brand.",
            "default": false
          },
          "hasActiveDomain": {
            "title": "Has an active domain",
            "type": "boolean",
            "description": "Only businesses with at least one Active registered domain — 480 of 2,642 (18.2%). This is the live online-gambling operator list.",
            "default": false
          },
          "hasWhiteLabelOnly": {
            "title": "White-label operators only",
            "type": "boolean",
            "description": "Only businesses with at least one domain carrying the UKGC's 'White Label' status — 34 businesses (1.3%) and 370 domains, measured 2026-09-07. A white-label domain is a brand running on somebody ELSE'S licence, which is exactly the relationship an affiliate network, payment provider or compliance team needs to see and which no commercial database exposes.",
            "default": false
          },
          "includeInactiveTradingNames": {
            "title": "Include inactive trading names",
            "type": "boolean",
            "description": "Keep Inactive trading names in the trading_names array (517 of 2,414 rows are Inactive). Turn OFF for a clean list of live brands only. active_trading_names is always Active-only regardless of this switch, and trading_name_count deliberately keeps the REGISTER total, so with this switch off it can be larger than the array you receive.",
            "default": true
          },
          "includeInactiveDomains": {
            "title": "Include inactive domains",
            "type": "boolean",
            "description": "Keep Inactive domains in the domain_names array (794 of 2,231 rows are Inactive). Turning this OFF keeps Active and White Label and drops Inactive. active_domains and white_label_domains are unaffected, and domain_count deliberately keeps the REGISTER total, so with this switch off it can be larger than the array you receive.",
            "default": true
          },
          "jurisdiction": {
            "title": "Jurisdiction",
            "enum": [
              "any",
              "uk",
              "offshore"
            ],
            "type": "string",
            "description": "UK-registered = a head office recorded as United Kingdom, Great Britain or Northern Ireland - all three spellings appear in the register and all three are domestic. Offshore = any other country, 265 of 2,642, led by Malta 85, Gibraltar 37, USA 21+3, Isle of Man 18, Ireland 17. Gibraltar and the Isle of Man count as offshore on purpose: a British Overseas Territory and a Crown Dependency are outside the UK, which is the distinction a compliance buyer is filtering for. The 473 businesses this Actor cannot place match neither and are excluded when you pick either option: 471 have no published address at all, and 2 have an address whose country field is blank.",
            "default": "any"
          },
          "countries": {
            "title": "Head-office countries",
            "type": "array",
            "description": "Exact head-office country match, case-insensitive, as spelled in the register. This is FREE TEXT in the source and the Commission is inconsistent about it, so type the string you want rather than picking from a list: 'USA' (21 businesses) and 'United States of America' (3) are the same place, and 12 values carry a state or province ('USA - Nevada', 'Germany - Berlin', 'Australia - Victoria'). 48 distinct values live on 2026-09-07 - United Kingdom 1,891, Malta 85, Gibraltar 37, USA 21, Isle of Man 18, Ireland 17, Great Britain 11, Sweden 7, Austria 7, Cyprus 6, Australia 6, South Africa 4, Germany 4, Bulgaria 4, Estonia 3, Israel 3, Netherlands 3, then a long tail of 1-2.",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City contains",
            "type": "string",
            "description": "Case- and accent-insensitive substring of the head-office city, e.g. 'london', 'leeds', 'gibraltar'."
          },
          "postcodeStartsWith": {
            "title": "Postcode starts with",
            "type": "string",
            "description": "Outward-code prefix of the head-office postcode, spaces ignored: 'W1' matches W1D 3QU, 'LS' matches every Leeds postcode. Postcode fill rate is 79.9%."
          },
          "hasAddressOnly": {
            "title": "Only businesses with a published address",
            "type": "boolean",
            "description": "Drop the 471 businesses (17.8%) for which the Commission publishes no head-office address. Use this when the rows are going straight into a mail or enrichment pipeline.",
            "default": false
          },
          "firstLicensedAfter": {
            "title": "First licensed on or after",
            "type": "string",
            "description": "YYYY-MM-DD. Filters on first_licensed_date — the earliest licence start date the business holds, i.e. operator tenure. The register's earliest is 2007-08-30. Use this to find newly-licensed entrants."
          },
          "firstLicensedBefore": {
            "title": "First licensed on or before",
            "type": "string",
            "description": "YYYY-MM-DD, inclusive. Combine with the field above for a tenure window — e.g. operators first licensed between 2007 and 2012 are the incumbent old guard."
          },
          "latestLicenceStartAfter": {
            "title": "Newest licence started on or after",
            "type": "string",
            "description": "YYYY-MM-DD. Filters on latest_licence_start_date — a business that has just ADDED a licence, including an existing operator adding a new activity or moving online. Measured 2026-09-07: 6 licence rows in the register are future-dated to 2026-10-01, so this also surfaces licences that have been granted but have not started yet."
          },
          "licenceEndedAfter": {
            "title": "A licence ended on or after",
            "type": "string",
            "description": "YYYY-MM-DD. Filters on latest_licence_end_date — surrenders, revocations and lapses. 747 of the 4,460 licence rows this Actor ships carry an end date; the most recent measured was 2026-09-04. This is the churn/adverse-event trigger."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "account_number",
              "licence_account_name",
              "licence_count",
              "active_licence_count",
              "first_licensed_date",
              "latest_licence_start_date",
              "latest_licence_end_date",
              "domain_count",
              "trading_name_count",
              "city",
              "postcode",
              "country"
            ],
            "type": "string",
            "description": "Sorting runs BEFORE the 'Max businesses' cap, so the cap always gives you the top N of this order. Rows with an empty value sort last in both directions.",
            "default": "account_number"
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Ascending or descending.",
            "default": "asc"
          },
          "includeLicenceRows": {
            "title": "Include the full licence array",
            "type": "boolean",
            "description": "Keep the nested licences[] array (licence number, status, type, activity, start and end date per licence). Turn it OFF for a flat, spreadsheet-friendly row — licence_count, active_licence_count, activities, licence_types and the three date roll-ups are all still there.",
            "default": true
          },
          "dateFormat": {
            "title": "Date format",
            "enum": [
              "date",
              "iso"
            ],
            "type": "string",
            "description": "Plain date (2026-04-14) is what spreadsheets want. Full ISO timestamp (2026-04-14T00:00:00.000Z) is what the Commission's own file carries and what most databases prefer.",
            "default": "date"
          },
          "addressSource": {
            "title": "Address source",
            "enum": [
              "auto",
              "csv-only",
              "detail-pages"
            ],
            "type": "string",
            "description": "AUTO (recommended) reads the register's structured bulk address file, falls back to the copy inside the Commission's ZIP bundle, and only if BOTH are gone crawls the per-business detail pages. CSV ONLY never crawls: if the bulk file is unavailable the run still ships every other field with address_complete=false. DETAIL PAGES forces the per-business crawl — slower (about 6.7 pages/second measured) and it recovers nothing extra, because a business whose address row is blank also renders 'Address not available' on its own page. It is also LOSSIER: the page joins address line 1 and line 2 with the same separator that appears inside them, so on this route the whole street block ships in address_line_1 and address_line_2 is always null. Use it only to verify the bulk file against the live pages. One more consequence, measured: the rendered page prints town and country on one line, and for the 59 businesses whose published address is town + country only it prints the bare town, so this route loses their country (93.0% country fidelity over 300 live pages, against 100% street and postcode). If you combined it with a country, jurisdiction, city or postcode filter, any row the crawl re-addresses out of that filter is dropped before delivery and is never charged.",
            "default": "auto"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy on the default (datacenter) group is enough and is what this Actor was measured on: all five files and the detail pages returned 200 and byte-identical content through it on 2026-09-07. Residential is not needed and would only add cost. You can point this at your own proxies instead.",
            "default": {
              "useApifyProxy": true
            }
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 15,
            "maximum": 300,
            "type": "integer",
            "description": "Per-request timeout. The largest file (licences.csv, 492 KB) took 1.0-16.3 s through the Apify proxy in testing, so 90 s is generous.",
            "default": 90
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries with exponential backoff. One of six first-pass proxy requests hit a transient CONNECT failure during testing and succeeded on retry, so this is not decoration — leave it at 4 or higher.",
            "default": 4
          },
          "detailConcurrency": {
            "title": "Detail-page concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests used ONLY by the detail-page address fallback. The host tops out around 6 pages/second, so anything above about 12 buys nothing.",
            "default": 10
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}