# UK Food Hygiene Ratings Scraper (`parseforge/fsa-uk-food-hygiene-ratings-scraper`) Actor

Export the UK's Food Hygiene Rating Scheme. 500k+ inspected food businesses across England, Wales, Scotland and Northern Ireland. Filter by name, council, business type, or rating. Pull address, hygiene/structural/management scores, geocodes, and last inspection date.

- **URL**: https://apify.com/parseforge/fsa-uk-food-hygiene-ratings-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Business, Travel, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $14.00 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🍴 UK Food Hygiene Ratings Scraper

> 🚀 **Export the official UK Food Hygiene Rating Scheme in seconds.** Filter **500,000+ inspected establishments** across England, Wales, Scotland and Northern Ireland by name, local authority, business type, or rating. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-22 · **📊 23 fields** per record · **🍽️ 500,000+ premises** · **🇬🇧 411 local authorities** · **⭐ 0-5 rating bands**

The **UK Food Hygiene Ratings Scraper** exports the Food Standards Agency's national hygiene register and returns **23 structured fields per record**, including the business identifier, type, address, postcode, latitude/longitude, three component scores, the headline rating, and the issuing local authority's contact details. The underlying register is the official UK regulatory record used by environmental health officers, delivery platforms, and consumer journalists.

The catalog covers **every inspected food business in England, Wales, Scotland and Northern Ireland, across 411 local authorities and dozens of business categories** from restaurants and takeaways to schools, hospitals, mobile caterers, manufacturers, and importers. This Actor delivers the data as CSV, Excel, JSON, or XML in under five minutes.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Food-delivery marketplaces, consumer journalists, local-government analysts, restaurant intelligence teams, public-health researchers, insurance underwriters | Marketplace eligibility screens, "score on the door" widgets, investigative reporting, council-by-council compliance dashboards, restaurant-risk underwriting |

---

### 📋 What the UK Food Hygiene Ratings Scraper does

Five filtering workflows in a single run:

- 🏪 **Business name filter.** Free-text partial match (e.g. `Tesco`, `KFC`, `Pizza Express`).
- 🏛️ **Local authority filter.** 411 council options, from Aberdeen to York.
- 🍽️ **Business type filter.** Restaurants, takeaways, schools, hospitals, manufacturers, retailers, mobile caterers, and more.
- ⭐ **Rating filter.** Pull only 5-star sites, or only 0/1-star problem premises.
- 🌐 **Multi-filter compound queries.** Combine name + council + rating to drill in.

Each record includes FHRS ID, business name and type, headline rating, three component scores (hygiene, structural, management confidence), last-inspection date, address, postcode, lat/lon, scheme type (FHRS for England/Wales/NI, FHIS for Scotland), the new-rating-pending flag, the right-to-reply text, and the issuing local authority's name, code, email, and website.

> 💡 **Why it matters:** food hygiene scores drive consumer trust, marketplace listings, insurance premiums, and local government enforcement. Building your own pipeline means handling pagination across 411 councils, two parallel scheme types (FHRS vs FHIS), and field naming drift. This Actor skips all of that.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded dataset._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td><code>maxItems</code></td><td>integer</td><td><code>10</code></td><td>Records to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
<tr><td><code>name</code></td><td>string</td><td><code>""</code></td><td>Business name. Partial match supported by the source.</td></tr>
<tr><td><code>localAuthorityId</code></td><td>string</td><td><code>"any"</code></td><td>411 council enum (e.g. <code>197</code> for Birmingham, <code>238</code> for Cardiff).</td></tr>
<tr><td><code>businessTypeId</code></td><td>string</td><td><code>"any"</code></td><td>Restaurant, takeaway, school, hospital, manufacturer, retailer, mobile caterer, etc.</td></tr>
<tr><td><code>ratingValue</code></td><td>string</td><td><code>"any"</code></td><td>FHRS 0-5, plus FHIS "Pass", "Improvement Required", "Awaiting Inspection".</td></tr>
</tbody>
</table>

**Example: every Tesco store in the country.**

```json
{
    "maxItems": 1000,
    "name": "Tesco"
}
````

**Example: 1-star takeaways in Birmingham.**

```json
{
    "maxItems": 200,
    "name": "",
    "localAuthorityId": "197",
    "businessTypeId": "7843",
    "ratingValue": "1"
}
```

> ⚠️ **Good to Know:** the headline rating (`ratingValue`) reflects the most recent inspection. The new-rating-pending flag tells you when a re-score is in the pipeline. Scottish premises use the FHIS scheme (Pass / Improvement Required), not the 0-5 FHRS scale; the `schemeType` field disambiguates.

***

### 📊 Output

Each premises record contains **23 fields**. Download the dataset as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🆔 `fhrsId` | number | `1234567` |
| 🏪 `businessName` | string | `"The Pizza Place"` |
| 🍽️ `businessType` | string | `"Restaurant/Cafe/Canteen"` |
| 🏷️ `businessTypeId` | number | `1` |
| ⭐ `ratingValue` | string | `"5"` |
| 🔑 `ratingKey` | string | `"fhrs_5_en-gb"` |
| 📋 `schemeType` | string | `"FHRS"` |
| 📅 `ratingDate` | string | `"2024-08-15"` |
| 📍 `address` | string | `"12 High Street, Manchester"` |
| 📮 `postCode` | string | `"M1 4AB"` |
| 📍 `latitude` | number | null | `53.4808` |
| 📍 `longitude` | number | null | `-2.2426` |
| 🧼 `hygieneScore` | number | null | `0` |
| 🏗️ `structuralScore` | number | null | `0` |
| 🛡️ `confidenceInManagementScore` | number | null | `0` |
| ⏳ `newRatingPending` | boolean | `false` |
| 💬 `rightToReply` | string | null | `""` |
| 🏛️ `localAuthorityName` | string | `"Manchester"` |
| 🏷️ `localAuthorityCode` | string | `"335"` |
| ✉️ `localAuthorityEmail` | string | null | `"foodsafety@manchester.gov.uk"` |
| 🌐 `localAuthorityWebsite` | string | null | `"https://www.manchester.gov.uk"` |
| 🕒 `scrapedAt` | ISO 8601 | `"2026-05-22T00:00:00.000Z"` |

#### 📦 Sample records

<details>
<summary><strong>⭐ Five-star Manchester restaurant</strong></summary>

```json
{
    "fhrsId": 1234567,
    "businessName": "The Pizza Place",
    "businessType": "Restaurant/Cafe/Canteen",
    "businessTypeId": 1,
    "ratingValue": "5",
    "ratingKey": "fhrs_5_en-gb",
    "schemeType": "FHRS",
    "ratingDate": "2024-08-15",
    "address": "12 High Street, Manchester",
    "postCode": "M1 4AB",
    "latitude": 53.4808,
    "longitude": -2.2426,
    "hygieneScore": 0,
    "structuralScore": 0,
    "confidenceInManagementScore": 0,
    "newRatingPending": false,
    "localAuthorityName": "Manchester",
    "localAuthorityCode": "335",
    "localAuthorityEmail": "foodsafety@manchester.gov.uk",
    "localAuthorityWebsite": "https://www.manchester.gov.uk",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>⚠️ Zero-star Birmingham takeaway</strong></summary>

```json
{
    "fhrsId": 7654321,
    "businessName": "Spicy Express",
    "businessType": "Takeaway/sandwich shop",
    "ratingValue": "0",
    "schemeType": "FHRS",
    "ratingDate": "2024-11-02",
    "address": "45 Broad Street, Birmingham",
    "postCode": "B1 2HF",
    "hygieneScore": 20,
    "structuralScore": 20,
    "confidenceInManagementScore": 30,
    "newRatingPending": true,
    "localAuthorityName": "Birmingham",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🏴󠁧󠁢󠁳󠁣󠁴󠁿 Scottish FHIS-scheme cafe (Edinburgh)</strong></summary>

```json
{
    "fhrsId": 8888888,
    "businessName": "Royal Mile Cafe",
    "businessType": "Restaurant/Cafe/Canteen",
    "ratingValue": "Pass",
    "schemeType": "FHIS",
    "ratingDate": "2024-09-20",
    "address": "200 Royal Mile, Edinburgh",
    "postCode": "EH1 1RE",
    "localAuthorityName": "Edinburgh, City of",
    "scrapedAt": "2026-05-22T00:00:00.000Z"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🇬🇧 | **Nationwide coverage.** Every inspected food business in the UK, across 411 councils. |
| ⭐ | **Headline + component scores.** Rating, hygiene, structural, and management confidence in one row. |
| 🗺️ | **Geocoded.** Latitude and longitude on the majority of premises for direct map plotting. |
| ⚡ | **Fast.** 10 records in under 5 seconds, 10,000 records in roughly a minute. |
| 🏛️ | **Council contact info.** Email and website of the responsible authority for follow-up. |
| 🔁 | **Always fresh.** Every run pulls the latest published register. |
| 🚫 | **No authentication.** Public open government data, no token required. |

> 📊 Accurate food hygiene scores power every delivery marketplace eligibility check, council enforcement dashboard, and consumer trust badge in the UK.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ UK Food Hygiene Ratings Scraper** *(this Actor)* | $5 free credit, then pay-per-use | **500,000+** premises | **Live per run** | name, council, type, rating | ⚡ 2 min |
| Manual FSA portal browsing | Free | Single-record only | Live | UI filters | 🐢 Hours |
| Commercial food-safety data feeds | $5,000+/year | Multi-source | Daily | Many | ⏳ Weeks |
| Council "score on the door" stickers | Free | One premises | Per visit | None | 🕒 Manual |

Pick this Actor when you want filterable bulk export with geocodes and council contact info.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the UK Food Hygiene Ratings Scraper page on the Apify Store.
3. 🎯 **Set input.** Pick a council, business type, or rating threshold, and set `maxItems`.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 🛵 Food Delivery Marketplaces

- Onboarding eligibility checks ("must be 3-star or better")
- "Hygiene rating" badge on restaurant tiles
- Council-level dashboards for rider managers
- Watchlists for premises that drop to 0 or 1 star

</td>
<td width="50%" valign="top">

#### 📰 Consumer Journalism

- League tables of worst-rated chains
- Investigative pieces on council enforcement gaps
- Interactive map widgets for online stories
- Hyperlocal "your area's worst" features

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 🏛️ Local Government

- Cross-authority benchmarking dashboards
- Re-inspection backlog visibility
- Public-facing open-data portals
- Right-to-reply backlog tracking

</td>
<td width="50%" valign="top">

#### 🏢 Restaurant Intelligence

- Competitor hygiene benchmarking
- Multi-site brand quality monitoring
- Pre-acquisition due diligence on chains
- Underwriting inputs for restaurant insurance

</td>
</tr>
</table>

***

### 🔌 Automating UK Food Hygiene Ratings Scraper

Control the scraper programmatically for scheduled runs and pipeline integrations:

- 🟢 **Node.js.** Install the `apify-client` NPM package.
- 🐍 **Python.** Use the `apify-client` PyPI package.
- 📚 See the [Apify API documentation](https://docs.apify.com/api/v2) for full details.

The [Apify Schedules feature](https://docs.apify.com/platform/schedules) lets you trigger this Actor on any cron interval. Weekly refreshes keep downstream eligibility caches in sync automatically.

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Public-health studies of inspection outcomes
- Urban-geography theses on food-desert overlays
- Policy reviews of UK food regulation
- Open-data exercises with real government datasets

</td>
<td width="50%">

#### 🎨 Personal and creative

- Hobbyist "what's safe near me?" map mashups
- Foodie travel-planning spreadsheets
- Side-project apps for local communities
- Portfolio data-viz demos

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Consumer-advocacy reports on food safety
- Tenant-and-residents-association watchlists
- Civic transparency dashboards
- Open contributions to OpenStreetMap food-venue tagging

</td>
<td width="50%">

#### 🧪 Experimentation

- Train rating-prediction ML toy models
- Validate restaurant-discovery product hypotheses
- Prototype agent pipelines that monitor a portfolio
- Test dashboard concepts with real public data

</td>
</tr>
</table>

***

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20UK%20Food%20Hygiene%20Ratings%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20UK%20Food%20Hygiene%20Ratings%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20UK%20Food%20Hygiene%20Ratings%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20UK%20Food%20Hygiene%20Ratings%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

***

### ❓ Frequently Asked Questions

#### 🧩 How does it work?

Pick a council, business type, or rating filter, click Start, and the Actor pulls premises records from the Food Standards Agency's national register. No browser automation, no captchas, no setup.

#### 📏 How fresh is the data?

The register updates as councils submit new inspections (typically daily). Every run of this Actor fetches the latest published data.

#### 🔁 Does it cover Scotland?

Yes. Scotland uses the parallel FHIS scheme (Pass / Improvement Required / Awaiting Inspection) instead of 0-5 stars. The `schemeType` field tells you which scale a record uses.

#### 🗺️ Are lat/lon coordinates always present?

Most records have coordinates. A small minority (typically mobile caterers, temporary premises, or recently added sites) ship without them.

#### ⏰ Can I schedule regular runs?

Yes. Use Apify Schedules to run this Actor on any cron interval and keep a downstream eligibility cache in sync.

#### ⚖️ Is this data legal to use?

Yes. The register is published as UK open government data under the Open Government Licence.

#### 💼 Can I use this data commercially?

Yes. Open Government Licence terms permit commercial use with attribution.

#### 💳 Do I need a paid Apify plan?

No. The free plan is enough for testing and small runs (10 records per run). A paid plan lifts the limit and enables scheduling, higher concurrency, and larger datasets.

#### 🔁 What happens if a run fails?

Apify retries transient errors automatically. Inspect the log in the Runs tab, adjust the input, and re-run. Partial datasets are preserved.

#### 🍽️ How do business type IDs work?

The source assigns numeric IDs to each business category. Common ones: `1` Restaurant/Cafe, `7843` Takeaway, `7838` Mobile Caterer, `4613` Manufacturer/Packer. The schema enumerates them all.

#### 🆘 What if I need help?

Our support team is here to help. Contact us through the Apify platform or the Tally form linked below.

***

### 🔌 Integrate with any app

UK Food Hygiene Ratings Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get rating-drop alerts in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe hygiene data into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes. Push fresh hygiene scores into your marketplace backend, or alert your team in Slack when a brand drops below 3 stars.

***

### 🔗 Recommended Actors

- [**🗺️ Nominatim OSM Scraper**](https://apify.com/parseforge/nominatim-osm-scraper) - Geocode addresses via OpenStreetMap
- [**📮 Postal Code Lookup Scraper**](https://apify.com/parseforge/zippopotam-postal-lookup-scraper) - Postal code to lat/lon resolution
- [**🏢 Spain Empresia Scraper**](https://apify.com/parseforge/spain-empresia-scraper) - Spanish company registry data
- [**📜 Florida MQA Scraper**](https://apify.com/parseforge/florida-mqa-scraper) - Florida licensed health practitioners
- [**🏛️ Cemetery Records Scraper**](https://apify.com/parseforge/cemetery-records-scraper) - U.S. cemetery and burial records

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue.

***

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the UK Food Standards Agency, any local authority, or any rated business. All trademarks mentioned are the property of their respective owners. Only publicly available UK Open Government Licence data is collected.

# Actor input Schema

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Filter by business name (free text, partial match supported by the source). Examples: 'Tesco', 'Pizza Express', 'KFC'.

## `localAuthorityId` (type: `string`):

Filter by issuing local authority (council). Pick 'any' to scan without an authority filter — note the source requires at least one filter so use this with a business name or business type.

## `businessTypeId` (type: `string`):

Filter by business category.

## `ratingKey` (type: `string`):

Filter by hygiene rating. England, Wales & Northern Ireland use 0-5. Scotland uses Pass / Improvement Required / Awaiting Inspection / Exempt.

## Actor input object example

```json
{
  "maxItems": 10,
  "localAuthorityId": "any",
  "businessTypeId": "any",
  "ratingKey": "any"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "maxItems": 10,
    "localAuthorityId": "any",
    "businessTypeId": "any",
    "ratingKey": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/fsa-uk-food-hygiene-ratings-scraper").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 = {
    "maxItems": 10,
    "localAuthorityId": "any",
    "businessTypeId": "any",
    "ratingKey": "any",
}

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

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "localAuthorityId": "any",
  "businessTypeId": "any",
  "ratingKey": "any"
}' |
apify call parseforge/fsa-uk-food-hygiene-ratings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/fsa-uk-food-hygiene-ratings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "UK Food Hygiene Ratings Scraper",
        "description": "Export the UK's Food Hygiene Rating Scheme. 500k+ inspected food businesses across England, Wales, Scotland and Northern Ireland. Filter by name, council, business type, or rating. Pull address, hygiene/structural/management scores, geocodes, and last inspection date.",
        "version": "1.0",
        "x-build-id": "sgfWzQ36LfDDuBnyK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~fsa-uk-food-hygiene-ratings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-fsa-uk-food-hygiene-ratings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~fsa-uk-food-hygiene-ratings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-fsa-uk-food-hygiene-ratings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~fsa-uk-food-hygiene-ratings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-fsa-uk-food-hygiene-ratings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "name": {
                        "title": "Business Name",
                        "type": "string",
                        "description": "Filter by business name (free text, partial match supported by the source). Examples: 'Tesco', 'Pizza Express', 'KFC'."
                    },
                    "localAuthorityId": {
                        "title": "Local Authority",
                        "enum": [
                            "any",
                            "197",
                            "198",
                            "277",
                            "48",
                            "334",
                            "199",
                            "132",
                            "133",
                            "200",
                            "134",
                            "278",
                            "77",
                            "249",
                            "35",
                            "88",
                            "89",
                            "392",
                            "6",
                            "238",
                            "78",
                            "326",
                            "42",
                            "138",
                            "90",
                            "374",
                            "56",
                            "195",
                            "196",
                            "335",
                            "49",
                            "176",
                            "63",
                            "328",
                            "289",
                            "393",
                            "7",
                            "28",
                            "91",
                            "8",
                            "336",
                            "286",
                            "324",
                            "29",
                            "92",
                            "355",
                            "18",
                            "79",
                            "229",
                            "164",
                            "177",
                            "338",
                            "394",
                            "1",
                            "93",
                            "361",
                            "250",
                            "339",
                            "341",
                            "9",
                            "136",
                            "43",
                            "340",
                            "57",
                            "10",
                            "310",
                            "261",
                            "191",
                            "192",
                            "50",
                            "279",
                            "165",
                            "95",
                            "205",
                            "11",
                            "228",
                            "333",
                            "322",
                            "311",
                            "375",
                            "280",
                            "94",
                            "158",
                            "19",
                            "131",
                            "251",
                            "342",
                            "84",
                            "55",
                            "144",
                            "395",
                            "305",
                            "252",
                            "376",
                            "207",
                            "209",
                            "126",
                            "96",
                            "201",
                            "2",
                            "296",
                            "208",
                            "239",
                            "20",
                            "64",
                            "218",
                            "224",
                            "402",
                            "362",
                            "40",
                            "233",
                            "240",
                            "210",
                            "266",
                            "97",
                            "12",
                            "267",
                            "51",
                            "297",
                            "211",
                            "241",
                            "3",
                            "147",
                            "212",
                            "343",
                            "256",
                            "312",
                            "166",
                            "121",
                            "80",
                            "213",
                            "313",
                            "242",
                            "253",
                            "30",
                            "98",
                            "268",
                            "337",
                            "99",
                            "193",
                            "100",
                            "58",
                            "101",
                            "13",
                            "102",
                            "243",
                            "128",
                            "234",
                            "244",
                            "103",
                            "383",
                            "21",
                            "52",
                            "214",
                            "104",
                            "59",
                            "281",
                            "105",
                            "409",
                            "405",
                            "4",
                            "167",
                            "215",
                            "37",
                            "284",
                            "321",
                            "106",
                            "107",
                            "31",
                            "108",
                            "396",
                            "178",
                            "109",
                            "168",
                            "397",
                            "85",
                            "235",
                            "110",
                            "363",
                            "65",
                            "140",
                            "179",
                            "44",
                            "254",
                            "14",
                            "356",
                            "180",
                            "81",
                            "295",
                            "60",
                            "344",
                            "111",
                            "135",
                            "298",
                            "38",
                            "282",
                            "142",
                            "401",
                            "220",
                            "285",
                            "269",
                            "345",
                            "221",
                            "346",
                            "245",
                            "82",
                            "122",
                            "364",
                            "112",
                            "347",
                            "145",
                            "202",
                            "299",
                            "53",
                            "404",
                            "22",
                            "66",
                            "216",
                            "403",
                            "32",
                            "70",
                            "327",
                            "123",
                            "369",
                            "61",
                            "385",
                            "127",
                            "33",
                            "87",
                            "370",
                            "62",
                            "181",
                            "222",
                            "262",
                            "348",
                            "169",
                            "223",
                            "45",
                            "331",
                            "287",
                            "349",
                            "170",
                            "291",
                            "113",
                            "129",
                            "357",
                            "270",
                            "225",
                            "350",
                            "171",
                            "114",
                            "408",
                            "182",
                            "15",
                            "172",
                            "236",
                            "398",
                            "371",
                            "271",
                            "83",
                            "246",
                            "86",
                            "184",
                            "377",
                            "204",
                            "185",
                            "255",
                            "399",
                            "226",
                            "381",
                            "292",
                            "378",
                            "316",
                            "203",
                            "5",
                            "54",
                            "325",
                            "300",
                            "67",
                            "68",
                            "217",
                            "34",
                            "263",
                            "173",
                            "365",
                            "124",
                            "288",
                            "46",
                            "115",
                            "272",
                            "23",
                            "183",
                            "366",
                            "367",
                            "24",
                            "227",
                            "186",
                            "130",
                            "382",
                            "372",
                            "314",
                            "125",
                            "273",
                            "116",
                            "257",
                            "351",
                            "330",
                            "187",
                            "368",
                            "274",
                            "301",
                            "384",
                            "16",
                            "247",
                            "315",
                            "258",
                            "25",
                            "47",
                            "259",
                            "332",
                            "352",
                            "302",
                            "117",
                            "188",
                            "260",
                            "17",
                            "353",
                            "264",
                            "400",
                            "379",
                            "118",
                            "119",
                            "194",
                            "373",
                            "26",
                            "275",
                            "237",
                            "27",
                            "290",
                            "303",
                            "206",
                            "174",
                            "69",
                            "219",
                            "71",
                            "265",
                            "36",
                            "120",
                            "159",
                            "189",
                            "323",
                            "248",
                            "293",
                            "190",
                            "276",
                            "294",
                            "380",
                            "358",
                            "283",
                            "354",
                            "359",
                            "175",
                            "360",
                            "406"
                        ],
                        "type": "string",
                        "description": "Filter by issuing local authority (council). Pick 'any' to scan without an authority filter — note the source requires at least one filter so use this with a business name or business type."
                    },
                    "businessTypeId": {
                        "title": "Business Type",
                        "enum": [
                            "any",
                            "7",
                            "7838",
                            "5",
                            "7842",
                            "14",
                            "7839",
                            "7846",
                            "7841",
                            "7843",
                            "1",
                            "4613",
                            "7840",
                            "7845",
                            "7844"
                        ],
                        "type": "string",
                        "description": "Filter by business category."
                    },
                    "ratingKey": {
                        "title": "Hygiene Rating",
                        "enum": [
                            "any",
                            "fhrs_0_en-gb",
                            "fhrs_1_en-gb",
                            "fhrs_2_en-gb",
                            "fhrs_3_en-gb",
                            "fhrs_4_en-gb",
                            "fhrs_5_en-gb",
                            "fhrs_awaitinginspection_en-gb",
                            "fhrs_exempt_en-gb",
                            "fhis_pass_en-gb",
                            "fhis_improvementrequired_en-gb",
                            "fhis_awaitinginspection_en-gb",
                            "fhis_exempt_en-gb"
                        ],
                        "type": "string",
                        "description": "Filter by hygiene rating. England, Wales & Northern Ireland use 0-5. Scotland uses Pass / Improvement Required / Awaiting Inspection / Exempt."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
