UK Food Hygiene Ratings (FSA FHRS) Scraper
Pricing
from $2.00 / 1,000 result items
UK Food Hygiene Ratings (FSA FHRS) Scraper
Scrape UK Food Hygiene Ratings from the FSA FHRS API (ratings.food.gov.uk) by postcode, name, council or type. Ideal for restaurant lead generation, compliance checks and market research.
Pricing
from $2.00 / 1,000 result items
Rating
0.0
(0)
Developer
La Fabbrica LLC
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
What does UK Food Hygiene Ratings (FSA FHRS) Scraper do?
UK Food Hygiene Ratings (FSA FHRS) Scraper pulls official food hygiene ratings for restaurants, cafes, takeaways, pubs, shops, schools, hospitals and every other rated food business in the United Kingdom, straight from the Food Standards Agency's public ratings API. You search by business name, address, postcode, local authority (council), business type or rating, and get a clean dataset (JSON, CSV, Excel) or API feed with the rating, inspection date, the three inspection sub-scores, full address and coordinates.
It covers both UK schemes:
- FHRS (England, Wales, Northern Ireland): ratings 0 to 5.
- FHIS (Scotland): Pass, Improvement Required, Awaiting Inspection, Exempt.
No API key, no login, no proxies. The data is published by the FSA under the Open Government Licence v3, so you can reuse it commercially as long as you keep the attribution (see the licence section below).
The actor does not collect personal data. The API's telephone field and the council e-mail address are deliberately dropped and are not available as options.
Why use it?
- Hospitality lead lists: every restaurant, pub or takeaway in a postcode area or council with its rating and address, ready for a CRM.
- Due diligence for insurers, lenders, landlords and franchisors: check the current rating, rating date and whether a new rating is pending for a set of premises.
- Territory and competitor analysis: count 5-rated versus low-rated businesses by business type in a council area; plot them with the coordinates.
- Compliance monitoring: schedule a weekly run for your own sites or your suppliers and get alerted when a rating changes.
- Data for apps, dashboards and AI agents: structured, licensed rows without writing any FSA API code.
On Apify you also get scheduling, webhooks, run monitoring and integrations (Google Sheets, Make, Zapier, LangChain, MCP).
What data does it return?
One row per establishment (mode search):
| Field | Type | Description |
|---|---|---|
fhrsId | integer | FSA establishment id, stable across re-inspections |
business | string | Trading name of the establishment |
businessType | string | e.g. Restaurant/Cafe/Canteen, Takeaway/sandwich shop |
businessTypeId | integer | Id usable as the businessTypeId filter |
ratingValue | string | 0-5 (FHRS) or Pass, Improvement Required, Exempt, ... (FHIS) |
ratingKey | string | API key of the rating, e.g. fhrs_5_en-gb |
ratingDate | string or null | Date of the rating, YYYY-MM-DD |
newRatingPending | boolean | A re-inspection result is waiting to be published |
schemeType | string | FHRS or FHIS |
localAuthority | string | Council that carried out the inspection |
localAuthorityCode | string | Council code printed on FSA records |
addressLine1-addressLine4 | string or null | Business address |
postcode | string or null | Business postcode |
latitude, longitude | number or null | WGS84 coordinates, when the FSA has geocoded the premises |
scores.hygiene | integer or null | Hygienic food handling sub-score (FHRS only, lower is better) |
scores.structural | integer or null | Cleanliness and condition of premises sub-score |
scores.confidenceInManagement | integer or null | Management of food safety sub-score |
fsaUrl | string | Public FSA page for the establishment |
meta.sourceUrl | string | The API request the row came from |
meta.licence | string | OGL v3 |
meta.attribution | string | Attribution statement to keep when you republish |
meta.retrievedAt | string | UTC timestamp of retrieval |
Lookup modes return short tables instead:
localAuthorities:localAuthorityId,localAuthorityCode,localAuthority,establishmentCount,schemeType(363 rows).businessTypes:businessTypeId,businessType(14 rows).
How to use it
- Pick a Mode.
searchis the default. - Fill in at least one filter: Business name, Address terms, Postcode, Local authority id, Business type id or Rating. Filters combine with AND. The defaults (local authority
120= Westminster, rating5) give a working search straight away; change or clear them to search elsewhere. - Set Max items (default 50, maximum 5,000). You pay only for rows actually saved.
- Start the run. Rows appear in the Output tab as pages arrive; download them or read them through the API.
Need a council or business type id? Run the actor once with mode localAuthorities or businessTypes and copy the id from the result. Note that localAuthorityId is the API's own id (Westminster = 120, Manchester = 180, Cardiff = 339), not the three-digit code printed on establishment records.
Example input
The default input (5-rated businesses in Westminster, first 50 rows):
{"mode": "search","localAuthorityId": 120,"ratingKey": "5","maxItems": 50}
Every 5-rated restaurant in Westminster:
{"mode": "search","localAuthorityId": 120,"businessTypeId": 1,"ratingKey": "5","maxItems": 500}
Everything in a postcode area:
{"mode": "search","postcode": "SW1A","maxItems": 200}
Example output
[{"fhrsId": 412156,"business": "86 St James Limited","businessType": "Other catering premises","businessTypeId": 7841,"ratingValue": "5","ratingKey": "fhrs_5_en-gb","ratingDate": "2025-05-29","newRatingPending": false,"schemeType": "FHRS","localAuthority": "Westminster","localAuthorityCode": "533","addressLine1": "86 ST JAMES'S STREET","addressLine2": null,"addressLine3": "LONDON","addressLine4": null,"postcode": "SW1A 1PL","latitude": 51.5052003,"longitude": -0.1386974,"scores": { "hygiene": 5, "structural": 0, "confidenceInManagement": 0 },"fsaUrl": "https://ratings.food.gov.uk/business/412156","meta": {"sourceUrl": "https://api.ratings.food.gov.uk/Establishments?address=SW1A&sortOptionKey=Relevance&pageNumber=1&pageSize=50","licence": "OGL v3","licenceUrl": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/","attribution": "Contains public sector information licensed under the Open Government Licence v3.0. Source: Food Standards Agency, Food Hygiene Rating Scheme.","retrievedAt": "2026-09-18T10:07:54.151Z"}}]
How much does it cost?
The actor uses pay-per-event pricing. You pay two things and nothing else:
| Event | Price | When |
|---|---|---|
| Actor start | $0.01 | Once per run, after your input has been validated |
| Result item | $0.002 | Once per row saved to the dataset |
A run that returns 100 establishments costs $0.21; 1,000 establishments cost $2.01; the full local authority lookup (363 rows) costs $0.74. Set Maximum cost per run in the run options to cap spending: the actor stops cleanly at the cap and you keep every row saved up to that point. There is no charge for runs that fail on input validation. The actor needs very little memory (256 MB is enough), so platform usage on top of the event prices is negligible.
Limits
- Maximum 5,000 rows per run. Split larger jobs by council, business type or rating (the run log tells you how many establishments matched in total).
- The search covers the FSA API's own filters: name, address/postcode terms, council, business type, rating and scheme. Free-text search is word based, not fuzzy; try a shorter term if you get no results.
- Scottish (FHIS) establishments have no numeric sub-scores;
scores.*isnullfor them. - Latitude and longitude are
nullfor premises the FSA has not geocoded. - The FSA data is refreshed by local authorities on their own schedules;
ratingDatetells you how old a rating is. - The actor calls the public FSA API sequentially with a short pause between pages. If the API is temporarily unavailable it retries with backoff and then fails with a clear message.
Data licence and attribution
The output contains public sector information licensed under the Open Government Licence v3.0. Source: Food Standards Agency, Food Hygiene Rating Scheme (FHRS) and Food Hygiene Information Scheme (FHIS), retrieved via the FSA ratings API. When you publish or redistribute the data, keep this attribution:
Contains public sector information licensed under the Open Government Licence v3.0. Source: Food Standards Agency.
The FSA is not affiliated with this actor and does not endorse it.
FAQ and support
Is the data personal data? The rows describe businesses and premises, not people. The actor never outputs the telephone field or e-mail addresses. Some sole traders trade under their own name; if you build lists from the output, you remain responsible for using them lawfully (UK GDPR and PECR apply to marketing).
Why does a filter return zero rows? The most common cause is using the council code (e.g. 533) as localAuthorityId; use the API id from mode localAuthorities instead (Westminster is 120). Rating keys are exact: 5, not 5 stars.
Something looks wrong? Open a report in the Issues tab with your input and the run id. Issues are answered within one working day.
Need programmatic access? See the API tab for ready-made snippets in JavaScript, Python and curl.