Ifood Restaurant Scraper avatar
Ifood Restaurant Scraper

Pricing

$16.90 / 1,000 results

Go to Apify Store
Ifood Restaurant Scraper

Ifood Restaurant Scraper

Developed by

Yasmany Grijalba Casanova

Yasmany Grijalba Casanova

Maintained by Community

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

5.0 (1)

Pricing

$16.90 / 1,000 results

2

6

6

Last modified

3 days ago

iFood Brazil Restaurant Data Extractor

Extract comprehensive restaurant data from iFood Brazil, including menus, prices, ratings, and operational information.

What This Actor Does

This actor provides structured access to iFood Brazil's restaurant data through 4 powerful modes:

  • Segments: Discover available food service categories in any location
  • Stores: List up to 100 restaurants per request with ratings and delivery info
  • Store Info: Get complete restaurant details (address, hours, ratings)
  • Menu: Extract full menus with items, prices, and customizable options

Important: Currently supports restaurants only. Other segments have different data structures.

Use Cases

  • Market Research: Analyze restaurant offerings and pricing across locations
  • Price Monitoring: Track menu prices and promotional offers
  • Competitor Analysis: Compare restaurants by ratings, delivery times, and fees
  • Data Analytics: Build datasets for food service market intelligence
  • Location Analysis: Understand restaurant density and coverage by area

Quick Start

1. Get Restaurants in a Location

{
"mode": "stores",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"alias": "HOME_FOOD_DELIVERY"
}

Returns: Up to 100 restaurants with 22 data fields including name, ratings, distance, delivery fees, and availability.

2. Get Complete Menu

{
"mode": "menu",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"store_id": "restaurant-id-from-stores"
}

Returns: Full menu structure with categories, items, prices, descriptions, and customizable options.

Operation Modes

Segments Mode

Discover available service segments for a location.

Input:

{
"mode": "segments",
"latitude": "-23.5608786",
"longitude": "-46.6570743"
}

Output: List of segments with aliases. Use HOME_FOOD_DELIVERY for restaurants.

Stores Mode

List restaurants in a specific location.

Input:

{
"mode": "stores",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"alias": "HOME_FOOD_DELIVERY"
}

Output: Up to 100 restaurants with:

  • Basic info: name, category, ID
  • Location: distance, region
  • Service: delivery fee, estimated time
  • Quality: user rating, availability
  • Metadata: images, URLs, flags

Data Fields (22): name, segment, store_type, store_id, store_slug, url, available, distance, user_rating, fee, time_min_minutes, time_max_minutes, latitude, longitude, region, alias, currency, image_url, is_ifood_delivery, is_new, is_super_restaurant, delivery_mode

Store Info Mode

Get detailed information for a specific restaurant.

Input:

{
"mode": "store_info",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"store_id": "restaurant-id-here"
}

Output: Complete restaurant profile with:

  • Identity: name, category, type
  • Address: full street address, city, state, ZIP
  • Location: precise coordinates
  • Operations: delivery fees, times, minimum order
  • Performance: ratings, review count
  • Pricing: price range category

Data Fields (25): store_id, name, main_category, store_type, logo, country, state, city, district, latitude, longitude, street_name, street_number, zip_code, price_range, delivery_fee, type_delivery_fee, takeout_time, delivery_time, minimum_order_value, preparation_time, distance, available, user_rating, user_rating_count

Extract complete restaurant menu with all items and prices.

Input:

{
"mode": "menu",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"store_id": "restaurant-id-here"
}

Output: Structured menu data with:

  • Categories: organized menu sections
  • Items: complete product information
  • Pricing: current prices, original prices, discounts
  • Options: customizable choices (sizes, extras, etc)
  • Tags: dietary info, portion sizes, etc

Menu Structure:

  • Categories with items
  • Each item includes: name, description, images, prices
  • Customization options when available
  • Product tags and metadata

Configuration

Required Parameters

  • latitude: Location latitude (string)
  • longitude: Location longitude (string)
  • mode: Operation mode (segments, stores, store_info, menu)

Mode-Specific Parameters

  • stores: alias (default: "HOME_FOOD_DELIVERY")
  • store_info: store_id (from stores mode)
  • menu: store_id (from stores mode)

Optional Parameters

  • request_waiting: Delay between requests in seconds (default: 3, min: 3, max: 10)

Best Practices

  1. Rate Limiting: Use request_waiting >= 3 to avoid blocks
  2. Workflow: segments → stores → store_info/menu
  3. Caching: Store results to minimize API calls
  4. Error Handling: Check for empty results and handle gracefully
  5. Coordinates: Use precise coordinates for better results

Output Format

All data is returned as validated JSON with consistent structure. Examples below show real API responses.

Segments Output

{
"data": [
{
"name": "INICIO",
"segment_type": "HOME",
"alias": "HOME_MULTICATEGORY_V10",
"latitude": "-23.5608786",
"longitude": "-46.6570743"
},
{
"name": "RESTAURANTES",
"segment_type": "RESTAURANT",
"alias": "HOME_FOOD_DELIVERY",
"latitude": "-23.5608786",
"longitude": "-46.6570743"
},
{
"name": "MERCADOS",
"segment_type": "GROCERIES",
"alias": "HOME_MERCADO_BR",
"latitude": "-23.5608786",
"longitude": "-46.6570743"
}
]
}

Stores Output (Full Example)

{
"data": [
{
"name": "EX-TOURO - BURGER JARDINS",
"segment": "LANCHES",
"store_type": "DELIVERY",
"store_id": "8008a304-b01d-4142-aff2-c57020b25e19",
"store_slug": "ex-touro---burger-jardins-jardim-paulista&super_categories_in=RESTAURANT",
"url": "merchant?alias=HOME_FOOD_DELIVERY&channel=IFOOD&deliveryMethodCode=DEFAULT&identifier=8008a304-b01d-4142-aff2-c57020b25e19&latitude=-23.5608786&longitude=-46.6570743&name=Ex-touro%20-%20Burger%20Jardins&remove_reserved_positions=false&should_return_merchant_applied_campaigns=true&size=100&slug=sao-paulo-sp%2Fex-touro---burger-jardins-jardim-paulista&super_categories_in=RESTAURANT",
"available": "S",
"distance": 0.26,
"user_rating": 4.8,
"fee": 0,
"time_min_minutes": 20,
"time_max_minutes": 30,
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"region": "sao-paulo-sp",
"alias": "HOME_FOOD_DELIVERY",
"currency": "BRL",
"image_url": ":resolution/logosgde/6684d74f-b2cb-431a-92c4-e6544adbcbf2_EXTOU_RDINS.png",
"is_ifood_delivery": false,
"is_new": false,
"is_super_restaurant": false,
"delivery_mode": "DEFAULT"
}
]
}

Store Info Output (Full Example)

{
"data": {
"store_id": "8008a304-b01d-4142-aff2-c57020b25e19",
"available": "S",
"delivery_fee": 0.0,
"type_delivery_fee": "FIXED",
"delivery_time": 20,
"distance": 0.26,
"minimum_order_value": 30,
"name": "EX-TOURO - BURGER JARDINS",
"preparation_time": 5,
"price_range": "CHEAPEST",
"takeout_time": 0,
"user_rating": 4.8,
"logo": "https://static-images.ifood.com.br/image/upload/t_thumbnail/logosgde/6684d74f-b2cb-431a-92c4-e6544adbcbf2_EXTOU_RDINS.png",
"country": "BR",
"city": "SAO PAULO",
"district": "JARDIM PAULISTA",
"latitude": "-23.562357",
"longitude": "-46.659076",
"state": "SP",
"street_name": "ALAMEDA JAU",
"street_number": "1150",
"zip_code": "01420002",
"user_rating_count": 2627,
"store_type": "RESTAURANT",
"main_category": "LANCHES"
}
}
{
"data": {
"store_id": "8008a304-b01d-4142-aff2-c57020b25e19",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"categories": [
{
"code": "e8fdcf0c-0233-4ce1-ad1b-70ec84218455",
"name": "TOP + BEM AVALIADOS DO IFOOD !",
"items_count": 8,
"items": [
{
"id": "466e545f-c951-402c-9191-32b1d6cbcec9",
"code": "466e545f-c951-402c-9191-32b1d6cbcec9",
"description": "2 BURGUERS + BATATA FRITA P",
"details": "COMBO: NA COMPRA DE 2 BURGERS + 1 BATATA, GANHE R$8,00 DE DESCONTO.",
"logo_url": "https://static.ifood-static.com.br/image/upload/t_medium/pratos/238e2621-fe02-45df-bd7e-3561676f5a69/202310021611_0V5W_i.jpg",
"unit_price": 0.0,
"unit_min_price": 85.9,
"unit_original_price": 117.0,
"need_choices": true,
"choices": [
{
"code": "2C5BA4",
"name": "ESCOLHA O 1O BURGER",
"min": 1,
"max": 1,
"garnish_items": [
{
"id": "f5295724-89b4-4e38-ab20-05c0e6aa8e7b",
"code": "f5295724-89b4-4e38-ab20-05c0e6aa8e7b",
"description": "1O X-TOURO",
"details": "BLEND EX-TOURO 180GR NO PAO BRIOCHE PRIME, QUEIJO MUCARELA E MOLHO AIOLI.",
"unit_price": 34.5
},
{
"id": "775b8384-0451-4902-a924-530ffde3f352",
"code": "775b8384-0451-4902-a924-530ffde3f352",
"description": "1O EX-TOURO",
"details": "BLEND EX-TOURO 180GR NO PAO DE BRIOCHE PRIME, QUEIJO MUCARELA, MAIONESE DE BACON, ALFACE E TOMATE.",
"unit_price": 38.0
}
]
}
],
"product_tags": [
{
"group": "PORTION_SIZE",
"tags": ["SERVES_2"]
}
]
}
]
}
]
}
}

Complete Workflow

Example showing how to extract complete restaurant data including menu:

from apify_client import ApifyClient
client = ApifyClient("your_apify_token")
actor_id = "yasmany.casanova/ifood-scraper"
# Step 1: Get available segments
seg_run = client.actor(actor_id).call(run_input={
"mode": "segments",
"latitude": "-23.5608786",
"longitude": "-46.6570743"
})
segments = client.dataset(seg_run["defaultDatasetId"]).list_items().items[0]['data']
print(f"Found {len(segments)} segments")
# Step 2: Get restaurants (use HOME_FOOD_DELIVERY for restaurants)
stores_run = client.actor(actor_id).call(run_input={
"mode": "stores",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"alias": "HOME_FOOD_DELIVERY",
"request_waiting": 3
})
restaurants = client.dataset(stores_run["defaultDatasetId"]).list_items().items[0]['data']
print(f"Found {len(restaurants)} restaurants")
# Step 3: Get detailed info for first restaurant
first_restaurant = restaurants[0]
store_id = first_restaurant['store_id']
info_run = client.actor(actor_id).call(run_input={
"mode": "store_info",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"store_id": store_id,
"request_waiting": 3
})
info = client.dataset(info_run["defaultDatasetId"]).list_items().items[0]['data']
print(f"Restaurant: {info['name']}")
print(f"Address: {info['street_name']}, {info['street_number']}")
print(f"Rating: {info['user_rating']} ({info['user_rating_count']} reviews)")
# Step 4: Get complete menu
menu_run = client.actor(actor_id).call(run_input={
"mode": "menu",
"latitude": "-23.5608786",
"longitude": "-46.6570743",
"store_id": store_id,
"request_waiting": 3
})
menu = client.dataset(menu_run["defaultDatasetId"]).list_items().items[0]['data']
categories = menu['categories']
print(f"Menu has {len(categories)} categories")
for category in categories:
print(f"- {category['name']}: {category['items_count']} items")
for item in category['items'][:3]: # Show first 3 items
print(f" - {item['description']}: R$ {item['unit_min_price'] or item['unit_price']}")

Limitations

  • One request per actor run
  • Up to 100 restaurants per stores request
  • Pagination managed by client
  • Real-time data dependent on iFood API availability

Pricing

Charged per restaurant result. Each mode counts as:

  • Segments: 1 result per segment
  • Stores: 1 result per restaurant
  • Store Info: 1 result per restaurant
  • Menu: 1 result per restaurant (includes full menu)

Technical Details

  • Language: Python 3.12
  • Validation: Pydantic models
  • HTTP Client: httpx (async)
  • Logging: Structured logs with loguru
  • Error Handling: Comprehensive exception management

Support

For issues or questions:

  • Check input parameters match the examples
  • Verify coordinates are valid Brazilian locations
  • Ensure request_waiting >= 3 seconds
  • Review actor logs for detailed error messages

Data Quality

All extracted data is:

  • Validated using Pydantic models
  • Structured in consistent JSON format
  • Cleaned and normalized
  • Real-time from iFood API

Version

Current version: 1.0

Updated: October 2025