GOC Optician & Optometrist Register Scraper
Search the General Optical Council's Specialist Register (str.optical.org) for UK optometrists, dispensing opticians, students and optical businesses - by name, exact GOC number, specialty, company or postcode radius, with practice addresses and FTP decision documents.
Open in Apify Store$0.99 / 1K on Free
Short answer
GOC Optician & Optometrist Register Scraper is an Apify Store Actor that returns 15 published output fields, including name, companyName, gocNumber, registerType. It lists $0.99 per 1,000 results on the Free plan (pay per event), $0.49 on the Business plan. It takes 15 input settings; one is required (mode). Last updated Nov 5, 2026.
From the public Store listing and published build schema, synced 2026-11-12.What it returns
15 fields from the published dataset schema. Export as JSON, CSV or Excel, or read the dataset through the Apify API.
namecompanyNamegocNumberregisterTyperegistrationStatusregistrationDatespecialitiesqualificationstownpracticeAddressesftpDecisionshasConditionsisSuspendedsearchTermsourceUrl
Input
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| mode | string | Yes | registrant | Choose the task. `registrant` searches individuals by name, register type, specialty, address, postcode, or GOC number. `bodyCorporate` searches registered businesses. `byGocNumber` checks a list of exact GOC numbers and detects registrants vs businesses automatically. `allBusinesses` exports the fu |
| surnames | array | No | [] | One or more surnames to search. Each surname runs its own search and results are merged without duplicates. Leave empty if you search by company, register type, specialty, address, postcode, or GOC number instead. Latin-script values only: the GOC search ignores non-Latin text. |
| forename | string | No | – | Optional first-name filter applied to every surname search in registrant mode. |
| soundsLikeSurname | boolean | No | false | Match surnames phonetically (e.g. 'Smyth' also finds 'Smith') instead of as a literal substring. |
| registerType | string | No | – | Restrict registrant searches to one registration category. |
| speciality | string | No | – | Restrict registrant searches to one specialty annotation. |
| addresses | array | No | [] | One or more address, town, or postcode-area text searches for registrant mode. Each value runs its own search and results are merged. Latin-script values only. |
| companyNames | array | No | [] | One or more optical-business names to search in bodyCorporate mode. Each value runs its own search and results are merged. Latin-script values only. |
| gocNumbers | array | No | [] | Exact GOC registration numbers, e.g. 01-12294, D-9396, SO-44231, CO-4310. In byGocNumber mode this is the whole lookup list (registrants and businesses can be mixed). Missing hyphens, lowercase, and a missing leading zero are normalised. In search modes the numbers are combined (AND) with the other |
| postcode | string | No | – | UK postcode or outward code (SW1A 1AA or EH1) used with radiusMiles. Works for registrant and business searches. Only real postcodes return results. |
Show the other 5 settings
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| radiusMiles | integer | No | 50 | Distance in miles from the postcode. Only used when postcode is set. |
| sortBy | string | No | – | Sort registrant results by surname. The GOC register ignores this for business searches. |
| fetchDetails | boolean | No | true | Visit each result's detail page to capture qualifications, town, every practice address, postcodes, and FTP decision documents. Slower and dependent on the GOC's flaky detail pages; disable for a fast list-only run. Ignored in allBusinesses mode, which is always list-only. |
| maxDetailedItems | integer | No | 2000 | Only used when fetchDetails is on. The first N records are enriched; the rest are emitted with list-level fields. Keep this modest for large runs. Ignored in allBusinesses mode. |
| maxItems | integer | No | 50 | Hard cap on records emitted across all searches. The registrant register is about 33,359 rows at 5 per page, so a complete registrant export cannot finish in one default run. The full business register is about 2,973 rows and allBusinesses is list-only. |
Example input
Built from the input form's published example values and defaults.
{
"mode": "byGocNumber",
"surnames": [],
"soundsLikeSurname": false,
"addresses": [],
"companyNames": [],
"gocNumbers": [
"01-12294"
],
"radiusMiles": 50,
"fetchDetails": false,
"maxDetailedItems": 1,
"maxItems": 1
} Run it from code or an AI agent
The same run through the Apify API, with the example input. You need an Apify API token; the run is billed to your account at the Store price.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "byGocNumber",
"surnames": [],
"soundsLikeSurname": False,
"addresses": [],
"companyNames": [],
"gocNumbers": [
"01-12294"
],
"radiusMiles": 50,
"fetchDetails": False,
"maxDetailedItems": 1,
"maxItems": 1
}
run = client.actor("nimbryxo-studio/goc-optician-and-optometrist-register-scraper").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"mode": "byGocNumber",
"surnames": [],
"soundsLikeSurname": false,
"addresses": [],
"companyNames": [],
"gocNumbers": [
"01-12294"
],
"radiusMiles": 50,
"fetchDetails": false,
"maxDetailedItems": 1,
"maxItems": 1
};
const run = await client.actor("nimbryxo-studio/goc-optician-and-optometrist-register-scraper").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/nimbryxo-studio~goc-optician-and-optometrist-register-scraper/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"mode":"byGocNumber","surnames":[],"soundsLikeSurname":false,"addresses":[],"companyNames":[],"gocNumbers":["01-12294"],"radiusMiles":50,"fetchDetails":false,"maxDetailedItems":1,"maxItems":1}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=nimbryxo-studio/goc-optician-and-optometrist-register-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
What a run costs
The result rate falls on higher Apify plans. Each figure is the published per-result rate times the number of results.
| Apify plan | Per 1,000 | 10,000 results | 100,000 results |
|---|---|---|---|
| Free plan | $0.99 | $9.90 | $99 |
| Starter plan | $0.82 | $8.20 | $82 |
| Scale plan | $0.66 | $6.60 | $66 |
| Business plan | $0.49 | $4.90 | $49 |
- Every run also has a start event, charged per GB of memory (minimum one): $0.10 on Free, $0.03 on Business. At its default memory of 1 GB a run starts at $0.10 on Free. Fewer, larger runs keep this small.
- The Free plan includes $5 of monthly usage (Apify pricing, checked 2026-11-11); at the Free rate that covers at most about 5,050 results, less start events and platform usage.
- Worked example: 10,000 results in one run on the Free plan cost $10 ($9.90 for results + $0.10 start), plus Apify platform usage (compute), billed separately by Apify.
- Pay per event. Platform usage (compute) is billed by Apify on top of the event prices. Compare other tools in the cost estimator.
What people use it for
- search optical register
- check registration details
Similar Actors
2GIS Business Directory Extractor for CIS & Middle East
Search 2GIS for businesses by category and city across Russia, the UAE, Kazakhstan and the wider CIS, and get name, address, rating, hours,…
General Osteopathic Council Register Scraper
Search the General Osteopathic Council's public register (osteopathy.org.uk) by postcode/town, surname, or practice features, or look up exact…
Google Maps Business Lead & Email Finder
Find business leads on Google Maps by category, keyword, or location and collect name, address, phone, website, rating, review count, and…
YellowPagesPK Business Directory & Lead Finder
Browse Pakistan's YellowPagesPK.com directory by business category, run a keyword search, or fetch full profiles by listing URL. Get business…
Bing Maps Local Business Finder
Find restaurants, shops, hotels, and other local businesses on Bing Maps by keyword and city, or by a precise latitude/longitude and radius, with…
Florida Sunbiz Registry Lookup by Name, Agent & FEI
Look up Florida business entities on the Sunbiz registry by entity name, officer, registered agent, FEI/EIN, document number, ZIP, or street…
Questions people ask
How much does GOC Optician & Optometrist Register Scraper cost?
The published result rate depends on your Apify plan: $0.99 per 1,000 on Free, $0.82 per 1,000 on Starter, $0.66 per 1,000 on Scale, $0.49 per 1,000 on Business. So 10,000 results cost about $9.90 on the Free plan and $4.90 on Business, plus a start fee of $0.10 per run per GB of memory on Free. Platform usage is billed separately.
What data does GOC Optician & Optometrist Register Scraper return?
Its published output schema lists 15 fields: name, companyName, gocNumber, registerType, registrationStatus, registrationDate, specialities, qualifications, town, practiceAddresses, ftpDecisions, hasConditions, and 3 more. A listed field is not guaranteed to be filled in every row.
What input does GOC Optician & Optometrist Register Scraper need?
Required: mode. Optional settings include surnames, forename, soundsLikeSurname, registerType, speciality, addresses.
How do I run GOC Optician & Optometrist Register Scraper from Python or the API?
Use the Apify API client: in Python, ApifyClient(token).actor("nimbryxo-studio/goc-optician-and-optometrist-register-scraper").call(run_input=...), then read the run's default dataset (run.default_dataset_id); in JavaScript the same call is client.actor("nimbryxo-studio/goc-optician-and-optometrist-register-scraper").call(input). Without a client, POST the input JSON to https://api.apify.com/v2/actors/nimbryxo-studio~goc-optician-and-optometrist-register-scraper/run-sync-get-dataset-items with your API token. Ready-to-paste code with the example input is on this page.
Sources
- GOC Optician & Optometrist Register Scraper on Apify Store
- Published build with input and output schema (JSON)
Cite this page
Scraper Finder. "GOC Optician & Optometrist Register Scraper." https://scraperfinder.com/catalogue/goc-optician-and-optometrist-register-scraper/ (data checked 2026-11-12).
Run GOC Optician & Optometrist Register Scraper
$0.99 per 1,000 results. Paste the example input above, set your target query, then export the dataset.