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

1

Bookmarked

5

Total users

4

Monthly active users

12 days ago

Last modified

Categories

Security

Limited permissions

Share

Casas Bahia Scraper: Prices, Pix Discounts, Instalments & Reviews

Casas Bahia Scraper turns the Casas Bahia catalogue (casasbahia.com.br) into a clean product data feed. Get one 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, all in Brazilian reais. Search by keyword and department, or paste product, department and search links, 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 and the store's own filters, or paste product links, department links, search-result links or bare product codes.
  • Real price plus Pix. Every row carries the live price, the pre-discount price and discount, and the instant-payment (Pix) price when the store offers one, not just a single headline number.
  • Every instalment plan. Instalment text, count and value, whether it is interest free, and the full list of instalment options the store publishes.
  • Full product depth on demand. Description, specification table, colour and capacity variants, manufacturer and warranty information, the full media gallery and customer reviews, all read from the product's own page.
  • Reviews up to your cap. Rating, review count and the per-star breakdown come from the product page; individual review rows are completed from the page's own review list (up to 200 per product) when the page shows only the first few. Reviews are part of the one detail-enrichment unit per product, with no extra per-review charge (see the cost FAQ).
  • Store filters plus actor filters. Department, brand, price band, minimum discount and minimum rating are applied by the store itself; minimum instalments, interest-free-only and in-stock-only are applied by this actor after reading each product's own terms.
  • Built for monitoring. Resume one interrupted run without paying twice, or turn on incremental mode to get only new, updated and reappeared products on a recurring schedule.

Use Cases

  • Price monitoring and repricing: track price cuts, Pix discounts and stock changes across a department or a brand on a schedule.
  • Comparison shopping and marketplace tools: pull structured price, instalment and availability data to power a comparison page or app.
  • Market research and BI: build a historical BRL price and discount dataset for electronics and home goods.
  • Review and sentiment analysis: collect rating breakdowns and individual review text to understand customer feedback at scale.
  • Content and affiliate teams: source specifications, images and instalment terms for buying guides and product pages.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
productId (SKU) / productGroupId"1234567890" / "9876543210"
title / baseTitle / variantName"Refrigerator Example 400L Frost Free"
brand / brandId"Example Brand" / "42"
ean"7890000000000"
url"https://www.casasbahia.com.br/exemplo-produto/p/1234567890"
categoryName / categoryPath / categoryIds"Refrigerators" / ["Home Appliances", "Refrigerators"] / ["13", "14"]
price / originalPrice / discountPercent / discountAmount / listPrice3499.90 / 4299.90 / 19 / 800.00 / 4599.90
currency (BRL) / onSale"BRL" / true
cashPrice / cashPriceLabel / cashDiscountPercent / hasPixDiscount / hasBoletoDiscount3149.91 / "No Pix" / 10 / true / false
installmentText / installmentCount / installmentValue / installmentInterestFree"10x de R$ 349,99 sem juros" / 10 / 349.99 / true
installmentOptions[]list of plans, each with type, count, installmentValue, monthlyInterest, totalPrice, interestFree
inStock / availabilitytrue / { "national": true, "regional": true, "commercial": false }
pickupInStore / deliveryEstimate / shippingCosttrue / null / null (see the note below the table)
sellerId / sellerName / sellerCount / offerCount / minOfferPrice / maxOfferPrice"1" / "Casas Bahia" / 3 / 3 / 3149.91 / 3699.90
image / images[] / videos[] / manuals[]cover image, full gallery, product videos, manual documents
variantOptions[] / variants[]for example Colour and Capacity, with each sibling's own id, name, image, url and availability
description / specifications[] / highlights[] / warrantyfull text, { group, name, value } rows, bullet highlights, "12 months"
manufacturerName / manufacturerContact / manufacturerSupportUrl"Example Brand" / "0800 000 0000" / "https://support.example.invalid"
rating / reviewCount / ratingBreakdown[] / recommendationPercentage4.7 / 128 / five-row breakdown / 92
reviewSummary / reviewsAvailable / reviews[]store's own written summary / true / individual rows: author, date, rating, text, helpful counts
sponsored / productOrigin / searchMode / scrapedAtfalse / "Nacional" / "search" / "2026-08-28T00:00:00Z"
status / country / source / search_term / page / rank"ok" / "BR" / "casasbahia.com.br" / keyword (search mode) / result page and position within the keyword's results (search mode, otherwise null)
product_id / sku / list_price / discount_percent / available / seller_id / seller_name / category_id / categories / installment / image_url / image_urls / product_url / source_url / scraped_at / error_messagesnake_case copies of the fields above (highlights and availability are listed above), added so exports from other Casas Bahia scrapers keep working; no extra request, no extra charge. error_message is null on every delivered row
changeType / changedFields / firstSeenAt / lastSeenAtincremental mode only: "UPDATED" / ["price", "discountPercent"] / timestamps

Casas Bahia is a Brazil-only retailer: one storefront, one currency (BRL) and one language (pt-BR), with no country or locale switch anywhere on the site, so there is no country input to configure.

deliveryEstimate and shippingCost are always null. Casas Bahia quotes delivery windows and freight only against a customer postal code entered on the product page, so with no postal code the page's own freight panel is empty and there is no anonymous shipping figure to read. What the store does publish without one, pickupInStore and availability, is captured in full.

How to Use

  1. Pick a mode: search (by keyword and filters) or url (paste links or product codes).
  2. Fill in the fields for that mode: keywords and department filters for search, or links and codes for url.
  3. Switch Fetch product details and Include customer reviews on or off, and set Max products to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search by keyword:

{
"mode": "search",
"queries": ["geladeira"],
"maxItems": 20
}

Search a department, filtered by brand and discount, cheapest first:

{
"mode": "search",
"categories": ["c13"],
"brands": ["Consul"],
"minDiscountPercent": 20,
"sortBy": "price_asc",
"maxItems": 50
}

Paste a product link and a department link:

{
"mode": "url",
"urls": [
"https://www.casasbahia.com.br/produto-1558278013.html",
"https://www.casasbahia.com.br/c/eletrodomesticos?filtro=categoria-c13"
]
}

Lightweight listing-only run (price and stock, no detail page read):

{
"mode": "search",
"queries": ["notebook"],
"fetchDetails": false,
"includeReviews": false,
"maxItems": 100
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/casasbahia-com-br-scraper").call(
run_input={"mode": "search", "queries": ["geladeira"], "maxItems": 20})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["title"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/casasbahia-com-br-scraper').call({
mode: 'search', queries: ['geladeira'], maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Reviews

Reviews are returned by default. Each product carries an average rating, a reviewCount, a five-row ratingBreakdown, the share of reviewers who recommend the product, the store's own written summary, and individual review rows: author, date (always dd/mm/yyyy), rating, text and helpful counts. Shopper-uploaded review photos and clips are not returned. The product page embeds only its first few reviews, so when the product has more than the page carries and your maxReviewsPerProduct asks for more, the actor reads the store's own review list page by page (50 per page, newest first) until the cap or the product's review count is reached; a review page that cannot be read leaves the reviews already gathered in place. Billing: reviews are included in the one detail-enrichment unit per product returned, with no extra per-review charge (see the cost FAQ). A product with no reviews returns reviews: [], reviewCount: 0 and rating: null, nothing is invented. maxReviewsPerProduct caps only the individual rows returned; the average, count and per-star breakdown are always complete.

Connection

The default is the standard connection pool, which is enough for catalogue search, pricing and product pages. This store refuses individual connections from time to time rather than whole pools, and a refused request is retried on a fresh connection automatically. If refusals persist, switch to the residential proxy group with country BR, which usually clears them but costs considerably more. If your account cannot use the selected connection, or the store refuses every attempt on it, the run continues on a backup connection where one is available and says so once in the log; it never reads pages over a residential group you did not pick yourself. If a run cannot read any results at all, it fails loudly with that explanation rather than reporting an empty search.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and products already collected there are skipped, not re-returned and not re-billed.
  • Incremental mode (incrementalMode) is for recurring monitoring of the same search. 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. Turn on emitUnchanged or emitExpired only when you also want those rows returned, and billed. stateKey names or shares a monitoring campaign; leave it empty and the actor derives one from the search, filters and detail settings.
  • reviews is 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 do appear in changedFields.
  • Ignore fields when detecting changes (ignoreFieldsForChanges) adds fields that never count as a change. The image fields (including those nested in variants) are always ignored, because the image address changes between fetches without the product changing. Changing this list never causes a one-time wave of UPDATED rows: unchanged status is decided by re-checking the saved record against the current list.

A known limit: Max products does not cap Emit expired rows. Max products bounds the new, updated, reappeared and unchanged rows a run returns. It currently does not bound EXPIRED rows: when emitExpired is on and a run completes a full scan of the tracked search, every previously tracked product no longer found is added to that run's output on top of the capped batch, so the total rows returned (and billed) can exceed Max products. This shows up on a large, long-running monitoring campaign where many tracked products have disappeared since the last run. If you need a hard ceiling on run size, turn emitExpired off, or budget for an occasional larger run when a lot of tracked products expire at once.

Combining Resume with a brand-new Incremental campaign. This works only the first time Incremental mode is turned on for a state key (a state key that already has saved state refuses the combination and explains why). The resumed run's products are stored in the new baseline with their full records, so the next Incremental run classifies them correctly (UNCHANGED when nothing moved) and can report them EXPIRED later. A run that used Resume never reports EXPIRED itself, because it does not scan the whole search.

Several keywords in one run. Each keyword (or pasted catalogue link) walks its own result pages. The end of a keyword's results is recognised only from an empty page, from the store's own total, or from a page that repeats one of that keyword's own earlier pages exactly. Products shared with another keyword never end a walk early. A pasted catalogue link that starts at page 2 or later, a run capped by Max products, and a run that stops on a rejected page are partial scans and never produce EXPIRED rows.

Notes and limits

  • The catalogue's page size is fixed at 20 rows by the store.
  • Some result rows are the store's own promoted placements, returned like any other product and flagged 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.
  • Sorting by price is the store's own ordering, applied to the price in its search index at index time; each row's price is read live, so a product whose price moved since the store last indexed it can appear slightly out of order.
  • No concurrency, retry or timeout knobs are exposed. Retries are capped internally, and a run that cannot read its pages fails fast rather than grinding.

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 record, 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.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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

ParameterTypeDefaultDescription
modestringsearchsearch (keyword and filters) or url (paste links or product codes).
queriesarray["geladeira"]Search keywords (search mode). Leave empty to browse by Department alone.
urlsarrayseven example linksProduct links, search results links (/<keyword>/b), department links or bare product codes (url mode). The default is the seven example links shown in the Console (two department pages, two product pages, three search results links). In url mode the example links are read unless you enter your own links or a keyword that differs from the example keyword; the Department and Brand filters apply to the example links. In search mode the example links are never read. Each delivered product is billed as usual, capped by Max products.
categoriesarray(none)Department filter. Applied by the store, in both modes.
brandsarray(none)Brand names, matched against the store's own brand list, ignoring case and accents.
minPriceinteger(none)Minimum price in BRL. Applied by the store.
maxPriceinteger(none)Maximum price in BRL. Applied by the store.
minDiscountPercentinteger(none)Minimum discount percentage off the pre-discount price. Applied by the store.
minRatingstring0Minimum average rating bucket (0 to 5 stars). Applied by the store.
minInstallmentsinteger(none)Keep only products offering at least one plan with this many instalments or more. Applied by this actor.
interestFreeInstallmentsOnlybooleanfalseKeep only products with at least one interest-free instalment plan. Applied by this actor.
inStockOnlybooleanfalseKeep only products the store will currently accept an order for. Applied by this actor.
sortBystringrelevancerelevance, popularity, best_selling, price_asc or price_desc. All five are the store's own orderings.
fetchDetailsbooleantrueRead each product's own page for description, specifications, variants, manufacturer info, gallery, pickup signal and instalment plans.
includeReviewsbooleantrueAdd customer reviews. Requires Fetch product details. Included in the one detail-enrichment unit per product; no extra per-review charge.
maxReviewsPerProductinteger20Cap on individual review rows returned per product. Values above 200 (and 0, which used to mean all) are treated as 200.
termstring(none)Single-keyword alias of queries (search mode); added to the keyword list.
startPageinteger1First result page read per keyword in search mode.
failOnNoResultsbooleanfalseEnd the run as FAILED when nothing matched.
ignoreSiteFailuresbooleanfalseEnd the run as succeeded when every request was refused, instead of FAILED.
maxItemsinteger20Maximum products returned across the whole run. 0 for unlimited.
maxPagesinteger0Maximum result pages read per keyword or link. 0 for no limit.
resumeFromRunIdstring(none)Continue one interrupted run without re-returning or re-billing products already collected there.
incrementalModebooleanfalseReturn only new, updated and reappeared products on recurring runs over the same search.
stateKeystring(none)Name or share an incremental-mode monitoring campaign.
emitUnchangedbooleanfalseAlso return (and bill) products unchanged since the last run.
emitExpiredbooleanfalseAlso return (and bill) products no longer found, after a complete scan.
ignoreFieldsForChangesarray["image", "images", "variants.image"]Incremental mode only. Fields whose change alone does not make a product UPDATED and is not listed in changedFields; they are still returned. Dotted paths reach nested fields. The image fields and reviews are always ignored, whatever you enter; add more field names to ignore them as well.
proxyobjectApify Proxy (standard)Connection settings.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"productId": "1234567890",
"productGroupId": "9876543210",
"title": "Refrigerator Example 400L Frost Free",
"brand": "Example Brand",
"brandId": "42",
"ean": "7890000000000",
"url": "https://www.casasbahia.com.br/exemplo-produto/p/1234567890",
"categoryName": "Refrigerators",
"categoryPath": ["Home Appliances", "Refrigerators"],
"price": 3499.9,
"originalPrice": 4299.9,
"discountPercent": 19,
"discountAmount": 800.0,
"currency": "BRL",
"onSale": true,
"cashPrice": 3149.91,
"cashPriceLabel": "No Pix",
"hasPixDiscount": true,
"installmentText": "10x de R$ 349,99 sem juros",
"installmentCount": 10,
"installmentValue": 349.99,
"installmentInterestFree": true,
"inStock": true,
"availability": { "national": true, "regional": true, "commercial": false },
"pickupInStore": true,
"deliveryEstimate": null,
"shippingCost": null,
"sellerId": "1",
"sellerName": "Casas Bahia",
"image": "https://imgs.example.invalid/1234567890/1.jpg",
"variantOptions": [
{ "name": "Colour", "values": ["White", "Silver"] }
],
"specifications": [
{ "group": "General", "name": "Capacity", "value": "400 litres" }
],
"warranty": "12 months",
"rating": 4.7,
"reviewCount": 128,
"ratingBreakdown": [{ "rating": 5, "percentage": 78, "label": "Excellent" }],
"reviewsAvailable": true,
"reviews": [
{
"reviewId": "0000",
"author": "Sample Customer",
"date": "27/04/2026",
"rating": 5,
"text": "Sample review text.",
"helpfulCount": 3,
"notHelpfulCount": 0
}
],
"sponsored": false,
"searchMode": "search",
"scrapedAt": "2026-08-28T00:00:00Z"
}

Plan Requirement

The default proxy setting works out of the box, and the actor rotates connections automatically when one is refused. For large or frequent runs, the residential proxy group with country BR gives more headroom; pick it under Connection.

FAQ

How much does it cost?

You pay per product returned, plus a detail-enrichment surcharge when fetchDetails is on. Reviews are included in that same event: one detail-enrichment unit per product returned with its details, whatever the number of reviews, charged after the product is saved and never for a product that is not returned. maxReviewsPerProduct is capped at 200 to bound the extra page reads. The Pricing tab shows the current rates. Use Max products to cap the cost of any run.

This actor collects only publicly available product data. You are responsible for how you use it: follow Casas Bahia's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Prices, specifications and availability are generally facts, but product photos and manufacturer content may be subject to third-party rights.

Can I get only new or changed prices on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, and unchanged ones are not billed unless you turn emitUnchanged on.

Why are deliveryEstimate and shippingCost always null?

Casas Bahia only quotes delivery windows and freight against a customer postal code entered on the product page. With no postal code there is no anonymous shipping figure to read, so this is a property of the store, not a gap in this actor. pickupInStore and availability are captured in full.

Why did a run return more products than Max products?

Max products caps new, updated, reappeared and unchanged rows. It currently does not cap EXPIRED rows: with emitExpired on, a run that completes a full scan of the tracked search adds every previously tracked product no longer found on top of the capped batch. Turn emitExpired off if you need a hard ceiling on run size.

Why did my run fail instead of returning an empty dataset?

If the site refuses every request, the run stops with a clear message so "no products matched" is never confused with "nothing could be read". Run it again in a few minutes, or check the Connection section if it keeps happening.

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 electronics 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...
๐Ÿ”Œ PB Tech Scraper
Scrape pbtech.co.nz products with full specifications, price, brand, condition, per-store...
๐Ÿ›’ Netshoes Brazil
Scrape sportswear and footwear from netshoes.com.br. Search by keyword with the store's...
๐Ÿ”Œ Boulanger.com
Scrape Boulanger (boulanger.com) electronics and home-appliance products: current price...
๐Ÿ”Œ Yodobashi Scraper
Scrape yodobashi.com electronics and appliances: JPY price, list price and discount...
๐Ÿ”Œ Bic Camera Scraper
Scrape Bic Camera (biccamera.com) products: JPY price, list price and discount, Bic Point...

๐Ÿ‘‰ 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.