UK Food Business Monitor - FSA hygiene register avatar

UK Food Business Monitor - FSA hygiene register

Pricing

from $0.02 / actor start

Go to Apify Store
UK Food Business Monitor - FSA hygiene register

UK Food Business Monitor - FSA hygiene register

Watches the Food Standards Agency register for newly registered food businesses and hygiene-rating changes in the local authorities you choose. Each scheduled run emits only what changed since the last run, with address, rating and coordinates, plus optional webhook POST.

Pricing

from $0.02 / actor start

Rating

0.0

(0)

Developer

FJ Banks

FJ Banks

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

UK Food Business Monitor — FSA hygiene register

Watches the Food Standards Agency register for newly registered food businesses — and, optionally, hygiene-rating changes — in the local authorities you choose. Each scheduled run emits only what changed since the last run, with address, rating and coordinates. Optional webhook POST to Slack, Zapier, Make or n8n.

Who it's for

BuyerUse
EPOS / booking / kitchen-display vendorsA new restaurant or takeaway = a system to sell, week one
Food & drink wholesalers, packaging suppliersNew caterers in your delivery area
Commercial kitchen equipment / refrigerationNew premises fitting out
Business insurance brokersNew food businesses need cover
Accountants & bookkeepersNew hospitality clients in your town
Food-safety consultants / PRA rating drop to 0–2 = an urgent-help lead
Local press / researchersNew-opening and rating-change feeds by area

Quick start

  1. No API key — the FSA register is free open data.
  2. Set localAuthorities to the councils you cover (names like "Manchester" or "Leeds"; fragments match, so "Kensington" finds "Kensington and Chelsea"). Optionally narrow by businessTypeIds.
  3. Run once — the first run only seeds the state (emits nothing), because it would otherwise dump every establishment. Set emitOnFirstRun: true if you want them all once.
  4. Schedule it daily. Later runs report new registrations and rating changes.

Input

FieldTypeDefaultDescription
localAuthoritiesstring[]Required. Local-authority names or numeric IDs. Name fragments match.
businessTypeIdsstring[][] (all)FSA type IDs. Common: 1 Restaurant/Cafe/Canteen · 7844 Takeaway/sandwich shop · 7843 Pub/bar/nightclub · 7846 Mobile caterer · 7840 Supermarket · 7842 Hotel/B&B · 4613 Retailers-other · 5 Hospitals/Childcare/Caring.
trackRatingChangesbooleantrueAlso emit establishments whose rating changed since last run.
emitOnFirstRunbooleanfalseFirst run seeds silently by default; set true to emit every establishment once.
webhookUrlstringPOST {source, authorities, count, establishments[]} each run.
maxResultsinteger 1–100001000Cap per run.

Output

One dataset item per changed establishment:

FieldExample
fhrs_id593681
change_type"new" or "rating_changed"
previous_rating"5" (only for rating_changed)
business_name"210 BISTRO"
business_type / business_type_id"Restaurant/Cafe/Canteen" / 1
rating_value / rating_date"Pass" / "2026-03-26T00:00:00"
local_authority"Aberdeen City"
address / post_code"210 Market Street, Aberdeen, AB11 5PQ" / "AB11 5PQ"
latitude / longitude57.142278 / -2.092258
linkhttps://ratings.food.gov.uk/business/en-GB/593681
scraped_at"2026-09-03T09:00:00.000Z"

Ratings are 05 in England/Wales/NI and Pass / Improvement Required in Scotland.

How it works

Cross-run state lives in a named key-value store, uk-food-monitor-state, namespaced by a hash of the authority + business-type filter. It holds the set of seen FHRS IDs and, when trackRatingChanges is on, a map of FHRSID → last rating. Each run pulls the current establishment list for every configured authority and:

  • an FHRS ID not seen before → change_type: "new"
  • a seen FHRS ID whose rating differs from the stored one → change_type: "rating_changed"

The seen-set is capped at 200,000 IDs.

Notes on the FSA API

  • No key. Requires x-api-version: 2 and rejects unfiltered establishment queries — this actor always scopes by local authority.
  • Transient 5xx / 429 are retried (3 attempts, backoff); a hard failure mid-run pushes what was collected and resumes next run (partial: true).
  • The register is refreshed by each local authority on its own cadence (most daily). "New" means new to the register, which closely tracks new registrations.

Local development

npm install
npm test
echo '{"localAuthorities":["Aberdeen City"],"businessTypeIds":[7846]}' > storage/key_value_stores/default/INPUT.json
npm start

Deploy

$npm i -g apify-cli && apify login && apify push

Data source & licensing

Data from the Food Standards Agency food hygiene rating scheme (ratings.food.gov.uk), published under the Open Government Licence v3.0.

Part of a small suite of UK public-register monitors, same publisher, same pattern (incremental, no duplicates, webhook-ready):


Changelog

  • 0.1 — Initial release: multi-authority, business-type filter, new-business
    • rating-change detection, first-run seeding, webhook, transient-error retry.