UK GPhC Pharmacies & Pharmacists Register Scraper
Pricing
from $17.00 / 1,000 results
UK GPhC Pharmacies & Pharmacists Register Scraper
Scrape the UK GPhC register. Premises mode returns pharmacies with name, owner, FULL ADDRESS, GPhC number, status and inspection report. Pharmacist mode returns pharmacists with name, GPhC number, roles, town and status. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Share
UK GPhC Pharmacies & Pharmacists Register Scraper
Here is one real result, with every field the actor returns in premises mode:
{"recordType": "premises","pharmacyName": "A-Z Chemist","ownerName": "BAQRX Pharma Ltd","registrationNumber": "9012328","addressFull": "35 Hankinson Way, Salford, Greater Manchester, M6 5JA","addressStreet": "35 Hankinson Way, Salford","town": "Greater Manchester","postcode": "M6 5JA","status": "Registered","subjectToNotices": "No","inspectionReportUrl": "https://inspections.pharmacyregulation.org/pharmacy/detail/a-z-chemist-9012328","detailUrl": "https://www.pharmacyregulation.org/registers/pharmacy/9012328","searchQuery": "Manchester","source": "UK General Pharmaceutical Council (GPhC) Register","observedAt": "2026-08-06T16:43:22.873Z"}
The most complete UK GPhC register scraper available. It returns every field the General Pharmaceutical Council publishes for each pharmacy and pharmacist, splits the pharmacy address into street, town and postcode, and gives you two modes plus direct registration-number lookup to target exactly the records you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the UK General Pharmaceutical Council register in one of two modes and writes one normalized record per match to the run's dataset.
- Premises mode returns registered pharmacies with pharmacy name, owner, full address split into street, town and postcode, GPhC registration number, status, a subject-to-notices flag and a link to the inspection report. Search by location (town, city or postcode) or by pharmacy name.
- Pharmacist mode returns registered pharmacists and technicians with last name, first names, GPhC number, role annotations, status, town, registration expiry and a fitness-to-practise flag. Search by surname; when
fetchDetailsis on, each profile is opened to add town and expiry.
You can also look records up directly by GPhC registration number in either mode. Missing source values are returned as null.
Quickstart
Open the actor, paste this into the input, and press Run. It returns registered pharmacies in Manchester with full addresses.
{"mode": "premises","searchBy": "location","queries": ["Manchester"],"maxRecords": 50}
Provide at least one search query, or one registration number. In premises mode a query is a town, postcode or pharmacy name; in pharmacist mode it is a surname. Each query is searched separately, so you can cover several towns or surnames in one run.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | enum | no | premises | premises for pharmacies, or pharmacists for pharmacists and technicians. |
searchBy | enum | no | location | Premises mode only: location (town, city or postcode, returns full address) or name (pharmacy name). Ignored in pharmacist mode, which searches by surname. |
queries | string[] | conditional | (none) | One or more searches. Premises + location: towns, cities or postcodes, for example London, EC4Y. Premises + name: pharmacy names, for example Boots. Pharmacists: surnames, for example Smith. Required unless you pass registrationNumbers. |
registrationNumbers | string[] | no | (none) | Look up specific records directly by GPhC number. Works in both modes. |
fetchDetails | boolean | no | true | Pharmacist mode only: open each profile to add town and registration expiry. Premises are already complete from the results list. |
maxRecords | integer | no | 50 | Maximum number of records to collect across all searches. |
At least one of queries or registrationNumbers must be supplied.
Output reference
One dataset item per record. The recordType field tells you which shape applies. Types: string, or null when the source value is absent.
| Field | Mode | Type | Description |
|---|---|---|---|
recordType | both | string | premises or pharmacist. |
pharmacyName | premises | string | Registered pharmacy trading name. |
ownerName | premises | string | Registered owner of the pharmacy. |
addressFull | premises | string | Full pharmacy address as published. |
addressStreet | premises | string | Street portion of the address (everything before the town). |
town | both | string | Town or city. In premises mode parsed from the address; in pharmacist mode from the profile. |
postcode | premises | string | UK postcode parsed from the address. |
subjectToNotices | premises | string | Whether the pharmacy is subject to notices or conditions, for example No. |
inspectionReportUrl | premises | string | Link to the pharmacy inspection report, or null. |
lastName | pharmacist | string | Pharmacist surname. |
firstNames | pharmacist | string | Pharmacist first names. |
annotations | pharmacist | string | Role annotations, for example No when none, or the annotated roles held. |
registrationExpiry | pharmacist | string | Registration expiry date (DD/MM/YYYY), present when fetchDetails is on. |
fitnessToPractise | pharmacist | string | Fitness-to-practise information flag, for example No. |
registrationNumber | both | string | GPhC registration number, unique per record. |
status | both | string | Registration status, for example Registered. |
detailUrl | both | string | Direct link to the record on the GPhC register. |
searchQuery | both | string | The query this record was found under, or the registration number for a direct lookup. |
source | both | string | Always UK General Pharmaceutical Council (GPhC) Register. |
observedAt | both | string | ISO 8601 timestamp of when the record was collected. |
error | both | string | Present only on a failed run; a single item with this field is written instead of records. |
Example output record
Real pharmacist-mode record from a live run (input {"mode":"pharmacists","queries":["Patel"]}):
{"recordType": "pharmacist","lastName": "Patel","firstNames": "Aakarsh Shailesh","registrationNumber": "2077691","annotations": "No","status": "Registered","town": "CRAWLEY","registrationExpiry": "14/08/2027","fitnessToPractise": "No","detailUrl": "https://www.pharmacyregulation.org/registers/pharmacist/2077691","searchQuery": "Patel","source": "UK General Pharmaceutical Council (GPhC) Register","observedAt": "2026-08-06T16:43:43.871Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~uk-gphc-pharmacists-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"premises","searchBy":"location","queries":["Manchester"],"maxRecords":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~uk-gphc-pharmacists-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"pharmacists","queries":["Patel"],"maxRecords":100}'
Apify CLI:
apify call scrapers_lat/uk-gphc-pharmacists-scraper \--input '{"mode":"premises","registrationNumbers":["9012328"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per record returned (
resultevent). See the pricing tab for the current per-result price. - Detail add-on. In pharmacist mode with
fetchDetailson, each pharmacist whose profile is successfully fetched (for town and expiry) also charges adetailsevent. Premises mode does not use it. - No charge on failure. If a run errors or matches nothing, the actor writes a single item with an
errorfield and does not charge for it. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for a higher
maxRecords.
FAQ and troubleshooting
A run returned only an error record. Why?
You ran with neither queries nor registrationNumbers, or the search matched nothing. Add a query or a registration number. These cases are not charged.
How do I get every pharmacy in a town, with full addresses?
Set mode to premises, searchBy to location, and put the town or postcode in queries. Premises records include the split street, town and postcode.
How do I search pharmacists rather than pharmacies?
Set mode to pharmacists and put surnames in queries. Keep fetchDetails on to also get town and registration expiry.
Why are pharmacist town or registrationExpiry null?
Those come from each pharmacist profile and appear only when fetchDetails is on. With it off, the actor returns the fast list-level fields.
Can I verify one specific registration number?
Yes. Put it in registrationNumbers and set mode to match the record type. The actor reads the profile directly.
Is this an official GPhC tool? No. This actor is independent and has no affiliation with the General Pharmaceutical Council. It reads only data the GPhC publishes in its public register. Use it in accordance with the GPhC terms.
Related scrapers
- UK GMC Doctors Register Scraper: UK General Medical Council register of doctors.
- UK GDC Dentists & Dental Professionals Register Scraper: UK General Dental Council register.
- UK HCPC Professionals Register Scraper: UK health and care professionals register.
- UK Food Hygiene Ratings & Business Scraper: UK food business hygiene ratings and contacts.
- Google Maps Business Leads Scraper: Local business leads with contacts.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US, UK, European and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the UK General Pharmaceutical Council. Accesses only the publicly available GPhC register. Use in accordance with the GPhC terms.
