Netshoes Brazil - Products, Prices, Stock & Reviews
Pricing
from $1.50 / 1,000 product results
Netshoes Brazil - Products, Prices, Stock & Reviews
Scrape sportswear and footwear from netshoes.com.br. Search by keyword with the store's own brand, size, colour and gender filters, or paste product and category links. Returns BRL price, was-price, discount, instalments, stock per size, colour variants, media, specs and reviews with fit feedback.
Pricing
from $1.50 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
6
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share
Netshoes Scraper: Brazilian Sportswear Prices, Stock & Reviews
Netshoes Scraper turns netshoes.com.br, Brazil's sportswear and footwear store, into a clean product data API. Search by keyword with the store's own brand, department, size, colour and gender filters, or paste product, category, brand and search links and scrape them directly. Every product colour comes back as one row with price in BRL, was-price, discount, instalment terms, stock, colour variants and media, plus optional full specifications and customer reviews with the store's own size and fit feedback, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to find products. Search by keyword, or paste product, category, brand, campaign or search links and scrape them directly.
- One row per product colour, at no extra cost. Identity, current price and was-price in BRL, discount, instalment terms, stock per size and colour siblings are always included.
- Full detail on demand. Switch on description, specifications, materials, per-size stock and the whole image gallery per run, and pay only for what you use.
- Customer voice included. Ratings, written reviews and the store's own size and fit surveys, so you can tell whether a product runs small before you buy it.
- Built for monitoring. Incremental mode returns only new, changed, restocked and, optionally, delisted products on a schedule, and a refused run fails loudly instead of returning an empty dataset.
- Brazil-native filters. Brand, department, product type, numeric shoe size, colour and gender all match the store's own Portuguese vocabulary and spelling, resolved for you at run time.
- Resume a large pull. An interrupted run can continue from where it left off without paying twice for products already collected.
Use Cases
- Price and discount monitoring: track price drops, instalment terms and promotional badges across a brand or department on a schedule.
- Competitive intelligence for sportswear sellers: compare assortment, pricing and stock across competing brands sold on the same marketplace.
- Size and fit research: mine the store's own fit surveys and reviews to see which products run small or large before recommending them.
- Stock and restock alerts: watch specific products or a whole category for sold-out and back-in-stock changes with Incremental mode.
- Catalogue and content teams: build a structured feed of descriptions, specifications and images for a product comparison site or app.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
sku | "ABC-12345-001" (one colour of a product; this is the row's identity) |
productCode | "ABC-12345" (the product family, all colours) |
title | "Sample Running Sneaker" |
brand | "Sample Brand" |
department / productType | "Running" / "Tenis" |
url | Netshoes link to this product |
currency | "BRL" |
price | 249.9 |
originalPrice | 349.9 |
discountAmount / discountPercent / onSale | 100.0 / 29 / true |
paymentMethod / paymentMethodPrice | "PIX" / 237.41 |
installments | {"count": 3, "amountEach": 83.3, "total": 249.9, "interestFree": true} |
sellerName / soldByStore | "Netshoes" / true (marketplace sellers are named) |
inStock / sizes | true / ["38", "39", "40", "41", "42"] |
sizesInStock | sizes actually available to buy right now (needs a product page read: Read each product's page or Fetch customer reviews) |
color / colorVariants | main colour, plus the same product's other colours with their own links |
freeShipping / fastFulfilment / preSale | shipping and launch policy for this listing |
badges | ["NOVIDADE"] |
featuredImage / images | product photo and the full gallery |
rating / reviewCount | 4.6 / 120 |
variants | stock per size, each with its own SKU, price and EAN (needs a product page read) |
specs / material / technology / weightGrams / origin | full copy and physical specifications (with Read each product's page) |
reviews / fitFeedback / percentRecommended | written reviews and the size and fit survey (with Fetch customer reviews and fit feedback) |
changeType / changedFields / firstSeenAt / lastSeenAt | incremental mode: "NEW" / [] / timestamps |
Reading a product's own page also adds longDescription, highlights, dimensionsCm, warranty, releaseDate, sizeType, sizeGuideAvailable, thumbnails, videos, breadcrumb, categoryPath, installmentPlans, variantSku, genders, brandSlug and additionalDeliveryDays. Reviews add ratingHistogram, reviewsReturned, reviewsTruncated and answered questions, with the asking customer's email address always dropped. Every record also carries detailsFetched, sourceUrl, searchTerm, reviewsRequested and scrapedAt.
How to Use
- Pick a mode:
search(by keyword) orurl(paste Netshoes links). - Fill in the fields for that mode, then apply any brand, department, size, colour, gender or price filters you want; they apply to both modes.
- Set Max products to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Search by keyword:
{"mode": "search","queries": ["tenis adidas"],"maxItems": 50}
Search with filters, discounted only:
{"mode": "search","queries": ["chuteira campo"],"brand": "Nike","size": "40","onSaleOnly": true,"maxItems": 100}
If you leave urls untouched in url mode, the actor now scrapes four sample links, one per link shape (keyword search, product page, category or brand path, filtered and paged search). Replace them with your own links.
Paste links, with full product-page detail:
{"mode": "url","urls": ["https://www.netshoes.com.br/busca?q=tenis%20adidas","https://www.netshoes.com.br/futebol/chuteiras"],"fetchDetails": true}
Monitor a category on a schedule, reviews included:
{"mode": "url","urls": ["https://www.netshoes.com.br/running/tenis"],"fetchReviews": true,"incrementalMode": true,"emitExpired": true}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/netshoes-scraper").call(run_input={"mode": "search", "queries": ["tenis adidas"], "maxItems": 50})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["title"], product["price"], product["inStock"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/netshoes-scraper').call({ mode: 'search', queries: ['tenis adidas'], maxItems: 50 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Link shapes you can paste
In url mode the actor reads these shapes of Netshoes link: a keyword search (/busca?q=...), a product page (/p/<name>-<SKU>), a category or brand path (for example /running/tenis or /running/tenis/adidas), and a filtered, paged search (facet and page parameters). If you leave urls untouched, one sample of each shape is used. A link you paste that starts past page 1 is read from that page.
Output tab views
The Output tab offers four views: Products (the result-card fields), Product detail (specifications, per-size stock and gallery), Customer reviews (one row per written review, unwound from the reviews array) and Changes since the last run (incremental status and changed fields; with Compact updates on, also the old and new values of each price or stock change and the per-size changes). Customer reviews are capped per product by Max reviews per product, from 1 to 100 (default 20).
Keeping a run cheap
A result page already carries price, discount, sizes, images and rating for about 100 products, at no extra cost. Read each product's page and Fetch customer reviews each need one extra page per product and are billed with one Product page detail event per product that reaches the dataset. They share that one page, so turning both on costs the same as turning on either. A pasted product link always reads the product page, because there is no result card behind it to fall back on, so it is billed one Product page detail event whenever it reaches the dataset, whatever the toggle says.
How Max products and Max result pages shape a run
When Max products is set, every keyword and link in a run gets its own slice of it, split evenly across them, so one popular search cannot use up the whole run and starve the rest. A search reads whole result pages and stops paging once the products it has read reach its slice. That count covers every product on those pages not already collected earlier in the run, before your filters and Incremental mode are applied, not just the ones that reach the dataset. The run as a whole still stops at Max products counted on rows actually returned.
Two consequences are worth knowing:
- A search can stop paging early. Products on a page that your Brand, Size, Colour, price or other filters drop, or that Incremental mode classifies
UNCHANGED(and suppresses), still count toward that search's slice. A page of such products can end the search before a later page with products you would actually get is ever read, so the run returns fewer rows than Max products allows. - Overlapping searches can miss products. When the last page a search reads holds more products than its remaining slice, the extra ones are not returned but are still marked as seen, so a later keyword or link in the same run that finds them skips them too.
If you run several overlapping keywords or links together, or combine a cap with strict filters or Incremental mode, and need a complete result, run them one at a time, or set Max products to 0 (the 100000 maximum, split across the searches in the run) and bound the run with Max result pages instead: each search's slice is then so large that it is not reached in practice.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips everything already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduled runs over the same search or links. Each product is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only after a run that scanned the whole tracked scope, and only withemitExpired).stateKeynames or shares the stored state. With Incremental mode off, output is exactly as before.
What counts as a change. Compared: price, original price, discount, on-sale flag, payment-method price, inStock, sizesInStock, sizes, per-size variant price and availability, colour siblings, title, brand, seller, shipping and badges. Excluded by default but still returned in the row: scrape timestamps, image and video links (the media host rotates) and instalment text and plans (derived from the price). Size and variant lists are compared regardless of the order the store returns them. Ratings and reviews never count. Switching the exclusions never causes a one-time wave of UPDATED rows: UNCHANGED is decided by re-reading the stored record under the current settings.
changeScope: priceAndStockcompares only price, original price, discount, on-sale flag, stock and per-size price and availability, so a title, badge or label edit is never a billableUPDATEDrow. SwitchingchangeScope, or editingignoreFieldsForChanges, keeps your existing saved state: nothing comes back asNEW, each stored product is simply re-compared under the new setting.compactUpdatesturnsUPDATEDandEXPIREDrows into slim rows (ids, link, title, current price and stock,priceChangesold and new,variantChangesper size asADDED,REMOVEDorCHANGED).NEWrows stay full. A compact row does not carry product-page detail fields, so the detail surcharge is not charged for it.expireAfterMissedScansapplies withemitExpired.EXPIREDmeans the product dropped out of the scanned results; it does not prove it is unavailable, because no product page is opened. UseinStockandsizesInStockfor availability.- A pasted link that starts past page 1, a run stopped by Max products or Max result pages, a resumed run, or a run whose search or filters differ from those the state key was last saved with never produces
EXPIREDrows.
EXPIRED rows count against Max products like every other row. They are only produced after a run that scanned the whole tracked scope, so a run that stopped because it reached Max products returns none. When the scan finished with room to spare, a run returns at most as many EXPIRED rows as that room allows (Max products minus the rows the run already returned). Products held back that way stay tracked and are returned, and billed, as EXPIRED on a later complete run. With Max products at 0 (the 100000 maximum) that ceiling is 100000 rows for the whole run.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each product, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search for keywords plus filters, or url to scrape pasted Netshoes links. |
queries | array | ["tenis adidas"] | Search keywords (search mode). Portuguese words match far more than English ones. |
urls | array | four sample links (one per link shape) | Netshoes product, search, category or brand links (url mode). |
keyword | string | (none) | Single-keyword alias of queries, added to that list. |
startUrl | string | (none) | Single-link alias of urls; when set it is scraped in url mode. With keywords filled in and Mode on search it is ignored, and the log says so. |
brand | string | (none) | Keep only products of this brand, for example Nike, Adidas or Olympikus. |
category | string | (none) | Keep only products in this department, as the store names it, for example Running or Futebol. |
productType | string | (none) | Keep only this type of product, as the store names it, for example Tenis or Chuteiras. |
size | string | (none) | Keep only products offered in this size, for example 40 or M. |
color | string | (none) | Keep only products in this main colour, in Portuguese, for example Preto or Azul. |
gender | string | (empty, any) | feminino, masculino, menina, menino, bebe_menina or bebe_menino. |
minPrice | integer | (none) | Only keep products at or above this price, in BRL. |
maxPrice | integer | (none) | Only keep products at or below this price, in BRL. |
inStockOnly | boolean | false | Keep only products that can be bought right now. |
onSaleOnly | boolean | false | Keep only products whose current price is below their was-price. |
sortBy | string | relevance | relevance, best_sellers, new_releases, offers, review_stars, price_asc or price_desc. |
fetchDetails | boolean | false | Read every product's own page for full description, specifications, per-size stock and the full gallery. |
fetchReviews | boolean | false | Also collect customer reviews, the per-star breakdown and the size and fit surveys. |
maxReviewsPerProduct | integer | 20 | Cap on reviews collected per product when reviews are fetched, from 1 to 100. |
maxItems | integer | 20 | Maximum number of products to return across the whole run, up to 100000. 0 = the 100000 maximum. |
maxPages | integer | 0 | Maximum result pages per keyword or link. 0 = no limit set; a safety limit of 2000 pages per keyword or link (far above what Max products can reach) always applies, and the log says when a limit stops a search that still had results. |
resumeFromRunId | string | (none) | Continue one interrupted run without re-collecting or re-billing its products. |
incrementalMode | boolean | false | Return only new and changed products on scheduled runs. |
stateKey | string | (none) | Name or share an incremental-mode state. |
changeScope | string | all | priceAndStock limits change detection to price, stock and per-size price/availability. |
compactUpdates | boolean | false | Slim UPDATED and EXPIRED rows with priceChanges and variantChanges. |
expireAfterMissedScans | integer | 1 | Mark EXPIRED only after this many consecutive complete scans missed the product. |
ignoreFieldsForChanges | array | (none) | Extra fields (or dotted paths such as variants.ean) that never count as a change. |
emitUnchanged | boolean | false | Also return (and bill) unchanged products. |
emitExpired | boolean | false | Also return (and bill) products no longer found after a full scan, within the room left under Max products. |
proxy | object | {"useApifyProxy": true} | Connection settings. |
mcpConnectors | array | (none) | Optional: send a summary of each product to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which products are created. |
maxNotifyListings | integer | 50 | Cap on products written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"sku": "ABC-12345-001","variantSku": "ABC-12345-001-40","productCode": "ABC-12345","title": "Sample Running Sneaker","brand": "Sample Brand","brandSlug": "sample-brand","department": "Running","productType": "Tenis","genders": ["Masculino"],"categoryPath": ["Running", "Tenis", "Sample Brand", "Preto"],"url": "https://www.netshoes.com.br/p/ABC-12345-001","currency": "BRL","price": 249.9,"originalPrice": 349.9,"discountAmount": 100.0,"discountPercent": 29,"onSale": true,"paymentMethod": "PIX","paymentMethodPrice": 237.41,"installments": {"count": 3, "amountEach": 83.3, "total": 249.9, "interestFree": true},"sellerName": "Netshoes","soldByStore": true,"inStock": true,"sizes": ["38", "39", "40", "41", "42"],"sizesInStock": ["38", "39", "41", "42"],"variants": [{"sku": "ABC-12345-001-40", "size": "40", "available": true, "price": 249.9, "originalPrice": 349.9, "ean": "7890000000001"}],"color": {"name": "Preto+Branco", "primaryName": "Preto", "primaryHex": "#000000", "secondaryName": "Branco", "secondaryHex": "#ffffff"},"colorVariants": [{"sku": "ABC-12345-002", "colorName": "Azul", "url": "https://www.netshoes.com.br/p/ABC-12345-002", "available": true}],"freeShipping": true,"fastFulfilment": false,"additionalDeliveryDays": 0,"preSale": false,"badges": ["NOVIDADE"],"featuredImage": "https://static.netshoes.com.br/sample/ABC-12345-001/zoom1.jpg","images": ["https://static.netshoes.com.br/sample/ABC-12345-001/zoom1.jpg"],"material": "Textil","technology": "Sample Cushioning","weightGrams": 620,"origin": "Nacional","sizeGuideAvailable": true,"rating": 4.6,"reviewCount": 120,"percentRecommended": 92,"fitFeedback": [{"topic": "Tamanho", "average": 3.1, "midpoint": 3.0, "scaleLow": "Justo", "scaleMid": "Na Medida", "scaleHigh": "Largo", "responses": 120}],"reviewsRequested": true,"reviewsReturned": 5,"reviewsTruncated": true,"changeType": "NEW","changedFields": [],"firstSeenAt": "2026-09-30T12:00:00Z","lastSeenAt": "2026-09-30T12:00:00Z","scrapedAt": "2026-09-30T12:00:00Z"}
Plan Requirement
Netshoes sits behind a bot-protection edge that refuses ordinary connections on its result and product pages (an "Access Denied" page), on Apify's standard datacenter pool and on plain residential connections alike. Leave the proxy group list empty and the run handles this on its own: it first opens one short browser session with the store (about 20 to 60 seconds) and then reads pages at full speed. If that session cannot be opened, or the store refuses pages, the run moves to Apify Proxy's enhanced group (UNBLOCKER): immediately after a refusal on the first connection, otherwise after a few refusals in a row. If the enhanced group is also refused, or is not included in your plan, it moves on to backup connections, and it stays on the lane that works. Whether the enhanced group serves pages depends on your Apify plan and its availability at the time of the run, so check the run log.
That enhanced group is billed on your own Apify plan at a higher cost per request. If your plan does not include proxy access, the run says so in plain words rather than returning an empty dataset. These are the messages you may see in the run log:
- Warning: "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable." followed by an upgrade pointer.
- Info: "Served over the backup connection (the default connection was unavailable)."
- Failure: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required".
- Failure: "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Netshoes pages."
- Failure: "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later."
You can supply your own proxy URLs instead; custom proxies get no automatic backup connection.
FAQ
How much does it cost?
Three events can appear on a run, and the Pricing tab shows the current rates:
- Dataset item: one event per product row returned in the dataset (incremental
UNCHANGEDrows are suppressed and not billed unless Emit unchanged products is on). - Product page detail: one event per product row whose own page is read, whether through Read each product's page, Fetch customer reviews or a pasted product link. Turning both toggles on still costs one event per product.
- Actor start: one event each time a run starts.
Use Max products to cap the cost of any run. Failed or empty pages are never billed.
Is it legal to scrape Netshoes?
This actor collects only publicly available product data. You are responsible for how you use it: follow Netshoes' terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Prices and specifications are generally facts, but product photos and brand names may be subject to third-party rights.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and restocked products, and unchanged ones are not billed unless you turn on Emit unchanged.
Why do my search keywords return so few results?
Netshoes is a Brazilian store, so Portuguese keywords match far more than English ones: "tenis adidas" finds thousands of matches, "adidas sneakers" finds almost none. A few popular phrases are also mapped by the store to a promotional page instead of a product list; when that happens the run says so and names the page, instead of reporting an empty catalogue.
Why did my run fail instead of returning an empty dataset?
If the store refuses every request, the run stops with a clear message so "no matches today" is never confused with "nothing could be read". Run it again in a few minutes. If only some pages could be read, you still get what was found, and the run tells you the result is incomplete.
Why did an incremental run return fewer EXPIRED products than have disappeared?
Max products caps the whole run, EXPIRED rows included. After the live scan, a run returns (and bills) at most the room left under Max products as EXPIRED rows, and a run that reached Max products returns none. The products held back stay tracked and come back as EXPIRED on a later complete run. Raise Max products if you want every vanished product reported in one run.
Why did a run with several overlapping searches or links return fewer products than expected?
With Max products set, each search or link gets a slice of it, and that slice counts every not-yet-collected product on the pages the search reads, before filters and Incremental mode are applied, not only the products that reach the dataset. A page of filtered-out or UNCHANGED products can therefore end a search before its later pages are read. And when a search's last page holds more products than its remaining slice, the extra ones are marked as seen without being returned, so a later, overlapping search in the same run skips them. Run overlapping searches or links separately, or set Max products to 0 (the 100000 maximum) and bound the run with Max result pages, if you need a complete result.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
๐ Want more e-commerce data?
Pair this actor with these related scrapers from the same team:
| ๐ Americanas Brazil Scrape Americanas Brazil (americanas.com.br) by keyword, department or pasted link... | ๐ Casas Bahia Brazil Electronics & Home Goods Scraper Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand... |
| ๐ Drogasil Brazil Pharmacy, Health & Beauty Scraper Scrape Drogasil (drogasil.com.br) medicines, health and beauty products by keyword... | ๐งฉ Mercado Livre Brazil Scrape Mercado Livre Brazil's best-sellers, category and product-video feeds without... |
| ๐ UNIQLO Scraper Scrape UNIQLO products across 21 country storefronts in local currency. Price with pre... | ๐ Nitori Japan Furniture & Home Goods Scraper Scrape Nitori Japan (nitori-net.jp) furniture and home goods by keyword, category or... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
- โญ Enjoying it? A quick review on the actor page helps other users find it.