Grab All-in-One Api
Pricing
from $3.90 / 1,000 grabfood searches
Grab All-in-One Api
Grab All-in-One API is a unified REST endpoint for querying GrabFood and Grab data — restaurant search, nearby merchants, menu details, reviews, ride pricing, and nearby drivers
Pricing
from $3.90 / 1,000 grabfood searches
Rating
0.0
(0)
Developer
Romy
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
What does Grab All-in-One API do?
Grab All-in-One API is a unified REST endpoint for querying GrabFood and Grab data — restaurant search, nearby merchants, menu details, reviews, ride pricing, and nearby drivers — all from a single always-on API powered by Apify Standby.
No scraping setup required. Call the endpoint, get JSON back instantly.
Why use Grab All-in-One API?
- All Grab data in one place — no need to manage 6 separate actors
- Always-on — no cold start, responds in milliseconds
- Standard REST — works with any language: curl, Python, JavaScript, Postman
- Use cases: restaurant aggregators, delivery price comparison, driver availability monitoring, competitor research, food trend analysis
Endpoints
| Method | Path | Description | Price |
|---|---|---|---|
GET | /grabfood/search | Search restaurants by keyword + location | $0.005/call |
GET | /grabfood/nearby | List all nearby restaurants at a location | $0.005/call |
GET | /grabfood/detail | Get full detail for one or more merchant IDs | $0.015/call |
GET | /grabfood/reviews | Get customer reviews for a merchant | $0.010/call |
POST | /grab/ride-price | Get fare quotes for one or more routes | $0.010/call |
GET | /grab/drivers | Get nearby available drivers at a location | $0.010/call |
GET | /grab/place-search | Search/autocomplete places by keyword near a location | $0.008/call |
GET | /grab/reverse-geocode | Get the nearest address/place for a coordinate | $0.005/call |
How to use
- Go to Apify Store and click Try for free
- The actor runs in Standby mode — it starts once and stays alive
- Call the API using your Apify token:
curl "https://romy--grab-api.apify.actor/grabfood/search?keyword=ayam+goreng&lat_lng=-6.1754,106.8272&max_items=10" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
Input (Query Parameters)
All responses follow this format:
{ "success": true, "data": [...], "count": 30, "nextCursor": "30", "hasMore": true }
Pass nextCursor as cursor in the next request to get the next page. When hasMore is false, you've reached the end. Each page = 1 API call = 1 charge.
GET /grabfood/search
| Param | Type | Default | Description |
|---|---|---|---|
keyword | string | required | Search keyword (e.g. "ayam goreng") |
lat_lng | string | Jakarta center | Coordinates "lat,lng" |
cursor | string | "0" | Pagination cursor from previous response |
GET /grabfood/nearby
| Param | Type | Default | Description |
|---|---|---|---|
lat_lng | string | Jakarta center | Coordinates "lat,lng" |
cursor | string | "0" | Pagination cursor from previous response |
GET /grabfood/detail
| Param | Type | Default | Description |
|---|---|---|---|
merchant_ids | string | required | Comma-separated IDs, e.g. "ID-GF-xxx,ID-GF-yyy" |
lat_lng | string | Jakarta center | Coordinates "lat,lng" |
GET /grabfood/reviews
| Param | Type | Default | Description |
|---|---|---|---|
merchant_id | string | required | Single merchant ID |
cursor | string | "" | Pagination cursor from previous response |
language | string | en-US | Review language |
POST /grab/ride-price
Body (JSON):
{"routes": [{"origin": { "latitude": -6.1754, "longitude": 106.8272 },"destination": { "latitude": -6.2088, "longitude": 106.8123 }}]}
GET /grab/drivers
| Param | Type | Default | Description |
|---|---|---|---|
lat | number | required | Latitude |
lng | number | required | Longitude |
service_id | integer | 97 | Grab service type ID |
GET /grab/place-search
Search for a place by name/address near a location — useful for turning a place name into the lat_lng every other endpoint needs.
| Param | Type | Default | Description |
|---|---|---|---|
keyword | string | required | Place name or address, e.g. "Monas" |
lat_lng | string | Jakarta center | Coordinates to search near, "lat,lng" |
GET /grab/reverse-geocode
| Param | Type | Default | Description |
|---|---|---|---|
lat_lng | string | required | Coordinates "lat,lng" |
Output Example
{"success": true,"count": 2,"data": [{"id": "6-C32KCBBWV3BDTT","address": { "name": "Popeyes Chicken - Skyline", "city": "Jakarta" },"estimatedDeliveryTime": 30,"merchantBrief": {"cuisine": ["Western", "Fried Chicken"],"halal": true,"rating": 4.7,"vote": 1200}}]}
Pricing
This Actor uses Pay Per Event billing — you only pay for successful API calls.
| Endpoint | Price per call |
|---|---|
/grabfood/search | $0.005 |
/grabfood/nearby | $0.005 |
/grabfood/detail | $0.015 |
/grabfood/reviews | $0.010 |
/grab/ride-price | $0.010 |
/grab/drivers | $0.010 |
/grab/place-search | $0.008 |
/grab/reverse-geocode | $0.005 |
Example: 1,000 search calls = $5. Failed requests (4xx/5xx) are not charged. You get $5 free credit on signup.
Known limitations
- Auth is a single, hardcoded personal account JWT (
src/scrapers/grab.ts), not a device-only/anonymous credential. Every call to every endpoint authenticates as one specific Grab account — if that account gets flagged, rate-limited, or logged out by Grab, the whole API breaks for every caller at once until the token is replaced. This is the same risk category as Google Maps'sListPromotedPinAds(documented ingoogle-maps-all-in-one-api's README) — it works today, but there's no fallback if the account goes bad. - GrabMart (grocery delivery) isn't exposed, despite the app having a parallel
grabmart/*API namespace to GrabFood's (location-merchants,category-tree, etc.). Every shape tried (GETwith query params,POSTwith a JSON body matching GrabFood's own pattern) returned400/502— the real request shape wasn't found in the time spent, and wasn't worth guessing further without a live traffic capture. /grabfood/search/hints(autocomplete) andreviews/v1/merchants/review-summary(aggregate rating stats) aren't exposed — both return200with empty bodies regardless of parameter name/method tried; the real trigger condition wasn't identified.
FAQ
Does this work outside Indonesia?
GrabFood is available across Southeast Asia — pass the correct lat_lng for your target city.
Is this official? No. This is an independent tool using Grab's internal API. Use responsibly and in accordance with Grab's Terms of Service.
Need a custom integration? Contact me at romysaputrasihanandaa@gmail.com or hire me on Fiverr.