Proxy tier benchmark › Targets
Do you need a proxy to scrape UK food hygiene ratings?
Control targets · minimum viable tier: no proxy needed · measured 2026-08-18
No, and scraping it is the wrong tool. The Food Standards Agency's business rating page returned the expected content on 10 of 10 unproxied requests (100%) and on every datacenter and anti-detect configuration; only the residential arm lost ground, at 70%. The FSA publishes the entire ratings dataset through an open API that needs no key. Measured 2026-08-18.
Use the official API instead
This target publishes an official API: https://api.ratings.food.gov.uk/help. It returns the same data as structured records, needs no HTML parsing, will not break when the page is restyled, and is the route this study recommends over scraping at any proxy tier.
The API is open, unauthenticated and paginated, and covers every establishment in the scheme along with the authority, the rating date and the component scores. There is no scraping case here at any proxy tier.
What was measured
| URL | https://ratings.food.gov.uk/business/1000023 |
| Content assertion | Food Hygiene Ratings |
| Arms | 6 |
| Rounds per arm | 10 |
| Requests | 60 |
| Measured | 2026-08-18, 15:38–18:09 UTC |
| Benchmark host | DigitalOcean droplet, New York (nyc3) |
A request counts as a success only if the expected content is present. An HTTP 200 carrying a challenge page, an empty body or the wrong page is a failure, because it is not a page you can use.
This measures whether a tier works, not long-run stability under sustained load. Ten requests per arm, at a two-second floor, never approach a per-IP rate limit — which is the thing a rotating pool exists to defeat.
Results by arm
| Arm | Success | p50 | p95 | Bytes per success | Outcomes |
|---|---|---|---|---|---|
| direct (no proxy) | 100% | 484 ms | 505 ms | 119,185 | success 10 |
| datacenter, one pinned exit | 100% | 1,127 ms | 2,413 ms | 119,185 | success 10 |
| datacenter, rotating exit | 100% | 1,930 ms | 2,410 ms | 119,185 | success 10 |
| anti-detect, one pinned exit | 100% | 1,705 ms | 3,358 ms | 119,185 | success 10 |
| anti-detect, rotating exit | 100% | 1,609 ms | 3,517 ms | 119,185 | success 10 |
| residential, rotating exit | 70% | 3,877 ms | 35,851 ms | 119,185 | success 7, server error 1, error 2 |
What protects this target
Nothing. All 60 requests were served without a challenge signature. The three residential failures were two transport errors and one HTTP 502 — the proxy hop, not the FSA.
The number that decides this target is page weight: 119,185 bytes of HTML per establishment, to obtain a rating the API returns as a few hundred bytes of JSON. Collecting 10,000 establishments by scraping moves roughly 1.2 GB; the same 10,000 through the API move a small fraction of that, and arrive parsed.
robots.txt status
The host serves no robots.txt — the request returns HTTP 404. Nothing is disallowed, and nothing is granted either.
| Status | allowed |
| File | https://ratings.food.gov.uk/robots.txt |
| Crawl-delay | not declared |
| Fetched as | the benchmark's own User-Agent |
| Note | no robots.txt (HTTP 404) |
Limits of this result
- Ten rounds per arm in a single three-hour window on 2026-08-18. Anti-bot behaviour drifts; a result older than a few months is a historical record, not a current one.
- One exit geography. Every request left from a US datacenter host or a US exit, so nothing here describes how this target answers traffic from elsewhere.
- The unproxied arm ran from a clean, previously unused cloud IP with no accumulated reputation. It is a best case a production scraper will not sustain.
Related
- Public records scraping
- Do you need a proxy to scrape UK Companies House?
- Do you need a proxy to scrape SEC EDGAR filings?
- Proxy tier benchmark: full report
Run date: 2026-08-18 · Full benchmark report · Harness and raw data · All 32 targets
The 60 rows behind this page are in results/six-arm/raw.csv; filter them with grep '^[^,]*,uk_fsa_hygiene,' raw.csv.
Test your own target
The result above describes one URL on one day. Paste your own URL into the live tester and see the real response before creating an account.