UK Food Hygiene Ratings Scraper (FHRS FSA Data JSON)
Pricing
from $3.20 / 1,000 establishment delivereds
UK Food Hygiene Ratings Scraper (FHRS FSA Data JSON)
Get UK food establishment hygiene ratings directly from the Food Standards Agency (FSA) open-data API. Automate food-safety due diligence, site monitoring and compliance dashboards. Filter by local authority and minimum rating. No login required.
Pricing
from $3.20 / 1,000 establishment delivereds
Rating
0.0
(0)
Developer
Steadfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Features
Share
This Actor returns UK food establishment hygiene ratings from the official Food Standards Agency open data API: one validated JSON item per food business with its FHRS ID, business name and type, published address and postcode, local authority, current rating value and rating date, and coordinates - for supplier screening, food-safety monitoring and UK market research.
Tested daily. Last verified: 2026-11-03
What it does
- Queries the FSA
/EstablishmentsAPI (version 2) over plain HTTP: the API is free, needs no registration or key, and there is no login, CAPTCHA or browser; the Actor does not scrape the ratings website. - Filters by local authority (
region: one or more FSA authority names, comma-separated), minimum numeric rating (minRating, 0-5), scheme (FHRSfor England, Wales and Northern Ireland, orFHISfor Scotland) and caps delivery withmaxResults. - Validates every item against
.actor/dataset_schema.jsonbefore it reaches the dataset; withstrictSchema: true(the default) an invalid item fails the run instead of being pushed. - Returns business premises fields only: no phone numbers, email addresses or any individual's data, as the dataset schema states.
- Data is published by the FSA under the Open Government Licence v3.0.
- Limits:
minRatingexcludes non-numeric values such asAwaitingInspectionand applies to FHRS only - FHIS usesPass/Improvement Required, so omit it for FHIS runs. An emptyregionqueries every authority, bounded bymaxResults.
How to use
- Run it from the terminal with the Apify CLI, using the same input as the Store example:
$apify call steadfetch/uk-food-hygiene-monitor --input='{"region":"Camden","maxResults":10}'
- Or open the Run tab in the Apify console: enter one or more local-authority names in
region, optionally setminRatingandschemeType, and cap the run withmaxResults. - Schedule the run to monitor a council area and watch ratings change; read results from the default dataset. With
monitorModeon (the default), rating snapshots already delivered to your Apify user are not pushed again, and a changed rating re-delivers the establishment.
Input
Input fields
| Field | Type | Required | Default/Prefill | Description | Example |
|---|---|---|---|---|---|
region | string | No | Prefill Camden | One or more FSA local-authority names, comma-separated. Leave empty to query every authority (scoped by maxResults). | Camden |
minRating | integer | No | None; minimum 0; maximum 5 | Only return establishments whose numeric rating is greater than or equal to this value. Non-numeric ratings such as AwaitingInspection are excluded when set; applies to FHRS only. | 4 |
schemeType | string (select) | No | Default FHRS | FHRS (Food Hygiene Rating Scheme, England/Wales/Northern Ireland) or FHIS (Food Hygiene Information Scheme, Scotland). | FHIS |
maxResults | integer | No | Default 100; minimum 1; maximum 20,000; prefill 10 | Maximum number of validated establishments to save to the dataset. | 10 |
monitorMode | boolean | No | Default true, prefill false | Monitor mode: rating snapshots already delivered to this Apify user for the same watch (scheme type, region, minimum rating) are not pushed again; a changed rating value or date re-delivers the establishment. Disable for a one-off backfill; the Store default input disables it so the daily probe always sees establishments. | false |
strictSchema | boolean | No | Default true | Fail the run when an item does not match the output schema. Keep enabled: Steadfetch never publishes Actors without output-schema validation. | true |
No input field is required; an empty run queries every authority up to maxResults under the default FHRS scheme.
Example input
{"region": "Camden","maxResults": 10}
Wider filtered run:
{"region": "Bristol, Bath and North East Somerset","minRating": 4,"schemeType": "FHRS","maxResults": 1000}
Output
Example output
One record per establishment, built from the published dataset schema examples:
{"url": "https://ratings.food.gov.uk/business/1824267","title": "1 REBEL","scrapedAt": "2026-10-19T12:00:00.000Z","fhrs_id": "1824267","business_name": "1 REBEL","business_type": "Restaurant/Cafe/Canteen","address_line": "1 Rebel House, 1 Rebels Lane","postal_code": "NW1 0AA","local_authority_name": "Camden","rating_value": "5","rating_date": "2026-03-18","latitude": 51.528421,"longitude": -0.1314354}
Output fields
| Field | Type | Description |
|---|---|---|
url | string (URI) | Public FSA ratings page for this establishment. |
title | string or null | Display title: business name, mirrored for the common Steadfetch envelope. |
scrapedAt | string (date-time) | ISO 8601 UTC timestamp of the scrape. |
fhrs_id | string | Food Hygiene Rating Scheme establishment identifier. |
business_name | string | Business name as published by the FSA. |
business_type | string | Business type, e.g. Restaurant/Cafe/Canteen. |
address_line | string | First public address line published by the FSA. |
postal_code | string | Postal code of the premises. |
local_authority_name | string | Local authority that owns the inspection. |
rating_value | string | Published rating: 0-5, Pass, Improvement Required, AwaitingInspection, AwaitingPublication or Exempt. |
rating_date | string (date) | Date of the rating. |
latitude | number | Latitude of the establishment. |
longitude | number | Longitude of the establishment. |
Pricing
Pay-per-event pricing from .actor/pay_per_event.json, using only the two synthetic platform events:
| Event | Charged when | Price |
|---|---|---|
apify-actor-start | a run starts | 0.00005 USD per run; includes the first 5 seconds of compute |
apify-default-dataset-item | an establishment is saved to the dataset | 0.004 USD per result = 4.00 USD per 1,000 results |
monitor-check | a watched item is checked in a monitor run | 0.0005 USD per check = 0.5 USD per 1,000 checks |
Results are never double billed: monitor-check bills the check itself in monitor mode, and apify-default-dataset-item charges each pushed snapshot once. Items that fail schema validation are not pushed and are not billed as dataset items, and runs that return nothing cost only the automatic run-start event; failed requests and retries are not charged per result.
Works on the Apify free plan - about 1,249 establishments for the $5 monthly credit ((5.00 USD - 0.0002 USD run-start at the default 4 GB memory) / 0.004 USD per result).
Other Steadfetch Actors
- FDA Recall Monitor - US FDA food recalls, the recall feed that complements UK hygiene ratings.
- NYC Restaurant Inspection Scores - US inspection scores for the same kind of premises screening in New York.
- EU Safety Gate Monitor - dangerous-product alerts for the adjacent EU market.
- CPSC Recall Monitor - US consumer product recalls when your supplier list crosses the Atlantic.
FAQ
Do I need an FSA account or API key? No. The FSA open data API is free and needs no registration, and no browser or proxy is involved because the API returns JSON.
Does it return personal data? No. The Actor returns business premises fields already published by the FSA - no phone numbers, email addresses or any individual's data.
Why does minRating hide some establishments?
The filter compares numeric ratings only, so non-numeric values such as AwaitingInspection are excluded when it is set. FHIS (Scotland) uses Pass / Improvement Required instead of 0-5, so omit minRating for FHIS runs.
When am I charged?
Once per run start (apify-actor-start) and once per valid result saved to the dataset (apify-default-dataset-item). Failed requests, retries and empty pages are not charged per result.
Is the output schema stable?
Yes. New fields are additive and the required fields in .actor/dataset_schema.json do not change.
Support
Report bugs through the Issues tab of this Actor's Apify Store page or through the steadfetch actors repository issues. Include the run ID (visible in the Apify console on the run) and the exact input JSON you used, so the problem can be reproduced against the same authority filters.
Maintenance
Tested daily: daily catalog QA runs the default input; enabled on 2026-10-20. Schema and fixture tests (npm test) last verified locally on 2026-10-22. The test suite runs against fixtures captured from the real FSA API, and any break in the daily run is reported as an issue in the Steadfetch Actors repository.