Ifood Pharmacy Scraper
Pricing
from $35.00 / 1,000 results
Ifood Pharmacy Scraper
Extract pharmacy data from iFood Brazil: drugstore listings by location, detailed store information, and full product catalogs with prices, EAN codes, packaging, and unit information. Ideal for price intelligence, market research, and e-commerce data.
Pricing
from $35.00 / 1,000 results
Rating
0.0
(0)
Developer
Yasmany Grijalba Casanova
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Extract comprehensive pharmacy data from iFood — Latin America's leading food delivery platform, with a dedicated drugstore storefront. Get pharmacy listings, detailed store profiles, category trees, and full medication and healthcare product catalogs with prices, EAN-13 barcodes, packaging and units.
ℹ️ Residential Proxy Required This Actor requires a residential proxy for reliable data extraction. You have two options:
- Apify Residential Proxy — available on Apify paid plans. See apify.com/pricing.
- Your own residential proxy — provide it via the
customProxyUrlinput 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
- Features
- Use Cases
- How It Works
- Input Parameters
- Operation Modes
- Output Examples
- Data Fields
- Integrations
- How to Get Coordinates
- Important Notes
- FAQ
- Support
Quick Start
Get started in four simple steps:
Step 1: Find pharmacies in São Paulo
{"mode": "stores","latitude": "-23.6051","longitude": "-46.6367"}
Step 2: Get pharmacy details
{"mode": "store_info","latitude": "-23.6051","longitude": "-46.6367","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d"}
Step 3: List the store's categories
{"mode": "categories","latitude": "-23.6051","longitude": "-46.6367","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d"}
Step 4: Extract the product catalog for ONE category
{"mode": "assortments","latitude": "-23.6051","longitude": "-46.6367","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","category_id": "56e4b49b-563a-4b2a-8011-8b883bd36afd"}
Tip: To cover a full catalog, list categories first then dispatch one
assortmentsrun percategory_id— runs can be parallelized for speed.
Features
| Feature | Description |
|---|---|
| 100+ Pharmacies per Request | Cursor-paginated listing — typical locations return 100–200 pharmacies |
| Complete Store Profiles | Address, delivery info, rating, price range, minimum order |
| Full Product Catalogs | Every SKU with price, EAN-13 barcode, packaging, unit |
| Discount Detection | Original price + discount percent when items are on sale |
| Category Discovery | Full department/aisle tree (UUIDs ready for assortments) |
| Incremental Dataset Writes | Products are saved as they are scraped — partial results survive crashes |
| Structured JSON Output | Clean, schema-validated data ready for analysis |
Use Cases
How It Works
+------------------+ +------------------+ +------------------+ +------------------+| STEP 1 | | STEP 2 | | STEP 3 | | STEP 4 || Stores |--->| Store Info |--->| Categories |--->| Assortments || (location) | | (profile) | | (tree) | | (one category) |+------------------+ +------------------+ +------------------+ +------------------+| | | |v v v v100-200 Complete store Department All SKUs withpharmacies profile + address UUIDs EAN, price, unit
Step 1: Find Pharmacies
List pharmacies delivering to any Brazilian coordinates:
{"mode": "stores","latitude": "-23.6051","longitude": "-46.6367"}
Returns: A cursor-paginated list (20 pharmacies per page) with store_id, name, rating, delivery fee, delivery time, and distance.
Step 2: Get Pharmacy Details
Pick a store_id from Step 1 and fetch its full profile:
{"mode": "store_info","latitude": "-23.6051","longitude": "-46.6367","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d"}
Returns: Full address (street, city, district, state, ZIP), delivery fee in BRL, price range, minimum order, rating, and more.
Step 3: List Categories
Discover the store's departments. Each category has a UUID used in Step 4:
{"mode": "categories","latitude": "-23.6051","longitude": "-46.6367","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d"}
Returns: Array of {code, name} pairs — e.g. Medicamentos, Higiene e Beleza, Saúde e Bem-Estar, Primeiros Socorros, Suplementos e Vitaminas.
Step 4: Extract a Category's Products
Extract every SKU of one category (paginated, 50 items per page):
{"mode": "assortments","latitude": "-23.6051","longitude": "-46.6367","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","category_id": "56e4b49b-563a-4b2a-8011-8b883bd36afd"}
Returns: Products with ean, price, price_original, discount_percent, packaging, unit, quantity, image URL.
Pro tip: Run multiple
assortmentsjobs in parallel (one percategory_id) to extract a full catalog faster.
Input Parameters
Required Parameters
| Parameter | Type | Description |
|---|---|---|
mode | string | Operation mode: stores, store_info, categories, or assortments |
latitude | string | Location latitude (e.g., "-23.6051") |
longitude | string | Location longitude (e.g., "-46.6367") |
Mode-Specific Parameters
| Parameter | Type | Required For | Description |
|---|---|---|---|
store_id | string | store_info, categories, assortments | Pharmacy UUID from stores mode |
category_id | string | assortments | Category UUID from categories mode |
Optional Parameters
| Parameter | Default | Description |
|---|---|---|
maxPages | 200 | Safety cap on paginated requests (stores: 20 pharmacies/page, assortments: 50 products/page) |
pageDelay | 1 | Seconds between paginated requests to avoid rate limits |
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 (BR recommended) |
customProxyUrl | — | Your own residential proxy URL (overrides Apify Proxy) |
Operation Modes
| Mode | Description | Required Parameters | Output |
|---|---|---|---|
stores | List pharmacies by location | latitude, longitude | 100–200 pharmacies per location |
store_info | Get pharmacy details | latitude, longitude, store_id | Complete pharmacy profile |
categories | List a store's departments | latitude, longitude, store_id | Array of {code, name} pairs |
assortments | Extract products of ONE category | latitude, longitude, store_id, category_id | Full paginated SKU list |
Output Examples
Stores Mode
{"mode": "stores","data": [{"name": "DROGARIA SAO PAULO - AFONSO CELSO","segment": "MERCADO","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","store_slug": "drogaria-sao-paulo---afonso-celso-vila-mariana","available": "S","distance": 0.24,"user_rating": 4.9,"fee": 0,"time_min_minutes": 0,"time_max_minutes": 0,"is_ifood_delivery": true,"delivery_mode": "DEFAULT","alias": "PHARMACIES"}],"metadata": {"items_count": 161,"scraped_at": "2026-04-23T13:00:47.261914+00:00"}}
Note: The
storeshome feed returns summary cards that includedistance,rating,store_id, and basic delivery hints. For the full delivery fee and exact minutes, callstore_infowith thestore_id— that's wheredelivery_fee: 11.48,delivery_time: 10, etc. come from.
Store Info Mode
{"mode": "store_info","data": {"store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","name": "Drogaria São Paulo - Afonso Celso","main_category": "Mercado","store_type": "PHARMACY","city": "SAO PAULO","state": "SP","district": "VILA MARIANA","street_name": "R AFONSO CELSO","street_number": "1720","zip_code": "04119062","price_range": "CHEAPEST","delivery_fee": 11.48,"type_delivery_fee": "FIXED","delivery_time": 10,"minimum_order_value": 30,"user_rating": 4.8,"user_rating_count": 51}}
Categories Mode
{"mode": "categories","data": {"store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","total_categories": 12,"categories": [{"code": "56e4b49b-563a-4b2a-8011-8b883bd36afd", "name": "Medicamentos"},{"code": "9e4c5d75-5bbf-4d68-87e6-f3bc0a568368", "name": "Higiene e Beleza"},{"code": "4d535aee-1d21-4502-a7ee-b5a92dc8e0f1", "name": "Saúde e Bem-Estar"},{"code": "dca5ace7-ee70-4c1b-91e5-2ddbc0da6b25", "name": "Primeiros Socorros"},{"code": "77249e1f-acbd-4f91-934c-1e46c9db7450", "name": "Suplementos e Vitaminas"}]}}
Assortments Mode
Each product is pushed to the dataset as its own record (incremental), followed by a single summary record at the end.
Product record:
{"mode": "assortments","item": {"id": "04ba4c15-b563-40e7-92c0-18f35e390437","description": "Clortalidona 50mg Germed Pharma Caixa com 30 Comprimidos","ean": "7896004708867","price": 28.15,"price_original": null,"has_discount": false,"discount_percent": null,"availability": "AVAILABLE","enabled": true,"unit": null,"packaging": null,"quantity": null,"category_id": "56e4b49b-563a-4b2a-8011-8b883bd36afd","category_name": "Medicamentos","store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","logo_url": "https://static-images.ifood.com.br/image/upload/..."}}
Summary record (at end of run):
{"mode": "assortments","kind": "summary","data": {"store_id": "9ea4a606-58d7-490f-8075-3ecdc13e8d4d","category_id": "56e4b49b-563a-4b2a-8011-8b883bd36afd","category_name": "Medicamentos","total_items": 100,"pagination_total_items": 100,"pages_fetched": 2,"pages_failed": 0}}
Data Fields
Stores Mode
| Field | Type | Description |
|---|---|---|
name | string | Pharmacy name (uppercased) |
segment | string | Category as returned by iFood (currently "MERCADO" even for pharmacies — iFood hasn't specialized this field for the drugstore catalog). Use alias or store_type in store_info to disambiguate. |
store_id | string | Unique pharmacy identifier (UUID) |
store_slug | string | URL slug derived from the store name |
available | string | "S" = delivering now, "N" = closed/out of range |
distance | number | Distance from the input coordinates (km) |
user_rating | number | Average rating (0–5 stars) |
fee | number | Delivery fee in cents (1148 = R$11.48). Returns 0 when the pharmacy is closed / not currently accepting delivery — check store_info.delivery_fee for the canonical value. |
time_min_minutes | number | Minimum delivery time (minutes) |
time_max_minutes | number | Maximum delivery time (minutes) |
is_ifood_delivery | boolean | iFood delivery vs. store delivery |
delivery_mode | string | "DEFAULT", "SCHEDULE", "PICKUP" |
image_url | string | Store logo URL (absolute, fetchable) |
alias | string | Always "PHARMACIES" |
Store Info Mode
| Field | Type | Description |
|---|---|---|
store_id | string | Pharmacy UUID |
name | string | Store display name |
main_category | string | Friendly category name (e.g. "Mercado") |
store_type | string | Merchant type code — "PHARMACY" for this actor's results |
city, state, district | string | Location components |
street_name, street_number | string | Physical address |
zip_code | string | Brazilian CEP (no dash) |
latitude, longitude | string | Store's own coordinates |
price_range | string | "CHEAPEST", "CHEAP", "MODERATE", "EXPENSIVE" |
delivery_fee | number | Delivery fee in BRL |
type_delivery_fee | string | "FIXED", "FREE", "DISTANCE" |
delivery_time | number | Expected delivery time (minutes) |
minimum_order_value | number | Minimum order amount (BRL) |
user_rating | number | Average rating (0–5) |
user_rating_count | number | Total reviews |
available | boolean | Currently accepting orders |
Categories Mode
| Field | Type | Description |
|---|---|---|
code | string | Category UUID — use as category_id in assortments mode |
name | string | Human-readable category name (e.g. "Medicamentos") |
Assortments Mode (per product)
| Field | Type | Description |
|---|---|---|
id | string | iFood's internal product UUID |
description | string | Product name |
ean | string | EAN-13 barcode — key for price-matching |
price | number | Current price in BRL |
price_original | number | null | Pre-discount price (null if no promo) |
has_discount | boolean | true when on promotion |
discount_percent | number | null | Percent off (0–100) |
availability | string | "AVAILABLE", "UNAVAILABLE", "OUT_OF_STOCK" |
enabled | boolean | Store-side enabled flag |
unit | string | null | "UN", "ML", "MG", "G", etc. — often null for medications (check details / additional_info as a fallback). |
packaging | string | null | "CAIXA", "FRASCO", "BLISTER", etc. — often null (see details). |
quantity | number | null | Pack size (e.g. 30 for "30 comprimidos") — often null. |
minimum_quantity | number | Minimum order quantity |
incremental_quantity | number | Step increment |
available_units | string | Comma-separated unit types ("UNIT,KG") |
category_id, category_name | string | Parent category |
store_id | string | Parent store UUID |
logo_url | string | null | Product image URL |
external_code | string | null | Merchant's internal SKU reference |
product_tags | array | null | Taxonomy tags (e.g. age/prescription restrictions). Commonly null in pharmacy catalogs. |
The tables above cover the most useful fields. Every record also includes metadata (
scraped_at,items_count,proxy_used, etc.) and a few additional nullable fields (region,currency,is_new,is_super_restaurant,product_aisles,scale_min_quantity,scale_price). Runassortmentsonce to inspect the full shape — all fields are documented in the structured JSON output.
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.
The dataset ships with pre-configured views for the Apify Console:
| View | Shows | Fields |
|---|---|---|
| Overview | All records | mode, items_count, scraped_at, proxy_used |
| Pharmacies | stores mode | name, id, segment, rating, distance, fee, availability |
| Store Details | store_info mode | name, category, location, delivery fee, rating |
| Categories | categories mode | code, name |
| Products | assortments mode | description, EAN, price, discount %, unit, packaging, category |
Each view exports to CSV, JSON, XML, or Excel directly from the console.
How to Get Coordinates
Option 1: Google Maps
- Open Google Maps
- Right-click on any location in Brazil
- Click the coordinates shown to copy them
- Use the first number as
latitudeand the second aslongitude
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 (or a custom residential proxy via customProxyUrl) |
| Store ID | Use UUIDs from stores mode — not store names or URLs |
| Category ID | Use UUIDs from categories mode — these are per-store |
| One Category Per Run | assortments extracts one category at a time — parallelize runs for a full catalog |
| Incremental Writes | Each product is pushed to the dataset as soon as it is processed |
| Coordinates | Required for all modes — must be Brazilian |
FAQ
Support
Having issues? Here is how to get help:
- Check the FAQ above for common solutions
- Review your input parameters to ensure they match the required format
- Test with the default São Paulo coordinates to verify the actor is working
- Contact support through Apify for additional assistance