# Jumbo Chile Scraper: Supermarket Prices (jumbo.cl) (`hexagone-data/jumbo-cl-scraper`) Actor

Scrape jumbo.cl categories and product pages: price in CLP, crossed-out list price, price per kg/unit, priced-per quantity (e.g. per 100 g), Cencosud card price, brand, EAN, rating. Pay per result.

- **URL**: https://apify.com/hexagone-data/jumbo-cl-scraper.md
- **Developed by:** [Hexagone Data](https://apify.com/hexagone-data) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Jumbo Chile Scraper — Product Prices & Identifiers (jumbo.cl)

Collect product information from **jumbo.cl**, the Chilean supermarket chain (Cencosud). Paste category URLs for listing data, or product URLs for additional details such as EAN, description and the category breadcrumb.

Use dated exports to compare an assortment, match products by SKU id or EAN (product pages), or monitor promotions. No store or delivery address is selected: prices are those shown to an anonymous visitor on the web storefront, supermarket sales channel. This does not establish local shop stock or a national price.

### Try it with 20 products

1. Paste a category or product URL into **Start URLs**.
2. Set **Maximum number of products** to `20`.
3. Start the Actor and open its dataset.
4. Read **Run summary** before exporting JSON, CSV or Excel: a successful process can still contain incomplete URLs.

```json
{
  "startUrls": [{"url": "https://www.jumbo.cl/frutas-y-verduras"}],
  "maxItems": 20
}
```

The form's product-count prefill is 20, while the schema default is 500. Set `maxItems` explicitly in API calls; `0` removes that product-count limit.

### Choose category or product URLs

| Input | Data | Limit |
|---|---|---|
| Category `…/frutas-y-verduras` | Products from the listing grid, with displayed prices, identifiers, brand, availability, rating and per-page position. Category pagination is followed to the last page (2 s between pages). | Does not open each product page, so EAN and description stay null. |
| Product `…/<slug>/p` | Product details, with EAN, description and the breadcrumb category when published. | An absent field remains null; availability is the online stock flag, not local-shop inventory. |

You can mix both modes. Explicit product URLs are processed first; a successfully collected product-page record takes precedence over its duplicate listing record. Products are deduplicated within the run. A recommendation carousel ("Los más vendidos") appears on every category page: it is excluded, only the listing grid is collected.

Sorting and filter parameters (`?map=`, `?PS=`, `?sc=`) are disallowed by the site's robots.txt and rejected with a reason; the same for cart, checkout and account pages. A pasted `?page=N` is ignored: collection always starts at page 1.

### Output

| Fields | Meaning |
|---|---|
| `productId`, `skuId`, `sku` | Site identifiers (VTEX product id, SKU id). `sku` is the deduplication key and repeats `skuId`. |
| `ean` | EAN-13 from the product page's structured data; **null on category listings** — the site does not publish it there. |
| `name`, `url`, `image` | Product name and links. |
| `price`, `currency` | Displayed price in CLP, whole pesos: "$16.990" is 16990, the dot is a thousands separator. Promotions included. |
| `pricedPer` | When the main price buys a quantity instead of the whole package, what it buys, as shown on the site ("100 g", "200 g"). Null: the price is for the whole unit. |
| `listPrice` | Catalog (crossed-out) price when higher than the displayed price, else null. |
| `unitPrice`, `unitPriceMeasure` | Price per measurement unit shown under the main price ("$10.274 x kg" gives 10274 + "kg"; also "un", "10g", "lt"). It can be higher than `price`: it prices a full kg/litre, not the package. Uses the site's published price and measurement factor; the price is not recomputed; null only when the site publishes none. |
| `cardPrice` | Card-only price with Tarjeta Cencosud ("Paga $…" offers). Requires holding the card. Returned when the site's listing or product data includes the card promotion; null when that promotion is absent from the data received. |
| `brand`, `soldBy`, `isMarketplace`, `category` | Source-provided descriptive information. |
| `availability` | `in_stock` or `out_of_stock`, from the site's stock flag. |
| `rating`, `reviewCount` | Customer rating out of 5 and review count; null when the product has no reviews yet. |
| `description` | Product pages only. |
| `priceContext` | Nested object: no store or delivery address selected, supermarket sales channel. Not a national-price guarantee. |
| `position`, `page`, `sourceUrl`, `scrapedAt` | Collection provenance. |

`priceContext` is an object. Account for it when transforming JSON or choosing spreadsheet columns. Retain `scrapedAt` with your exports: this Actor returns observations, not a maintained history of price changes.

#### Real output example

The following category record was collected on **2026-10-22T23:56:34+00:00**, run `XybNEc8r2MB5wz0tU`. It demonstrates the format, not today's price or stock. EAN and description are null for category records.

```json
{
  "sku": "5870",
  "productId": "5802",
  "skuId": "5870",
  "ean": null,
  "name": "Palta Hass Malla 1 kg",
  "url": "https://www.jumbo.cl/palta-hass-jumbo-malla-1-kg/p",
  "image": "https://jumbocl.vteximg.com.br/arquivos/ids/348022-250-250/Palta-hass-malla-1-kg.jpg?v=638776479276530000",
  "description": null,
  "brand": "Frutas y Verduras Propias",
  "soldBy": "Jumbo",
  "isMarketplace": false,
  "price": 2490,
  "listPrice": 3690,
  "pricedPer": null,
  "unitPrice": 2490,
  "unitPriceMeasure": "kg",
  "cardPrice": null,
  "currency": "CLP",
  "priceContext": {
    "state": "none",
    "store": null,
    "salesChannel": "supermarket"
  },
  "availability": "in_stock",
  "category": "Frutas y Verduras > Verduras > Verdura",
  "rating": 3.86,
  "reviewCount": 245,
  "position": 1,
  "page": 1,
  "sourceUrl": "https://www.jumbo.cl/frutas-y-verduras",
  "scrapedAt": "2026-10-22T23:56:34+00:00"
}
```

### Coverage and run summary

The run summary reports per-URL outcomes, collected counts versus the total announced by the site, and warnings. When the site stops serving pages beyond its announced last page, the listing ends normally (`done`); a listing cut before its announced total is marked `partial_collection` — coverage is not established. A listing that ends short of the announced total is also reported `partial_collection`, with `missingVsAnnounced` in the JSON summary. This gap compares newly delivered products against the site's announced count; overlapping start URLs or duplicate cards can contribute to it. It is a coverage warning, not proof that a particular product is absent. Unresolved cards do not prove that the gap consists of banners.

- `stopped_at_limit` or `not_processed`: the product or charge limit stopped collection.
- `unrecognized_page`: the received page could not be interpreted as product data; this is not proof of an empty category.
- `no_products` or `not_found`: inspect the URL and its detail before interpreting the result as missing inventory.
- `partial_collection`: incomplete pagination or an unresolved gap against the announced count; check the detail.
- Access, network, interruption or internal-error statuses: inspect the reported cause; do not treat the returned subset as complete.

If no product is delivered at all, the run fails; this can include empty or unavailable URLs. Read the per-URL detail before drawing conclusions.

If **Run summary** stays blank, open the run's **Storage → Key-value store** tab. In the **SUMMARY** row, click the eye icon to open the HTML report in a new tab. The **OUTPUT** record contains the same summary as JSON.

### Pricing

**$1.50 per 1,000 delivered products**, or **$0.03 for 20 products**. There is no separate Actor start fee. Standard Apify platform usage is included in this price. A run delivering no products incurs no product-result charge. Set a maximum product count or a maximum charge for your run.

### Automation and support

Use the Apify API to run the Actor and retrieve its dataset, or configure your own schedule. Store dated exports yourself to compare observations over time.

For a reproducible problem, open an issue with the public source URL, run ID and expected result. Do not include API tokens or other credentials. Retailer changes and access restrictions can affect collection; check the run summary before using the results.

### Español

Recopila precios e información de productos de jumbo.cl desde categorías o fichas de producto. Comience con 20 resultados. Las fichas aportan el EAN y la descripción cuando el sitio los publica. Los precios son los mostrados a un visitante anónimo, sin tienda ni dirección de despacho seleccionadas. Revise el resumen de ejecución antes de usar los datos.

Jumbo is a trademark of Cencosud. This Actor is not affiliated with, endorsed by or sponsored by Jumbo or Cencosud.

# Actor input Schema

## `startUrls` (type: `array`):

jumbo.cl pages to scrape. Accepted: category and sub-category pages (…/frutas-y-verduras) and product pages (…/arandano-pote-prize-125-gr-2026534/p). Sorting and filter parameters (?map=, ?PS=, ?sc=) are disallowed by the site's robots.txt and rejected with a reason.

## `maxItems` (type: `integer`):

Stops after this many unique products across all start URLs. 0 = no limit.

## `proxyConfiguration` (type: `object`):

Not needed by default. Only enable it if your runs get blocked.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.jumbo.cl/frutas-y-verduras"
    }
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (type: `string`):

All products, one record each, with every field.

## `prices` (type: `string`):

Price view: product, displayed price, crossed-out price, bundle unit price, rating, SKU id, link.

## `identity` (type: `string`):

Identity view: product id, SKU id, EAN (product pages), brand, seller, category.

## `summary` (type: `string`):

Readable per-URL summary: page type, status, products collected versus announced by the site, reason for any URL that returned nothing.

## `summaryJson` (type: `string`):

The same summary as JSON (OUTPUT record), for programmatic use.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.jumbo.cl/frutas-y-verduras"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("hexagone-data/jumbo-cl-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 = {
    "startUrls": [{ "url": "https://www.jumbo.cl/frutas-y-verduras" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("hexagone-data/jumbo-cl-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.jumbo.cl/frutas-y-verduras"
    }
  ],
  "maxItems": 20
}' |
apify call hexagone-data/jumbo-cl-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hexagone-data/jumbo-cl-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/if40BeX1159xpAfj0/builds/UJAphCuJShVCrdZxS/openapi.json
