Grab Scraper | GrabFood GrabMart SEA Menus
Pricing
from $2.20 / 1,000 results
Grab Scraper | GrabFood GrabMart SEA Menus
Scrape GrabFood restaurants, menus, cuisine SEO & GrabMart feeds across Singapore, Malaysia, Philippines, Thailand, Vietnam, Indonesia, Cambodia, and Myanmar. Extract merchant IDs, ratings, fees, menu items & prices, promos. Export Excel/CSV/JSON. Unofficial — not affiliated with Grab.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
36
Total users
11
Monthly active users
4.9 hours
Issues response
a day ago
Last modified
Categories
Share
Grab Scraper — GrabFood & GrabMart (Southeast Asia)
Scrape GrabFood restaurant listings, menus, cuisine SEO pages, GrabMart feeds, and category shortcuts across Southeast Asia — then download structured food-delivery data as Excel, CSV, or JSON.
Use this Actor as a practical Grab data API for multi-market restaurant discovery, cuisine research, menu monitoring, Mart category mapping, and delivery-market tracking. Pick a country and mode, then get Dataset rows with merchant IDs, titles, ratings, delivery fees, menu items & prices, promo labels, and permalinks.
- Scrape keyword search, cuisine SEO, recommended lists, restaurant menus, GrabMart merchants, chain / brand pages, category shortcuts, and startUrls
- Cover 8 Grab markets: Singapore, Malaysia, Philippines, Thailand, Vietnam, Indonesia, Cambodia, Myanmar (
sgmyphthvnidkhmm) with secondary cities (Cebu, Hanoi, Bali, Chiang Mai, Penang, …) - Extract merchantId, title, URL, rating, delivery fee / ETA when present, menu sections & item prices, cuisine tags, promo / icon labels, GrabMart merchants
- Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or the Apify API
- Pay per event — Actor start + each Dataset result; platform usage is included (you do not pay separate Apify compute on top)
Unofficial tool. This Actor is not affiliated with, endorsed by, or sponsored by Grab Holdings or GrabFood / GrabMart. It collects publicly reachable listing surfaces and does not place orders, checkout, access private Grab accounts, or scrape GrabUnlimited login pricing. Taiwan (
TW) and rides / brand WP are out of scope.
Compared with GrabFood Actors that cover restaurants-only, one country, or menus without Mart, this Actor focuses on 8-market SEA coverage with search, cuisine SEO, recommended, chain, Mart, category discovery, branch expansion, and restaurant menus in one input form.
What does the Grab Scraper do?
Grab Scraper lets you extract structured restaurant, menu, and Mart data from food.grab.com / mart.grab.com without operating your own anti-bot browser fleet. Give it a country and a mode (for example search, cuisine, restaurant, or mart), then start a run.
Under the hood, the Actor:
- Validates your input (mode, country, city / latlng / merchant identifiers, max results)
- Enforces free-tier caps when you are on a free Apify plan
- Collects GrabFood surfaces over a pure-HTTP guest-portal channel — search, cuisine, recommended, startUrls, restaurant menus, discoverCategories and mart run without a browser;
directoryreads the public sitemap andchainuses Chrome-UA SSR; no mode needs a browser slot - Parses portal search, merchant detail (menu categories), and Mart feed signals into normalized Dataset records
- Writes
INPUT_ECHO,RUN_SUMMARY(andERROR_SUMMARYon failure) to the key-value store
You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.
One Dataset row is one billed entity
Every Dataset row has rowType. Restaurants use rowType: "restaurant".
Each menu product is a separate rowType: "menuItem" row and copies the
restaurant ID, name, URL, and city. The legacy itemType field remains for
compatibility, but menu products are no longer counted inside a restaurant
row.
maxResults is the most Dataset rows for each keyword, start URL, restaurant,
cuisine, chain, or directory target. The default is 70; larger values are
collected in parts of 70, and the whole run stops at your maximum total charge.
Restaurants, menu items, branch merchants, categories, promos, and labels all
count together. Menu collection is capped per restaurant by
maxMenuItemsPerRestaurant (25 by default).
includeMenuItems, expandBranches, emitCuisines, and emitPromoLabels
default to off. Turn them on only when you want those separately billed
child rows. List modes (search, cuisine, recommended, mart) otherwise
return merchant rows only.
Location, long queries, and empty results
- Leave
cityandlatlngempty to search around the market's main city. ArestaurantUrlorstartUrlslink from another market uses that market's own location, not thecountryCodedefault. - When a run stops at
maxResults,RUN_SUMMARY.nextCursorholds the position. Pass it ascursorwith the same input to continue without repeats or gaps.nextCursor: nullmeans the source is exhausted. - A run succeeds with zero rows only when Grab confirmed there is no match. Network or access failures fail the run instead of returning an empty Dataset.
RUN_SUMMARY.noteslists informational choices such as a category fallback or an ignored option.RUN_SUMMARY.warningslists real problems.
What Grab data can I extract?
Public merchant directory
Use mode: "directory" for low-cost merchant discovery from GrabFood's public
sitemaps. Choose countryCode and lang; optional sitemapCity selects an exact
published city slug. Availability follows the current sitemap, not every ordering
market or language.
Each row contains merchantId, URL, slug, country, language, sitemap city, lastmod,
and provenance. Names derived from the URL are labeled nameSource: "url_slug".
They are not verified display names, and directory membership does not prove that
a merchant is currently open or deliverable.
sitemapShard and sitemapOffset start at zero. sitemapMaxShards defaults to one
(maximum five). Continue using RUN_SUMMARY.diagnostics.nextCursor, preserving
your country/language/city/date filters. Deduplicate merchant IDs across runs
because live sitemap content can change. modifiedSince: "YYYY-MM-DD" filters
inclusive sitemap publication dates; it does not detect menu or price changes.
A fully filtered slice can succeed with zero rows.
Set enrichDetails: true to inspect at most maxEnrich public merchant pages.
Only identity-matched restaurant data is accepted. A 200 page shell remains
directoryOnly: true, detailStatus: "route_shell"; missing details are reported,
not invented. Delivery-pin coordinates are never emitted as merchant coordinates.
Use the restaurant mode for menus. Directory mode ignores search keyword,
delivery city/latlng, and includeMenuItems; businessType: "MART" is
unsupported.
This mode does not require residential proxies or browser sessions.
| Data | Search / cuisine / recommended | Restaurant menu | Mart | Discover categories | Chain / startUrls |
|---|---|---|---|---|---|
| Merchant ID / slug / URL | ✅ | ✅ | ✅* | — | ✅* |
| Title / name | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rating / delivery fee / ETA | ✅* | ✅* | ✅* | — | ✅* |
| Cuisine tags / promo labels | ✅* | ✅* | — | ✅ | ✅* |
| Menu sections / items / prices | — | ✅ | — | — | ✅* |
| Branch merchants | ✅* | — | — | — | ✅* |
*When present on the page or portal payload. Mart mode returns GrabMart merchant rows; startUrls restaurant links return menus with includeMenuItems.
Merchant lead and contact fields
Every Dataset item exposes the same lead-field shape, including when a field was not observed. The currently verified merchant lead path is the public Indonesian chain page: its server-rendered branch cards provide the branch organization and a numbered street address.
| Field | Type | Grab-specific meaning |
|---|---|---|
phones | [{value, type, e164?}] | Merchant phone numbers when observed. The verified chain sample returns [] and records phones: 未验证 in leadAbsences; this does not mean Grab has no merchant phone data anywhere. |
emails | [{value, type}] | Merchant email addresses when observed. The verified chain sample returns [] with emails: 未验证, not 本站无. |
address | {street, unit, locality, region, postalCode, country, full} | Branch address from the chain card. unit is the visible street-number token, for example No. 55-56; full preserves the complete source address. |
geo | {lat, lng} or null | Merchant coordinates, supplementary to the street address. Coordinates were not present on the verified chain cards, so the sample records geo: 未验证. |
person | {name, role?} or null | A named merchant contact. No merchant person was observed on the reached chain or route-shell surfaces, so this is 未验证. |
org | {name, id?} | Merchant branch organization and Grab merchant ID. Verified examples include McDonald's - Cideng and IDGFSTI000020id. |
web | {website, socials[]} | Per-merchant website and social profiles. These remain 未验证 for the verified chain sample. Grab corporate links from an About page are platform information, not merchant leads. |
leadSource | search|detail|entity|contact|reveal-xhr | Where the lead came from. Verified chain branch rows use entity. |
leadReveal | visible|click|xhr|gated|image|absent | How the lead was revealed. Chain organization and address are already visible, so verified rows use visible. |
leadAbsences | object/map | Per-field reason for an empty or null value. 未验证 means the field was not established on the measured surface; 闸门锁 is reserved for a measured access gate; 本站无 is used only when absence is actually verified. |
Reveal cost
The verified chain lead path needs one public chain-page request. Organization and address are present in the server-rendered branch anchors, so it requires no click-to-reveal action, contact XHR, login, or merchant-detail request. This keeps lead extraction to the chain page itself. Restaurant menu requests add merchant-detail calls for menu data, but they do not imply that phone, email, person, coordinates, or per-merchant web profiles were revealed.
Honest lead limitations
- Verified guest-visible merchant leads are limited to branch
orgplus a numberedaddresson the Indonesian chain SSR surface. - Merchant
phones,emails,person,geo,web.website, andweb.socialsare unverified, not confirmed absent from Grab. - The reached restaurant URL returned a route shell with a merchant ID but no merchant business fields. A merchant ID alone is not treated as successful detail enrichment.
- GrabFood and GrabMart browser/CDP attempts were blocked by a CloudFront
403gate during validation. The Actor does not treat that response as HTML data and does not convert it into a claim that merchant leads are absent. - Grab corporate headquarters/address/social data from an About page is supporting platform information only. It is never substituted for a restaurant or shop lead.
Why scrape GrabFood / GrabMart?
Grab is one of the largest food-delivery and quick-commerce platforms in Southeast Asia. Teams scrape Grab to:
- Map restaurant supply by city, cuisine, or chain across SEA markets
- Track menus and prices for competitive monitoring
- Build delivery-market datasets (ratings, fees, promos, cuisine mix)
- Inventory GrabMart categories and nearby merchants near a delivery pin
- Seed CRM / research workflows with merchant IDs and GrabFood URLs
More Actors like this
Need restaurant / delivery data outside Grab, or a different vertical? Use a dedicated Actor below for structured fields. Use this Actor for GrabFood / GrabMart across Southeast Asia.
Similar food delivery scrapers
- Foodpanda Scraper — Foodpanda APAC
- Foodora Scraper — Foodora NO / SE / AT / HU / CZ
- Uber Eats Scraper — multi-locale Uber Eats
- Deliveroo Scraper — Deliveroo markets
- DoorDash Scraper — DoorDash stores & menus
- Wolt Scraper — Wolt restaurants & cities
- Google Maps Scraper
- TripAdvisor Scraper
- Stealth Web Scraper
Prefer another specialized scraper?
If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.
Jobs & Freelance
- LinkedIn Jobs Scraper
- Indeed Jobs Scraper
- Upwork Jobs Scraper
- Glassdoor Scraper
- Fiverr Gigs Scraper
- Bayt Jobs Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- Apartments.com Rental Scraper
- Rightmove Scraper
- Idealista Scraper
- realestate.com.au Scraper
E-commerce
- Amazon Search Scraper
- Walmart Product Scraper
- Etsy Scraper
- Shopee Search Scraper
- SHEIN Product Scraper
- Temu Product Scraper
- Target Product Scraper
- Allegro Scraper
Social & Content
Ads Intelligence
General Tools
→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.
How to scrape GrabFood / GrabMart (no code required)
- Create a free Apify account
- Open Grab Scraper
- Choose a mode:
search,restaurant,mart,chain,cuisine,recommended,startUrls, ordiscoverCategories - Choose a countryCode (default
ph) - Enter a city / latlng, keyword, cuisineSlug, merchantId / restaurantUrl, chainName, or startUrls
- (Optional) Set
maxResults,includeMenuItems(restaurant pages),maxMenuItemsPerRestaurant,emitPromoLabels,emitCuisines,expandBranches,lang, or acursorfrom an earlier run - Click Start and download the Dataset as JSON, CSV, Excel, or JSONL
Start with maxResults: 5–10 to verify the query, then scale up.
Connect to your tools
| Platform | How |
|---|---|
| Make.com | Apify → Run Actor → lentic_clockss/grab-scraper |
| n8n | Apify node → Run Actor |
| Zapier | Apify → Run Actor |
| API / SDK | Apify Client (actorId: lentic_clockss/grab-scraper) |
How much does it cost to scrape Grab?
This Actor uses pay-per-event pricing. You are charged for:
| Event | Price |
|---|---|
Actor Start (apify-actor-start) | $0.005 per start |
Result (apify-default-dataset-item) | $3.00 / 1,000 results ($0.003 each on FREE/BRONZE) |
Platform usage costs are included — you do not pay separate Apify compute/proxy usage for this Actor on top of the event prices above (User pays platform usage costs = No).
Store tier pricing (results)
| Tier | $/1,000 | per result |
|---|---|---|
| FREE* | $3.00 | $0.003 |
| BRONZE | $3.00 | $0.003 |
| SILVER | $2.60 | $0.0026 |
| GOLD | $2.20 | $0.0022 |
| PLATINUM | $2.00 | $0.002 |
| DIAMOND | $1.60 | $0.0016 |
*Store tier discounts apply to paying Apify customers on higher tiers.
Example cost estimates
| Results collected | Approx. event cost* |
|---|---|
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |
*Assumes one Actor start at default memory billing for start events, plus $0.003 per Dataset item on FREE/BRONZE. Exact start billing can scale with allocated memory (one start event per GB, minimum one).
Free Apify trial credit can cover a small test run — try maxResults: 5 first.
Free Apify plan limits (Actor-enforced)
| Cap | Free Apify plan | Paying |
|---|---|---|
| Runs of this Actor | 10 total | Unlimited |
| Results per run | 200 | Schema max |
Limits are set by the Actor developer, not Apify. Quota hits return SUCCEEDED with RUN_SUMMARY.status=FREE_TIER_LIMIT.
Input examples
Keyword search (Philippines)
{"mode": "search","countryCode": "ph","city": "manila","keyword": "chicken","businessType": "FOOD","maxResults": 20}
Cuisine SEO (Cebu pizza)
{"mode": "cuisine","countryCode": "ph","city": "cebu","cuisineSlug": "pizza","emitPromoLabels": true,"maxResults": 20}
Restaurant menu
{"mode": "restaurant","countryCode": "sg","merchantId": "SGXXXXXXXX","includeMenuItems": true,"maxResults": 100}
GrabMart feed (Penang)
{"mode": "mart","countryCode": "my","city": "penang","keyword": "snacks","maxResults": 30}
Discover category shortcuts (Myanmar)
{"mode": "discoverCategories","countryCode": "mm","city": "yangon","maxResults": 50}
Chain branches with addresses
{"mode": "chain","countryCode": "id","chainName": "mcdonalds","maxResults": 40}
Output example
{"rowType": "restaurant","itemType": "merchant","businessType": "FOOD","source": "ph","countryCode": "ph","merchantId": "PHGFB000000","title": "Example Chicken","name": "Example Chicken","url": "https://food.grab.com/ph/en/restaurant/example/PHGFB000000","rating": 4.6,"deliveryFee": 29,"scrapedAt": "2026-08-02T12:00:00+00:00"}
Dataset views expose Row type, Type, Biz, Title, Country, Merchant, URL, Price,
Rating, and Scraped. Menu products use rowType=menuItem; restaurants use
rowType=restaurant. Optional menu, branch, category, promo, and label rows
share that input's maxResults budget.
Tips for better Grab datasets
- Match city to countryCode (e.g.
cebu+ph, not a PH city withmy) - Use
maxResults: 5–10first; larger values are collected in parts of 70. - Child rows default off. Enable
includeMenuItems,expandBranches,emitCuisines, oremitPromoLabelsonly when you need those separately billed rows. - Some Thailand portal fetches can be unstable from distant egress — retry or switch market for smoke tests
- Production jobs should use a normal Actor run (Dataset + KV). Standby
/searchis for capped Live-view previews only
FAQ
Is this an official Grab API?
No. It is an unofficial scraper for publicly reachable GrabFood / GrabMart pages. Not affiliated with Grab.
Do I need my own proxies?
No. Residential egress is handled by the Actor backend. You do not mint Apify proxy in the Actor input for normal runs.
Can I scrape menus?
Yes — use mode=restaurant with restaurantUrl or merchantId (or restaurant links in startUrls) and set includeMenuItems: true. Each menu item is its own billed row.
Does platform usage cost extra?
No. With this Actor’s pay-per-event setup, users do not pay separate Apify platform usage on top of Actor Start + result events.
What about GrabUnlimited or login prices?
Out of scope. This Actor does not log in or scrape member-only pricing.
What about Taiwan?
Taiwan (TW) is out of scope for this Actor.
Legal & ethical use
Use this Actor only for legitimate purposes and in compliance with applicable laws and Grab’s terms. Do not scrape personal data you are not entitled to process. Respect rate limits and do not use the data to harm merchants, riders, or diners.
Support
Questions or feature requests? Open an issue on the Actor page or contact the developer via Apify Console.
Keywords: Grab scraper, GrabFood scraper, GrabMart scraper, Grab menu scraper, Grab restaurant scraper, GrabFood API, Southeast Asia food delivery data, Singapore Grab, Malaysia Grab, Philippines GrabFood, Thailand Grab, Vietnam GrabFood, Indonesia Grab, Cambodia Grab, Myanmar Grab, cuisine SEO, merchant ID, pay per event
Related Actors
All public Actors from [lentic_clockss]. Click a name to open the Store detail page.
Food Delivery
- Grab Scraper — GrabFood / GrabMart SEA (this Actor)
- Foodpanda Scraper — Foodpanda APAC
- Foodora Scraper — Foodora NO / SE / AT / HU / CZ
- Uber Eats Scraper — multi-locale Uber Eats
- Deliveroo Scraper — Deliveroo markets
- DoorDash Scraper — DoorDash stores & menus
- Wolt Scraper — Wolt restaurants & cities
Jobs & Freelance
- LinkedIn Jobs Scraper
- Bayt Jobs Scraper
- Fiverr Gigs Scraper
- Freelancer.com Scraper
- Glassdoor Scraper
- Himalayas Jobs Scraper
- Indeed Jobs Scraper
- Jobicy Remote Jobs Scraper
- RemoteOK Jobs Scraper
- SEEK Jobs Scraper
- Upwork Jobs Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- 99.co Scraper
- Realtor.com Agents Scraper
- Apartments.com Rental Scraper
- Bayut Scraper
- Craigslist Housing Scraper
- Daft.ie Scraper
- Dot Property Scraper
- FINN.no Scraper
- Funda Scraper
- Hepsiemlak Scraper
- Idealista Scraper
- Immobiliare.it Scraper
- ImmoScout24 Scraper
- Naver Land Scraper
- OpenSooq Scraper
- Otodom Scraper
- Property Finder Scraper
- PropertyGuru Scraper
- realestate.com.au Scraper
- Realtor.ca Scraper
- Rightmove Scraper
- SeLoger Scraper
- SUUMO Scraper
- Zillow Group Scraper
E-commerce
- Shopee Search Scraper
- E-commerce Scraper
- 1688 Global Product Search Scraper
- Allegro Scraper
- Amazon Search Scraper
- ASOS Product Scraper
- Cdiscount Product Scraper
- Costco Product Scraper
- Coupang Product Scraper
- Etsy Scraper
- Lazada Scraper
- MercadoLibre Scraper
- Mercari Japan Scraper
- Rakuten Japan Scraper
- SHEIN Product Scraper
- Target Product Scraper
- Temu Product Scraper
- Walmart Product Scraper
Travel & Stays
- Booking.com & Airbnb Scraper
- Agoda Scraper
- Airbnb Listings Scraper
- Booking.com Hotels Scraper
- Despegar Scraper
- Expedia Scraper
- Traveloka Scraper
- Travelstart Flights Scraper
- Trip.com Scraper
- TripAdvisor Scraper
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ Browse the full profile: apify.com/lentic_clockss