Casas Bahia Brazil Electronics & Home Goods Scraper avatar

Casas Bahia Brazil Electronics & Home Goods Scraper

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
Casas Bahia Brazil Electronics & Home Goods Scraper

Casas Bahia Brazil Electronics & Home Goods Scraper

Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand, price, discount, rating, and instalment terms. Extract SKUs, titles, brands, current and original prices, Pix offers, BRL instalment plans, stock, pickup options, images, variants, specifications, and reviews.

Pricing

from $1.00 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Scrape the Casas Bahia catalogue (casasbahia.com.br) and get one clean, flat row per product variant: identity, live price, the pre-discount price and discount, the instant-payment (Pix) price, the instalment terms, stock and pickup signals, media, variants, specifications and customer reviews. Everything in Brazilian reais.

Two ways to use it:

  • Search by keyword and/or department, with the store's own filters (department, brand, price band, minimum discount, minimum rating) and its own sort orders.
  • URL mode: paste product links, department links, search-result links or bare product codes. Product links are fetched in full; catalogue links are walked forward page by page.

Country scope

Casas Bahia is a Brazil-only retailer. It publishes one storefront, one currency (BRL) and one language (pt-BR); there is no country, market or locale switch anywhere on the site, and no alternate-market address resolves. Verified live before this actor was built, which is why there is no country input: a picker with one working value would only be misleading.

What you get

GroupFields
IdentityproductId (SKU), productGroupId, title, baseTitle, variantName, brand, brandId, ean, url, categoryName, categoryPath, categoryIds
Priceprice, originalPrice, discountPercent, discountAmount, listPrice, onSale, currency (BRL)
Instant paymentcashPrice, cashPriceLabel (for example No Pix), cashDiscountPercent, hasPixDiscount, hasBoletoDiscount
InstalmentsinstallmentText (for example 12x de R$324,99 sem juros), installmentCount, installmentValue, installmentInterestFree, installmentOptions[] with type, count, installmentValue, monthlyInterest, totalPrice, interestFree
AvailabilityinStock, availability (national, regional, commercial), pickupInStore, deliveryEstimate, shippingCost
SellersellerId, sellerName, sellerCount, offerCount, minOfferPrice, maxOfferPrice
Mediaimage, images[], videos[], manuals[]
VariantsvariantOptions[] (for example Colour, Model, Storage with their values) and variants[] with productId, name, attributes, image, url, available, selected
Detailsdescription, specifications[] (group, name, value), highlights[], warranty, manufacturerName, manufacturerContact, manufacturerSupportUrl
Reviewsrating, reviewCount, ratingBreakdown[], recommendationPercentage, reviewSummary, reviewsAvailable, reviews[]
Bookkeepingsponsored, productOrigin, searchMode, scrapedAt
Incremental modechangeType, changedFields, firstSeenAt, lastSeenAt

Reviews

Reviews are a real, fully available feature on this store and are returned by default. Each product carries an average rating, a reviewCount, a five-row ratingBreakdown, the share of reviewers who recommend the product (recommendationPercentage), the store's own written summary (reviewSummary), and the individual review rows the product page publishes: author, date, rating, text, helpful and not-helpful counts. Shopper-uploaded review photos and clips are not returned. Reviews cost no extra request: they come from the same product page as the description and specifications, so includeReviews is free once fetchDetails is on.

A product with no reviews returns reviews: [], reviewCount: 0, rating: null and reviewsAvailable: false. Nothing is invented.

maxReviewsPerProduct caps the number of individual rows returned; the average, the count and the per-star breakdown are always complete regardless of that cap.

Delivery estimate and shipping cost

deliveryEstimate and shippingCost are always null, and that is a property of the store, not a gap in this actor. Casas Bahia quotes delivery windows and freight only against a customer postal code (CEP) entered on the product page: with no CEP the page's own freight panel is empty, so there is no anonymous shipping figure to read. What the store does publish without a CEP is captured: pickupInStore (whether the product can be collected in a store), availability.national / .regional / .commercial, and inStock.

Input

Modes

  • mode: "search" with queries (keywords) and/or the categories filter.
  • mode: "url" with urls. Accepted shapes:
    • product page, https://www.casasbahia.com.br/<slug>/p/<sku>
    • search page, https://www.casasbahia.com.br/<keyword>/b (with ?page=, ?filter= and ?ordenacao= preserved, so a pasted page 3 starts at page 3)
    • department page, https://www.casasbahia.com.br/c/<department>?filtro=categoria-c13
    • a bare product code, for example 1558278013

Filters, in both modes

Every filter narrows a keyword search and a pasted department or search link.

InputApplied by
categories (department)the store
brands (brand names, for example Consul)the store
minPrice / maxPricethe store
minDiscountPercentthe store
minRatingthe store
minInstallments, interestFreeInstallmentsOnlythis actor, after reading each product's payment terms
inStockOnlythis actor, after reading live availability
sortBythe store

Brand names are matched against the store's own brand list for your search, ignoring case and accents, so you never have to know an internal brand code. If none of the names you enter exist in that list the run returns nothing and says so, rather than quietly dropping the filter and handing back the unfiltered catalogue.

minInstallments and interestFreeInstallmentsOnly are marked "this actor" because the store publishes no instalment facet. They are honest post-filters, not a claim that the store narrowed anything.

Connection

The default is Apify Proxy on the standard pool, which is enough for everything this actor does: catalogue search, pricing and product pages. This store refuses individual exits from time to time rather than whole pools, and a refused request is retried on a fresh exit automatically, so an occasional refusal is not something you need to pay your way out of. If refusals persist, switch the Connection section to the RESIDENTIAL group with country BR, which usually clears them but costs considerably more per gigabyte. You can also supply your own exits. If a run cannot read any results the actor fails loudly with that explanation rather than reporting an empty search.

Resume and recurring updates

  • resumeFromRunId continues ONE interrupted run: paste a previous run or dataset id and products already collected there are skipped, not re-returned and not re-billed.
  • incrementalMode (default off) is for recurring monitoring. The first run returns everything as NEW; later runs return only NEW, UPDATED and REAPPEARED, which is how a price cut or a stock change shows up. emitUnchanged and emitExpired are off by default because they return, and bill, extra rows.
  • State is keyed on the search, the filters and the detail settings, so two different setups never share a baseline. Use stateKey to name a campaign or to share one deliberately.

reviews is deliberately excluded from the change fingerprint: a busy product would otherwise be marked UPDATED by every new review, and storing the whole review corpus would blow the size cap on the saved baseline. Change is still detected, through reviewCount, rating and ratingBreakdown, which are all fingerprinted and do appear in changedFields.

Export to your apps (optional)

InputWhat it does
mcpConnectorsPipe results into your apps (optional). Select one or more authorized MCP connectors. Empty by default, and leaving it empty skips the export entirely.
notionParentPageUrlNotion parent page (Notion connector only). The page new item pages are created under. Ignored by every other connector.
maxNotifyListingsMax items to export per connector. Defaults to 50. Caps the export only, never the dataset.

Output sample

{
"productId": "55072122",
"productGroupId": "93194933",
"title": "Smartphone Example 6.8\" 512GB 5G",
"brand": "Example Brand",
"url": "https://www.casasbahia.com.br/smartphone-example-55072122.html",
"categoryPath": ["Telefones e Celulares", "Smartphone", "Smartphone Android"],
"price": 6754.44,
"originalPrice": 8998.89,
"discountPercent": 25,
"discountAmount": 2244.45,
"currency": "BRL",
"onSale": true,
"cashPrice": 6079.0,
"cashPriceLabel": "No Pix",
"cashDiscountPercent": 10,
"hasPixDiscount": true,
"installmentText": "24x de R$ 281,44 sem juros",
"installmentCount": 24,
"installmentValue": 281.44,
"installmentInterestFree": true,
"inStock": true,
"pickupInStore": true,
"deliveryEstimate": null,
"shippingCost": null,
"sellerName": "Casas Bahia",
"ean": "0000000000000",
"variantOptions": [
{ "name": "Cor", "values": ["Preto", "Verde"] },
{ "name": "Armazenamento", "values": ["512GB"] }
],
"rating": 4.8,
"reviewCount": 6,
"ratingBreakdown": [{ "rating": 5, "percentage": 83, "label": "Excelente" }],
"reviews": [
{
"reviewId": "0000",
"author": "Cliente",
"date": "27/04/2026",
"rating": 5,
"text": "Sample review text.",
"helpfulCount": 1,
"notHelpfulCount": 0
}
],
"scrapedAt": "2026-08-28T00:00:00Z"
}

Personal details in the sample above are placeholders. Real runs return the review author name exactly as the store publishes it.

What you are charged for

Three events:

  • Product result, charged once per product returned.
  • Detail enrichment, charged once per product when fetchDetails is on. This is the description, the specification table, the variants, manufacturer and warranty information, the full gallery, the pickup signal, every instalment plan and the reviews. Turn fetchDetails off for a cheaper run that still returns the live price, the discount, the Pix price and the headline instalment terms.
  • Actor start, charged once per run.

A product suppressed by incremental mode is neither returned nor charged, even though its page was read to work out that nothing changed.

Notes and limits

  • The catalogue's page size is fixed at 20 rows by the store; larger pages are rejected.
  • Some result rows are the store's own promoted placements. They are returned like any other product and flagged with sponsored: true so you can drop them.
  • Search results are capped by the store itself at 10,000 rows per query; narrow with filters to go deeper than that.
  • maxItems defaults to 20. Set it to 0 for an uncapped run, and expect a large department to be large.
  • Sorting by price is the store's own ordering, applied to the price in its search index. Each row's price is read live at scrape time, so a product whose price moved since the store last indexed it can appear slightly out of order. The price you get is the current one, which is the useful half of that trade.
  • No concurrency, retry or timeout knobs are exposed. Retries are hard-capped internally and a run that cannot read its pages fails fast rather than grinding.

Send results into your apps (MCP connectors)

Optionally pipe results into Notion, Linear, Airtable or Apify through Model Context Protocol connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in mcpConnectors. The dataset output is never changed by this.