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
2
Total users
1
Monthly active users
3 minutes 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}
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.
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 and bound the run with Max result pages instead: without a cap every product on every page read is processed.
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.
One cap does not apply to EXPIRED rows: they are computed from your whole tracked baseline once a run has scanned it in full, and every one of them is returned and billed in that run, on top of whatever Max products allowed the live scan itself to collect. A monitoring run with a small Max products and a large tracked baseline that has genuinely shrunk can therefore return far more rows than Max products says, all of it EXPIRED. Turn off Emit expired if you need a hard ceiling on run size and cost, or budget for it deliberately.
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 | sample | Netshoes product, search, category or brand links (url mode). |
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. |
maxItems | integer | 20 | Maximum number of products to return across the whole run. 0 = unlimited. |
maxPages | integer | 0 | Maximum result pages per keyword or link. 0 = unlimited. |
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. |
emitUnchanged | boolean | false | Also return (and bill) unchanged products. |
emitExpired | boolean | false | Also return (and bill) products no longer found after a full scan. |
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
The default Connection setting is the right one and needs no change: leave the proxy group list empty. Netshoes refuses ordinary connections on its result and product pages, so if the default connection is refused, the run moves once to Apify Proxy's enhanced group and stays there for the rest of the run. That fallback is billed on your own Apify plan at a higher cost per request. If your plan does not include it, the run fails with a clear message instead of returning an empty dataset. Picking a residential group is not needed for this store.
FAQ
How much does it cost?
You pay per product returned in the dataset, plus one Product page detail event per product whose own page is read for full description, specifications, per-size stock or reviews. The Pricing tab shows the current rates. Use Max products to cap the cost of any run.
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 many more products than Max products?
Products marked EXPIRED (previously tracked but no longer found after a full scan) are returned and billed in addition to whatever Max products allowed the live scan to collect; only the live scan side of a run is capped. Turn off Emit expired if you need a hard ceiling on run size and cost, or budget Max products with that in mind.
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 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 sports 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... | โฝ Whatnot Scraper Scrape Whatnot live and upcoming shows, queued items and lots, and seller profiles... |
| ๐ฅฆ Lidl.es Products, Weekly Offers, Prices & Reviews Scraper Scrape Lidl.es grocery and non-food products across weekly offers, tools, home, garden... | ๐ Casas Bahia Brazil Electronics & Home Goods Scraper Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand... |
| โฝ Globo Esporte Scraper Scrape public sports content from ge.globo.com, including news, videos, matches and feed... | ๐ Drogasil Brazil Pharmacy, Health & Beauty Scraper Scrape Drogasil (drogasil.com.br) medicines, health and beauty products by keyword... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ 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 or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.