MercadoLivre Deals Scraper
Pricing
from $2.70 / 1,000 results
MercadoLivre Deals Scraper
Scrape every deal from MercadoLivre's "Ofertas do Dia" page into structured JSON — title, current & original price, discount %, coupon, seller, official-store badge, rating, installments, and shipping (incl. Full). Run once or schedule it daily to track promotions automatically. No code required.
Pricing
from $2.70 / 1,000 results
Rating
0.0
(0)
Developer
Rise and Code
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What does this MercadoLivre deals scraper do?
This Actor scrapes the MercadoLivre "Ofertas do Dia" (daily deals, or promoções) page — Brazil's largest e-commerce marketplace — and returns clean, structured JSON for every deal and promotion on offer. For each discounted product you get the title, current price, original price, discount percentage, deal type (Oferta do Dia / Relâmpago), seller, rating, installments, and shipping info. Run it once or schedule it daily to track MercadoLivre promotions automatically, with API access, proxy rotation, and monitoring built in on the Apify platform.
Why scrape MercadoLivre daily deals?
- 🔥 Deal monitoring — capture every promotion the moment it goes live and react before stock runs out.
- 💸 Price intelligence — compare deal prices against original prices to measure real discount depth across categories.
- 🛒 Competitor research — see which sellers and products MercadoLivre is pushing in its featured deals.
- 📈 Repricing & arbitrage — feed live deal prices into your own pricing or sourcing workflows.
- 📊 Market trends — aggregate daily deals over time to spot seasonal patterns and category demand.
- 🤖 Automation — schedule runs and push results into spreadsheets, databases, or dashboards through Apify integrations.
Looking for a specific product instead of daily deals?
This Actor returns whatever MercadoLivre is promoting on its Ofertas do Dia page — you can't search it by keyword. To scrape listings for a specific product, brand, or search term, use our MercadoLivre Search Scraper instead.
How to use this MercadoLivre deals scraper
- Open the Actor on Apify and click Try for free.
- In the Input tab, set Max Items to how many deals you want to collect.
- Optionally pick a Category to limit the deals to a single department (or leave it on Todas as categorias for everything).
- Click Start and wait for the run to finish.
- Open the Output tab or download the dataset as JSON, CSV, Excel, or HTML.
To trigger a run via the Apify API:
curl -X POST \"https://api.apify.com/v2/acts/<YOUR_ACTOR_ID>/runs?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"maxItems": 200,"category": "all"}'
Input
Configure the Actor in the Input tab or via JSON.
| Field | Type | Default | Description |
|---|---|---|---|
maxItems | integer | 48 | Maximum number of deals to scrape (48–1000). The deals page serves 48 per page, so 48 is one full page; higher values paginate 48 at a time until reached or the deals run out. |
category | string | "all" | MercadoLivre category to restrict deals to (e.g. MLB1051 for Celulares). Use "all" for no category filter. |
Example input:
{"maxItems": 200,"category": "MLB1051"}
The category dropdown includes the most popular MercadoLivre departments. Each value is a MercadoLivre category ID (MLBxxxx); advanced users can pass any valid category ID via the API.
Output
One dataset record is pushed per deal. Download the dataset as JSON, CSV, Excel, or HTML from the Output tab or via the Apify API.
Output example
[{"position": 1,"productId": "MLB178925","itemId": "MLB3456789012","title": "Smartphone Samsung Galaxy A55 5G 256GB","url": "https://www.mercadolivre.com.br/p/MLB178925","thumbnail": "https://http2.mlstatic.com/D_NQ_NP_123456-MLB789.jpg","seller": "Samsung Store Oficial","isOfficialStore": true,"price": 1799.0,"originalPrice": 2499.0,"currency": "BRL","discountPercentage": 28,"dealType": "OFERTA DO DIA","installments": "ou 10x R$ 179,90 sem juros","coupon": "Cupom 5% OFF","rating": 4.8,"ratingCount": 3627,"shipping": "Frete grátis","isFullShipping": true,"highlight": "MAIS VENDIDO","isSponsored": false,"isInternational": false,"scrapedAt": "2026-06-26T12:00:00.000Z"}//...]
Output fields
| Field | Type | Description |
|---|---|---|
position | number | 1-based position in the deals listing (across pages) |
productId | string | null | Catalog/product-group ID (e.g. MLB178925). Groups all seller offers for the same product. null for listings not linked to a catalog entry. |
itemId | string | null | Individual listing ID (e.g. MLB3456789012). Unique per seller offer — equivalent to the wid parameter in the card URL. |
title | string | Product title |
url | string | Product page URL |
thumbnail | string | null | Product image URL |
seller | string | null | Seller or official store name |
isOfficialStore | boolean | Whether the seller carries the "Loja oficial" (official store) badge |
price | number | null | Current (discounted) price in BRL |
originalPrice | number | null | Original price before the deal discount |
currency | string | Always "BRL" |
discountPercentage | number | null | Discount percentage (e.g. 28) |
dealType | string | null | Deal badge, e.g. "OFERTA DO DIA" or "OFERTA RELÂMPAGO". null when the card carries no deal label. |
installments | string | null | Instalment text |
coupon | string | null | Coupon badge on the card (e.g. "Cupom 5% OFF"). null when no coupon is offered. |
rating | number | null | Average user rating (0–5) |
ratingCount | number | null | Number of user ratings (e.g. 3627). null when unavailable. |
shipping | string | null | Shipping label (e.g. "Frete grátis") |
isFullShipping | boolean | Whether the listing ships via MercadoLivre Full (fulfillment) |
highlight | string | null | Badge text (e.g. "MAIS VENDIDO") |
isSponsored | boolean | Whether the listing is a paid ad |
isInternational | boolean | Whether the product is sold by a cross-border (international) merchant, indicated by the CBT badge |
scrapedAt | string | ISO 8601 timestamp of when the record was scraped |
How much does it cost to scrape MercadoLivre deals?
This Actor uses Apify's pay-per-event pricing: you pay fixed prices for what the Actor does, and you are not charged separately for Apify platform usage (compute, bandwidth, or other infrastructure). There are just two charges:
| Event | When it applies |
|---|---|
| Per run | Once each time a run starts |
| Per deal | For each deal returned to the dataset |
The per-run fee covers the fixed infrastructure every run relies on — premium residential IPs and the compute to reliably load and parse the deals page. The per-deal fee applies to each record pushed to the dataset. This means the exact cost of a run is predictable before you start it: it depends only on how many deals you ask for, not on how long the run takes or how much bandwidth it uses.
A quick estimate at the current rates:
Deals (maxItems) | Approx. cost per run |
|---|---|
| 48 (1 page, default) | ~$0.18 |
| 200 | ~$0.64 |
| 1000 (max) | ~$3.04 |
See the Pricing section on the Actor's page for the exact per-run and per-deal rates. Apify's free plan also includes monthly free usage — enough to try the Actor without paying anything.
Tips to keep costs low
- Set
maxItemsto only what you need — you pay per deal returned. - Use the
categoryfilter to focus on the department you care about instead of paging through every deal.
FAQ
Is it legal to scrape MercadoLivre?
This Actor only collects publicly available product/deal data — the same information visible to any visitor without logging in. No private user data is collected. Always comply with MercadoLivre's Terms of Service and applicable local laws. Do not use scraped data in ways that compete unfairly with MercadoLivre or its sellers.
Do I need an API key or MercadoLivre account?
No. The Actor works without any MercadoLivre credentials. You only need a free Apify account to run it.
Can I monitor deals on a schedule?
Yes. Use Apify Schedules to run the Actor automatically (e.g. every morning) and store each run's dataset, then compare results over time to build a deal/price history.
Some fields come back as null — is that expected?
Yes. Not every deal card includes all fields. For example, rating and ratingCount only appear when the product has reviews, coupon only when a coupon is offered, and dealType only when a deal badge is shown. Missing fields are set to null rather than omitted so the schema is always consistent.
The scraper got bot-blocked — what can I do?
Blocks are rare: every run uses premium residential IPs and automatic retries to keep success rates high. If a run still comes back empty or partial, simply run it again — transient blocks usually clear on a retry.
Changelog
2026-06-26
- Added
isOfficialStore— whether the seller carries the "Loja oficial" (official store) badge. - Added
coupon— coupon badge text on the card (e.g."Cupom 5% OFF"). - Added
ratingCount— number of user ratings (e.g.3627). - Removed
soldCount— MercadoLivre's current card layout no longer exposes a sold/review count. - Removed
soldPercentage— MercadoLivre replaced the stock meter with a countdown timer, so the "% sold" value is no longer available. - Fixed
rating,discountPercentage,shipping,installments,dealTypeandisFullShipping, which had stopped populating (or returned dirty values) after MercadoLivre changed its card markup.dealTypenow also captures "OFERTA DO DIA" (previously it leaked intohighlight).
Support
If you encounter a bug or have a suggestion for this Actor or for a new one, please reach out via the Issues tab and we'll look into it ASAP.