MercadoLivre search $1/1000 results
Pricing
from $0.90 / 1,000 results
MercadoLivre search $1/1000 results
Scrape MercadoLivre / MercadoLibre search results by keyword in Brazil, Mexico, Argentina and 15 more Latin American countries — prices, currency, discounts, ratings, sellers, shipping, installments, catalog IDs and categories. Set how many results you need.
Pricing
from $0.90 / 1,000 results
Rating
5.0
(2)
Developer
Rise and Code
Maintained by CommunityActor stats
1
Bookmarked
455
Total users
144
Monthly active users
5 hours ago
Last modified
Categories
Features
Share
What does this MercadoLivre search scraper do?
This Actor extracts structured product data from MercadoLivre — Latin America's largest e-commerce marketplace — straight from its search results. It searches Brazil by default and 17 more MercadoLibre countries, including Mexico, Argentina, Colombia and Chile. Pass one or more keywords and get back clean JSON for every product, including title, price, discount, installments, rating, brand, seller, official-store and shipping info, FULL fulfillment, sponsored flag, and category. You can also choose how MercadoLivre orders the results — by relevance, lowest price, or highest price — so a run can return exactly the cheapest (or priciest) listings for each keyword.
Why scrape MercadoLivre search results?
- 📊 Price monitoring — track price changes, discounts, and installment offers for any product category over time.
- 🛒 Competitor research — see which sellers, prices, and products rank for your target keywords.
- 📈 Market analysis — aggregate listing data to find top-rated products, best-sellers, and high-volume sellers.
- 🔎 Lead generation — discover official brand stores and their catalogues at scale.
- 🔥 Trend discovery — spot emerging products and categories by keyword before competitors do.
- 🤖 Automation — schedule runs and push results into spreadsheets, databases, or dashboards through Apify integrations.
How to use this MercadoLivre search scraper
- Visit the Actor page on Apify and click Try for free — no credit card required.
- In the Input tab, type one or more search terms (e.g.
fitness,pets,mouse gamer). - Pick the Country whose MercadoLivre / MercadoLibre site you want to search — Brazil is selected by default.
- Set Max Items to control how many products to scrape per term (up to 1000) — you're charged per product returned. Above about 700 per term, MercadoLivre often fails to load the deeper pages and the run slows down a lot.
- Pick a Sort Results By order — keep Most relevant for MercadoLivre's default ranking, or switch to Lowest price first / Highest price first to scrape a price extreme.
- Click Start and wait a few seconds 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/riseandcode~apify-mercadolivre-search/runs?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerms": ["fone bluetooth", "air fryer"],"country": "BR","maxItems": 100,"sortBy": "price_asc"}'
Input
Configure the Actor in the Input tab or via JSON.
| Field | Type | Default | Description |
|---|---|---|---|
searchTerms | string[] | ["pets"] | Required. One or more search terms, in the language of the site you search (Portuguese for Brazil, Spanish elsewhere). Spaces are converted to dashes automatically. |
country | string | BR | Which site to search, as a two-letter country code — see Supported countries. Leave it out to search Brazil. |
maxItems | integer | 48 | Maximum products to scrape per search term (48–1000; 48 items per page). Above ~700, MercadoLivre often fails to load deeper pages, so runs get much slower. |
sortBy | string | relevance | Result ordering: relevance (MercadoLivre's default ranking), price_asc (lowest price first), or price_desc (highest price first). |
excludeSponsored | boolean | false | Skip listings marked as sponsored ("Patrocinado"), leaving only the organic ranking. Skipped listings don't count toward maxItems and aren't charged. |
Input examples
Scrape a keyword on MercadoLivre Brazil
The first page of results for one term, in MercadoLivre's own ranking.
{ "searchTerms": ["pets"], "country": "BR", "maxItems": 48 }
Find the cheapest listings for a product
Sort by lowest price: the first 48 records are the 48 cheapest listings for the term.
{ "searchTerms": ["air fryer"], "country": "BR", "sortBy": "price_asc", "maxItems": 48 }
Organic ranking only (no ads)
See who ranks for a keyword without the paid placements.
{ "searchTerms": ["fone bluetooth"], "country": "BR", "sortBy": "relevance", "excludeSponsored": true, "maxItems": 96 }
Several keywords in one run
Each term is searched separately and every record says which term produced it.
{ "searchTerms": ["whey protein", "creatina", "pré treino"], "country": "BR", "maxItems": 48 }
Search MercadoLibre Mexico
Any of the 18 countries works the same way — write the term in the site's language.
{ "searchTerms": ["tenis para correr"], "country": "MX", "maxItems": 48 }
Supported countries
| Country | Country code (use in the country field) | ID prefix | Currency |
|---|---|---|---|
| 🇧🇷 Brazil (default) | BR | MLB | BRL |
| 🇦🇷 Argentina | AR | MLA | ARS (USD on vehicles and property) |
| 🇲🇽 Mexico | MX | MLM | MXN |
| 🇨🇴 Colombia | CO | MCO | COP |
| 🇨🇱 Chile | CL | MLC | CLP |
| 🇵🇪 Peru | PE | MPE | PEN |
| 🇺🇾 Uruguay | UY | MLU | UYU — most listings in USD |
| 🇻🇪 Venezuela | VE | MLV | VES — almost all listings in USD |
| 🇪🇨 Ecuador | EC | MEC | USD |
| 🇧🇴 Bolivia | BO | MBO | BOB |
| 🇵🇾 Paraguay | PY | MPY | PYG |
| 🇨🇷 Costa Rica | CR | MCR | CRC |
| 🇩🇴 Dominican Republic | DO | MRD | DOP |
| 🇵🇦 Panama | PA | MPA | USD |
| 🇬🇹 Guatemala | GT | MGT | GTQ |
| 🇭🇳 Honduras | HN | MHN | HNL |
| 🇳🇮 Nicaragua | NI | MNI | NIO |
| 🇸🇻 El Salvador | SV | MSV | USD |
Each run searches one country; to cover several, start one run per country. Every record carries the IDs of the site it came from, with the prefix shown above, and the currency its price is shown in.
The smaller markets — Bolivia, Paraguay, Central America and the Dominican Republic — list far fewer products, and their listings don't show a seller, rating, installments or sponsored placements, so those fields come back null or false there.
Sorting by price
sortBy changes the order MercadoLivre itself applies before the Actor reads the page, so it decides which listings you get, not just how they are arranged:
price_asc+maxItems: 48returns the 48 cheapest listings for the keyword — the usual input for price-floor monitoring and repricing.price_descreturns the priciest end of the catalogue, useful for premium/high-ticket research.relevancekeeps MercadoLivre's own ranking, which is what you want when you care about visibility (who ranks where for a keyword).
One thing worth knowing: a price-sorted run is far more stable between runs than a relevance run, which makes day-over-day diffs meaningful.
Excluding sponsored listings
MercadoLivre injects paid placements into its result grids, and they do not respect the ordering — set excludeSponsored: true to drop them and keep the organic ranking only.
Where this matters depends on sortBy. Measured on live pages, relevance results carry a sizeable share of sponsored cards, while price-sorted pages carried none at all. So the filter is close to a no-op on a price_asc run and a substantial change on a relevance one.
Filtered listings never count towards maxItems, so you still get the number of products you asked for — the Actor simply reads further down the results to find them.
Output
One dataset record is pushed per product listing. Download the dataset as JSON, CSV, Excel, or HTML from the Output tab or via the Apify API.
Output example
[{"searchTerm": "carregador celular","position": 1,"productId": "MLB178925","itemId": "MLB3456789012","title": "Carregador Turbo 65W USB-C compatível com Samsung","url": "https://www.mercadolivre.com.br/p/MLB178925","thumbnail": "https://http2.mlstatic.com/D_NQ_NP_123456-MLB789.jpg","seller": "Loja TechBrasil","isOfficialStore": true,"brand": "Samsung","price": 89.9,"originalPrice": 129.9,"currency": "BRL","discountPercentage": 30,"installments": "ou 12x R$ 7,49 sem juros","coupon": "Cupom 5% OFF","rating": 4.8,"ratingCount": 3627,"soldQuantity": 500,"shipping": "Frete grátis","isFreeShipping": true,"isFull": true,"highlight": "MAIS VENDIDO","isSponsored": false,"isInternational": false,"location": null,"category": "MLB-CELL_PHONE_CHARGERS","categoryId": "MLB1000","vertical": "CORE","totalResults": 12480,"scrapedAt": "2026-04-28T12:00:00.000Z"}//...]
Output fields
| Field | Type | Description |
|---|---|---|
searchTerm | string | The search term that produced this result |
position | number | 1-based position in the results as ordered by sortBy, counted across pages (so with price_asc, position 1 is the cheapest listing) |
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: two sellers listing the same product share a productId but differ here. |
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 official store badge ("Loja oficial" / "Tienda oficial") |
brand | string | null | Product brand (e.g. "Samsung"). null for listings MercadoLivre does not tie to a catalog entry. Published in Brazil, Mexico and Argentina only. |
price | number | null | Current price, in currency |
originalPrice | number | null | Original price before discount |
currency | string | ISO code of the price's currency: the country's own ("BRL", "MXN", "ARS"…) or "USD" for listings priced in dollars |
discountPercentage | number | null | Discount percentage (e.g. 30) |
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 — published in Brazil, Mexico and Argentina only. |
soldQuantity | number | null | Lower bound on units sold, as MercadoLivre buckets it (25, 50, 100, 500, 1 000, 5 000, 10 000, …) — a card reading "+500 vendidos" reports 500. Read it as a floor and a demand signal, not an exact sales total. null when the site publishes no figure. |
shipping | string | null | Shipping label in the site's language (e.g. "Frete grátis", "Envío gratis") |
isFreeShipping | boolean | Whether the card promises free shipping — the filterable form of shipping, so you can sort or pivot on it without parsing Portuguese or Spanish text |
isFull | boolean | Whether the listing ships from a MercadoLivre fulfillment center (the FULL badge) |
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 on the card |
location | string | null | Where the listing is, as printed on the card (e.g. "Quedas Do Iguaçu - Paraná", or a street address for a property). Only vehicles, real estate and services publish it — retail listings are null. |
category | string | null | MercadoLivre domain ID (e.g. "MLB-CELL_PHONE_CHARGERS") — the site's semantic product type. May be null if unavailable. |
categoryId | string | null | MercadoLivre category ID (e.g. "MLB1000") — the category-tree node, and the key the official MercadoLibre API accepts at /categories/{id}. Distinct from category above. |
vertical | string | null | Marketplace vertical ("CORE" for retail, "MOT" for vehicles, "RES" for real estate) |
totalResults | number | null | How many listings MercadoLivre reports for the whole search term (e.g. 12480), repeated on every record of that term — a market-size signal per keyword. It is not how many products a run returns (that is Max Items): the site resolves a broad term to a category, and its own pagination stops well before the total, so very large figures are not all reachable |
scrapedAt | string | ISO 8601 timestamp of when the record was scraped |
Looking for something else on MercadoLivre?
This Actor covers keyword search — the listing data shown on the results page. Two sibling Actors cover the rest:
- Daily deals — to catch whatever is on promotion across the marketplace right now, regardless of keyword, use our MercadoLivre Deals Scraper, which scrapes the Ofertas do Dia page and returns every discounted product with its deal type and discount percentage.
- Full product details & reviews — feed the product URLs or IDs returned here into our MercadoLivre Product Detail + Reviews to get specs, seller reputation, variants, stock, and customer reviews.
How much does it cost to scrape MercadoLivre?
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 | Price | When it applies |
|---|---|---|
| Per search | $0.04 | Once for each search term started |
| Per result | $0.001 ($1.00 / 1,000 items) | For each product returned to the dataset |
The per-search fee covers the fixed infrastructure every search relies on — premium residential IPs and the compute to reliably load and parse results — and applies on each term search starts.
Examples:
- One search term returning 48 products →
$0.04 + 48 × $0.001 = $0.088 - Two search terms returning 48 products each →
2 × $0.04 + 2 × 48 × $0.001 = $0.176 - One search term returning 1,000 products on the Business plan, which gets discounted prices ($0.037 per search, $0.0009 per result) →
$0.037 + 1,000 × $0.0009 = $0.937— under $1 for a thousand products
Apify's free plan includes $5 of free usage per month — enough to try the Actor without paying anything.
Setting a maximum cost per run
If you (or the AI agent calling this Actor) set a maximum cost per run, size it from the formula below — not from the "$1 per 1,000 results" headline alone. maxItems is per search term, and every term adds its own per-search fee:
max cost ≈ terms × $0.04 + terms × maxItems × $0.001
| Search terms | maxItems | Cost of a full run |
|---|---|---|
| 1 | 48 | $0.088 |
| 10 | 48 | $0.88 |
| 25 | 48 | $2.20 |
| 1 | 1,000 | $1.04 |
What happens when the cap is lower than that:
- Search terms run one at a time, and each term's fee is charged only when that term starts. A term starts only if the cap still covers its fee plus its first page of results; the remaining terms are skipped and not charged. For example, 30 terms of 48 results under a $1.00 cap return the first 11 terms in full.
- If a term is already running when the cap is reached, the run keeps the products saved so far and stops. You are never charged above your cap.
A cap is a good safety net; just leave room for the per-search fees.
Tips to keep costs low
- Set
maxItemsto only what you need — you pay per product returned. - Each search term started incurs the per-search fee even if it returns few or no products, so prefer specific terms you know have matching listings.
Use the MercadoLivre scraper with AI agents (MCP)
This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server. Add it to your client:
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=riseandcode/apify-mercadolivre-search" } } }
The smallest input an agent needs:
{ "searchTerms": ["pets"], "country": "BR", "maxItems": 48 }
Tips for agents:
- Cost:
maxItemsis per search term, and each term adds a $0.04 fee — a run costs aboutterms × ($0.04 + maxItems × $0.001). With a maximum cost per run, terms the cap can't pay for are skipped and not charged. - Response size:
maxItemsis also the lever for output size; 48 (one page) is the smallest and fastest. - Language: write the term in the site's language — Portuguese for
BR, Spanish for the other 17 countries. - Failures: a run that hit trouble still ends as
SUCCEEDEDwith what it saved; compare the item count withterms × maxItemsand see What happens when a search term fails or finds nothing?
Limitations
- Up to 1,000 results per search term. Beyond about 700, MercadoLivre often fails to load the deeper result pages; the Actor retries them, but each page can take minutes. For more coverage, split a broad keyword into more specific ones.
totalResultsis not what you can download. MercadoLivre reports the size of the whole search (often tens of thousands), but its own pagination stops long before that.- One country per run. To cover several countries, start one run per country.
- Search terms run one after another, so a run with many terms takes proportionally longer.
- Price order isn't perfectly strict. MercadoLivre occasionally places a listing slightly out of sequence — see the FAQ on sorting below.
FAQ
Is it legal to scrape MercadoLivre?
This Actor only collects publicly available product listing 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 (or those of the MercadoLibre site you search) 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.
Which countries can I search?
All 18 MercadoLibre marketplaces: Brazil, Argentina, Mexico, Colombia, Chile, Peru, Uruguay, Venezuela, Ecuador, Bolivia, Paraguay, Costa Rica, the Dominican Republic, Panama, Guatemala, Honduras, Nicaragua and El Salvador. Set country to the two-letter code; runs without it search Brazil, exactly as before.
Why do some prices come back in USD?
Because that is how the seller priced them. Venezuela lists almost everything in US dollars, most of Uruguay's listings are in dollars too, and several other countries mix local currency and dollars on the same page. Every record's currency tells you which one its price is in, so convert before comparing prices across records.
How do I track MercadoLivre prices over time?
MercadoLivre only shows today's price, so history has to be built by you: schedule the Actor with Apify Schedules (for example daily, with the same terms and sortBy: "price_asc", which keeps results stable between runs), then keep each run's dataset or send it to a spreadsheet and compare by itemId.
Does it work with Make, Zapier, Google Sheets or webhooks?
Yes. Every run's dataset can go straight to Google Sheets, Make, Zapier, Slack, Airbyte and more through Apify integrations, or trigger a webhook when the run finishes. To start runs from your own code, use the API call shown in How to use or the Apify client for JavaScript or Python.
Does MercadoLivre have an official API?
It does, but it no longer offers free, open product search: it requires an authenticated app with restricted access. This Actor needs no MercadoLivre account or app — it reads the same public search results any visitor sees and returns them as structured data, with pagination and sponsored listings handled for you.
Does sorting by price return the actual cheapest products?
It returns what MercadoLivre itself ranks as cheapest for that keyword — the same list you'd see using the site's "Menor preço" filter. The site's own ordering is not strictly monotonic, though. It occasionally misplaces a near-tie (R$ 35,17 landing just before R$ 34,90), and a couple of cards per page sit further outside the sequence — a R$ 22 listing showing up early in a "highest price first" run, for example. Those are not sponsored, and the price reported is exactly the one printed on the card: every case we inspected was a catalog listing (its url contains /p/), where the card shows the current winning offer while MercadoLivre appears to have ranked the entry on a different value. Nothing is missing from the result set — sort the dataset by price on your side if you need a strict ladder. Sponsored placements, which do ignore the ordering, were absent from every price-sorted page we measured, but excludeSponsored will drop them if any turn up.
Why is the top result of a "highest price first" run an absurd price?
Because a handful of sellers publish listings at a fictional price instead of taking them down, and price_desc sorts those straight to the top. On the keyword "teclado" we saw a notebook at R$ 100,000,000 and another at R$ 2,300,000. This is the value MercadoLivre actually shows on the card, not a parsing error, so the Actor reports it as-is. If you're researching the genuine premium end of a category, skip the first few records or discard anything above a plausible ceiling for that category.
What's the difference between category and categoryId?
They are two different MercadoLivre identifiers, and the site publishes both. category holds the domain ID — a semantic product type like MLB-COMPUTER_MICE — which is the field this Actor has returned since its first release, under that name. categoryId holds the category ID, the node of MercadoLivre's category tree (MLB1714), which is what the official MercadoLibre API takes at /categories/{id}. If you're joining this dataset to that API, categoryId is the key you want.
Why is location empty for most products?
Because MercadoLivre only prints a location on the verticals where it is part of the offer: vehicles, real estate and services. Measured across seven live result pages, every vehicle and property card carried one and no retail card did. So expect location on a honda civic or apartamento venda run, and null on a mouse run.
What happens when a search term fails or finds nothing?
- The term has no listings on the site: the run ends
SUCCEEDEDwith no records for that term, and you are still charged its $0.04 search fee — opening the results page costs the same whether MercadoLivre answers with 48 products or none. Search terms you know have listings rather than probing with a long list of guesses. - The term has fewer listings than
maxItems: the Actor stops at the end of the results and the run endsSUCCEEDED; you pay only for the records returned. - MercadoLivre keeps refusing a page: the Actor retries it automatically with a new connection. If it still fails, the term keeps the products saved so far and the run ends
SUCCEEDEDwith fewer records than requested — run it again. - Your maximum cost per run can't pay for a term: that term is skipped and not charged. If it can't pay for even the first term, the run stops at once, charges nothing, and its status message says so.
- Invalid input (for example
maxItemsabove 1000): the run is rejected before it starts and nothing is charged.
In every case you are only charged for the records actually in the dataset plus the fee of each term that started. The run log shows, per term, how many results the site reported and when a term ran out of results.
Some fields come back as null — is that expected?
Yes. Not every listing includes all fields. For example, rating only appears when the product has reviews, and originalPrice only when a discount is active. brand and ratingCount are only available for listings tied to a product catalog entry, so individual seller offers and ads often leave them null. Missing fields are set to null rather than omitted so the schema is always consistent.
What's the ideal timeout?
Up to about 700 products per search term, pages usually load on the first try and a term finishes in a few minutes. Beyond that, MercadoLivre often fails to load the deeper result pages: the Actor retries them automatically, but each page can then take several minutes, which is why Max Items is capped at 1000 per term. The timeout is a hard ceiling on the whole execution, retries included. Keep the default (1 hour) for up to about 700 items per term; for terms close to 1000, or many terms in one run, raise it to 2–3 hours, or split the terms across several runs.
The scraper got bot-blocked — what can I do?
The Actor handles it first: every run uses premium residential IPs and retries a page that wasn't served with a fresh connection, so most blocks clear on their own inside the run. If a run still comes back empty or partial, run it again — transient blocks usually clear on a retry. Deep result pages (beyond about 700 products per term) are where this happens most; see Limitations.
Disclaimer
This Actor is not affiliated with, endorsed by, or sponsored by MercadoLibre, Inc. or its affiliates. MercadoLivre and MercadoLibre are trademarks of their owner. The Actor collects publicly available data only; you are responsible for using it in line with applicable laws, including data-protection rules.
Changelog
2026-11-11
- Improved the checks that keep price-sorted results in line with MercadoLivre's own ordering.
2026-11-09
- Changed the maximum
maxItemsfrom 10000 to 1000 per search term. Beyond about 700 products per term, MercadoLivre often fails to load the deeper result pages, so larger values made runs slow and likely to hit the timeout. Runs that ask for more than 1000 are now rejected at input; split them across more search terms instead.
2026-11-04
- Changed how a maximum cost per run is spent: search terms now run one at a time and each is charged only when it starts, so a cap that covers some of your terms returns those in full. Before, a cap too small for every term could end the run with no products.
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 or at contact.riseandcode@gmail.com and we'll look into it ASAP. We respond in English 🇺🇸 and Portuguese 🇧🇷.