iFood Scraper - Brazil Restaurants, Menus & Reviews
Pricing
from $2.20 / 1,000 results
iFood Scraper - Brazil Restaurants, Menus & Reviews
Extract public iFood restaurant and grocery-store details, menu prices and reviews in Brazil. Search by city, CEP, cuisine or merchant link. Pay per delivered row plus a run-start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
65
Total users
36
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
iFood Scraper
Extract iFood restaurants, grocery stores, menus and reviews in Brazil as rows you can export.
- Find merchants by city, CEP, coordinates, cuisine or chain.
- Read merchant details, menu prices and customer reviews.
- Link restaurant, menu item, product and review rows through merchant IDs.
- Discover city, category and vertical values for your next input.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a start fee.
What does iFood Scraper do?
iFood Scraper collects public marketplace data from ifood.com.br. Use it for menu-price comparisons, merchant research or review analysis. It is unofficial and is not affiliated with iFood.
- Listings:
city,category,mercado,chain,nearMe,homeandbrowseselect merchants by location or interest. - Merchant data:
merchant,menu,dishandreviewstarget a merchant or item. - Discovery:
discoverCities,discoverCategoriesanddiscoverVerticalsprovide input values. - Multiple links:
startUrlsaccepts several iFood URLs. - Optional rows:
includeMenuItems,includeReviews,includeDishesandenrichMenusdefault tofalse. Each additional row is billed at the same rate and uses the same input's row allowance. Explicitmenu,dishandreviewsmodes request those rows directly.
What data can you extract from iFood?
Each row has rowType, a stable id and scrapedAt. Child rows carry restaurantId; parent names, URLs and city are copied when available. Fields vary by source and mode.
Restaurant rows: restaurant
| Field | Description | Example |
|---|---|---|
merchantUuid | Merchant identifier | d468b0b0-a18f-4ecc-9631-6faf2aa8eeb0 |
name | Merchant name | Example Restaurant |
citySlug | City and state slug | sao-paulo-sp |
mainCategory | Main cuisine or category | Pizza |
evaluationAverage | Average rating | 4.6 |
deliveryFee | Displayed delivery fee | 5.99 |
deliveryTimeMin | Minimum delivery minutes | 30 |
url | Merchant page | https://www.ifood.com.br/delivery/... |
phoneIf | Contact number, when available | +1 555 0100 |
cnpj | Business registration, when available | XX.XXX.XXX/XXXX-XX |
Menu rows: menuItem
| Field | Description | Example |
|---|---|---|
productId | Menu or catalog item ID | example-item-id |
restaurantId | Parent merchant ID | example-merchant-id |
name | Item name | Margherita pizza |
price | Listed price | 39.90 |
category | Menu category | Pizzas |
Dish rows: product
| Field | Description | Example |
|---|---|---|
productId | Dish identifier | example-dish-id |
restaurantId | Parent merchant ID | example-merchant-id |
name | Dish name | Vegetarian burger |
price | Listed price | 29.90 |
Review rows: review
| Field | Description | Example |
|---|---|---|
restaurantId | Reviewed merchant | example-merchant-id |
rating | Review score | 5 |
comment | Review text | Example review text |
createdAt | Review date, when available | 2026-10-01T12:00:00Z |
City rows: city
| Field | Description | Example |
|---|---|---|
citySlug | City input value | sao-paulo-sp |
uf | Brazilian state code | SP |
Category rows: category
| Field | Description | Example |
|---|---|---|
categorySlug | Category input value | pizza |
name | Category label | Pizza |
Vertical rows: vertical
| Field | Description | Example |
|---|---|---|
categorySlug | Vertical input value | mercado |
name | Vertical label | mercado |
How to scrape iFood
- Open iFood Scraper in Apify Console.
- Fill a target field such as
citySlugormerchantUrl. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Download the dataset or read it through the API.
Empty input starts an example run for pizza in São Paulo, limited to 3 rows. Normal pricing applies; this is not a free sample. With mode: "auto", filling a target selects its mode. Priority is startUrls, merchant URL or UUID, pageId, chainName, category or search term, then location. Select an explicit mode for menus, dishes or reviews.
City
Use citySlug, such as sao-paulo-sp, for merchant listings.
Category
Use categorySlug or searchTerm. Add a location; otherwise São Paulo is used.
Mercado
Select mercado for grocery-store listings, optionally with a city.
Chain
Use chainName and a location to search for a brand.
Near me
Use nearMe with cep, address, or both latitude and longitude.
Home
Select home for a location's home feed; the fallback is São Paulo.
Browse
Use browse with a known iFood pageId and optional location.
Merchant
Provide merchantUrl or merchantUuid. A URL supplies its city; a bare UUID falls back to São Paulo unless you supply citySlug.
Menu
Select menu with a merchant URL or UUID to receive menu rows, not a nested menu inside one restaurant row.
Dish
Select dish with a merchant and its itemId or dishUuid.
Reviews
Select reviews with a merchant. Use reviewPage and reviewPageSize for paging.
Discover cities
Select discoverCities for city slugs, including predefined city entries.
Discover categories
Select discoverCategories. Categories may fall back to a predefined list.
Discover verticals
Select discoverVerticals for predefined vertical values; these are not live merchant counts.
Start URLs
Fill startUrls with iFood links. Each URL has its own maxResults allowance.
What to fill in
| Field | What to enter | Default |
|---|---|---|
mode | Mode above, or automatic selection | auto |
citySlug | City-state slug | Empty; form prefills sao-paulo-sp |
searchTerm | Search words, preferably Portuguese | Empty; form prefills pizza |
categorySlug | Cuisine or vertical | Empty |
chainName | Chain name | Empty |
cep | Eight-digit Brazilian postal code | Empty |
address | Brazilian location text | Empty |
latitude, longitude | Delivery coordinates together | Empty |
merchantUrl | iFood merchant link | Empty |
merchantUuid, merchantSlug | Merchant ID and optional slug | Empty |
itemId, dishUuid | Item ID for dish mode | Empty |
pageId | Known browse-page identifier | Empty |
startUrls | List of iFood URLs | Empty |
maxResults | Rows per input, from 1 to 500 | 70; form prefills 3 |
includeMenuItems | Menu rows with merchant data | false |
includeReviews | Reviews with merchant data | false |
includeDishes | Dish rows from search | false |
enrichMenus | Menu rows from listed merchants | false |
enrichDetails | Additional merchant contact and delivery fields | false |
maxEnrich | Maximum merchants to enrich, 0–50 | 5 |
loadMoreRounds | Extra search pages, 0–20 | 0 |
reviewPage | First review page, 1–50 | 1 |
reviewPageSize | Review page size, 1–50 | 30 |
sortBy | Optional sort value understood by iFood | Empty |
mainCategoryFilter | Text contained in the merchant category | Empty |
includeVerticals | Vertical keywords to retain | Empty |
cursor | Continuation object, if available; normally omit | Empty |
proxyCountry | Keep the Brazil setting | br |
Examples below request at most 3 rows per input. Replace YOUR_ITEM_ID and YOUR_PAGE_ID with actual iFood identifiers.
Automatic selection
{"searchTerm":"pizza","maxResults":3}
City
{"mode":"city","citySlug":"sao-paulo-sp","maxResults":3}
Category
{"mode":"category","citySlug":"curitiba-pr","categorySlug":"japonesa","maxResults":3}
Mercado
{"mode":"mercado","citySlug":"porto-alegre-rs","maxResults":3}
Chain
{"mode":"chain","chainName":"Burger King","citySlug":"sao-paulo-sp","maxResults":3}
Near me
{"mode":"nearMe","cep":"01310-100","maxResults":3}
Home
{"mode":"home","citySlug":"sao-paulo-sp","maxResults":3}
Browse
{"mode":"browse","pageId":"YOUR_PAGE_ID","citySlug":"sao-paulo-sp","maxResults":3}
Merchant
{"mode":"merchant","merchantUuid":"d468b0b0-a18f-4ecc-9631-6faf2aa8eeb0","maxResults":3}
Menu
{"mode":"menu","merchantUuid":"d468b0b0-a18f-4ecc-9631-6faf2aa8eeb0","maxResults":3}
Dish
{"mode":"dish","merchantUuid":"d468b0b0-a18f-4ecc-9631-6faf2aa8eeb0","itemId":"YOUR_ITEM_ID","maxResults":1}
Reviews
{"mode":"reviews","merchantUuid":"d468b0b0-a18f-4ecc-9631-6faf2aa8eeb0","reviewPageSize":3,"maxResults":3}
Discover cities
{"mode":"discoverCities","maxResults":3}
Discover categories
{"mode":"discoverCategories","citySlug":"sao-paulo-sp","maxResults":3}
Discover verticals
{"mode":"discoverVerticals","maxResults":3}
Start URLs
{"mode":"startUrls","startUrls":["https://www.ifood.com.br/delivery/sao-paulo-sp/212-burger-pinheiros-pinheiros/d468b0b0-a18f-4ecc-9631-6faf2aa8eeb0"],"maxResults":3}
maxItems and limit are aliases for maxResults. Close misspellings of field names can be corrected; other unknown fields are ignored with a note. Every run writes its input-resolution report to INPUT_REPORT in the default key-value store. Resolution errors use INVALID_INPUT: <field> — <how to fix>; other validation errors also identify the problem. Validation happens before row delivery, so no rows are charged for invalid input; the start fee can still apply.
Output example
Illustrative restaurant row; values are examples, not a current listing.
{"rowType": "restaurant","id": "example-merchant-id","merchantUuid": "example-merchant-id","name": "Example Restaurant","citySlug": "sao-paulo-sp","country": "br","mainCategory": "Pizza","evaluationAverage": 4.6,"deliveryFee": 5.99,"scrapedAt": "2026-10-01T12:00:00Z"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table.
Why use this iFood scraper?
- Row-based billing: the result charge applies to delivered rows, not attempted pages.
- Useful partial output: rows already written remain available after a stop. Available partial results can be delivered when collection ends early; abrupt cancellation does not guarantee undelivered data.
- Traceable input:
INPUT_REPORTexplains mode selection and corrections;RUN_SUMMARYrecords the outcome. - No invented source values: unavailable prices, contact details and ratings stay absent or empty.
- Several inputs: collect multiple merchant links with
startUrls. - No proxy setup: you do not need to set up proxies.
How much does it cost to scrape iFood?
Pay-per-event pricing includes platform usage. The start event costs $0.005 per GB of memory, with a minimum of one event. At the default 512 MB, one start costs $0.005.
| Apify plan | Start at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
| Platinum | $0.005 | $0.002 | $2.00 |
| Diamond | $0.005 | $0.0016 | $1.60 |
maxResults applies to each start URL, or the single target in other modes. The default is 70; larger requests are collected in parts of at most 70 rows. All row types share that input's allowance. The schema permits up to 500 rows per input; availability may produce fewer.
Free-plan users are limited to 10 runs of this Actor and 200 rows per run. The whole run is also bounded by Maximum cost per run (maxTotalChargeUsd in the API).
Example: one input delivering 3 rows on the Free plan at 512 MB costs 3 × $0.003 + $0.005 = $0.014 for one start. Optional menu or review rows count within those 3 rows, not as free additions.
What happens when the run timeout is too short
When automatic resumption is triggered, the run pauses with ABORTED and a message such as “Queued on the collection backend; this run will resume automatically when results are ready (about N s).” This pause is not a failed collection.
When ready, the same run resumes, delivers rows to the same dataset and finishes as SUCCEEDED if successful. Delivery can report “Resumed: delivering N rows.” Already-delivered rows are skipped rather than delivered or charged twice. No action is needed for this automatic pause.
A run can pause this way at most 3 times. Keep the default 3600-second timeout to reduce interruptions. Other failures or manual aborts are not a promise of automatic recovery.
The synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset while a run is paused. For longer collection, start asynchronously and read the dataset after SUCCEEDED, or use an ACTOR.RUN.SUCCEEDED webhook.
Use with AI agents and the API
Apify MCP server
For Claude, ChatGPT, Cursor or VS Code with remote MCP support, add:
https://mcp.apify.com?tools=lentic_clockss/ifood-scraper
Sign in through Apify OAuth, or supply Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read rows with get-dataset-items. Clients without remote support can use:
npx @apify/actors-mcp-server --tools lentic_clockss/ifood-scraper
Set APIFY_TOKEN for that client. Example prompt: “Find three pizza restaurants in São Paulo using iFood Scraper.”
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/ifood-scraper").call(run_input={"searchTerm": "pizza", "citySlug": "sao-paulo-sp", "maxResults": 3})if run["status"] == "SUCCEEDED":for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/ifood-scraper').call({searchTerm: 'pizza', citySlug: 'sao-paulo-sp', maxResults: 3,});if (run.status === 'SUCCEEDED') {const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);}
SDK calls can return at an automatic pause; do not treat ABORTED as a final dataset. For asynchronous use, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~ifood-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After success, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Integrations tab with Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Use Apify Schedules for recurring runs.
Em português
O iFood Scraper reúne dados públicos de restaurantes e mercados no Brasil, incluindo cardápios, preços e avaliações. Para começar, preencha citySlug com a cidade desejada ou informe merchantUrl para consultar um estabelecimento. Use searchTerm para buscar uma culinária e comece com maxResults igual a 3. Para obter o cardápio, escolha mode como menu; para avaliações, escolha reviews. Cada restaurante, item de cardápio ou avaliação entregue conta como uma linha cobrada, além da taxa de início. Os resultados podem ser exportados para planilhas. A disponibilidade depende da localização e das informações publicadas pelo estabelecimento. Este Actor não é afiliado ao iFood.
FAQ
Is it legal to scrape iFood?
This Actor collects public data. You are responsible for complying with applicable terms and data-protection law. Public availability is not unrestricted permission; personal data needs a lawful basis for your intended use.
Why did my run end as ABORTED?
Check its status message. An automatic-resume message indicates the temporary pause described above. Manual aborts and other errors need separate investigation.
How many results can I get?
Up to maxResults per input, subject to available rows, the run's cost limit and Free-plan caps. A requested limit is not a guaranteed count.
Why are some fields empty?
iFood may omit them for that merchant or location. enrichDetails can request more merchant information but cannot guarantee every field.
Can I collect grocery products?
Use mercado for stores and menu for a selected store's catalog. Grocery catalog items are separate menuItem rows.
Does discovery prove a city or vertical has active merchants?
No. Discovery can include predefined entries. Run a small merchant search to check the location and category you need.
Is an empty-input example free?
No. It requests up to 3 rows and uses the same start and row prices as other runs.
Do I need to configure proxies?
No. You do not need to set up proxies.
Limitations
- Brazil only; coverage depends on location and current iFood availability.
- No guarantee of complete menus, all reviews, every city or every contact field.
- Dish and browse modes need valid identifiers; example placeholders must be replaced.
- Delivery fees, availability and prices can change with location and time.
- Discovery lists are not a live census; some entries are predefined.
- Attribute arrays, such as choices and tags, are limited to 50 entries.
- No automatic translation of search words is configured; use Portuguese terms when possible.
Related scrapers
More food delivery and grocery scrapers from the same publisher:
- Grab Scraper
- PedidosYa Scraper
- Uber Eats Scraper
- Deliveroo Scraper
- Foodora Scraper
- Foodpanda Scraper
- DoorDash Scraper
- Rappi Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.