# Rappi Restaurants Search Scraper (`stealth_mode/rappi-restaurants-search-scraper`) Actor

Scrape product listings and restaurant data from Rappi across all Latin American markets. Collect store information, ratings, delivery methods, products, and 35+ fields per result — perfect for market research, competitive analysis, and e-commerce intelligence.

- **URL**: https://apify.com/stealth\_mode/rappi-restaurants-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Rappi Product Search Scraper: Extract Multi-Country Restaurant & Store Data

---

### What Is Rappi?

Rappi is a leading on-demand delivery platform operating across Latin America, including Argentina, Brazil, Colombia, Mexico, and more. The platform aggregates thousands of restaurants, supermarkets, and specialty stores, offering users access to products ranging from food to groceries to household items. For businesses and researchers, Rappi's search functionality provides rich market insights — but manually collecting product and store data is impractical. The **Rappi Product Search Scraper** automates this process, capturing structured store and product information across all Rappi domains.

---

### Overview

The **Rappi Product Search Scraper** extracts search results from Rappi's product discovery pages, transforming unstructured store and product listings into clean, structured records. It is designed for:

- **Market researchers** analyzing restaurant and retail presence across Latin America
- **Competitive analysts** tracking competitor offerings, pricing, and market positioning
- **E-commerce platforms** aggregating multi-country product catalogs
- **Business intelligence teams** building datasets on store types, delivery capabilities, and ratings
- **Entrepreneurs** studying market gaps in specific regions or product categories

Key strengths include multi-domain support (`.com.ar`, `.com.br`, etc.), configurable item limits, and graceful failure handling for bulk operations.

---

### Input Format

The scraper accepts a JSON configuration object:

```json
{
  "urls": [
    "https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants&parent_store_type=restaurant"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Field | Description | Example |
|---|---|---|
| `urls` | Direct links to Rappi search results pages across any regional domain | `https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants` |
| `max_items_per_url` | Maximum number of products/stores collected per URL (1–200) | `200` |
| `ignore_url_failures` | If `true`, continues scraping if some URLs fail; if `false`, stops on first error | `true` |

#### URL Parameters

Construct Rappi search URLs with these query parameters:

| Parameter | Purpose | Example |
|---|---|---|
| `query` | Product or category search term | `Pizza`, `Hamburger`, `Groceries` |
| `vertical` | Category type on Rappi | `restaurants`, `supermarkets`, `pharmacies` |
| `parent_store_type` | Filter by store category | `restaurant`, `supermarket` |

> **Tip:** Use the regional domain matching your target market (e.g., `.com.ar` for Argentina, `.com.br` for Brazil, `.com.mx` for Mexico).

***

### Output Format

**Sample output**

```json
{
  "super_store_id": null,
  "logo": "https://images.rappi.com.ar/restaurants_logo/charlyy-1637943878293-1763226065701.png?e=webp&q=80&d=200x200",
  "store_type": "restaurant",
  "store_name": "Lo de Charly - Alvarez Thomas",
  "store_id": 253154,
  "eta": "40 min",
  "eta_value": 40,
  "shipping_cost": 0,
  "vertical_group": "",
  "vertical_sub_group": "restaurants",
  "parent_store_type": "restaurants",
  "mov": null,
  "products": [
    {
      "master_product_id": 0,
      "id": "253154_2111683634",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 20900,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 20900,
      "product_id": 2111683634,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/gp_main_milanesa_napoli.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Milanesa Napolitana",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2113700261",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 8470,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 8470,
      "product_id": 2113700261,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/2c555b63-eb03-44f4-9e0b-a8a6a462e52e.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Fritas Provenzal Individual",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683630",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 33000,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 33000,
      "product_id": 2111683630,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/b73b44bc-ac71-4964-82ac-9eb0966fa383-1695393896900.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "1/2 Matambre a la Pizza",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2113700260",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 10670,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 10670,
      "product_id": 2113700260,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/2c555b63-eb03-44f4-9e0b-a8a6a462e52e.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Papas Fritas Provenzal para 2",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2112178386",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 3520,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 3520,
      "product_id": 2112178386,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/afab3d1b-64d9-4cfe-a4d2-07f5d46fd08d-1709413958224.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Empanada de Jamon y Queso",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683608",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 14630,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 14630,
      "product_id": 2111683608,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/94570507-2de5-4500-874c-fb0620743152-1726849734092.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Provolone de la Casa",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683628",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 60060,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 60060,
      "product_id": 2111683628,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/9f485458-0c22-4a6a-a6de-8d85a5d6c221-1695393871240.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Matambre a la Pizza",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683560",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 31790,
      "has_toppings": true,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 31790,
      "product_id": 2111683560,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/ea16c75f-36ae-48af-8bb2-11d55e27f2e1-1724160666723.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Sándwich de Matambre de Pizza",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683677",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 15620,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 15620,
      "product_id": 2111683677,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/dbc09855-c6ef-4131-8966-4f9e94e94885-1694791958411.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "1/2 Porción de Riñones a la Provenzal",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2113700267",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 12870,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 12870,
      "product_id": 2113700267,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/c0bde19c-850f-49c2-8592-7e27fd94b188.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Milanesitas de Muzza",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683659",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 13640,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 13640,
      "product_id": 2111683659,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/2a9aa701-4e42-4e15-80cb-b9d55a8508d1-1726766926302.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Chorizo de la Casa",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2113700265",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 7590,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 7590,
      "product_id": 2113700265,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/b6142a11-955e-4bf8-8865-5a9d1ffcc32e.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Morron Asado Individual",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2111683676",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 21780,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 21780,
      "product_id": 2111683676,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/2a66c88c-1df1-4ba3-89ea-6aeead7ee095-1694791805143.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Riñón a la Provenzal",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2113700254",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 17380,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 17380,
      "product_id": 2113700254,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/fae4156c-dcfb-4b5b-b81d-53298d397356.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Milanesa de Pollo Napolitana",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    },
    {
      "master_product_id": 0,
      "id": "253154_2113700264",
      "min_quantity_in_grams": 0,
      "pum": "",
      "sale_type": "",
      "real_price": 8800,
      "has_toppings": false,
      "is_discontinued": false,
      "in_stock": true,
      "unit_type": "",
      "price": 8800,
      "product_id": 2113700264,
      "step_quantity_in_grams": 0,
      "image": "https://images.rappi.com.ar/products/b2be51d8-9e87-423e-aa4c-e9b625962ed5.png?e=webp&q=80&d=130x130",
      "quantity": 1,
      "store_type": "",
      "store_id": 253154,
      "discount_type": "",
      "is_available": true,
      "discount_earnings": "",
      "name": "Morrón Asado",
      "requires_medical_prescription": false,
      "restriction_tag": "",
      "max_quantity_in_grams": 0,
      "has_discount": false,
      "vertical": "restaurants",
      "has_age_restriction": false,
      "has_antismoking": false,
      "alcoholic_beverage": false
    }
  ],
  "store_delivery_methods": null,
  "store_rating_score": 4.6,
  "global_offers": null,
  "schedules": null,
  "brand_name": "Lo de Charly",
  "brand_id": 27361,
  "is_currently_available": null,
  "vertical": "restaurants",
  "ads_metadata": null,
  "is_closed": null,
  "status": "OPEN",
  "has_comments": null,
  "icon": null,
  "ui_style": null,
  "delivery_price_style": "VISIBLE",
  "tier": null,
  "is_mandatory": null,
  "has_fidelity_id": null,
  "user_fidelity_id": null,
  "show_web": null,
  "delivery_now": null,
  "distance_class": null,
  "has_products_with_exact_attributes": null,
  "from_url": "https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants&parent_store_type=restaurant"
}
```

Each scraped search result returns a detailed record with 35+ fields covering store information, delivery details, ratings, and products.

#### Store Identification

| Field | Meaning |
|---|---|
| `Super Store ID` | Unique identifier for aggregated store groups |
| `Store ID` | Primary unique identifier for the individual store |
| `Store Name` | Official name of the restaurant or retail location |
| `Brand Name` | Parent brand name if applicable |
| `Brand ID` | Unique identifier for the brand entity |
| `Logo` | URL to the store's logo image |
| `Icon` | Store icon or badge icon URL |

#### Store Classification

| Field | Meaning |
|---|---|
| `Store Type` | Category (e.g., restaurant, supermarket, pharmacy, etc.) |
| `Parent Store Type` | Parent classification of the store |
| `Vertical` | Vertical market segment the store operates in |
| `Vertical Group` | Broad category grouping for filtering |
| `Vertical Sub Group` | Subcategory within the vertical |

#### Delivery & Logistics

| Field | Meaning |
|---|---|
| `ETA` | Estimated Time of Arrival as text (e.g., "15-20 min") |
| `ETA Value` | Numeric ETA value in minutes for standardized comparison |
| `Shipping Cost` | Delivery fee in local currency |
| `Delivery Methods` | Array of available delivery methods (e.g., ASAP, scheduled) |
| `Store Delivery Methods` | Detailed delivery method options for this store |
| `Delivery Price Style` | How delivery is calculated (fixed, distance-based, etc.) |
| `Distance Class` | Delivery distance category |
| `MOV` | Minimum Order Value required for delivery |

#### Ratings & Performance

| Field | Meaning |
|---|---|
| `Store Rating Score` | Average customer rating (typically 0–5 scale) |
| `Has Comments` | Whether the store has customer reviews or comments |

#### Availability & Status

| Field | Meaning |
|---|---|
| `Is Currently Available` | Whether the store is open and accepting orders now |
| `Is Closed` | Boolean flag indicating if the store is permanently or temporarily closed |
| `Status` | Current operational status |
| `Schedules` | Operating hours and delivery time windows |

#### Products & Offers

| Field | Meaning |
|---|---|
| `Products` | Array of product listings available from the store |
| `Has Products With Exact Attributes` | Whether products include detailed attribute data |
| `Global Offers` | Platform-wide promotions or discounts applicable to this store |

#### Metadata & Flags

| Field | Meaning |
|---|---|
| `Ads Metadata` | Promotional or advertising metadata if the store has paid placement |
| `UI Style` | Display style variant used in the interface |
| `Tier` | Store tier or quality classification |
| `Is Mandatory` | Whether the store should be featured prominently in results |
| `Show Web` | Whether the store is visible on web interface |
| `Delivery Now` | Whether delivery is available immediately |
| `Has Fidelity ID` | Whether the store has a loyalty program |
| `User Fidelity ID` | User's loyalty account ID with this store |

***

### How to Use

1. **Find search URLs** — Navigate to Rappi in your target region (e.g., `.com.ar`, `.com.br`). Search for a product category and copy the full URL, including query parameters.

2. **Prepare input** — Paste URLs into the `urls` array. You can include multiple search URLs to scrape different categories or regions in one run.

3. **Configure limits** — Set `max_items_per_url` based on your needs:
   - `20–50`: Quick sampling of top results
   - `100–150`: Balanced bulk collection
   - `200`: Maximum results per search

4. **Enable failure handling** — Set `ignore_url_failures: true` for bulk runs to skip any URLs that fail mid-scrape.

5. **Run the scraper** — Start the actor and monitor progress. Review the run log for any warnings or skipped URLs.

6. **Export results** — Download output as JSON, CSV, or Excel for analysis in spreadsheets, databases, or BI tools.

**Common tips:**

- Different regional domains may have different store types and product categories — test with a small URL first.
- Search query specificity affects result relevance; broader queries return more stores but less targeted data.
- Shipping costs and ETA vary by region and time of day — collect data at consistent times for accurate comparisons.

***

### Use Cases & Business Value

- **Market Intelligence:** Analyze restaurant density, product diversity, and delivery coverage across Latin American markets.
- **Competitive Analysis:** Track competitor store presence, pricing, ratings, and promotional activity.
- **Supply Chain Research:** Identify supermarkets and logistics networks to understand regional retail infrastructure.
- **Price Monitoring:** Build datasets of product availability and pricing across multiple store types and regions.
- **Expansion Strategy:** Evaluate market saturation and identify underserved product categories or geographic areas.
- **Data Aggregation:** Feed Rappi data into multi-source product aggregators or comparison engines.

The Rappi Product Search Scraper eliminates weeks of manual market research, delivering actionable competitive and market data in hours.

***

### Conclusion

The **Rappi Product Search Scraper** is a powerful tool for anyone seeking structured retail and restaurant data across Latin America. With support for multiple regional domains, 35+ output fields, and flexible configuration, it enables rapid market analysis and competitive intelligence. Whether you're researching a new market, monitoring competitors, or building a product database, this scraper transforms Rappi's search results into clean, machine-readable insights.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the restaurants list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants&parent_store_type=restaurant"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants&parent_store_type=restaurant"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/rappi-restaurants-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants&parent_store_type=restaurant"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/rappi-restaurants-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.rappi.com.ar/search?query=Pizza&vertical=restaurants&parent_store_type=restaurant"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/rappi-restaurants-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/rappi-restaurants-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rappi Restaurants Search Scraper",
        "description": "Scrape product listings and restaurant data from Rappi across all Latin American markets. Collect store information, ratings, delivery methods, products, and 35+ fields per result — perfect for market research, competitive analysis, and e-commerce intelligence.",
        "version": "0.0",
        "x-build-id": "FA2I7rRZgMgwUMWST"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~rappi-restaurants-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-rappi-restaurants-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~rappi-restaurants-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-rappi-restaurants-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~rappi-restaurants-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-rappi-restaurants-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the restaurants list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the restaurants list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
