{
  "openapi": "3.0.1",
  "info": {
    "title": "iFood Restaurant & Menu Scraper - Brazil",
    "description": "Extract restaurants, full menus, prices, ratings, delivery fees and categories from iFood Brazil. Search by city, coordinates, category or store ID.",
    "version": "1.0",
    "x-build-id": "6FnsdeeH6LwXa68Lp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/analytics_tupiniquim~ifood-restaurant-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-analytics_tupiniquim-ifood-restaurant-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/analytics_tupiniquim~ifood-restaurant-scraper/runs": {
      "post": {
        "operationId": "runs-sync-analytics_tupiniquim-ifood-restaurant-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/analytics_tupiniquim~ifood-restaurant-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-analytics_tupiniquim-ifood-restaurant-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"
        ],
        "properties": {
          "mode": {
            "title": "Scraping mode",
            "enum": [
              "stores",
              "store_info",
              "menu"
            ],
            "type": "string",
            "description": "What to extract. 'stores' lists restaurants for a location; 'store_info' gets details for specific restaurants; 'menu' gets the full menu for specific restaurants.",
            "default": "stores"
          },
          "cities": {
            "title": "Cities (Brazil)",
            "type": "array",
            "description": "Cities to search restaurants in. Used in 'stores' mode. Pick from the built-in list of major Brazilian cities.",
            "items": {
              "type": "string",
              "enum": [
                "São Paulo",
                "Rio de Janeiro",
                "Brasília",
                "Salvador",
                "Fortaleza",
                "Belo Horizonte",
                "Manaus",
                "Curitiba",
                "Recife",
                "Goiânia",
                "Belém",
                "Porto Alegre",
                "São Luís",
                "Maceió",
                "Campo Grande",
                "Natal",
                "Teresina",
                "João Pessoa",
                "Aracaju",
                "Cuiabá",
                "Florianópolis",
                "Vitória",
                "Porto Velho",
                "Macapá",
                "Rio Branco",
                "Boa Vista",
                "Palmas",
                "Guarulhos",
                "Campinas",
                "São Gonçalo",
                "Duque de Caxias",
                "Nova Iguaçu",
                "Niterói",
                "São Bernardo do Campo",
                "Santo André",
                "Osasco",
                "Sorocaba",
                "Ribeirão Preto",
                "São José dos Campos",
                "Santos",
                "Jundiaí",
                "Piracicaba",
                "Bauru",
                "São José do Rio Preto",
                "Franca",
                "Uberlândia",
                "Contagem",
                "Juiz de Fora",
                "Betim",
                "Montes Claros",
                "Londrina",
                "Maringá",
                "Cascavel",
                "Joinville",
                "Blumenau",
                "Caxias do Sul",
                "Pelotas",
                "Canoas",
                "Feira de Santana",
                "Jaboatão dos Guararapes",
                "Caruaru",
                "Petrolina",
                "Aparecida de Goiânia",
                "Anápolis",
                "Ananindeua",
                "Vila Velha",
                "Serra"
              ]
            },
            "default": [
              "São Paulo"
            ]
          },
          "coordinates": {
            "title": "Custom coordinates",
            "type": "array",
            "description": "Alternative to cities: exact points to search around. Each item is an object like {\"lat\": -23.5505, \"lng\": -46.6333}. Used in 'stores' mode."
          },
          "startUrls": {
            "title": "Restaurant URLs",
            "type": "array",
            "description": "iFood restaurant page URLs (e.g. https://www.ifood.com.br/delivery/cidade-uf/slug/UUID). Used in 'store_info' and 'menu' modes.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "storeIds": {
            "title": "Store IDs (UUID)",
            "type": "array",
            "description": "iFood restaurant UUIDs, alternative to Restaurant URLs. Used in 'store_info' and 'menu' modes.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category filter",
            "type": "string",
            "description": "Optional. Only keep restaurants whose main category matches this text (e.g. 'Pizza', 'Japonesa', 'Açaí'). Applied in 'stores' mode."
          },
          "maxRestaurants": {
            "title": "Max restaurants per location",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Limit of restaurants collected per city/coordinate in 'stores' mode.",
            "default": 100
          },
          "includeMenu": {
            "title": "Also scrape full menu (stores mode)",
            "type": "boolean",
            "description": "When enabled in 'stores' mode, each restaurant found will also have its full menu scraped. Increases run time and cost.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "iFood uses anti-bot protection (PerimeterX). Brazilian residential proxies are strongly recommended for reliable results."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}