UK Food Hygiene Prospect Finder — FSA Ratings avatar

UK Food Hygiene Prospect Finder — FSA Ratings

Pricing

from $67.00 / 1,000 establishment records

Go to Apify Store
UK Food Hygiene Prospect Finder — FSA Ratings

UK Food Hygiene Prospect Finder — FSA Ratings

Prospecting lists of UK food businesses from the FSA's own public ratings API: rating, scores, address and authority contact per establishment.

Pricing

from $67.00 / 1,000 establishment records

Rating

0.0

(0)

Developer

NexGen Watch

NexGen Watch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

UK Food Hygiene Prospect Finder

Build a prospecting list of UK food businesses from the Food Standards Agency's own public API — filtered by local authority, business type, name and hygiene rating — with a link to the FSA's page for every establishment.

Built for food-safety consultants, pest control, EHO training, equipment suppliers and anyone whose buyer is a business that needs to improve its rating.

The filter you came for does not work on the server. That is the point of this actor.

The FSA API accepts a ratingKey parameter. It is silently ignored. Measured 2026-07-31 against a control of 1,477 establishments in one authority:

queryestablishments returned
no rating filter (control)1,477
ratingKey=fhrs_5_en-gb (valid)1,477
ratingKey=fhrs_0_en-gb (valid)1,477
ratingKey=fhrs_9_en-gb (invented)1,477
ratingKey=banana (garbage)1,477
ratingKey= (empty)1,477

Every value returns the unfiltered set, and the API never says so. A tool that passed this through would answer "here are the 1-rated establishments in your area" with every establishment in the authority, five-star ones included — the exact opposite of a prospect list.

So this actor never sends it. Rating filtering runs here, over each record's own published RatingValue, where it provably works.

Two more traps, both measured

An unfiltered query is refused — and the 403 is not a permission problem

GET /Establishments?pageSize=1&pageNumber=1
-> 403 {"Message":"This is a CPU intensive query: please use one of the
documented filters in your query (e.g. filter by LocalAuthority)."}

Passing that on would read as "the register is closed to you". It isn't — a filter is mandatory. The request is refused before it is sent, with the reason.

An unrecognised value returns zero, not an error

localAuthorityId=99999 -> HTTP 200, totalCount 0
businessTypeId=99999 -> HTTP 200, totalCount 0

A typo therefore answers "there are no food businesses there". Every value is validated against the API's own enumerations first — 363 local authorities, 14 business types, 11 rating values — and an unknown one is refused, not guessed.

An ambiguous authority name is refused too. Cambridge is carried by three authorities — Cambridge City, East Cambridgeshire and South Cambridgeshire. Matching on a prefix would resolve silently to the city, and a buyer who meant the county would get a bill for the wrong list with no way to see it happened. Names are matched as substrings and anything but a single hit is refused, with the candidates named.

Scotland is different, and it is not fudged

Scottish establishments use FHIS, which publishes wordsPass, Improvement Required — not numbers. ratingAtOrBelow cannot rank those, so it excludes them rather than guessing a score, and every result reports how many were excluded that way.

Filters

filterwhat it does
localAuthorityName / localAuthorityIdone of 363 authorities; ambiguous names refused
businessTypeName / businessTypeIdone of 14 published types
businessNamefree text, matched by the FSA against establishment names
ratingValueskeep only these ratings — applied here, not on the server
ratingAtOrBelownumeric ratings at or below N — the usual prospecting filter
maxResultshow many establishments to return — also your cost ceiling

Output

One record per establishment: name, business type, full address, postcode, rating and rating date, the three component scores (hygiene, structural, management), local authority plus its contact email and website, coordinates, and a link to the FSA's page. Plus a search_summary naming every trap and a source_receipt.

Nothing is inferred

Every field is carried verbatim from the FSA. This actor assigns no score, ranks nobody, and states no view on any business's food safety beyond the rating the FSA itself published. A low rating is a snapshot from an inspection on a stated date, not a current condition.

Reading policy

api.ratings.food.gov.uk serves no robots.txt (404) and x-api-version: 2 is sent on every call. The actor paces itself at 2 requests/second on an official public API. The rate is not an input.

Pricing

EventPrice
Actor start (apify-actor-start)$0.02, charged once per run by the platform
Establishment record (establishment-result)$0.10 each (FREE tier)

Tiers per record: $0.10 / $0.09 / $0.08 / $0.067 / $0.067 / $0.067.

You are billed per record returned, so maxResults is your cost ceiling — 100 results is $10.00 plus the $0.02 start.

A zero-result query costs nothing beyond the start fee, and says so.

Every refusal costs nothing: an unfiltered query, an unknown or ambiguous authority, an unknown business type, an unknown rating value. A source failure fails the run loudly and charges nothing — it never reports a broken response as "no results".