UK Restaurant & Hospitality Territory Monitor avatar

UK Restaurant & Hospitality Territory Monitor

Under maintenance

Pricing

from $10.00 / 1,000 business records

Go to Apify Store
UK Restaurant & Hospitality Territory Monitor

UK Restaurant & Hospitality Territory Monitor

Under maintenance

Find and monitor UK restaurants, cafés, pubs, bars and takeaways by council and postcode district. Export FSA/FHRS names, addresses, ratings, inspection dates and coordinates. Schedule repeat runs to return only newly seen or changed businesses for sales territories, market research and alerts.

Pricing

from $10.00 / 1,000 business records

Rating

0.0

(0)

Developer

Chris Hopkin

Chris Hopkin

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Build a clean UK restaurant and hospitality business list for the councils and postcode districts you serve. Export official Food Standards Agency (FSA/FHRS) business data, then run the Actor again to return only businesses that are newly seen or whose published details have changed.

Use it for hospitality lead research, sales territory planning, local market analysis, rating-change alerts, and repeatable food-business monitoring. Choose your area, run without a source API key, and download the results as CSV, Excel, or JSON.

What can you do with this Actor?

  • Map a sales territory: list restaurants, cafés, pubs, bars, takeaways, hotels, or mobile caterers in up to 10 council areas.
  • Narrow the area precisely: include outward postcode districts such as M1, M2, or BS1 without accidentally matching M10.
  • Build a trustworthy baseline: capture the businesses currently published by the official FSA API.
  • Monitor changes automatically: schedule later runs with the same filters to return only newly seen or changed records.
  • See the evidence: every changed result includes changedFields, previousValues, and the official FSA record link.
  • Feed your workflow: export to spreadsheets or connect the dataset to webhooks, Make, Zapier, n8n, Slack, or another Apify integration.

No proxy, browser, or separate FSA API key is required.

Who is it for?

UserPractical use
Coffee roasters and food wholesalersBuild café, restaurant, pub, and takeaway prospect lists by delivery area.
Catering-equipment and fit-out suppliersMap hospitality businesses around a showroom, depot, or sales representative.
Cleaning, pest-control, and compliance providersMonitor published rating changes and prioritize follow-up research.
Agencies and local publishersMaintain structured hospitality directories and local-market datasets.
Property and market researchersCompare the hospitality mix across councils and postcode districts.
Multi-site operatorsWatch selected territories for newly observed businesses and changes to existing records.

Quick start: Manchester city centre

Paste this into the Actor input and click Start:

{
"localAuthorities": ["Manchester"],
"businessTypeIds": [1, 7843, 7844],
"postcodeDistricts": ["M1"],
"excludeNameContains": [],
"resetBaseline": false,
"maxRecords": 10000
}

The first successful run returns a baseline of matching restaurants/cafés, pubs/bars, and takeaways. Run the same input later and the dataset contains only records that are newly seen or changed since the last successful snapshot.

More input examples

Monitor several council areas

Useful for a supplier or sales team covering a wider territory:

{
"localAuthorities": ["Manchester", "Salford", "Trafford"],
"businessTypeIds": [1, 7843, 7844],
"postcodeDistricts": [],
"excludeNameContains": [],
"maxRecords": 20000
}

Focus on selected postcode districts

{
"localAuthorities": ["Bristol"],
"businessTypeIds": [1, 7843],
"postcodeDistricts": ["BS1", "BS2", "BS3"],
"excludeNameContains": [],
"maxRecords": 10000
}

Apply your own name exclusions

{
"localAuthorities": ["Manchester"],
"businessTypeIds": [1],
"postcodeDistricts": ["M1", "M2"],
"excludeNameContains": ["costa", "starbucks"],
"maxRecords": 10000
}

Name exclusions are simple text filters supplied by you. They do not prove that the remaining businesses are independent or identify business ownership.

What data do you get?

Each returned record includes:

FieldExample or meaning
changeTypebaseline, newly_seen, or changed
businessNamePublished trading name
businessType / businessTypeIdRestaurant/Cafe/Canteen, Pub/bar/nightclub, Takeaway, and other FSA types
address, postcode, postcodeDistrictPublished location and exact outward postcode
localAuthorityFSA council name
rating, scheme, ratingDatePublished hygiene rating, scheme, and inspection date when available
newRatingPendingWhether the FSA record says a new rating is pending
latitude, longitudePublished coordinates when available
changedFieldsFields that differ from the previous successful snapshot
previousValues, previousRatingEvidence of the earlier published values
observedAtWhen this Actor observed the record
sourceUrlDirect link to the official FSA business record
signalNotePlain-language guidance on what the signal does and does not establish

Example output:

{
"fhrsId": "1234567",
"businessName": "Example Cafe",
"businessType": "Restaurant/Cafe/Canteen",
"businessTypeId": 1,
"address": "10 Example Street",
"postcode": "M1 1AA",
"postcodeDistrict": "M1",
"localAuthority": "Manchester",
"rating": "5",
"ratingDate": "2026-08-20",
"changeType": "changed",
"changedFields": ["rating"],
"previousValues": { "rating": "3" },
"previousRating": "3",
"observedAt": "2026-09-08T12:00:00.000Z",
"sourceUrl": "https://ratings.food.gov.uk/business/1234567"
}

The example is illustrative. Actual fields come from the official source and may be empty when the FSA does not publish a value.

How change monitoring works

  1. The first successful run saves a complete baseline for the exact territory filters.
  2. A later run collects the same territory again and compares it with that saved snapshot.
  3. Unchanged businesses are omitted.
  4. Newly seen and changed records are returned with comparison evidence.
  5. The saved baseline advances only after the complete scan and output succeed.

Use an Apify schedule to run daily, weekly, or monthly. Keep the territory filters identical between comparison runs and avoid overlapping runs for the same territory. To start again, set resetBaseline to true for one run.

What the signals mean

SignalMeaning
baselinePresent on the first scan. This is an existing record, not a new-opening lead.
newly_seenAbsent from the saved snapshot and present now. It may be an opening, delayed publication, or a record entering the selected filters.
changedOne or more tracked fields changed. Inspect changedFields and previousValues for the evidence.

newly_seen is not a verified opening or registration date. A changed name does not establish new ownership, and a missing record is not labelled closed. FSA publication can lag real-world events.

Filters and business-type IDs

  • localAuthorities: 1–10 exact FSA council names. Use the official council directory.
  • businessTypeIds: defaults to restaurants/cafés (1), pubs/bars (7843), and takeaways (7844). Other useful IDs include hotels (7842) and mobile caterers (7846). An empty list includes all published business types.
  • postcodeDistricts: exact outward codes such as M1 or BS1. Empty includes all postcodes within the selected councils.
  • excludeNameContains: optional case-insensitive name fragments.
  • maxRecords: safety cap applied before postcode and name filtering; 10,000 by default and 50,000 maximum.
  • resetBaseline: exports all current matches and replaces the saved baseline for that exact territory.

If the source territory exceeds maxRecords, the run fails instead of returning and saving a misleading partial snapshot.

Export and integrations

Results are stored in the default Apify dataset. You can:

  • Download CSV, Excel, JSON, XML, RSS, or JSONL from the run page.
  • Connect a Google Sheet or downstream database.
  • Trigger a webhook when a scheduled run finishes.
  • Send newly seen or changed records to Make, Zapier, n8n, Slack, or your own application.
  • Run the Actor through Apify API, CLI, JavaScript, Python, or MCP integrations.

API example:

curl -X POST \
"https://api.apify.com/v2/acts/dig_stays~uk-hospitality-territory-monitor/runs?waitForFinish=300" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"localAuthorities": ["Manchester"],
"businessTypeIds": [1, 7843, 7844],
"postcodeDistricts": ["M1"]
}'

Pricing

The Actor costs $0.01 per returned business record, plus Apify platform usage.

Returned recordsEvent charge
100$1.00
500$5.00
1,000$10.00

A baseline run charges for every matching record it returns. Later runs with unchanged filters charge the event fee only for returned changes. A no-change run has no business-record fee, although platform usage still applies.

The Actor checks the run's maximum-charge limit before writing results. If the limit cannot cover the complete output, it fails without charging for or saving partial results.

Frequently asked questions

Does this find newly opened restaurants?

It finds businesses that are newly present in the official dataset compared with your saved snapshot. That is a useful research signal, but it is not proof of an opening date. Confirm promising leads independently before outreach or publication.

Does it include business emails, phone numbers, or owner names?

No. The Actor returns the public FSA fields listed above. It does not guess contacts, identify owners, or present council contact details as business contacts.

Which parts of the UK are covered?

The FSA/FHRS service covers England, Wales, and Northern Ireland. Scotland operates a separate food-hygiene information service and is not included by this Actor.

Why did a repeat run return zero results?

That normally means none of the tracked fields changed since the last successful run for those filters. Check SUMMARY in the run's key-value store for scanned, matched, and emitted counts.

Can I change the territory later?

Yes. Every exact combination of councils, business types, postcode districts, and exclusions has its own saved comparison state. Use resetBaseline: true when you intentionally want to replace the baseline.

What happens if the FSA API changes during a scan?

The Actor detects inconsistent totals, duplicate records, incomplete pagination, request failures, and source-scan caps. It fails rather than saving a snapshot it knows is incomplete. The upstream API is not transactionally frozen, so an equal-count swap during pagination cannot always be detected.

Storage and reliability

The default dataset contains the returned baseline or changes. SUMMARY reports scan counts and comparison mode. SNAPSHOT stores the complete snapshot for that run, while the named key-value store uk-hospitality-territory-monitor-state-v1 keeps the latest successful state for each exact territory.

Bounded retries handle temporary source failures. A failed scan never replaces the saved comparison state.

Data source and licence

Data comes from the Food Standards Agency ratings service through the official v2 API. It contains public-sector information licensed under the Open Government Licence v3.0.

This Actor is not affiliated with or endorsed by the FSA. Published hygiene ratings are historical inspection results and should not be presented as a real-time safety determination.

Support and feature requests

Use the public Issues tab for questions, bug reports, or feature requests. Include the run ID and the council filters you used so the problem can be reproduced quickly. Do not post API tokens or private data.