Skip to content
Eden Engine

UK Food Hygiene Ratings Search (Food Standards Agency, by Name, Postcode, Council or Rating)

fsahygiene/search-establishments

Searches the UK Food Standards Agency's food hygiene register (about 614,000 premises in England, Wales, Northern Ireland and Scotland) by business name, address or postcode, council, country, rating and business type. Each establishment carries its rating (RatingValue, a string), the date of the inspection behind it (RatingDate), the three component scores, the business type, address, postcode, position and the council responsible. Ratings are 0 (worst) to 5 (best) in England, Wales and Northern Ireland, and Pass or Improvement Required in Scotland; Exempt and Awaiting Inspection mean no rating. RatingDate is the inspection date, or often a 1900 or 1901 placeholder where there was none. Lower component scores are better. Needs at least one of name, address, council or country. Ratings change on re-inspection, so always show RatingDate with a rating. Contains public sector information licensed under the Open Government Licence v3.0. Source: Food Standards Agency, Food Hygiene Rating Scheme.

activeper callv1

Price

$0.0026 per call

You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.

Data source

Food Standards Agency

Food Standards Agency, Food Hygiene Rating Scheme (api.ratings.food.gov.uk). Contains public sector information licensed under the Open Government Licence v3.0. Source: Food Standards Agency, Food Hygiene Rating Scheme. Served by Eden Engine; not an official Food Standards Agency product and not endorsed by the Agency. Ratings change when a business is re-inspected: show the rating date with any rating.

Use it

Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.

Connect once and your AI can find and run this tool, and any other it needs.

agent
// 1. search: find the tool
omnial_search({ query: "what you need" })

// 2. inspect: price and input schema
omnial_inspect({ tool: "fsahygiene/search-establishments" })

// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "fsahygiene/search-establishments" })

// 4. run: price the exact call first, then run it
omnial_execute({ tool: "fsahygiene/search-establishments", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "fsahygiene/search-establishments", input: { /* ... */ } })

// 5. settle: the call is charged when it finishes, nothing to do

Not connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.

Pricing

Every charge this tool can incur.

ChargePrice
Per call
$0.0026
Updated
Oct 20, 2026

Input and output schemas

Input schema
input_schema.json
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "name"
      ]
    },
    {
      "required": [
        "address"
      ]
    },
    {
      "required": [
        "local_authority_id"
      ]
    },
    {
      "required": [
        "country_id"
      ]
    }
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Words in the business name, for example pizza express. Every word must appear (anywhere in the name), case-insensitively; 'pizza express' also finds 'Express Pizza'."
    },
    "rating": {
      "enum": [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "Exempt",
        "AwaitingInspection",
        "AwaitingPublication",
        "Pass",
        "ImprovementRequired"
      ],
      "type": "string",
      "description": "Only premises with this rating. England, Wales and Northern Ireland: 0 (worst) to 5 (best), or Exempt, AwaitingInspection, AwaitingPublication. Scotland: Pass, ImprovementRequired, or Exempt and AwaitingInspection. Pass also returns Pass and Eat Safe, and AwaitingInspection also returns Scotland's Awaiting Inspection. Note that the RatingKey in a result (fhrs_5_en-gb) is not accepted here: the upstream silently ignores it and returns every rating. "
    },
    "address": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Text in the address: a town, a street, a full postcode (BL1 3PF) or just the outward part of one (BL1, which matches every BL1 postcode)."
    },
    "sort_by": {
      "enum": [
        "Relevance",
        "rating",
        "desc_rating",
        "alpha",
        "desc_alpha"
      ],
      "type": "string",
      "description": "Order: Relevance (the default), rating (highest first), desc_rating (lowest first), alpha (name A to Z) or desc_alpha. Rating sorts are on the 0 to 5 number; the non-numeric ratings sort together at one end."
    },
    "page_size": {
      "type": "integer",
      "default": 20,
      "maximum": 200,
      "minimum": 1,
      "description": "Establishments per page, 1 to 200. Always sent: when it is omitted, or is 0 or negative, the upstream returns a very large page, which this range refuses. meta.pageSize in the response confirms the size applied."
    },
    "country_id": {
      "enum": [
        1,
        2,
        3,
        4
      ],
      "type": "integer",
      "description": "Only premises in one country: 1 England, 2 Northern Ireland, 3 Scotland, 4 Wales."
    },
    "page_number": {
      "type": "integer",
      "default": 1,
      "maximum": 100000,
      "minimum": 1,
      "description": "Which page, starting at 1. meta.totalPages says how many there are; a page past the last answers an empty list, not an error."
    },
    "rating_operator": {
      "enum": [
        "Equal",
        "GreaterThanOrEqual",
        "LessThanOrEqual"
      ],
      "type": "string",
      "description": "How rating is compared: Equal (the default), GreaterThanOrEqual or LessThanOrEqual, on the 0 to 5 scale. Meaningful only with a number rating; for Exempt, Pass and the other words it is the same as Equal."
    },
    "business_type_id": {
      "enum": [
        -1,
        7,
        7838,
        5,
        7842,
        14,
        7839,
        7846,
        7841,
        7843,
        1,
        4613,
        7840,
        7845,
        7844
      ],
      "type": "integer",
      "description": "Only this business type: 1 Restaurant/Cafe/Canteen, 7844 Takeaway/sandwich shop, 7843 Pub/bar/nightclub, 7846 Mobile caterer, 7841 Other catering premises, 7842 Hotel/bed & breakfast/guest house, 7845 School/college/university, 5 Hospitals/Childcare/Caring Premises, 4613 Retailers - other, 7840 Retailers - supermarkets/hypermarkets, 7838 Farmers/growers, 7839 Manufacturers/packers, 7 Distributors/Transporters, 14 Importers/Exporters. Omit for all types."
    },
    "local_authority_id": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 1,
      "description": "Only premises regulated by this council. This is LocalAuthorityId from the local-authorities tool (Bolton is 176), not the LocalAuthorityCode string (403) in an establishment record. An unknown id answers an empty list."
    }
  },
  "additionalProperties": false
}
Output schema
output_schema.json
{
  "type": "object",
  "required": [
    "establishments",
    "meta"
  ],
  "properties": {
    "meta": {
      "type": "object",
      "properties": {
        "pageSize": {
          "type": "integer"
        },
        "itemCount": {
          "type": "integer"
        },
        "pageNumber": {
          "type": "integer"
        },
        "totalCount": {
          "type": "integer"
        },
        "totalPages": {
          "type": "integer"
        }
      },
      "description": "Paging: totalCount (all matches), totalPages, pageSize and pageNumber as applied, itemCount on this page, extractDate (the server clock, local time with an offset: it is NOT when the ratings were last updated) and returncode.",
      "additionalProperties": true
    },
    "establishments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "FHRSID",
          "BusinessName",
          "RatingValue",
          "RatingDate",
          "SchemeType"
        ],
        "properties": {
          "Phone": {
            "type": "string",
            "description": "Telephone number; empty on every one of 9,251 records sampled, so do not rely on it."
          },
          "FHRSID": {
            "type": "integer",
            "description": "The Food Hygiene Rating Scheme id of the premises: the id the establishment tool takes. Unique across the whole scheme."
          },
          "scores": {
            "type": "object",
            "properties": {
              "Hygiene": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "Structural": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "ConfidenceInManagement": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "description": "The three inspection component scores behind an FHRS rating. LOWER IS BETTER: 0 is the best score, which is the reverse of the 0 to 5 rating. Hygiene is 0, 5, 10, 15, 20 or 25; Structural 0, 5, 10, 15, 20 or 25; ConfidenceInManagement 0, 5, 10, 20 or 30. All three are null for Scotland (FHIS), for Exempt and Awaiting records, and after a rescore (24 of 6,198 rated premises in a four-authority sample).",
            "additionalProperties": true
          },
          "geocode": {
            "type": "object",
            "properties": {
              "latitude": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "longitude": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "description": "WGS84 position. longitude and latitude are decimal-degree STRINGS, or null when the premises has no position (about one in five), notably private-address businesses.",
            "additionalProperties": true
          },
          "Distance": {
            "type": [
              "number",
              "null"
            ],
            "description": "Miles from the searched point, only on a nearby search; null on every other call."
          },
          "PostCode": {
            "type": "string",
            "description": "Postcode as the local authority holds it; empty on about one premises in a hundred."
          },
          "RatingKey": {
            "type": "string",
            "description": "Machine key for the rating, for example fhrs_5_en-gb or fhis_pass_en-gb. Every Welsh authority's records end cy-gb instead of en-gb, and Wales spells awaiting inspection fhrs_ratingawaited_cy-gb. It is NOT accepted by the rating filter."
          },
          "RatingDate": {
            "type": "string",
            "description": "Date of the inspection the rating comes from, ISO 8601 with a midnight time and no offset, for example 2026-06-30T00:00:00. For premises with no inspection result the date is often a placeholder, not a date: 1900-01-01 or 1901-01-01 on every England, Wales and Northern Ireland AwaitingInspection and AwaitingPublication record and on most of their Exempt records. Scotland's Awaiting Inspection and Exempt records usually carry a real date."
          },
          "SchemeType": {
            "type": "string",
            "description": "FHRS (England, Wales, Northern Ireland: ratings 0 to 5) or FHIS (Scotland: Pass or Improvement Required)."
          },
          "RatingValue": {
            "type": "string",
            "description": "The rating, a STRING. England, Wales and Northern Ireland (FHRS): 0 to 5 where 5 is best, or Exempt, AwaitingInspection, AwaitingPublication. Scotland (FHIS): Pass, Improvement Required, Pass and Eat Safe, Awaiting Inspection, Exempt. Only 0 to 5, Pass, Improvement Required and Pass and Eat Safe are inspection results; the other values mean no rating exists yet or none is required."
          },
          "AddressLine1": {
            "type": "string",
            "description": "First address line. Empty on about half of premises: the address is spread over four lines with no fixed meaning, so join the non-empty lines with PostCode."
          },
          "AddressLine2": {
            "type": "string",
            "description": "Second address line, often empty."
          },
          "AddressLine3": {
            "type": "string",
            "description": "Third address line, often the town."
          },
          "AddressLine4": {
            "type": "string",
            "description": "Fourth address line, often the county, often empty."
          },
          "BusinessName": {
            "type": "string",
            "description": "Trading name as the local authority holds it, often in capitals and sometimes with a trading-as suffix."
          },
          "BusinessType": {
            "type": "string",
            "description": "Business type label, for example Restaurant/Cafe/Canteen. Scotland labels some types differently from England, Wales and Northern Ireland."
          },
          "RightToReply": {
            "type": "string",
            "description": "The business's published reply to its rating; empty on nearly every record."
          },
          "BusinessTypeID": {
            "type": "integer",
            "description": "Business type id; 1 is Restaurant/Cafe/Canteen, 7844 Takeaway/sandwich shop, 7843 Pub/bar/nightclub."
          },
          "NewRatingPending": {
            "type": "boolean",
            "description": "True when a re-inspection has been carried out and its new rating is not yet published; the rating shown is the previous one."
          },
          "ChangesByServerID": {
            "type": "integer",
            "description": "Internal change counter; ignore."
          },
          "LocalAuthorityCode": {
            "type": "string",
            "description": "The authority's code, a string. It is NOT the id the local_authority_id filter takes: use LocalAuthorityId from the local-authorities tool."
          },
          "LocalAuthorityName": {
            "type": "string",
            "description": "The council responsible for the premises."
          },
          "LocalAuthorityWebSite": {
            "type": "string",
            "description": "The council's website."
          },
          "LocalAuthorityBusinessID": {
            "type": "string",
            "description": "The council's own id for the premises; unique only within that council."
          },
          "LocalAuthorityEmailAddress": {
            "type": "string",
            "description": "The council's food safety contact address."
          }
        },
        "additionalProperties": true
      },
      "description": "The premises on this page, in the requested order; empty when nothing matches."
    }
  },
  "description": "The FSA's response unchanged: establishments (the matching premises) and meta (paging).",
  "additionalProperties": true
}