iFood Restaurant Scraper avatar

iFood Restaurant Scraper

Pricing

from $25.00 / 1,000 restaurants

Go to Apify Store
iFood Restaurant Scraper

iFood Restaurant Scraper

Scrape iFood Brazil restaurants from a URL or store id: name, rating, address, CNPJ, opening hours, and menu items with prices. JSON export for delivery market research.

Pricing

from $25.00 / 1,000 restaurants

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by iFood or its affiliates. Data is read from publicly accessible restaurant profile and menu responses only. No login. You are responsible for complying with applicable law (including LGPD where a company id appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

This iFood scraper reads a Brazil restaurant from its delivery URL or store id. Each dataset row is one restaurant: name, rating, address, CNPJ, opening hours, and menu items with prices. Use it as an iFood API alternative for that public storefront: export JSON to a dataset from Python, Node.js, or an MCP assistant.

City search and customer review text are outside this Actor. A run starts from restaurant URLs you already have.

Brazil restaurantsUS chain menus
iFood Restaurant Scraper ◄── you are hereDoorDash Menu Scraper

When to use

  • Pull the public menu and prices for restaurants you already have links for
  • Collect the store address, CNPJ, and opening hours with the menu
  • Feed a pricing sheet or a market-research notebook from JSON

This Actor does not search a city, and it does not return review text.

Key features

  • Restaurant URL or merchant UUID
  • Name, category, rating, rating count, and price range
  • Street address, city, state, CEP, and coordinates
  • CNPJ, MCC, and the company name on the profile
  • Opening hours and minimum order
  • Nested menu items with price, original price, and availability
  • HTTP fetch, 256 MB

maxItems caps how many restaurants are saved. maxMenuItems caps the dishes nested on each row.

Input

FieldRequiredDescription
restaurantUrlsYesiFood delivery URL or merchant UUID. One restaurant per value
latitudeNoOptional customer latitude for the menu request
longitudeNoOptional customer longitude. Use it with latitude
includeMenuNoSave menu items. Default true
maxMenuItemsNoCap nested dishes. Default 200, maximum 1000
maxItemsNoStop after this many restaurants. Default 10, maximum 50
{
"restaurantUrls": [
"https://www.ifood.com.br/delivery/sao-paulo-sp/pizza-hut---paraiso-jardim-paulista/f1b60ced-d490-499f-976b-6d3d717d927e"
],
"includeMenu": true,
"maxMenuItems": 200,
"maxItems": 10
}

Output

One dataset row per restaurant. Menu dishes sit on menuItems. They are not separate rows.

FieldDescription
nameRestaurant name
merchantIdStore UUID
urlPublic restaurant page
categoryMain category
ratingStar rating
ratingCountNumber of ratings
cnpjCompany id from the profile
address, city, state, postalCodeStore address
minimumOrderMinimum order in BRL
hoursOpening shifts
menuItemCountDishes saved on the row
menuItemsName, category, price, original price, availability
{
"name": "Pizza Hut - Paraiso",
"merchantId": "f1b60ced-d490-499f-976b-6d3d717d927e",
"category": "Pizza",
"rating": 4.6,
"ratingCount": 308,
"city": "SAO PAULO",
"state": "SP",
"cnpj": "00.000.000/0001-00",
"minimumOrder": 30,
"currency": "BRL",
"menuItemCount": 2,
"menuItems": [
{
"name": "My Box",
"category": "Pizzas",
"price": 39.9,
"originalPrice": 52.7,
"available": true
}
]
}

Use cases

  • Compare menu prices across a list of restaurant URLs
  • Build a sheet of store addresses and CNPJ numbers for restaurants you already track
  • Check which dishes are marked available, with the list price and the original price

Integration examples

Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/ifood-restaurant-scraper").call({
restaurantUrls: [
"https://www.ifood.com.br/delivery/sao-paulo-sp/pizza-hut---paraiso-jardim-paulista/f1b60ced-d490-499f-976b-6d3d717d927e",
],
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].name, items[0].menuItemCount);

Python

from apify_client import ApifyClient
client = ApifyClient()
run = client.actor("crawloop/ifood-restaurant-scraper").call(run_input={
"restaurantUrls": [
"https://www.ifood.com.br/delivery/sao-paulo-sp/pizza-hut---paraiso-jardim-paulista/f1b60ced-d490-499f-976b-6d3d717d927e",
],
"maxItems": 1,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items[0]["name"], items[0]["menuItemCount"])

cURL

curl -X POST "https://api.apify.com/v2/acts/crawloop~ifood-restaurant-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"restaurantUrls\":[\"https://www.ifood.com.br/delivery/sao-paulo-sp/pizza-hut---paraiso-jardim-paulista/f1b60ced-d490-499f-976b-6d3d717d927e\"],\"maxItems\":1}"

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

  • "Run iFood Restaurant Scraper for this restaurant URL and return the name, CNPJ, and the first 20 menu prices as JSON"
  • "Scrape these iFood store ids with iFood Restaurant Scraper and list dishes that have an original price above the current price"
  • "After the iFood menu export, run DoorDash Menu Scraper for a US chain menu and compare the field list"

Suite next step

For a US chain menu after this Brazil restaurant export, run DoorDash Menu Scraper.

FAQ

Does this search restaurants by city?

No. Pass a delivery URL or the store UUID from that URL.

Are customer reviews included?

No. The row includes the rating and the rating count from the profile, not review text.

Is the CNPJ on every row?

The field is filled when the public profile includes it. Grocery and restaurant profiles both use the same store id input.