# UK Food Hygiene Ratings Scraper: FSA & New Restaurant Leads (`seaf999ield/uk-food-hygiene-ratings`) Actor

UK food hygiene ratings from the official FSA ratings API: search restaurants and takeaways by council, postcode or rating, with new-business leads and rating alerts, by RawTrader | UK Industry & Bills: https://ukindustryandbills.substack.com · X: x.com/ImRawTrader

- **URL**: https://apify.com/seaf999ield/uk-food-hygiene-ratings.md
- **Developed by:** [RustonRoad](https://apify.com/seaf999ield) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Food Hygiene Ratings Scraper: FSA & New Restaurant Leads

**Search official FSA food hygiene ratings across the UK and get leads for newly registered restaurants, takeaways and cafés.**

### Who it's for

- Suppliers (food, drink, EPOS, cleaning, insurance) selling to new restaurants
- Delivery platforms and local directories finding new venues
- Journalists and councils tracking low or changed hygiene ratings

### Sample output

| businessName | businessType | postcode | localAuthority | ratingValue |
|---|---|---|---|---|
| Usman Halal Meat | Retailers - other | E12 5JR | Newham | 1 |
| Bargain World | Retailers - other | E6 1HZ | Newham | 2 |
| Jay's General Stores | Retailers - other | E16 3HX | Newham | 1 |

*Real rows from a test run (shortened; the full output has more fields).*

### Price per 1,000 results

Main event: **`establishment-row` at $0.002 each**, so **1,000 results = $2.00**. Other events: `new-business-lead` $0.005, `rating-change` $0.01 each (only charged when that row type is output). See the Pricing tab for the current prices.

### Input example

```json
{
  "mode": "search",
  "localAuthorities": [
    "Westminster"
  ],
  "maxResults": 50
}
```

**Search every UK food business in the official Food Standards Agency (FSA) Food Hygiene Rating Scheme, and get a feed of newly opened restaurants, takeaways and cafés.** Filter by **council**, **postcode radius**, **business type**, **hygiene rating** or **name**. The actor also outputs **new-business leads** (newly listed, or newly *awaiting inspection*) and **rating-change alerts** for the premises you watch. Official FSA API, no key, no scraping.

| Mode | What you get |
|---|---|
| 🔎 **search** | Establishments by council, postcode and radius, type, rating range (0-5) or name, with address, postcode, rating and rating date, inspection sub-scores and coordinates |
| 🆕 **new_businesses** | Since your last run: **newly listed** food businesses and businesses that are **newly awaiting inspection**, usually new openings and changes of ownership. These are fresh sales leads |
| 🔔 **rating_changes** | Alerts when a watched establishment's rating changes, with **old and new rating**, the dates and up/down direction |

**Free weekly newsletter**, UK Industry & Bills: https://ukindustryandbills.substack.com

### What you get

- Every UK food business in the FSA Food Hygiene Rating Scheme: name, type, address, postcode, council, rating, rating date, inspection sub-scores and coordinates
- **New-business leads**: restaurants, takeaways and cafés that were newly listed or are newly awaiting their first inspection
- **Rating-change alerts** for the premises you watch, with old and new rating
- Filters by council, postcode radius, business type, rating range and name
- Export to CSV, Excel or JSON, or feed a CRM through the Apify API, Make or Zapier

### Who uses it

- **Suppliers to restaurants and takeaways:** food and drink wholesalers, EPOS and card terminals, delivery platforms, packaging, waste, pest control, insurance, signage and recruitment. Reach new openings first.
- **Food safety consultants and trainers:** premises rated 0-2, and new businesses awaiting their first inspection.
- **Landlords, investors, franchise and brand owners:** monitor the hygiene ratings of your sites, tenants or franchisees.
- **Delivery apps, review sites and journalists:** bulk ratings data by area.

### Input

| Field | Example | Notes |
|---|---|---|
| Mode | `search` | or `new_businesses`, `rating_changes` |
| Local authorities | `["Westminster","Camden"]` | Council names or FSA IDs |
| Postcode + radius | `SW1A 1AA`, `1` | Miles |
| Business types | `["restaurant","takeaway"]` | Also pub, hotel, mobile caterer, supermarket, retailer, school, hospital |
| Name contains | `pizza` | |
| Min / max rating | `0` / `2` | 0-5 (FHRS) |
| Only awaiting inspection | `true` | |
| Watched FHRS IDs | `["1898711"]` | rating_changes mode |
| Monitor name | `london-leads` | Separate saved state per name |
| Max results | `50` | 0 = no limit |

**Example: a weekly lead feed of new restaurants and takeaways in Manchester**

```json
{ "mode": "new_businesses", "localAuthorities": ["Manchester"], "businessTypes": ["restaurant","takeaway"], "monitorName": "manchester" }
```

#### Example output (real sample)

| recordType | businessName | businessType | postcode | localAuthority | ratingValue |
|---|---|---|---|---|---|
| newBusiness | 10 Dining Street | Restaurant/Cafe/Canteen | LE15 6BA | Rutland | 5 |
| newBusiness | A Simpler Life | Retailers - other | LE15 9QB | Rutland | 5 |
| newBusiness | All You Can Treat | Retailers - other | LE15 | Rutland | AwaitingInspection |

### Output (new business lead)

```json
{
  "recordType": "newBusiness",
  "leadReason": "newly_listed",
  "fhrsId": 1153550,
  "businessName": "10 Dining Street",
  "businessType": "Restaurant/Cafe/Canteen",
  "address": "8 New Street, Oakham",
  "postcode": "LE15 6BA",
  "localAuthority": "Rutland",
  "ratingValue": "5",
  "ratingDate": "2025-03-05",
  "fsaUrl": "https://ratings.food.gov.uk/business/1153550"
}
```

### Pricing (pay per event)

**In plain words:** **$2 per 1,000 establishments** in search mode, **$5 per 1,000 new-business leads**, and **$10 per 1,000 rating-change alerts**. A weekly new-openings feed for one city usually costs well under $1.

| Event | Price |
|---|---|
| `establishment-row`: each search result | $0.002 |
| `new-business-lead`: each new-business lead | $0.005 |
| `rating-change`: each rating-change alert | $0.01 |

The first run of a monitor saves a baseline and is not charged per row.

### Notes

- Scotland uses FHIS (Pass / Improvement Required) instead of 0-5. Those values are kept as published.
- The FSA withholds addresses for some premises, such as home-based businesses. We output what the FSA publishes, and no more.
- Requests are paced to respect the FSA API.

### FAQ

**Where does the data come from?** The official Food Standards Agency (FSA) ratings API, the same data as ratings.food.gov.uk.

**How do I get new restaurant leads?** Run **new_businesses** mode on a schedule (e.g. weekly) for your councils and business types. The first run saves a baseline and later runs return only new openings.

**Does it cover Scotland?** Yes. Scotland uses FHIS (Pass / Improvement Required) instead of 0–5, and values are kept as published.

**Do I need an API key?** No.

**Is it legal to use?** Yes. FSA data is published under the Open Government Licence v3.0.

*Contains public sector information from the Food Standards Agency, licensed under the Open Government Licence v3.0.*

### Related UK data actors

- [UK Companies House Scraper: New Companies & Insolvency Alerts](https://apify.com/seaf999ield/uk-companies-house-feed)
- [UK Planning Applications Scraper: London & Idox Councils](https://apify.com/seaf999ield/uk-planning-applications)
- [UK Product Recalls Scraper: OPSS, FSA & MHRA Safety Alerts](https://apify.com/seaf999ield/uk-product-safety-recalls)

### About RawTrader | UK Industry & Bills

RawTrader | UK Industry & Bills is a UK newsletter and open data project tracking energy bills, fuel prices, public tenders, company closures and FCA short positions, using official data from Ofgem, DESNZ, ONS, Companies House, Find a Tender and the FCA.

- [RawTrader Data: every UK data tool in one place](https://imrawtrader.beehiiv.com/p/data)
- [UK Industry & Bills newsletter](https://imrawtrader.beehiiv.com)
- [Follow @ImRawTrader on X](https://x.com/ImRawTrader)

# Actor input Schema

## `mode` (type: `string`):

new_businesses and rating_changes keep a snapshot in a named key-value store per monitor; the first run saves a baseline.

## `localAuthorities` (type: `array`):

Council names (e.g. 'Westminster', 'Manchester', 'Bristol') or FSA LocalAuthorityId numbers.

## `postcode` (type: `string`):

Centre of a radius search, e.g. 'SW1A 1AA' (geocoded with postcodes.io).

## `radiusMiles` (type: `number`):

Radius around the postcode.

## `businessTypes` (type: `array`):

e.g. restaurant, takeaway, pub, hotel, mobile caterer, other catering, supermarket, retailer, school, hospital, manufacturer. Leave empty for all.

## `name` (type: `string`):

Name search, e.g. 'pizza'.

## `minRating` (type: `integer`):

FHRS numeric rating filter (England, Wales, NI). Excludes non-numeric ratings.

## `maxRating` (type: `integer`):

e.g. 2 to find poorly rated premises.

## `awaitingOnly` (type: `boolean`):

Only establishments awaiting their first inspection (usually new businesses).

## `fhrsIds` (type: `array`):

rating_changes: FHRSID numbers to watch. If empty, the scope above (councils / postcode / types) is watched.

## `monitorName` (type: `string`):

Separate saved snapshot per name.

## `maxResults` (type: `integer`):

Maximum records per run. 0 = no limit.

## Actor input object example

```json
{
  "mode": "search",
  "localAuthorities": [
    "Westminster"
  ],
  "radiusMiles": 1,
  "awaitingOnly": false,
  "monitorName": "default",
  "maxResults": 50
}
```

# Actor output Schema

## `establishments` (type: `string`):

search mode.

## `leads` (type: `string`):

new_businesses mode.

## `changes` (type: `string`):

rating_changes mode.

## `runSummary` (type: `string`):

Counts and API requests.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "localAuthorities": [
        "Westminster"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("seaf999ield/uk-food-hygiene-ratings").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "localAuthorities": ["Westminster"],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("seaf999ield/uk-food-hygiene-ratings").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "localAuthorities": [
    "Westminster"
  ],
  "maxResults": 50
}' |
apify call seaf999ield/uk-food-hygiene-ratings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seaf999ield/uk-food-hygiene-ratings"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IBwr1AS16vKqpbk9w/builds/e7ucCDNNUqhTCJaLI/openapi.json
