Rappi Scraper - Restaurants, Menus & Stores avatar

Rappi Scraper - Restaurants, Menus & Stores

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Rappi Scraper - Restaurants, Menus & Stores

Rappi Scraper - Restaurants, Menus & Stores

Collect Rappi restaurants, menus, store products and brand locations across nine Latin American markets. Pay per delivered row plus a start fee; export JSON, CSV or Excel.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

12

Total users

9

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Rappi Scraper

Extract Rappi restaurants, menus and stores across nine Latin American markets as rows you can export.

  • Restaurant names, ratings, delivery fees and estimated delivery times.
  • Optional menu items, topping options and store products as separate rows.
  • Search results, brand locations and country, city, category and store-type discovery.
  • Merchant addresses and coordinates when available, with reasons for missing contact fields.
  • Pay $3.00 per 1,000 delivered rows on the Free plan, plus a start fee.

What does Rappi Scraper do?

Rappi Scraper collects public marketplace data from Rappi country sites. It accepts Mexico (mx), Colombia (co), Argentina (ar), Brazil (br), Chile (cl), Peru (pe), Ecuador (ec), Uruguay (uy) and Costa Rica (cr). Availability varies by market and location. This Actor is unofficial and is not affiliated with Rappi.

  • Lists: restaurants, nearMe, category, search and home find restaurants.
  • Details: restaurant reads one restaurant; brand lists chain locations.
  • Stores: stores collects shops in a vertical, such as market.
  • Discovery: discoverCountries, discoverCities, discoverCategories and discoverVerticals return reference rows.
  • URLs: startUrls accepts several supported Rappi links.
  • Optional rows: includeMenuItems, includeToppings and includeProducts are off by default. Every added row is billed at the same rate as a restaurant row.

What data can you extract from Rappi?

Each row represents one entity. Fields vary by page; missing values can be empty or omitted. Child rows carry their parent store identity and available location fields, rather than hiding products inside a restaurant row.

Restaurant rows: restaurant

FieldDescriptionExample
rowTypeEntity typerestaurant
idEntity identifier1923804381
storeIdRappi restaurant identifier1923804381
nameRestaurant nameExample Restaurant
urlRappi listing linkhttps://www.rappi.com.mx/restaurantes/1923804381
countryMarket codemx
brandIdChain identifier, when present706
ratingPublished rating4.5
etaEstimated delivery time25–35 min
deliveryCostPublished delivery fee25
hasFreeShippingFree-delivery indicationtrue
menuItemCountAvailable menu count12
addressMerchant address object{"locality":"Ciudad de México"}
geoMerchant coordinates{"lat":19.426,"lng":-99.164}
orgMerchant organization{"name":"Example Restaurant"}
phonesPublished merchant phones[]
emailsPublished merchant emails[]
leadAbsencesReasons contact fields are missing{"phones":"本站无"}

The reason 本站无 means not published on the inspected page; 未验证 means unverified. Neither proves that the merchant has no contact details. person and web hold named contacts and merchant-owned links when available. Rappi's own contact details are not merchant contacts.

Store rows: store

FieldDescriptionExample
rowTypeShop entitystore
storeIdShop identifier12345
nameShop nameExample Market
urlShop listing linkhttps://www.rappi.com.mx/tiendas/tipo/market
FieldDescriptionExample
rowTypeMenu entitymenuItem
productIdMenu product identifier123
nameDish namePizza Margarita
pricePublished item price129
storeNameParent restaurantExample Restaurant

Product rows: product

FieldDescriptionExample
rowTypeShop product entityproduct
productIdProduct identifier456
nameProduct nameMineral water
priceTextPrice as displayed$25.00

Topping rows: topping

FieldDescriptionExample
rowTypeTopping option entitytopping
optionIdOption identifier789
productIdAssociated menu product123
nameOption nameExtra cheese

Country rows: country

FieldDescriptionExample
rowTypeCountry referencecountry
countrySupported market codemx
urlMarket websitehttps://www.rappi.com.mx/

City rows: city

FieldDescriptionExample
rowTypeCity referencecity
citySlugSupported city valueguadalajara
nameCity labelGuadalajara

Category rows: category

FieldDescriptionExample
rowTypeCategory referencecategory
slugCategory valuepizza
nameCategory labelPizza

Store-type rows: vertical

FieldDescriptionExample
rowTypeStore-type referencevertical
slugValue for verticalmarket
nameStore-type labelmarket

How to scrape Rappi

  1. Open Rappi Scraper in Apify Console.
  2. Leave mode on auto; fill one target, such as query.
  3. Choose country and set maxResults to 3.
  4. Click Start and wait for completion.
  5. Open the dataset and download rows or read them through the API.

Empty input starts a Mexico pizza search capped at three rows. This example uses normal pricing. Filling one target selects its mode automatically. If targets conflict, precedence is startUrls, storeUrl, brandUrl, storeId, brandId, categorySlug, query, then citySlug.

Restaurant list: restaurants

Fill citySlug, or explicitly select restaurants for the market's default location.

Nearby restaurants: nearMe

Select nearMe and provide delivery lat and lng.

Category: category

Fill categorySlug, such as pizza, and optionally citySlug.

Restaurant detail: restaurant

Fill storeId or storeUrl. Enable includeMenuItems for menu rows. For menu rows from lists or search, use enrichMenus.

Stores: stores

Select stores and a vertical. Enable includeProducts for product rows.

Fill query. Use Spanish search terms for Spanish-speaking markets or Portuguese for Brazil.

Home feed: home

Select home for restaurant and category entries; restaurant listings may be used when the feed is unavailable.

Brand locations: brand

Fill brandId or brandUrl; a chain's delivery page is not an individual restaurant menu.

Countries: discoverCountries

Select this mode for supported market references, not live availability guarantees.

Cities: discoverCities

Select this mode and country for the supported city list.

Categories: discoverCategories

Select this mode and country for available cuisine categories.

Store types: discoverVerticals

Select this mode and country for store types. Reference values may be returned when none are listed.

Paste restaurant, category, search, brand or store-list URLs into startUrls.

What to fill in

FieldWhat to enterDefault
modeAutomatic selection or a mode aboveauto
countrySupported country codemx
queryOne search phraseForm example: pizza
startUrlsList of Rappi URLsEmpty
storeId, storeUrlRestaurant ID or URLEmpty
brandId, brandUrlBrand ID or delivery URLEmpty
storeSlug, brandSlugOptional URL slugEmpty
citySlugSupported city slugMarket default location
categorySlugCuisine/category slugEmpty
verticalStore typemarket
lat, lngDelivery coordinatesMarket default coordinates
maxResultsRows per input, 1–500070; form prefill 3
includeMenuItemsAdd menu rowsfalse
includeToppingsAdd toppings; requires includeMenuItemsfalse
includeProductsAdd store-product rowsfalse
enrichDetailsRequest available merchant address detailstrue
enrichMenusAdd menu enrichment to listsfalse
maxEnrichStores to enrich, 0–505
cleanMenuRemove promotional/fee entriestrue
freeDeliveryKeep free-delivery listingsUnset
minRatingMinimum known rating; unrated rows remainUnset
openNowExclude listings marked closedUnset
turboAccepted for compatibility; does not enforce faster deliveryUnset
filtersFilter keys, e.g. discounts, newEmpty
maxPagesLegacy page setting; row collection follows maxResults1
cursorReturned nextCursor object; normally leave emptyEmpty
proxyCountryAdvanced country override; normally leave emptySelected country

Examples, one per mode:

Restaurants

{"mode":"restaurants","country":"mx","citySlug":"guadalajara","maxResults":3}

Nearby

{"mode":"nearMe","country":"mx","lat":19.425877,"lng":-99.164086,"maxResults":3}

Category

{"categorySlug":"pizza","country":"mx","maxResults":3}

Restaurant and menu

{"storeId":"1923804381","country":"mx","includeMenuItems":true,"maxResults":3}

Stores and products

{"mode":"stores","country":"mx","vertical":"market","includeProducts":true,"maxResults":3}

Search

{"query":"açaí","country":"br","maxResults":3}

Home

{"mode":"home","country":"mx","maxResults":3}

Brand

{"brandId":"706","brandSlug":"mcdonalds","country":"mx","maxResults":3}

Countries

{"mode":"discoverCountries","maxResults":3}

Cities

{"mode":"discoverCities","country":"br","maxResults":3}

Categories

{"mode":"discoverCategories","country":"mx","maxResults":3}

Store types

{"mode":"discoverVerticals","country":"mx","maxResults":3}

URLs

{"startUrls":["https://www.rappi.com.mx/restaurantes/1923804381"],"maxResults":3}
  • maxItems and limit are aliases for maxResults.
  • Unknown fields are ignored with a note; close misspellings can be corrected automatically.
  • Invalid targets or country values fail before row delivery with INVALID_INPUT: <field> — <how to fix>. No result rows are charged; the start fee still applies.
  • INPUT_REPORT in the default key-value store records filled, inferred, corrected and ignored fields.
  • Legacy modes such as list, menu and chain remain accepted. Explicit restaurant without a target uses storeId 1923804381; explicit search without a query uses pizza.

Output example

Illustrative restaurant row; values vary with the source:

{
"rowType": "restaurant",
"id": "1923804381",
"storeId": "1923804381",
"name": "Example Restaurant",
"country": "mx",
"url": "https://www.rappi.com.mx/restaurantes/1923804381",
"rating": 4.5,
"eta": "25–35 min",
"deliveryCost": 25,
"phones": [],
"emails": []
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY reports delivered rows; INPUT_ECHO shows interpreted input and ERROR_SUMMARY describes failures.

Why use this Rappi scraper?

  • Comparable rows: join menu products to their restaurant using storeId.
  • Pay per delivered row: unavailable pages do not become billable result rows.
  • Saved results: rows already written remain available after a stop; unfinished collection is not guaranteed to be delivered.
  • Visible gaps: missing merchant details remain empty rather than invented.
  • Several inputs: submit multiple links with startUrls.
  • No proxy setup: you do not need to set up proxies.

How much does it cost to scrape Rappi?

The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of allocated memory, with a minimum of one event. Default memory is 1024 MB, so one start event costs $0.005. Platform usage is included in these prices.

Apify planStart at 1024 MBPrice per rowPrice 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

maxResults applies to each input, defaults to 70, and larger requests are collected in parts of 70. All row types share that input's allowance. Menu items, toppings and products are not free extras. Free-plan users have a limit of 200 rows per run and 10 total runs of this Actor.

The whole run stops at Maximum cost per run, named maxTotalChargeUsd in the API. Example: three URLs delivering 50 rows each produce 150 rows. On the Free plan, one start at 1024 MB plus 150 × $0.003 costs $0.455.

What happens when the run timeout is too short

When collection needs longer than your selected timeout, the run can pause with status ABORTED and the message: "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." This pause is not a collection failure.

When results are ready, the same run resumes, reports "Resumed: delivering N rows.", writes to the same dataset and finishes as SUCCEEDED. Already delivered rows are skipped, so they are not delivered or charged twice. This can happen at most three times per run. Keep the default timeout of 3600 seconds to reduce pauses.

The synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset during a pause. For longer requests, 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

Add this remote server to Claude, ChatGPT, Cursor, VS Code or another compatible MCP client:

https://mcp.apify.com?tools=lentic_clockss/rappi-scraper

Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read the rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/rappi-scraper with APIFY_TOKEN.

Example prompt: "Find three Rappi pizza restaurants in Mexico using query and maxResults=3; return their names and listing URLs."

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/rappi-scraper").call(
run_input={"query": "pizza", "country": "mx", "maxResults": 3}
)
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/rappi-scraper').call({
query: 'pizza', country: 'mx', maxResults: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Over HTTP, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~rappi-scraper/runs with your token in the Authorization: Bearer header. After success, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json. If a waiting SDK call returns during a pause, follow the asynchronous workflow above.

Integrations

Use the Actor's Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or a webhook. Apify Schedules can run saved inputs regularly.

En español

Este Actor recopila restaurantes, tiendas y menús públicos de Rappi en nueve mercados latinoamericanos. Para empezar, escribe una búsqueda en query, elige country y limita maxResults a tres filas. Si tienes un enlace, utiliza storeUrl o startUrls; el modo se selecciona automáticamente. Activa includeMenuItems solo si necesitas los platos como filas adicionales. Los productos y las opciones de ingredientes también cuentan para el límite y se cobran por fila, igual que los restaurantes. Hay además un cargo de inicio. La disponibilidad cambia según la ciudad y el comercio. Los teléfonos y correos no están garantizados: revisa leadAbsences cuando falten datos. Puedes descargar los resultados en CSV, Excel o JSON.

FAQ

This Actor is intended for public data. You are responsible for Rappi's terms and applicable data-protection law. Processing personal data requires a lawful basis; public availability alone does not establish one.

Why did my run end as ABORTED?

Check the status message. A queued automatic-resume message means a temporary pause; a manual abort is different and does not promise automatic completion.

How many results can I get?

Request up to 5000 rows per input. Actual delivery depends on availability, optional rows and your spending limit. Free-plan caps still apply.

Why are some fields empty?

Pages expose different details. Missing ratings, unavailable menus and failed detail enrichment can leave gaps. Contact fields are not guaranteed.

Can I collect an entire restaurant menu?

Enable includeMenuItems, but no more than 25 child rows per store are emitted. Menu items and toppings share that cap and the input's maxResults.

What is the difference between a brand and a restaurant?

A delivery-brand link lists chain locations. A restaurant link identifies one store and its menu. Use brandId for the former and storeId for the latter.

Does this include other food-delivery platforms?

No. This Actor handles Rappi country sites only. Use the dedicated products below for other platforms.

Limitations

  • Nine markets are configured; not every mode or merchant is available in every market.
  • City discovery is a supported-location list, not a complete directory of every served address. Unknown city slugs can fall back to the market default.
  • Unrated restaurants can remain under minRating; missing opening status can remain under openNow. Other filters depend on available source flags.
  • No guarantee of merchant phones, emails, named contacts or websites; inspect missing-field reasons.
  • No login-only RappiPrime prices, checkout actions, travel bookings or RappiCard data.
  • Optional menu and product collection can take longer and return fewer rows than requested.

More food delivery and grocery scrapers from the same publisher:

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.