{
  "openapi": "3.0.1",
  "info": {
    "title": "iFood Restaurant Scraper - Menus, Reviews & CNPJ",
    "description": "Scrape iFood Brazil restaurants by city, CEP or address, with optional whole-city coverage. Get CNPJ and company registry data, ratings, delivery fee, opening hours, plus optional menus with prices and customer reviews. Export to Excel, CSV or JSON. Unofficial, not affiliated with iFood.",
    "version": "0.0",
    "x-build-id": "LqDllnI1jv3AKkFdN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/roomy_tweet~ifood-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-roomy_tweet-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/roomy_tweet~ifood-scraper/runs": {
      "post": {
        "operationId": "runs-sync-roomy_tweet-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/roomy_tweet~ifood-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-roomy_tweet-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": {
          "places": {
            "title": "Places (city, CEP or address)",
            "type": "array",
            "description": "Where to search. Each line can be a city (\"Curitiba, PR\"), a CEP (\"01310-100\") or a street address (\"Av. Paulista, 1000, São Paulo\"). iFood shows the restaurants that deliver to each point.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "coverWholeCity": {
            "title": "Cover the whole city",
            "type": "boolean",
            "description": "For cities, search from a grid of points covering the city's official boundary (IBGE) instead of only the city center. Finds far more restaurants, but takes longer: roughly one search per point and term.",
            "default": false
          },
          "onlyInsideCity": {
            "title": "Only restaurants located in the city",
            "type": "boolean",
            "description": "For cities: leave out restaurants that deliver into the city but are located in a neighboring municipality (in a whole-city test of Curitiba, 25% were). They are not charged.",
            "default": true
          },
          "gridSpacingKm": {
            "title": "Grid spacing (km)",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Distance between grid points when covering a whole city. Smaller finds more restaurants in dense areas but needs more searches.",
            "default": 3
          },
          "maxGridPoints": {
            "title": "Max grid points per city",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Upper limit of grid points per city. If the spacing would need more, the spacing is widened automatically.",
            "default": 100
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "What to search for at each location, just like the iFood search box (dishes, cuisines or restaurant names). Each term finds a different set of restaurants.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Coordinates (advanced)",
            "type": "array",
            "description": "Optional. Exact points as { \"name\", \"latitude\", \"longitude\" }, used in addition to the places above.",
            "default": []
          },
          "restaurantUrls": {
            "title": "Restaurant URLs",
            "type": "array",
            "description": "Optional. iFood restaurant pages (https://www.ifood.com.br/delivery/...) to fetch directly, without searching.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxRestaurants": {
            "title": "Max restaurants",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum unique restaurants to collect. Start with 10. Use 0 to remove this input limit; on paid runs the run budget still caps discovery and reserves any requested menu and review add-ons.",
            "default": 10
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 100,
            "maximum": 2000,
            "type": "integer",
            "description": "How many search results (dishes) to read for each location and term. Results come in pages of 100; more results find more restaurants.",
            "default": 300
          },
          "includeDetails": {
            "title": "Include CNPJ, address and opening hours",
            "type": "boolean",
            "description": "Fetch each restaurant's details: CNPJ, full address, coordinates, opening hours, minimum order and more. Adds one request per restaurant.",
            "default": true
          },
          "includeRegistry": {
            "title": "Include company registry data (Receita Federal)",
            "type": "boolean",
            "description": "Look up each CNPJ in the public company registry: legal name, registration status (ATIVA, INAPTA, BAIXADA…), opening date and company age, size, MEI/Simples, main activity (CNAE) and share capital. Legal names of sole traders (MEI) are never returned, because they contain the owner's name.",
            "default": true
          },
          "includeRegistryPhone": {
            "title": "Include the company phone from the registry",
            "type": "boolean",
            "description": "Adds the phone number registered with the Receita Federal. Never returned for sole traders (MEI), whose numbers are usually personal. Make sure your use complies with the LGPD.",
            "default": false
          },
          "includeMenu": {
            "title": "Include menu search (dishes and prices)",
            "type": "boolean",
            "description": "Find dishes, prices, promotions, categories and photos by searching the restaurant's own name, plus price statistics. This is a search-based menu sample; completeness against the official app is not guaranteed. Adds a menu event only when dishes are returned.",
            "default": false
          },
          "includeMatchedItems": {
            "title": "Include dishes that matched the search terms",
            "type": "boolean",
            "description": "Lighter option: only the dishes that matched your search terms (no extra requests). Ignored when the full menu is on.",
            "default": false
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Adds the review summary (total reviews, and the average of the latest ratings to compare with the all-time rating) and the latest reviews that have a written comment, with the restaurant's reply. Customer names and order numbers are never returned, and the customer's name is removed from comments and replies.",
            "default": false
          },
          "maxReviewsPerRestaurant": {
            "title": "Max reviews with comments per restaurant",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many of the latest reviews with a written comment to return. Most iFood reviews are ratings only, so the Actor reads up to 'Max review pages' of 30 reviews each to find them.",
            "default": 20
          },
          "maxReviewPages": {
            "title": "Max review pages per restaurant",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Pages of 30 reviews to read per restaurant. More pages find more comments and a larger sample for the recent average, but each page is one more request.",
            "default": 2
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Overall pace. Tested at up to 120 per minute without blocks. Searches are always spaced at least 2 seconds apart and slow down automatically if iFood pushes back.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxies. Not required for small runs.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}