{
  "openapi": "3.0.1",
  "info": {
    "title": "iFood Scraper — Anti-Block: Menus, Prices & Reviews",
    "description": "iFood scraper with URL enrichment. Extract restaurants, menus with prices, reviews and ratings. Pass URLs directly OR search by city. Start FREE.",
    "version": "2.3",
    "x-build-id": "YTW6FnHh6iWtB0jBK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/viralanalyzer~ifood-restaurant-intelligence/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-viralanalyzer-ifood-restaurant-intelligence",
        "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/viralanalyzer~ifood-restaurant-intelligence/runs": {
      "post": {
        "operationId": "runs-sync-viralanalyzer-ifood-restaurant-intelligence",
        "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/viralanalyzer~ifood-restaurant-intelligence/run-sync": {
      "post": {
        "operationId": "run-sync-viralanalyzer-ifood-restaurant-intelligence",
        "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": "Restaurant URLs (URL Mode)",
            "type": "array",
            "description": "List of iFood restaurant URLs to enrich directly. When provided, the actor skips city/address discovery and extracts data from each valid URL. Format: https://www.ifood.com.br/delivery/{city}/{slug}/{uuid}",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City to search for restaurants. Use the format: 'sao-paulo-sp', 'rio-de-janeiro-rj', 'belo-horizonte-mg'. Only used in Search Mode (when restaurantUrls is empty).",
            "default": "sao-paulo-sp"
          },
          "address": {
            "title": "Delivery Address",
            "type": "string",
            "description": "Full delivery address to set location context (e.g., 'Av Paulista 1000'). Required for iFood to surface restaurants for that location. Only used in Search Mode.",
            "default": "Av Paulista 1000"
          },
          "query": {
            "title": "Search Query",
            "type": "string",
            "description": "Search term to filter the restaurant cards surfaced by iFood (e.g., 'pizza', 'sushi', 'hamburger'). Leave empty to skip this local filter. Only used in Search Mode.",
            "default": ""
          },
          "maxRestaurants": {
            "title": "Max Restaurants",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of restaurants to extract. Lower values reduce search-mode runtime and infrastructure cost.",
            "default": 5
          },
          "includeMenu": {
            "title": "Include Menu",
            "type": "boolean",
            "description": "Whether to extract menu items with prices for each restaurant. Source availability, rate limits, blocking, and fallback behavior can make menu coverage partial; inspect the output coverage metadata.",
            "default": true
          },
          "includeReviews": {
            "title": "Include Reviews",
            "type": "boolean",
            "description": "Whether to extract customer reviews for each restaurant.",
            "default": false
          },
          "menuMode": {
            "title": "Menu Coverage Mode",
            "enum": [
              "limited",
              "all"
            ],
            "type": "string",
            "description": "Choose 'limited' to return at most maxMenuItems per restaurant, or 'all' to remove that local Actor cap. In 'all' mode, maxMenuItems is ignored. 'All' does not guarantee the complete external iFood menu: source responses, pagination, availability, blocking, rate limits, and the catalog-search fallback can still make results partial. Beta gate: menuMode='all' cannot be combined with downloadImages=true; that input is rejected before scraping.",
            "default": "limited"
          },
          "maxMenuItems": {
            "title": "Max Menu Items per Restaurant",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of menu items returned per restaurant when menuMode='limited'. Ignored when menuMode='all'.",
            "default": 50
          },
          "downloadImages": {
            "title": "Download Menu Images",
            "type": "boolean",
            "description": "Download menu item photos and save successful downloads to the Key-Value Store with imageDownloadUrl. Requires includeMenu=true. Beta limitation: downloadImages=true is supported only with menuMode='limited'; combining it with menuMode='all' is rejected before scraping. Use limited mode for images or all mode without image downloads.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. Start without proxy for the lowest cost. Add a Brazilian residential proxy only if your search-mode run is blocked or returns no restaurants."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}