Zoom & Buscapé API
Zoom (zoom.com.br) and Buscapé (buscape.com.br) are Brazil's two big price comparison sites, run by the same company on one platform, so a product has the same id, the same offers and the same price history on both.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads them as JSON, in reais, logged out. `search` takes product words and returns two kinds of rows: catalogue products (lowest à vista price, the instalment plan, number of stores, the best store, rating and review count) and single store offers the site has not matched to a product, each with its own id. Price range, category, brand and store filters and a price sort are available, with facet counts in the same response. `offers` returns every store for one product: the store, condition, the à vista price and the instalment plan (number, value, total, with or without interest) as separate numbers. `price_history` is the site's own daily lowest-price series for the last 40 days or 3, 6 or 12 months, with the store that had it. `product` adds the description, the spec sheet, the editorial review and the popularity rank; `reviews` returns the review block the site shows. `site` picks whose links and editorial text come back.
What a Zoom / Buscapé field actually contains
Fields that read differently from how they look. Every row was measured against the live sites on 2026-10-15.
| Field | What it holds |
|---|---|
| row_type | product or offer. A product row has product_id (goes into product, offers, price_history, reviews); an offer row is a single store item the site has not matched to a product and has offer_id (goes into offer). 14 of 14 ids measured (8 products, 6 single offers) came back as the same record, in both runs. |
| price | The à vista price in reais: one payment by PIX, boleto or debit, as the site prints it ("R$ 3.999,00 à vista"). On a product row it is the lowest store's price; it equalled the cheapest offer and the product's price_min on 8 of 8 products. |
| installment_total_price, installments, installment_value | What the store's instalment plan costs: 10x R$ 444,33 = R$ 4.443,30 against R$ 3.999,00 à vista. A separate number from price, never merged; stores that publish no plan (often Amazon) leave the plan fields null. |
| total, total_capped | The source's own result count. It stops at 10,000: 8 of 10 search words and the Celular category printed exactly 10,000 while the category's own facets add up to 22,444. total_capped: true marks that case. |
| price_history.points[] | One point per day: the lowest à vista price that day and the seller_id of the store that had it. Every point names the product it belongs to and is checked against the product you asked for; the 40-day series equalled the chart on the product's own page on 6 of 6 products. |
| price_history.last_price | Today's lowest so far. It equalled the cheapest offer at call time on 8 of 8 products in each of two runs and on 5 of 6 in a separate check; once it was lower (1,784.15 vs 1,886.63) because the cheaper offer had gone during the day. |
| reviews | The review block shown on the product page. For most products these are the linked store's reviews (often Amazon's), at most 10, with the link to all of them in external_reviews_url. 2 of 8 sampled products had reviews. |
| site | zoom or buscape. Offers, totals and price history were identical on both sites for 3 of 3 products; links, editorial review text and the order of some searches differ. |
Prices are in reais as the sites print them for Brazil. Shipping is not published: the sites only compute it after a postcode is typed, so no shipping field is returned.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/zoom-buscape/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "geladeira frost free"
}
}{
"ok": true,
"meta": {
"api": "zoom-buscape",
"endpoint": "search",
"mode": "live",
"latency_ms": 752,
"record_count": 32,
"bytes": 34907,
"cache_hit": false,
"total": 3692,
"upstream_requests": 1,
"site": "buscape",
"charged_credits": 2,
"version": "0.1.0",
"request_id": "fcbd6ac8ee994a7e",
"queue_ms": 1.3,
"fetched_at": "2026-10-15T17:03:01.871Z"
},
"data": {
"results": [
{
"row_type": "product",
"product_id": "13993972",
"offer_id": null,
"title": "Geladeira Brastemp Frost Free Inverse 591 BRE85MB",
"short_title": "Geladeira Brastemp Frost Free Inverse 591 BRE85MB",
"url": "https://www.buscape.com.br/geladeira/geladeira-brastemp-bre85mb-frost-free-inverse-591-litros",
"clickout_url": null,
"image": "https://i.zst.com.br/thumbs/45/23/2c/-1652710615.jpg",
"price": 4035.27,
"price_is_from": true,
"currency": "BRL",
"installments": 10,
"installment_value": 433.9,
"installment_total_price": 4339,
"has_interest": true,
"store_count": 2,
"best_offer": {
"offer_id": "1561867614",
"seller_id": "22905",
"seller_name": "Magazine Luiza"
},
"sellers": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"category": {
"category_id": "8",
"name": "Geladeira",
"slug": "geladeira"
},
"rating": null,
"review_count": null,
"discount_pct": 0,
"marketplace": false,
"stamps": [],
"popularity_score": 30361,
"position": 1
},
{
"row_type": "product",
"product_id": "13994214",
"offer_id": null,
"title": "Geladeira Consul Frost Free 337 CRB39MK",
"short_title": "Geladeira Consul Frost Free 337 CRB39MK",
"url": "https://www.buscape.com.br/geladeira/geladeira-consul-crb39mk-frost-free-1-porta-337-litros",
"clickout_url": null,
"image": "https://i.zst.com.br/thumbs/45/10/38/-1678551387.jpg",
"price": 1886.63,
"price_is_from": true,
"currency": "BRL",
"installments": null,
"installment_value": null,
"installment_total_price": null,
"has_interest": null,
"store_count": 3,
"best_offer": {
"offer_id": "1578172821",
"seller_id": "23326",
"seller_name": "Fast Shop"
},
"sellers": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"category": {
"category_id": "8",
"name": "Geladeira",
"slug": "geladeira"
},
"rating": null,
"review_count": null,
"discount_pct": 0,
"marketplace": false,
"stamps": [],
"popularity_score": 17107,
"position": 2
},
{
"row_type": "product",
"product_id": "13994132",
"offer_id": null,
"title": "Geladeira Brastemp Frost Free Duplex 512 BRM62AB",
"short_title": "Geladeira Brastemp Frost Free Duplex 512 BRM62AB",
"url": "https://www.buscape.com.br/geladeira/geladeira-brastemp-brm62ab-frost-free-duplex-512-litros",
"clickout_url": null,
"image": "https://i.zst.com.br/thumbs/45/13/34/-1672243001.jpg",
"price": 3269,
"price_is_from": true,
"currency": "BRL",
"installments": 10,
"installment_value": 355.33,
"installment_total_price": 3553.3,
"has_interest": true,
"store_count": 5,
"best_offer": {
"offer_id": "1578130326",
"seller_id": "22905",
"seller_name": "Magazine Luiza"
},
"sellers": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"category": {
"category_id": "8",
"name": "Geladeira",
"slug": "geladeira"
},
"rating": null,
"review_count": null,
"discount_pct": 0,
"marketplace": true,
"stamps": [],
"popularity_score": 13683,
"position": 3
}
],
"count": 32,
"total": 3692,
"total_capped": false,
"pages": 103,
"page": 1,
"page_size": 36,
"has_more": true,
"page_beyond_last": false,
"facets": {
"attributes": [],
"marketplace": [
{
"id": "false",
"name": "false",
"count": 3495,
"selected": false
},
{
"id": "true",
"name": "true",
"count": 197,
"selected": false
}
],
"category": [
{
"id": "8",
"name": "Geladeira",
"count": 2431,
"selected": false
},
{
"id": "407",
"name": "Frigobar",
"count": 418,
"selected": false
},
{
"id": "406",
"name": "Freezer",
"count": 159,
"selected": false
}
],
"price_range": {
"min": 9.9,
"max": 34629,
"buckets": [
{
"min": "[trimmed-depth]",
"max": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"min": "[trimmed-depth]",
"max": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"min": "[trimmed-depth]",
"max": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"seller": [
{
"id": "Webcontinental",
"name": "Webcontinental",
"count": 82,
"selected": false
},
{
"id": "Magazine Luiza",
"name": "Magazine Luiza",
"count": 77,
"selected": false
},
{
"id": "Fast Shop",
"name": "Fast Shop",
"count": 59,
"selected": false
}
]
},
"category_suggestion": null,
"sort": "relevance",
"site": "buscape",
"query": "geladeira frost free"
}
}What the Zoom & Buscapé API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Keyword search on Zoom / Buscapé (Brazil, BRL). Rows are catalogue products (lowest à vista price, instalment plan, number of stores, best store, rating and review count) and single store offers the site has not matched to a product (`row_type: offer`). Filter by price range, category, brand and store; sort by relevance or price. `facets` lists the categories, brands, stores and spec filters of the result. The source's total stops at 10 000 (`total_capped`). | Pricing teams call search to get keyword search on Zoom / Buscapé (Brazil, BRL). | query, site, sort, page, page_size, ... |
| category | One Zoom / Buscapé category listing (e.g. 8 = Geladeira, 7 = Celular e Smartphone): the same rows, filters, sort and paging as `search`. Takes the numeric id or the category URL (e.g. https://www.zoom.com.br/geladeira). | Marketplace operators call category to get one Zoom / Buscapé category listing (e.g. | category_id, site, sort, page, page_size, ... |
| product | One product on Zoom / Buscapé: title, brand, description, category path, images, the full spec sheet, lowest and highest à vista price, number of offers and stores, the best offer (store, à vista price, instalment plan), the user rating and review count, the popularity rank in its category, the site's tags and the editorial review (pros, cons, summary, author). | Catalog enrichment teams call product to get one product on Zoom / Buscapé. | product_id, site |
| offers | Every store's offer for one product: store (id, name, logo, marketplace), offer title, condition (new / used), cross-border, à vista price, instalment plan (number, value, total, with or without interest), discount, stock where the store publishes it. Sort like the site: default, cheapest à vista, priciest, cheapest instalment total, biggest discount. No shipping cost: the site only computes it after a postcode is entered. | Retail analysts call offers to get every store's offer for one product. | product_id, site, sort, page, page_size |
| offer | One single store offer (`row_type: offer` rows of search / category, or any `offer_id`): title, store, à vista price, list price, instalment plan, image and the site's cashback on it. | Pricing teams call offer to get one single store offer (`row_type. | offer_id, site |
| price_history | The site's own price history for one product: the lowest à vista price on every day and which store had it, for the last 40 days or 3 / 6 / 12 months, with the lowest, highest, median and last price of the period. Every point is checked to belong to the requested product. Today's point is the day's lowest so far and can be below the cheapest offer at the moment of the call (measured once in 22). | Marketplace operators call price_history to get the site's own price history for one product. | product_id, period, site |
| reviews | The user-review block of one product: average rating, review count, and the reviews the site shows (up to 10, each with title, text, stars, author first name, date, likes). For most products these are the linked store's reviews (often Amazon's), with the link to all of them in `external_reviews_url`. | Catalog enrichment teams call reviews to get the user-review block of one product. | product_id, site |
Call search from your stack
curl -X POST https://api.reefapi.com/zoom-buscape/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"geladeira frost free"}'import requests
r = requests.post(
"https://api.reefapi.com/zoom-buscape/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "geladeira frost free"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/zoom-buscape/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "geladeira frost free"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.zoom-buscape.search with {"query":"geladeira frost free"}.Who uses this API and why
- Track every Brazilian store's à vista and instalment price for a product list.
- Pull 12 months of daily lowest prices to see whether today's price is a good one.
- Compare instalment plans and interest across stores for the same product.
- Map a category with lowest prices, store counts, ratings and the best store per product.
- Watch single store offers the comparison site has not matched to a catalogue product.
Questions developers ask before integrating
Do I need a Zoom or Buscapé account?
No. Everything is read logged out.
What is the difference between price and installment_total_price?
price is the à vista price (one payment by PIX, boleto or debit); installment_total_price is the total of the store's instalment plan. On an iPhone 15 the cheapest store was R$ 3.999,00 à vista or 10x R$ 444,33 = R$ 4.443,30.
How far back does price_history go?
40 days (40 points), 3 months (93 points), 6 months (184 points) or 12 months (366 points, from 15 October 2025 on the day measured). Each point is the day's lowest à vista price and the store that had it.
Is the price history really the product I asked for?
Every daily point carries the product id it belongs to and is checked against your product_id; a series naming another product is refused. The 40-day series equalled the chart on the product's own page on 6 of 6 products.
Are Zoom and Buscapé different data?
No for prices: the same product id has the same offers, totals and price history on both (3 of 3 products checked). The site parameter changes the links, the editorial review text and, for some queries, the order of search results.
Which search filters are there?
Price range, category, brand and store, checked against the unfiltered count in the same run: "geladeira frost free" 3,683 results → R$ 1.000 to 2.000 150 (0 rows outside), one category 418, one store 78; Celular category → Samsung 140. Sort by price ascending or descending.
Is shipping included?
No. The sites compute shipping only after a postcode (CEP) is typed, so the offers carry no shipping cost rather than a guessed one.
How many rows does a page return?
page_size up to 100; the site returns that many or a few fewer (36 asked, 20 to 34 returned) because it hides some rows. The total stops at 10,000 (total_capped).
What is the Zoom & Buscapé API?
Zoom & Buscapé API is a ReefAPI endpoint group for brazilian price comparison: every store's à vista and instalment price for a product, its daily price history for up to 12 months, specs and reviews. It returns live JSON through POST requests under /zoom-buscape/v1.
Is the Zoom & Buscapé API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Zoom & Buscapé calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Zoom & Buscapé login or account?
No login to Zoom & Buscapé is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Zoom & Buscapé data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Zoom & Buscapé API use?
Zoom & Buscapé actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Zoom & Buscapé from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call zoom-buscape actions with the same key, credit pool and JSON envelope used by normal REST requests.