# Ifood Restaurant Scraper (`yasmany.casanova/ifood-scraper`) Actor

Extracts restaurant data from iFood Brazil—including profiles, menus, prices, and ratings—with location-based search and clean, structured JSON output.

- **URL**: https://apify.com/yasmany.casanova/ifood-scraper.md
- **Developed by:** [Yasmany Grijalba Casanova](https://apify.com/yasmany.casanova) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 194 total users, 17 monthly users, 95.5% runs succeeded, 9 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$25.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## iFood Restaurant Scraper

Extract comprehensive restaurant data from **iFood** — the largest food delivery platform in Latin America.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue?logo=apify)](https://apify.com)
[![Residential Proxy](https://img.shields.io/badge/Proxy-Residential-orange)](https://apify.com/proxy)
[![Brazil](https://img.shields.io/badge/Region-Brazil-green)](https://www.ifood.com.br)

---

> ℹ️ **Residential Proxy Required**
> This Actor requires a residential proxy for reliable data extraction. You have two options:
>
> 1. **Apify Residential Proxy** — available on Apify paid plans. See [apify.com/pricing](https://apify.com/pricing).
> 2. **Your own residential proxy** — provide it via the `customProxyUrl` input field (works on any Apify plan, including Free).
>
> Runs without a residential proxy will stop immediately with a clear message, so you are not charged for unnecessary compute time.

---

### Table of Contents

- [Quick Start](#quick-start)
- [Features](#features)
- [Use Cases](#use-cases)
- [How It Works](#how-it-works)
- [Input Parameters](#input-parameters)
- [Operation Modes](#operation-modes)
- [Output Examples](#output-examples)
- [Data Fields](#data-fields)
- [Integrations](#integrations)
- [How to Get Coordinates](#how-to-get-coordinates)
- [Important Notes](#important-notes)
- [FAQ](#faq)
- [Support](#support)

---

### Quick Start

Get started in three simple steps:

#### Step 1: Find restaurants in São Paulo

```json
{
  "mode": "stores",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743"
}
````

#### Step 2: Get restaurant details

```json
{
  "mode": "store_info",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e"
}
```

#### Step 3: Extract the menu

```json
{
  "mode": "menu",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e"
}
```

> **Tip**: Use `stores` mode first to discover restaurant IDs, then use those IDs for `store_info`, `menu`, and `reviews` modes.

***

### Features

| Feature | Description |
|---------|-------------|
| **100+ Restaurants per Request** | Get up to 100 restaurants in any Brazilian location |
| **Complete Menu Data** | Full menus with prices, descriptions, and customization options |
| **Detailed Store Profiles** | Address, ratings, delivery info, and operating hours |
| **Customer Reviews** | Extract customer reviews with ratings, comments, and dates |
| **Real-Time Data** | Fresh data directly from iFood's platform |
| **Structured JSON Output** | Clean, validated data ready for analysis |

***

### Use Cases

<details>
<summary><strong>Market Research</strong></summary>

Analyze restaurant offerings and pricing across different locations to understand market trends and opportunities.

</details>

<details>
<summary><strong>Price Monitoring</strong></summary>

Track menu prices and promotional offers over time to stay competitive or find the best deals.

</details>

<details>
<summary><strong>Competitor Analysis</strong></summary>

Compare restaurants by ratings, delivery times, fees, and menu offerings to gain competitive insights.

</details>

<details>
<summary><strong>Business Intelligence</strong></summary>

Build comprehensive datasets for food service market insights and data-driven decision making.

</details>

<details>
<summary><strong>Location Analysis</strong></summary>

Understand restaurant density, coverage, and food variety by geographic area.

</details>

<details>
<summary><strong>Reputation Management</strong></summary>

Monitor customer reviews and feedback to track restaurant performance and customer satisfaction.

</details>

<details>
<summary><strong>Voice of Customer (VoC)</strong></summary>

Analyze customer sentiment and feedback trends across restaurants and regions.

</details>

***

### How It Works

```
+------------------+    +------------------+    +------------------+    +------------------+
|     STEP 1       |    |     STEP 2       |    |     STEP 3       |    |     STEP 4       |
|   Search         |--->|   Store Info     |--->|   Menu           |--->|   Reviews        |
|   Stores         |    |   Details        |    |   Extraction     |    |   Feedback       |
+------------------+    +------------------+    +------------------+    +------------------+
        |                      |                      |                      |
        v                      v                      v                      v
   Up to 100             Complete store          Full menu with        Customer reviews
   restaurants           information             prices and items      with ratings
```

#### Step 1: Search Restaurants

Find restaurants in any Brazilian location using coordinates:

```json
{
  "mode": "stores",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743"
}
```

**Returns**: Up to 100 restaurants with name, ratings, delivery fees, distance, and availability.

#### Step 2: Get Restaurant Details

Use the `store_id` from Step 1 to get complete restaurant information:

```json
{
  "mode": "store_info",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e"
}
```

**Returns**: Full address, ratings, delivery times, minimum order value, and more.

#### Step 3: Get Complete Menu

Extract the full menu with all items and prices:

```json
{
  "mode": "menu",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e"
}
```

**Returns**: Categories, items, prices, descriptions, images, and customization options.

#### Step 4: Get Customer Reviews

Extract customer reviews and ratings:

```json
{
  "mode": "reviews",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e",
  "maxReviews": 100
}
```

**Returns**: Customer reviews with names, ratings, comments, and dates.

***

### Input Parameters

#### Required Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `mode` | string | Operation mode: `stores`, `store_info`, `menu`, or `reviews` |
| `latitude` | string | Location latitude (e.g., "-23.5608786") |
| `longitude` | string | Location longitude (e.g., "-46.6570743") |

#### Mode-Specific Parameters

| Parameter | Type | Required For | Description |
|-----------|------|--------------|-------------|
| `store_id` | string | `store_info`, `menu`, `reviews` | Restaurant UUID from `stores` mode |
| `maxReviews` | integer | `reviews` | Maximum reviews to fetch (1-1000, default: 100) |

#### Optional Parameters

| Parameter | Default | Description |
|-----------|---------|-------------|
| `maxRetries` | `3` | Retry attempts for failed requests |
| `timeout` | `30` | Request timeout in seconds |

#### Proxy Configuration

> **⚠️ Proxy Required** — This Actor requires **Apify Residential Proxy** to work. Make sure your Apify plan includes Residential Proxy access. Proxy usage is billed separately to your Apify account.

| Parameter | Default | Description |
|-----------|---------|-------------|
| `useApifyProxy` | `true` | Enable Apify Proxy (required) |
| `proxyGroups` | `["RESIDENTIAL"]` | Proxy group — RESIDENTIAL is required |
| `proxyCountry` | `BR` | Proxy country code (optional, BR recommended if available) |

***

### Operation Modes

| Mode | Description | Required Parameters | Output |
|------|-------------|---------------------|--------|
| `stores` | Search restaurants by location | `latitude`, `longitude` | Up to 100 restaurants |
| `store_info` | Get restaurant details | `latitude`, `longitude`, `store_id` | Complete store profile |
| `menu` | Get menu items with prices | `latitude`, `longitude`, `store_id` | Full menu with categories |
| `reviews` | Get customer reviews | `latitude`, `longitude`, `store_id` | Reviews with ratings and comments |

***

### Output Examples

#### Stores Mode

```json
{
  "mode": "stores",
  "data": [
    {
      "name": "Pizza Hut - Paraíso",
      "segment": "Pizza",
      "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e",
      "available": "S",
      "distance": 1.28,
      "user_rating": 4.7,
      "fee": 899,
      "time_min_minutes": 25,
      "time_max_minutes": 35,
      "is_ifood_delivery": true
    }
  ],
  "metadata": {
    "items_count": 100,
    "scraped_at": "2026-01-21T14:00:00.000Z"
  }
}
```

#### Store Info Mode

```json
{
  "mode": "store_info",
  "data": {
    "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e",
    "name": "Pizza Hut - Paraíso",
    "main_category": "Pizza",
    "city": "São Paulo",
    "district": "Jardim Paulista",
    "state": "SP",
    "street_name": "Av Brigadeiro Luis Antonio",
    "street_number": "2893",
    "zip_code": "01401000",
    "user_rating": 4.7,
    "user_rating_count": 555,
    "delivery_fee": 8.99,
    "delivery_time": 33
  }
}
```

#### Menu Mode

```json
{
  "mode": "menu",
  "data": {
    "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e",
    "categories": [
      {
        "name": "Pizzas Tradicionais",
        "items_count": 15,
        "items": [
          {
            "description": "Pizza Marguerita",
            "details": "Molho de tomate, mussarela e manjericão",
            "unit_price": 45.90,
            "logo_url": "https://static.ifood-static.com.br/...",
            "choices": [
              {
                "name": "Escolha sua massa",
                "garnish_items": [
                  {"description": "Massa tradicional", "unit_price": 0.0},
                  {"description": "Massa pan", "unit_price": 5.0}
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
```

#### Reviews Mode

```json
{
  "mode": "reviews",
  "data": {
    "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e",
    "total_reviews_available": 3808,
    "reviews_fetched": 100,
    "reviews": [
      {
        "customer_name": "Maximo",
        "rating": 4.0,
        "grade": 4.0,
        "comment": "Comprei Grande, mas, tamanho menor, não é grande",
        "comment_date": "2026-01-09T23:36:55.725000+00:00",
        "order_date": "2026-01-09T22:41:29.799000+00:00",
        "order_number": 3635,
        "status": "ACE",
        "moderated": false
      },
      {
        "customer_name": "Mozart",
        "rating": 5.0,
        "grade": 5.0,
        "comment": "Excelente pizza",
        "comment_date": "2025-12-23T23:48:30.834000+00:00",
        "order_date": "2025-12-23T22:39:09.072000+00:00",
        "order_number": 1713,
        "status": "ACE",
        "moderated": false
      }
    ]
  }
}
```

***

### Data Fields

#### Stores Mode

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Restaurant name |
| `segment` | string | Food category (Pizza, Japanese, etc.) |
| `store_id` | string | Unique restaurant identifier (UUID) |
| `available` | string | Open/closed status ("S" = open) |
| `distance` | number | Distance in kilometers |
| `user_rating` | number | Average rating (0-5 stars) |
| `fee` | number | Delivery fee in cents (899 = R$8.99) |
| `time_min_minutes` | number | Minimum delivery time (minutes) |
| `time_max_minutes` | number | Maximum delivery time (minutes) |
| `is_ifood_delivery` | boolean | iFood delivery vs restaurant delivery |

#### Store Info Mode

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Restaurant name |
| `main_category` | string | Primary food category |
| `city` | string | City name |
| `state` | string | State abbreviation |
| `district` | string | Neighborhood/district |
| `street_name` | string | Street name |
| `street_number` | string | Street number |
| `zip_code` | string | Postal code |
| `latitude` | number | Restaurant latitude |
| `longitude` | number | Restaurant longitude |
| `user_rating` | number | Average rating (0-5 stars) |
| `user_rating_count` | number | Total number of ratings |
| `delivery_fee` | number | Delivery fee in BRL |
| `delivery_time` | number | Estimated delivery time (minutes) |
| `minimum_order_value` | number | Minimum order amount in BRL |

#### Menu Mode

| Field | Type | Description |
|-------|------|-------------|
| `categories` | array | Menu sections |
| `items` | array | Products in each category |
| `description` | string | Item name |
| `details` | string | Item description |
| `unit_price` | number | Item price in BRL |
| `logo_url` | string | Item image URL |
| `choices` | array | Customization options (sizes, extras) |
| `garnish_items` | array | Individual options with prices |

#### Reviews Mode

| Field | Type | Description |
|-------|------|-------------|
| `total_reviews_available` | number | Total reviews for the restaurant |
| `reviews_fetched` | number | Number of reviews returned |
| `customer_name` | string | Customer's first name |
| `rating` | number | Rating (1-5 stars) |
| `grade` | number | Grade given |
| `comment` | string | Customer comment (if any) |
| `comment_date` | string | When the review was posted (ISO 8601) |
| `order_date` | string | When the order was placed (ISO 8601) |
| `order_number` | number | Order reference number |
| `status` | string | Review status |
| `moderated` | boolean | Whether review was moderated |

***

### Integrations

Use the **API** tab on the Actor page to get ready-to-use code examples in **Python**, **JavaScript**, and **cURL**. The examples are auto-generated with the correct parameters for immediate integration.

***

### How to Get Coordinates

#### Option 1: Google Maps

1. Open [Google Maps](https://maps.google.com)
2. Right-click on any location in Brazil
3. Click on the coordinates to copy them
4. Use the first number as `latitude` and second as `longitude`

#### Option 2: Use Common City Coordinates

| City | Latitude | Longitude |
|------|----------|-----------|
| São Paulo (Centro) | -23.5608786 | -46.6570743 |
| Rio de Janeiro | -22.9068467 | -43.1728965 |
| Belo Horizonte | -19.9166813 | -43.9344931 |
| Brasília | -15.7942287 | -47.8821658 |
| Curitiba | -25.4289541 | -49.2671340 |
| Salvador | -12.9714 | -38.5124 |
| Fortaleza | -3.7172 | -38.5433 |
| Recife | -8.0476 | -34.8770 |
| Porto Alegre | -30.0346 | -51.2177 |
| Manaus | -3.1190 | -60.0217 |

***

### Important Notes

| Topic | Details |
|-------|---------|
| **Region** | Brazil only — iFood operates exclusively in Brazil |
| **Proxy** | **Required** — Apify Residential Proxy is required (`proxyCountry: BR` recommended if available) |
| **Stores Limit** | `stores` mode returns maximum 100 restaurants per request |
| **Store ID** | Use UUIDs from `stores` mode for other operations |
| **Coordinates** | Required for all modes — use Brazilian coordinates |
| **One Request Per Run** | Each run executes one operation |

***

### FAQ

<details>
<summary><strong>Why am I getting no results?</strong></summary>

- Make sure you have **Residential Proxy** enabled (`useApifyProxy: true`, `proxyGroups: ["RESIDENTIAL"]`)
- Verify your coordinates are within Brazil
- Check that the location has iFood coverage
- Try coordinates from a major city (São Paulo, Rio de Janeiro)

</details>

<details>
<summary><strong>Why is my store_id invalid?</strong></summary>

- Store IDs are UUIDs in the format: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
- Use the exact ID from `stores` mode output
- Do not include the store name or URL

</details>

<details>
<summary><strong>Why am I getting timeout errors?</strong></summary>

- Ensure a **residential proxy** is configured (required for reliable extraction)
- Increase the `timeout` parameter (try 60 seconds)
- iFood may be slower during peak hours (lunch/dinner)

</details>

<details>
<summary><strong>Why is the menu empty?</strong></summary>

- Some restaurants have incomplete data on iFood
- The restaurant may be temporarily closed
- Try a different store to verify the actor is working

</details>

<details>
<summary><strong>Can I scrape restaurants outside Brazil?</strong></summary>

This actor is configured specifically for the Brazilian market. iFood does not operate outside Brazil.

</details>

<details>
<summary><strong>How often is the data updated?</strong></summary>

Data is extracted in real-time directly from iFood. Each run fetches the latest available information including current prices, availability, and ratings.

</details>

<details>
<summary><strong>How many reviews can I extract?</strong></summary>

You can extract up to 1,000 reviews per restaurant using the `maxReviews` parameter. Default is 100.

</details>

***

### Support

Having issues? Here is how to get help:

1. **Check the FAQ** above for common solutions
2. **Review your input** parameters to ensure they match the required format
3. **Test with default values** to ensure the actor is working
4. **Contact support** through [Apify](https://apify.com) for additional assistance

# Actor input Schema

## `mode` (type: `string`):

Type of data to extract: stores (restaurant list), store\_info (restaurant details), menu (complete menu with prices), or reviews (customer reviews).

## `latitude` (type: `string`):

Location latitude in Brazil. Use Google Maps to find coordinates: right-click any location and copy the first number.

## `longitude` (type: `string`):

Location longitude in Brazil. Use Google Maps to find coordinates: right-click any location and copy the second number.

## `store_id` (type: `string`):

Restaurant UUID. Required for store\_info, menu, and reviews modes. Get this ID from stores mode first.

## `maxReviews` (type: `integer`):

Maximum number of reviews to fetch (reviews mode only). Default: 100, Max: 1000.

## `maxPages` (type: `integer`):

Maximum number of result pages to fetch in 'stores' mode. Each page returns ~20 restaurants. Lower values are faster; increase it to retrieve more restaurants for a location.

## `useApifyProxy` (type: `boolean`):

Enable Apify Residential Proxy for reliable data extraction. Requires an Apify paid plan. Free-plan users can provide their own residential proxy via 'customProxyUrl' below.

## `proxyGroups` (type: `array`):

Must be set to \['RESIDENTIAL'] for this Actor.

## `proxyCountry` (type: `string`):

Country code for proxy (ISO 3166-1 alpha-2). BR is recommended.

## `customProxyUrl` (type: `string`):

Provide your own residential proxy instead of using Apify Proxy. Format: http://user:pass@host:port. If set, this overrides the Apify Proxy settings above. Recommended for users on the Apify Free plan.

## `maxRetries` (type: `integer`):

Maximum retry attempts for failed requests.

## `timeout` (type: `integer`):

Request timeout in seconds.

## Actor input object example

```json
{
  "mode": "stores",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "store_id": "f1b60ced-d490-499f-976b-6d3d717d927e",
  "maxReviews": 100,
  "maxPages": 5,
  "useApifyProxy": true,
  "proxyGroups": [
    "RESIDENTIAL"
  ],
  "proxyCountry": "BR",
  "customProxyUrl": "http://user:pass@proxy.example.com:8000",
  "maxRetries": 3,
  "timeout": 30
}
```

# Actor output Schema

## `restaurants` (type: `string`):

Extracted restaurant data including stores list, store info, or menu items depending on the mode used

## `storesView` (type: `string`):

View of restaurant list data (stores mode)

## `storeInfoView` (type: `string`):

View of detailed store information (store\_info mode)

## `menuView` (type: `string`):

View of menu categories and items (menu mode)

## `reviewsView` (type: `string`):

View of customer reviews and ratings (reviews mode)

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "stores",
    "latitude": "-23.5608786",
    "longitude": "-46.6570743",
    "maxReviews": 100,
    "maxPages": 5,
    "useApifyProxy": true,
    "proxyGroups": [
        "RESIDENTIAL"
    ],
    "proxyCountry": "BR",
    "maxRetries": 3,
    "timeout": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("yasmany.casanova/ifood-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "stores",
    "latitude": "-23.5608786",
    "longitude": "-46.6570743",
    "maxReviews": 100,
    "maxPages": 5,
    "useApifyProxy": True,
    "proxyGroups": ["RESIDENTIAL"],
    "proxyCountry": "BR",
    "maxRetries": 3,
    "timeout": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("yasmany.casanova/ifood-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "stores",
  "latitude": "-23.5608786",
  "longitude": "-46.6570743",
  "maxReviews": 100,
  "maxPages": 5,
  "useApifyProxy": true,
  "proxyGroups": [
    "RESIDENTIAL"
  ],
  "proxyCountry": "BR",
  "maxRetries": 3,
  "timeout": 30
}' |
apify call yasmany.casanova/ifood-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=yasmany.casanova/ifood-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ifood Restaurant Scraper",
        "description": "Extracts restaurant data from iFood Brazil—including profiles, menus, prices, and ratings—with location-based search and clean, structured JSON output.",
        "version": "2.5",
        "x-build-id": "b7ZRx8IUNTyV3R8NQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/yasmany.casanova~ifood-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-yasmany.casanova-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/yasmany.casanova~ifood-scraper/runs": {
            "post": {
                "operationId": "runs-sync-yasmany.casanova-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/yasmany.casanova~ifood-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-yasmany.casanova-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",
                "required": [
                    "mode",
                    "latitude",
                    "longitude"
                ],
                "properties": {
                    "mode": {
                        "title": "Operation Mode",
                        "enum": [
                            "stores",
                            "store_info",
                            "menu",
                            "reviews"
                        ],
                        "type": "string",
                        "description": "Type of data to extract: stores (restaurant list), store_info (restaurant details), menu (complete menu with prices), or reviews (customer reviews).",
                        "default": "stores"
                    },
                    "latitude": {
                        "title": "Latitude",
                        "type": "string",
                        "description": "Location latitude in Brazil. Use Google Maps to find coordinates: right-click any location and copy the first number.",
                        "default": "-23.5608786"
                    },
                    "longitude": {
                        "title": "Longitude",
                        "type": "string",
                        "description": "Location longitude in Brazil. Use Google Maps to find coordinates: right-click any location and copy the second number.",
                        "default": "-46.6570743"
                    },
                    "store_id": {
                        "title": "Store ID",
                        "type": "string",
                        "description": "Restaurant UUID. Required for store_info, menu, and reviews modes. Get this ID from stores mode first."
                    },
                    "maxReviews": {
                        "title": "Max Reviews",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of reviews to fetch (reviews mode only). Default: 100, Max: 1000.",
                        "default": 100
                    },
                    "maxPages": {
                        "title": "Max Pages (stores mode)",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of result pages to fetch in 'stores' mode. Each page returns ~20 restaurants. Lower values are faster; increase it to retrieve more restaurants for a location.",
                        "default": 5
                    },
                    "useApifyProxy": {
                        "title": "Use Apify Residential Proxy",
                        "type": "boolean",
                        "description": "Enable Apify Residential Proxy for reliable data extraction. Requires an Apify paid plan. Free-plan users can provide their own residential proxy via 'customProxyUrl' below.",
                        "default": true
                    },
                    "proxyGroups": {
                        "title": "Proxy Groups",
                        "type": "array",
                        "description": "Must be set to ['RESIDENTIAL'] for this Actor.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "RESIDENTIAL"
                        ]
                    },
                    "proxyCountry": {
                        "title": "Proxy Country",
                        "pattern": "^[A-Z]{2}$",
                        "type": "string",
                        "description": "Country code for proxy (ISO 3166-1 alpha-2). BR is recommended.",
                        "default": "BR"
                    },
                    "customProxyUrl": {
                        "title": "Custom Residential Proxy URL (optional)",
                        "type": "string",
                        "description": "Provide your own residential proxy instead of using Apify Proxy. Format: http://user:pass@host:port. If set, this overrides the Apify Proxy settings above. Recommended for users on the Apify Free plan."
                    },
                    "maxRetries": {
                        "title": "Max Retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum retry attempts for failed requests.",
                        "default": 3
                    },
                    "timeout": {
                        "title": "Timeout (seconds)",
                        "minimum": 10,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Request timeout in seconds.",
                        "default": 30
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
