Singapore Food Hygiene Grades & Food Shop Licences Scraper
Pricing
from $6.15 / 1,000 results
Singapore Food Hygiene Grades & Food Shop Licences Scraper
Scrape Singapore food shop licences and food hygiene grades (A, B, C, D) from the official SFA/NEA open data on data.gov.sg. No API key. Get licensee name, licence number, address, postal code, district, demerit points, suspension status, plus geocoded coordinates. Export JSON, CSV, Excel.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Singapore Food Hygiene Grades & Food Shop Licences Scraper
Scrape Singapore food hygiene grades and food shop licences straight from the official government open data portal (data.gov.sg), published by the food-safety regulator (SFA, which took over food retail hygiene from NEA). Get the hygiene grade (A, B, C or D), licensee name, licence number, full premises address, postal code and district, demerit points and suspension status for every licensed eating establishment and supermarket in Singapore. No API key, no login, no scraping know-how needed. Export to JSON, CSV or Excel.
Here is one real result, with every field the actor returns:
{"recordId": 29963,"licenseeName": "MCDONALD'S RESTAURANTS PTE. LTD.","licenceNumber": "B86020L006","premisesAddress": "293 YISHUN STREET 22 #01-237 SINGAPORE 760293","postalCode": "760293","grade": "A","gradeDescription": "Highest standard of hygiene","demeritPoints": null,"suspensionStartDate": null,"suspensionEndDate": null,"hasSuspensionRecord": false,"licenceStatus": "Active","buildingName": null,"blockHouseNumber": null,"streetName": null,"levelNumber": null,"unitNumber": null,"postalSector": "76","postalDistrict": "D27","districtName": "Yishun / Sembawang","latitude": 1.436114254092158,"longitude": 103.8376052359577,"formattedAddress": "293 YISHUN STREET 22 SINGAPORE 760293","licenceType": "eating","source": "Singapore SFA/NEA food establishment licences (data.gov.sg)","observedAt": "2026-09-05T01:02:02.222Z"}
The most complete SFA food establishment data scraper on Apify. It returns every field the official Singapore food licence datasets expose, plus the hygiene-grade meaning, a derived licence status, postal district and area, and OneMap geocoding (latitude, longitude, formatted address), with filters to target exactly the establishments you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Use cases
- Quickstart
- Input reference
- Output reference
- Why this scraper
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
This actor reads the official Singapore food establishment licence datasets published on the government open-data portal (data.gov.sg), applies the filters you pass, paginates through matching licences, and writes one clean record per establishment. It covers two datasets you pick with licenceType:
- Eating establishments (restaurants, hawker stalls, food courts, canteens) that carry a food hygiene grade of A, B, C or D, with demerit points and any suspension window.
- Supermarkets (licensed supermarket premises, no hygiene grade), with fully split address components.
Each grade is expanded to a plain description, a licenceStatus (Active or Suspended) is derived, and every record is enriched with its postal sector, postal district, area name, and OneMap geocoding (latitude, longitude and a standardized address) when the premises can be resolved. There is no API key and no rate-limit account to manage on your side; the portal throttles anonymous access, so large pulls are paced automatically.
Use cases
- Food-safety and compliance monitoring: track which establishments hold grade A vs C/D, watch demerit points, and flag suspended licences.
- Local-business and F&B lead generation: build lists of licensed operators by area, postal district, grade or brand for sales, delivery, insurance, pest-control or supplier outreach.
- Market and location research: map every licensed food outlet or supermarket in a district with geocoded coordinates.
- Franchise and chain analysis: pull all outlets for a licensee (for example every McDonald's or supermarket chain) with one keyword.
- Enrichment: match Singapore restaurants to their official licence number, hygiene grade and postal district.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 eating establishments across all hygiene grades, newest first.
{"maxLicences": 10,"licenceType": "eating","grade": "","sortByNewest": true}
Every input field is optional. With an empty input the actor returns the most recent eating establishments (default maxLicences is 10).
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxLicences | integer | no | 10 | Maximum number of licence records to collect. Large pulls are paced automatically to respect the source rate limit. |
licenceType | enum | no | eating | eating = licensed food shops (restaurants, hawker stalls, food courts) that carry a hygiene grade A, B, C or D. supermarket = licensed supermarket premises (no hygiene grade). |
grade | enum | no | (any) | Keep only eating establishments with this hygiene grade. A is best, D is the lowest passing standard. Eating dataset only. Leave empty to include every grade. |
searchQuery | string | no | (empty) | Filter by any keyword across the record: licensee name or premises address, for example MCDONALD, ORCHARD ROAD, a mall name. Leave empty to pull the full list. |
postalCode | string | no | (empty) | Keep only establishments at this exact Singapore 6-digit postal code, for example 768677. |
area | string | no | (empty) | Keep only establishments in a postal district or area. Accepts a 2-digit sector (42), a district code (D15 or 15), or an area keyword (Orchard, Tampines, Jurong). |
activeOnly | boolean | no | false | Exclude eating establishments currently under a licence suspension. |
sortByNewest | boolean | no | true | Return the most recently added licences first. Turn off to read in the source order. |
Filters combine with logical AND. grade and searchQuery run at the source (fast); postalCode, area and activeOnly are applied while scanning, so pulls with only those filters may scan more pages.
Output reference
One dataset item per licensed establishment. Fields marked "eating only" or "supermarket only" apply to that licenceType. Types: string, number, boolean, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
recordId | number | Stable source row id in the dataset. |
licenseeName | string | Name of the licence holder. |
licenceNumber | string | Official licence number (unique per licence). |
premisesAddress | string | Address of the licensed premises. |
postalCode | string | Singapore 6-digit postal code, from the source or resolved via geocoding. null if not resolvable. |
grade | string | Food hygiene grade A, B, C or D (eating only). null for supermarkets. |
gradeDescription | string | Plain meaning of the grade, for example Highest standard of hygiene (eating only). |
demeritPoints | number | Current demerit points on the licence (eating only), or null. |
suspensionStartDate | string | Start date of any licence suspension (eating only), or null. |
suspensionEndDate | string | End date of any licence suspension (eating only), or null. |
hasSuspensionRecord | boolean | true when a suspension start date is present. |
licenceStatus | string | Suspended when a suspension is currently in effect, otherwise Active. |
buildingName | string | Building name (supermarket only). |
blockHouseNumber | string | Block or house number (supermarket only). |
streetName | string | Street name (supermarket only). |
levelNumber | string | Level number (supermarket only). |
unitNumber | string | Unit number (supermarket only). |
postalSector | string | First 2 digits of the postal code (Singapore postal sector), or null. |
postalDistrict | string | Singapore postal district code D01-D28, derived from the postal code. |
districtName | string | Descriptive area name for the district, for example Katong / Joo Chiat / Amber Road. |
latitude | number | Latitude from OneMap geocoding, or null if the premises could not be resolved. |
longitude | number | Longitude from OneMap geocoding, or null. |
formattedAddress | string | Standardized address returned by OneMap, or null. |
licenceType | string | eating or supermarket, matching the dataset you selected. |
source | string | Data source label. Always the official Singapore food establishment licences via data.gov.sg. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | Present only on a failed run: a single item with a populated error field is written instead of results, and is not billed. |
Why this scraper
There is no other Apify actor that returns official Singapore food hygiene grades and food shop licences. The closest alternatives cover a different thing entirely:
| Capability | This actor | Foodpanda / Oddle / Burpple / Chope scrapers | UK food hygiene scrapers |
|---|---|---|---|
| Coverage | Singapore SFA/NEA licensed food establishments and supermarkets | Delivery/discovery listings for a single platform | United Kingdom (FSA), not Singapore |
| Official hygiene grade A/B/C/D | Yes | No | Different scheme, different country |
| Official licence number and licensee name | Yes | No | UK only |
| Demerit points and suspension status | Yes | No | No |
| Postal code, postal district and area | Yes | Partial | UK only |
| Geocoded latitude/longitude | Yes (OneMap) | Varies | UK only |
| Filter by grade, area, postal code, active-only | Yes | No | Limited |
| No API key required | Yes | Varies | Varies |
If you need the official regulator record for a Singapore food business (its hygiene grade, licence number and status), this is the actor. Restaurant-discovery scrapers return menus and reviews but never the licence or the grade.
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-food-hygiene-grades-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"licenceType":"eating","grade":"A","area":"Orchard","maxLicences":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-food-hygiene-grades-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"licenceType":"supermarket","maxLicences":200}'
Apify CLI:
apify call scrapers_lat/singapore-food-hygiene-grades-scraper \--input '{"licenceType":"eating","searchQuery":"MCDONALD"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per record returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxLicences. - Source rate limit. The data.gov.sg portal throttles anonymous access, so large pulls are paced automatically (about one page every 10 seconds).
FAQ and troubleshooting
Do I need an API key or SFA/NEA account? No. The actor reads only data that is publicly available through the official government open-data portal (data.gov.sg) and OneMap. There is nothing to register.
How do I get only the cleanest restaurants in one area?
Set licenceType to eating, grade to A, and area to a district or keyword such as Orchard or D09.
How do I list every outlet of a chain?
Put the brand in searchQuery, for example MCDONALD or COLD STORAGE, and raise maxLicences.
What is the difference between hasSuspensionRecord and licenceStatus?
hasSuspensionRecord is true if the licence has any suspension start date on file. licenceStatus is Suspended only when that suspension is currently in effect, otherwise Active.
A run returned 0 records. Why?
The filters matched nothing. Loosen searchQuery, remove grade/area/postalCode, or check the licenceType. Zero-result runs are not charged.
Why is latitude or postalCode null?
Some premises addresses (for example a hawker stall with no postal code) cannot be resolved by the OneMap geocoder. Missing values are returned as null, never invented.
Do supermarket records have a hygiene grade?
No. The supermarket dataset does not carry a hygiene grade, so grade and gradeDescription are null for licenceType supermarket.
Is this an official SFA or NEA tool? No. This actor is independent and has no affiliation with the Singapore Food Agency (SFA) or the National Environment Agency (NEA). It reads only publicly available data from data.gov.sg and OneMap.
Related scrapers
- Singapore ACRA Entities Scraper: registered companies and businesses.
- Singapore CEA Estate Agents Scraper: licensed estate agents and salespersons.
- Singapore BCA Registered Contractors Scraper: registered construction contractors.
- Singapore MOH Health Professionals Scraper: registered doctors, dentists and other health professionals.
- Singapore Yellow Pages Scraper: business listings with contacts.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the Singapore Food Agency (SFA) or the National Environment Agency (NEA). Accesses only publicly available data from the official government open-data portal (data.gov.sg) and OneMap.
