Exito Colombia Grocery Price & Stock Scraper
Pricing
from $6.15 / 1,000 results
Exito Colombia Grocery Price & Stock Scraper
Scrape Exito Colombia grocery and retail products by keyword or category. Extract price, list price, stock, installments, EAN, brand and seller in Colombian pesos. Export to JSON, CSV or Excel.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Exito Colombia Grocery Price & Stock Scraper
Here is one real result, with every field the actor returns (detail fetch and both AI add-ons enabled):
{"name": "Arroz blanco Premium ARROZ SONORA PREMIUM Arroz Blanco (4000 gr)","brand": "ARROZ SONORA PREMIUM","category": "Mercado > Despensa > Granos y arroz","productId": "3250861","sku": "3841129","ean": "7700798000017","productReference": "3250861","price": 22300,"listPrice": 22750,"sellingPrice": 22300,"pricePerUnit": 22300,"discountPercentage": 2,"currency": "COP","installments": 48,"installmentsTable": [{ "number": 1, "value": 22300, "interestRate": 0, "total": 22300, "paymentName": "American Express à vista" },{ "number": 12, "value": 1859, "interestRate": 0, "total": 22300, "paymentName": "American Express 12 vezes sem juros" }],"priceValidUntil": "2027-08-13T00:00:00Z","promoTeasers": null,"measurementUnit": "un","unitMultiplier": 1,"available": true,"stock": 99999,"seller": "exito","isMarketplace": false,"categories": ["Mercado > Despensa > Granos y arroz", "Mercado > Despensa", "Mercado"],"releaseDate": "2026-06-22T00:00:00Z","imageUrl": "https://exitocol.vteximg.com.br/arquivos/ids/33797019/Arroz-blanco-ARROZ-SONORA-PREMIUM-Arroz-4-gr-3841129_a.jpg?v=639176968367100000","images": ["https://exitocol.vteximg.com.br/arquivos/ids/33797019/Arroz-blanco-ARROZ-SONORA-PREMIUM-Arroz-4-gr-3841129_a.jpg?v=639176968367100000"],"url": "https://tienda.exito.com/arroz-blanco-arroz-sonora-premium-arroz-4-gr-3250861/p","description": null,"specifications": { "Tipo de Producto": "Arroz", "Tipo de Arroz": "Premium", "IVA": "0", "Vendido por": "Éxito", "Ingredientes": "Arroz Blanco", "Conservacion": "Conservar en lugar seco y fresco", "Factor Neto PUM": "4000" },"aiDescription": "Descubre el Arroz Blanco Premium ARROZ SONORA PREMIUM, un producto de alta calidad que garantiza un sabor y textura excepcionales ... (full text, trimmed here)","aiAttributes": { "tipo": "Arroz", "tipo_de_arroz": "Premium", "peso": "4000 gr", "ingredientes": "Arroz Blanco", "conservacion": "Conservar en lugar seco y fresco" },"aiTags": ["arroz", "granos", "premium", "blanco", "despensa", "Éxito"],"observedAt": "2026-08-14T07:50:40.221Z","error": null}
The most complete Exito Colombia scraper available. It returns every field an Exito (VTEX) product listing exposes, including the full price and installment breakdown, EAN and SKU, live stock, seller and specifications, plus optional AI marketing descriptions and structured attributes, and gives you search, category and sort filters to target exactly the products you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the Exito Colombia catalog (VTEX) for the terms and categories you pass, paginates through the matching products, and writes one normalized record per product to the run's dataset. Each record carries the name, brand, category path, EAN, SKU, list and selling price, discount, installment breakdown, live stock, seller and images. With detail fetch on (the default) the product description and technical specifications are added too. Missing source values are returned as null and never invented.
Exito is geo-restricted to Colombia, so a Colombian residential proxy is enabled by default and required for stable access. Optional paid AI add-ons write a Spanish marketing description and extract structured attributes and search tags.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 rice products from the Exito catalog with full detail.
{"searchTerms": ["arroz"],"withDetails": true,"maxProducts": 10}
Provide searchTerms, categories, or both. Free plans return up to 10 products per run.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchTerms | string[] | yes* | ["arroz"] | Full-text catalog queries, for example arroz, televisor lg, pañales. Each term is searched separately. *Provide searchTerms, categories, or both. |
categories | string[] | no | [] | Restrict to Exito departments by code, for example 34185082 (Mercado/Groceries), 34185084 (Tecnologia). Each is scraped separately. |
sortOrder | enum | no | (relevance) | Catalog order, for example OrderByPriceASC, OrderByTopSaleDESC, OrderByBestDiscountDESC. Empty keeps relevance order. |
withDetails | boolean | no | true | Add the product description and technical specifications. Turn off for a faster, lighter run. |
maxProducts | integer | no | 10 | Maximum products to collect. Free Apify plans are capped at 10 per run. |
withAiDescription | boolean | no | false | Paid AI add-on. Adds aiDescription, a Spanish marketing description. Billed per product. Requires a paid Apify plan. |
withAiAttributes | boolean | no | false | Paid AI add-on. Adds aiAttributes and aiTags. Billed per product. Requires a paid Apify plan. |
Output reference
One dataset item per product. Types: string, number, integer, boolean, string[], object, object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
name | string | Product name. |
brand | string | Brand name. |
category | string | Primary category path. |
productId | string | Exito product id. |
sku | string | SKU identifier. |
ean | string | EAN barcode. |
productReference | string | Internal product reference. |
price | number | Current price (COP). |
listPrice | number | List (pre-discount) price. |
sellingPrice | number | Selling price. |
pricePerUnit | number | Price per unit of measure. |
discountPercentage | number | Discount percentage vs list price. |
currency | string | Always COP. |
installments | integer | Maximum number of installments offered. |
installmentsTable | object[] | Full installment plans per payment method (number, value, interestRate, total, paymentName). |
priceValidUntil | string | Date the price is valid until. |
promoTeasers | array | Promotion teasers when present, else null. |
measurementUnit | string | Unit of measure, for example un. |
unitMultiplier | number | Unit multiplier. |
available | boolean | true if in stock. |
stock | integer | Available stock quantity. |
seller | string | Seller name, for example exito. |
isMarketplace | boolean | true if sold by a marketplace seller. |
categories | string[] | Full category path hierarchy. |
releaseDate | string | Product release date. |
imageUrl | string | Primary image URL. |
images | string[] | All image URLs. |
url | string | Product page URL. |
description | string | Product description. Present with withDetails, else null. |
specifications | object | Technical specifications as key/value pairs. Present with withDetails. |
aiDescription | string | Spanish marketing description. Present only with withAiDescription. |
aiAttributes | object | Structured product attributes. Present only with withAiAttributes. |
aiTags | string[] | Search tags. Present only with withAiAttributes. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchTerms":["arroz"],"withDetails":true,"withAiDescription":true,"withAiAttributes":true}). The full record is shown at the top of this page; the large installmentsTable (one entry per payment method and term) is trimmed there to two entries and the aiDescription text is trimmed, with all shown values unmodified.
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~exito-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerms":["televisor lg"],"sortOrder":"OrderByPriceASC","maxProducts":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~exito-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"categories":["34185082"],"sortOrder":"OrderByBestDiscountDESC","maxProducts":100}'
Apify CLI:
apify call scrapers_lat/exito-scraper \--input '{"searchTerms":["pañales"],"withDetails":true}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per product returned (
resultevent). WithwithDetailson, adetailsevent is also charged per product enriched. See the pricing tab for current prices. - AI add-ons billed separately.
withAiDescriptionandwithAiAttributeseach charge their own event and only when the AI output is produced. They require a paid Apify plan and are disabled for free users. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 products per run. Upgrade for higher
maxProducts.
FAQ and troubleshooting
A run returned 0 records or timed out. Why?
Exito is geo-restricted to Colombia. A Colombian residential proxy is enabled by default; keep it on. If a search matched nothing, broaden searchTerms or remove a category. Zero-result runs are not charged.
Why is description null even with detail fetch on?
Some products do not publish a long description on Exito. The specifications are still returned. Missing source values are returned as null, never invented.
How do I scrape a whole department?
Put the department code in categories, for example 34185082 for Mercado (Groceries). Combine with sortOrder to page best sellers or biggest discounts first.
What currency are prices in?
Colombian pesos (COP). The installmentsTable breaks down each payment method's plan.
How do I get the best-priced or most-discounted items first?
Set sortOrder to OrderByPriceASC or OrderByBestDiscountDESC.
Is this an official Exito tool? No. This actor is independent and has no affiliation with Grupo Exito. It reads only data that is publicly available on the Exito storefront. Use it in accordance with the Exito terms of service.
Related scrapers
- Olimpica Scraper: Olimpica Colombia grocery prices and stock.
- Cruz Verde Scraper: Cruz Verde Colombia pharmacy products.
- Chedraui Scraper: Chedraui Mexico grocery prices.
- MercadoLibre Scraper: MercadoLibre listings across Latin America.
- Rappi Scraper: Rappi store products and prices.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US, European and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Grupo Exito. Accesses only publicly available storefront data. Use in accordance with the Exito terms of service.
