Grabfood Restaurant Scraper avatar

Grabfood Restaurant Scraper

Pricing

from $7.00 / 1,000 results

Go to Apify Store
Grabfood Restaurant Scraper

Grabfood Restaurant Scraper

Scrape GrabFood restaurants with full menus, prices, ratings, and delivery info across Vietnam, Singapore, Malaysia, Indonesia, Philippines, Cambodia, Myanmar. 97 city presets across 7 countries. Hex grid search for comprehensive city coverage. Export to JSON/CSV/Excel.

Pricing

from $7.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawl Smith

Crawl Smith

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract restaurant listings, full menus with prices, ratings, and delivery info from GrabFood across 7 Asian countries — Vietnam, Singapore, Malaysia, Indonesia, Philippines, Cambodia, and Myanmar.

Features

  • Restaurant data — name, cuisine tags, ratings, vote count, delivery fee, ETA, distance, address, coordinates, promo offers, halal status
  • Full menu extraction — item names, descriptions, prices (VND/local), categories, photos, availability, modifier groups (toppings, sizes)
  • 7 countries supported — Vietnam (34 provinces), Singapore, Malaysia, Indonesia, Philippines, Cambodia, Myanmar with city presets
  • Hex grid search — comprehensive city coverage using hexagonal grid pattern with automatic deduplication
  • Keyword & cuisine filters — search by keyword ("pho", "pizza") or filter by cuisine type
  • Fast API-first approach — captures auth token via Playwright, then bulk-fetches data via httpx (no browser scraping)
  • Rate limiting — configurable requests per second to avoid API throttling

Supported Countries & Cities

CountryCities
🇻🇳 Vietnam34 provinces — HCM, Hanoi, Da Nang, Hai Phong, Can Tho, Hue, and 28 more
🇸🇬 SingaporeSingapore
🇲🇾 MalaysiaKuala Lumpur, George Town, Johor Bahru, Ipoh, Kota Kinabalu, Kuching, Malacca
🇮🇩 IndonesiaJakarta, Surabaya, Bandung, Medan, Semarang, Yogyakarta, Bali, Makassar
🇵🇭 PhilippinesManila, Cebu, Davao, Quezon City
🇰🇭 CambodiaPhnom Penh, Siem Reap
🇲🇲 MyanmarYangon, Mandalay

Use custom city with custom_latlng for any location not listed above.

How to Use

  1. Select country and city — choose from presets or enter custom coordinates
  2. Set filters — optional keyword search, cuisine filter, max restaurants
  3. Enable grid search (optional) — for comprehensive area coverage
  4. Configure menu — enable/disable full menu extraction
  5. Run — the Actor captures an auth token, searches the GrabFood API, and pushes results to the dataset

Input Example

{
"country": "VN",
"city": "ho_chi_minh",
"search_keyword": "",
"max_restaurants": 50,
"include_menu": true,
"use_grid": false,
"requests_per_second": 2,
"proxy_type": "none"
}

For comprehensive city coverage, enable grid search. This generates a hexagonal pattern of search points:

{
"country": "VN",
"city": "da_nang",
"use_grid": true,
"grid_radius_km": 8,
"grid_step_km": 3,
"max_restaurants": 500,
"include_menu": true
}

Grid search automatically deduplicates restaurants found from multiple points.

Output

Each restaurant in the dataset contains:

{
"id": "5-C6JZJB3TAX43DA",
"name": "Katinat – Đồng Khởi 2",
"cuisine_tags": ["Coffee", "Milk Tea", "Tea"],
"rating": 4.3,
"vote_count": 354,
"delivery_fee": 0,
"delivery_eta_minutes": null,
"distance_km": 0.124,
"is_open": true,
"photo_url": "https://food-cms.grab.com/...",
"promos": [],
"latitude": 10.778,
"longitude": 106.701,
"address": "Katinat – Đồng Khởi 2",
"minimum_order": 0,
"small_order_fee": 0,
"is_halal": false,
"merchant_type": "",
"city": "ho_chi_minh",
"scraped_at": "2026-03-30T03:21:30.123456+00:00",
"menu_items": [
{
"name": "Cóc Cóc Đác Đác (L)",
"description": "Ambarella Juice With Arenga Pinnata",
"price": 690,
"original_price": null,
"category": "For You",
"photo_url": "https://food-cms.grab.com/...",
"is_available": true,
"modifier_groups": [
{
"name": "Topping",
"options": [
{"name": "Trân Châu Bắp", "price": 120},
{"name": "Thạch Hồng Đài", "price": 120}
]
}
],
"sold_count": null
}
],
"total_menu_items": 74,
"menu_categories_count": 5
}

Output Fields

FieldTypeDescription
idstringGrabFood merchant ID
namestringRestaurant name
cuisine_tagsstring[]Cuisine categories
ratingfloatAverage rating (1-5)
vote_countintNumber of reviews
delivery_feeintDelivery fee in local currency minor units
delivery_eta_minutesintEstimated delivery time
distance_kmfloatDistance from search point
is_openboolCurrently accepting orders
latitude / longitudefloatGPS coordinates
addressstringRestaurant address
minimum_orderintMinimum order value
is_halalboolHalal certified
menu_itemsarrayFull menu (when include_menu is true)
total_menu_itemsintNumber of menu items
scraped_atstringISO 8601 timestamp

Cost Estimate

ScenarioRestaurantsMenuMemoryEst. TimeEst. Cost
Quick test3Yes2 GB~30s~$0.01
Single city50Yes2 GB~3 min~$0.05
City grid200Yes2 GB~10 min~$0.15
Large city grid500Yes4 GB~25 min~$0.50
No menu (faster)200No2 GB~3 min~$0.05

Costs depend on Apify platform pricing. Run a small test first and check compute units consumed.

Proxy

  • Vietnam — usually works without proxy (none)
  • Other countries — may require residential proxy if running from outside the target country
  • Custom proxy — provide your own proxy URLs in the proxy_urls field

Use Cases

  • Market research — analyze restaurant density, cuisine trends, pricing by area
  • Competitor monitoring — track menu changes, pricing, ratings over time
  • Food delivery analytics — delivery fees, ETAs, minimum orders across cities
  • Location intelligence — map restaurant distribution with GPS coordinates

FAQ

Q: Why is Thailand not supported? A: GrabFood Thailand uses a different authentication flow that returns FW_ENDPOINT_FORBIDDEN. Other 7 countries use the same guest API.

Q: I'm getting 0 results for a non-VN country. A: Try enabling residential proxy. GrabFood may geo-restrict API access based on your IP location.

Q: How does grid search work? A: It generates hexagonal grid points covering the city area. Each point triggers a search API call. Results are deduplicated by restaurant ID, so you get comprehensive coverage without duplicates.

Q: Can I scrape without menu data? A: Yes — set include_menu to false. This skips the per-restaurant detail API call and is significantly faster.

Q: What's the rate limit? A: Default is 2 requests/second. Lower it if you see errors; raise it (up to 10) for faster runs at your own risk.