{
  "openapi": "3.0.1",
  "info": {
    "title": "Grab Scraper | GrabFood GrabMart SEA Menus",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "wgwId7eeF1BdZYcef"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~grab-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-grab-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/lentic_clockss~grab-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-grab-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/lentic_clockss~grab-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-grab-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode",
          "countryCode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "restaurant",
              "mart",
              "mart_items",
              "mart_item",
              "mart_merchants",
              "chain",
              "cuisine",
              "recommended",
              "startUrls",
              "discoverCategories",
              "directory"
            ],
            "type": "string",
            "description": "search | restaurant | mart | mart_items | mart_item | mart_merchants | chain | cuisine | recommended | startUrls | discoverCategories | directory",
            "default": "search"
          },
          "countryCode": {
            "title": "Country",
            "enum": [
              "sg",
              "my",
              "ph",
              "th",
              "vn",
              "id",
              "kh",
              "mm"
            ],
            "type": "string",
            "description": "Grab market country code",
            "default": "ph"
          },
          "sitemapCity": {
            "title": "Directory / mart sitemap city",
            "type": "string",
            "description": "Directory or mart_items only: exact published sitemap city slug, for example singapore or metro-manila. Leave empty for all published cities. Independent of delivery city and latlng."
          },
          "sitemapShard": {
            "title": "Directory / mart shard index",
            "minimum": 0,
            "type": "integer",
            "description": "Directory or mart_items only: zero-based shard index, or reuse diagnostics.nextCursor.sitemapShard.",
            "default": 0
          },
          "sitemapOffset": {
            "title": "Directory / mart entry offset",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Directory or mart_items only: entry offset, or reuse diagnostics.nextCursor.sitemapOffset.",
            "default": 0
          },
          "sitemapMaxShards": {
            "title": "Directory / mart shard budget",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Maximum sitemap shards read in this run.",
            "default": 1
          },
          "modifiedSince": {
            "title": "Directory modified since",
            "type": "string",
            "description": "Optional inclusive sitemap lastmod date (YYYY-MM-DD), not a menu or price-change timestamp. A filtered slice may return zero results."
          },
          "enrichDetails": {
            "title": "Enrich directory details",
            "type": "boolean",
            "description": "Directory only: inspect at most maxEnrich public merchant pages. HTTP 200 route shells stay directoryOnly=true and do not count as successful detail enrichment.",
            "default": false
          },
          "city": {
            "title": "City slug",
            "type": "string",
            "description": "Optional delivery city slug (e.g. makati, cebu, chiang-mai, hanoi, bali). Leave empty to use the market's main city. Ignored when latlng is set; restaurant/startUrls URLs from another market use their own market's location."
          },
          "latlng": {
            "title": "Lat,Lng",
            "type": "string",
            "description": "Optional delivery pin as \"latitude,longitude\" (e.g. 14.5547,121.0244). Overrides city."
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Search keyword. Search mode uses \"pizza\" when empty; mart mode uses a grocery default when empty; cuisine mode uses it only when cuisineSlug is empty. Other modes ignore it."
          },
          "businessType": {
            "title": "Business type",
            "enum": [
              "ALL",
              "FOOD",
              "MART"
            ],
            "type": "string",
            "description": "Filter search/recommended results",
            "default": "ALL"
          },
          "cuisineSlug": {
            "title": "Cuisine slug",
            "type": "string",
            "description": "For mode=cuisine — e.g. pizza, chicken, mart-delivery"
          },
          "cuisineId": {
            "title": "Cuisine ID",
            "type": "string",
            "description": "Optional cuisine numeric/string id for /cuisines/{slug}/{id}"
          },
          "merchantId": {
            "title": "Merchant ID",
            "type": "string",
            "description": "Grab merchant id"
          },
          "merchantSlug": {
            "title": "Merchant slug",
            "type": "string",
            "description": "URL slug for restaurant or mart merchant detail"
          },
          "itemId": {
            "title": "Mart item ID",
            "type": "string",
            "description": "For mode=mart_item — GrabMart product item id (e.g. SGDD01271ITM0445130)"
          },
          "itemSlug": {
            "title": "Mart item slug",
            "type": "string",
            "description": "For mode=mart_item — product slug in the item URL path"
          },
          "restaurantUrl": {
            "title": "Restaurant URL",
            "type": "string",
            "description": "Full food.grab.com restaurant URL"
          },
          "chainName": {
            "title": "Chain name",
            "type": "string",
            "description": "For mode=chain — brand / chain keyword or slug"
          },
          "lang": {
            "title": "Language path",
            "type": "string",
            "description": "Path locale (en/th/vi/id/ms/zh/km depending on market)",
            "default": "en"
          },
          "includeMenuItems": {
            "title": "Include menu items (restaurant pages)",
            "type": "boolean",
            "description": "Restaurant mode and restaurant startUrls only: emit menu items as separate billed Dataset rows (they share the maxResults budget). List modes return merchant rows only.",
            "default": false
          },
          "maxEnrich": {
            "title": "Max directory detail pages",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Directory mode with enrichDetails: maximum public merchant pages to inspect.",
            "default": 5
          },
          "maxMenuItemsPerRestaurant": {
            "title": "Menu items per restaurant",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Per-restaurant cap. Menu items still count within that input's maxResults budget.",
            "default": 25
          },
          "expandBranches": {
            "title": "Expand branch merchants",
            "type": "boolean",
            "description": "Emit branchMerchants[] as separate billed merchant rows",
            "default": false
          },
          "emitCuisines": {
            "title": "Emit cuisine categories",
            "type": "boolean",
            "description": "Also emit category rows from merchant cuisine[] tags",
            "default": false
          },
          "emitPromoLabels": {
            "title": "Emit promo / labels",
            "type": "boolean",
            "description": "Also emit promo and littleIconLabel rows",
            "default": false
          },
          "pageSize": {
            "title": "Portal page size",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "Merchants requested per portal page (1-32). A resumed run keeps the page size stored in its cursor.",
            "default": 32
          },
          "maxResults": {
            "title": "Max results per keyword, URL, or target",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Most rows for each keyword, start URL, restaurant, cuisine, chain, or directory target. Default 70; larger numbers are collected in parts of 70. Restaurants, menu items, branch merchants, categories, promos, and labels all count together. The whole run stops at your maximum total charge. Free Apify plan: up to 200 rows per run and 10 runs of this Actor (limits set by the Actor developer).",
            "default": 70
          },
          "cursor": {
            "title": "Resume cursor",
            "type": "object",
            "description": "Optional. Paste nextCursor from a previous run's RUN_SUMMARY with the same mode, country, location and query to continue without repeats or gaps."
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "food.grab.com / mart.grab.com URLs for mode=startUrls",
            "items": {
              "type": "string"
            }
          },
          "proxyCountry": {
            "title": "Proxy country hint",
            "type": "string",
            "description": "Optional ISO country for chain-mode egress (defaults to the market)"
          },
          "workerBaseUrl": {
            "title": "Worker base URL override",
            "type": "string",
            "description": "Optional allowlisted HTTPS override for the scrape backend."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}