{
  "openapi": "3.0.1",
  "info": {
    "title": "iFood Scraper — Menus, Reviews, CNPJ & Address",
    "description": "iFood restaurants from delivery URLs or city/address search. One row per store: name, rating, CNPJ, address, hours, menu items with prices when the catalog answers, and optional reviews. Brazil marketplace data for competitive research, dark-kitchen scouting, and store audits.",
    "version": "1.0",
    "x-build-id": "KNBgx7rLb8NxX1ZfX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~ifood-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-ifood-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/memo23~ifood-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-ifood-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/memo23~ifood-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-ifood-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",
        "properties": {
          "restaurantUrls": {
            "title": "iFood restaurant links or IDs",
            "type": "array",
            "description": "Restaurant pages from ifood.com.br, which look like https://www.ifood.com.br/delivery/<city>/<name>/<id>, or just the id at the end of one. Each restaurant is one row and is charged once, even when it is listed twice. While this list has anything in it, the city search below is not used.",
            "items": {
              "type": "string"
            }
          },
          "query": {
            "title": "Dish or restaurant name",
            "type": "string",
            "description": "Optional, e.g. pizza, sushi, açaí or the name of a chain. Restaurants with this word in their name are put first. Empty: any restaurant in the city."
          },
          "address": {
            "title": "Street to search around",
            "type": "string",
            "description": "Optional street and number in that city, e.g. Rua XV de Novembro 700. It is used only when the city alone finds no restaurants; the run then looks for restaurants that deliver near this street."
          },
          "city": {
            "title": "City to search",
            "type": "string",
            "description": "Write it the way iFood does in its links (curitiba-pr, porto-alegre-rs) or plainly (Curitiba, PR). A link to an iFood city page also works."
          },
          "includeExtra": {
            "title": "Add CNPJ, street address, phone and hours",
            "type": "boolean",
            "description": "On (default): each row also gets the street address, CNPJ, phone and weekday opening hours. Charged once per restaurant, and only when at least one of these comes back.",
            "default": true
          },
          "includeReviews": {
            "title": "Add customer reviews",
            "type": "boolean",
            "description": "Off (default). On: each row also gets the restaurant's customer reviews (reviewer name, stars, and the comment when one was written) and its average scores. Charged once per restaurant when at least one review comes back, not per review.",
            "default": false
          },
          "includeMenu": {
            "title": "Add the menu with prices",
            "type": "boolean",
            "description": "On (default): each row also gets the dishes with prices, plus the cheapest, most expensive and average price. Charged once per restaurant, and only when at least one dish comes back. When iFood shows no menu for a restaurant, its menuSource column reads unavailable and nothing is charged for the menu.",
            "default": true
          },
          "maxMenuItems": {
            "title": "Dishes per restaurant",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "The most dishes kept from each menu, default 50. Not used when the menu length below is set to every dish.",
            "default": 50
          },
          "menuMode": {
            "title": "Menu length",
            "enum": [
              "limited",
              "all"
            ],
            "type": "string",
            "description": "Keep up to the number of dishes above (default), or every dish iFood lists. Very long menus can still come back cut short.",
            "default": "limited"
          },
          "maxRestaurants": {
            "title": "Restaurants in total",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "The run stops after this many restaurants, default 50, at most 500. Each one is a charged row. On the free Apify plan a run stops at 100.",
            "default": 50
          },
          "maxConcurrency": {
            "title": "Restaurants read at once",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many restaurants are read in parallel, default 4, at most 8.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}