Best Buy Product & Price Scraper
Pricing
from $2.40 / 1,000 results
Best Buy Product & Price Scraper
Scrape Best Buy (bestbuy.com) product, price, discount, availability, seller, and rating data from category and product pages. Every row carries a stable sku_id and a scrape-time captured_at timestamp so you can diff price and availability across scheduled runs.
Pricing
from $2.40 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
🎯 What this scrapes
Point this Actor at one or more Best Buy category browse pages and it returns one clean row per SKU — current price, regular price, discount percent, savings amount, seller type (Best Buy vs. third-party marketplace), stock/pickup availability, and rating summary. Every row carries a stable sku_id and an explicit captured_at scrape-time timestamp, so scheduling repeat runs and diffing the dataset gives you a real price-history feed instead of a one-off snapshot. Built on curl-cffi with browser TLS impersonation against Best Buy's own JSON product payload — no fragile CSS-selector scraping.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python. - 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
- 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.
💡 Use cases
- Price-drop monitoring — schedule repeat runs against a category or SKU list and diff
current_price/discount_percentacross runs to catch deals the moment they land. - Competitor price intelligence — track how Best Buy prices a category over time versus your own catalog.
- Marketplace-vs-Best Buy mix analysis — use
seller_typeto see which listings are Best Buy-fulfilled vs. third-party marketplace sellers. - Stock/availability alerting — diff
availability_statusandin_store_pickup_eligibleacross scheduled runs for restock notifications. - Catalog enrichment — resolve a category into stable
sku_id-keyed rows with rating, review count, and model number in one schema.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | yes | ['https://www.bestbuy.com/site/laptop-computers/all-laptops/pcmcat138500050001.c?id=pcmcat138500050001'] | Best Buy category browse URLs, e.g.… |
maxItems | integer | no | 200 | Cap on the total number of product rows emitted this run. |
proxyConfiguration | object | no | {'useApifyProxy': True} | Apify Proxy spec. No forced residential group in v1 — both datacenter and residential tiers are confirmed to reach Best… |
Example input
{"startUrls": ["https://www.bestbuy.com/site/laptop-computers/all-laptops/pcmcat138500050001.c?id=pcmcat138500050001"],"maxItems": 3,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
sku_id | string | Best Buy SKU identifier. |
product_name | string | Short product name. |
model_number | ['string', 'null'] | Manufacturer model number. |
product_url | string | Canonical product detail page URL. |
category_hint | ['string', 'null'] | The startUrls entry this row was found under (traceability). |
condition | string | Product condition, e.g. new. |
open_box_condition | ['string', 'null'] | Open-box condition grade, if applicable. |
current_price | number | Current customer-facing USD price. |
regular_price | ['number', 'null'] | Displayable regular (pre-discount) USD price. |
discount_percent | ['number', 'null'] | Percent off regular price — sourced from the page, or computed when absent. |
savings_amount | ['number', 'null'] | Absolute USD savings versus regular price. |
seller_type | string | best_buy (1P, sold by Best Buy) or marketplace (3P, third-party seller). |
seller_id | ['string', 'null'] | Seller identifier. |
availability_status | string | Fulfillment button text, e.g. Add to Cart or Sold Out. |
in_store_pickup_eligible | ['boolean', 'null'] | Whether in-store pickup is available for this SKU. |
rating | ['number', 'null'] | Average customer star rating. |
review_count | ['integer', 'null'] | Number of customer reviews. |
upc | ['string', 'null'] | Always null in v1 — UPC is absent from Best Buy's wire format. |
captured_at | string | ISO 8601 UTC scrape-time timestamp (not page-sourced). |
Example output
{"sku_id": "6667474","product_name": "HP - 14\" Laptop - Intel N150 Processor - 4GB Memory - 128GB UFS - Natural Silver","model_number": "14-dq6101dx","product_url": "https://www.bestbuy.com/product/hp-14-laptop-intel-n150-processor-4gb-memory-128gb-ufs-natural-silver/JJGW3FGFPZ/sku/6667474","category_hint": "https://www.bestbuy.com/site/laptop-computers/all-laptops/pcmcat138500050001.c?id=pcmcat138500050001","condition": "new","open_box_condition": null,"current_price": 229.99,"regular_price": 349.99,"discount_percent": 34,"savings_amount": 120,"seller_type": "best_buy","seller_id": "bby","availability_status": "Add to Cart","in_store_pickup_eligible": true,"rating": 4.4,"review_count": 294,"upc": null,"captured_at": "2026-08-06T14:32:07.512381+00:00"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.02 | One-off warm-up charge per run |
result-scraped | $0.0024 | Per unique dataset item |
Example: 1 000 results at the rates above ≈ $2.42. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
US bestbuy.com storefront only — no Canada or other regional storefronts. Direct product-page (PDP) URLs are not supported; supply category browse URLs. UPC is always null (absent from the source data). No free-text keyword search (?st= URLs are robots-disallowed and skipped). Category pagination is capped at cp=2-cp=5 per robots.txt (max ~5 pages per category per run). Review text/author/date is out of scope — only the aggregate rating and review count are included. Historical price trend charts are not built in — diff captured_at-stamped rows across scheduled runs yourself.
❓ FAQ
Does this cover bestbuy.ca or other storefronts?
No — bestbuy.com (US) only in v1. See Limitations.
Does it return historical price charts?
No — each run is a point-in-time snapshot. Schedule repeat runs and diff rows by sku_id yourself for a time series; the explicit captured_at timestamp is designed for exactly this.
Why is upc always null?
Best Buy's underlying product data does not expose a UPC field on the pages this Actor reads — it's always null rather than a guess.
Can I pass a direct product page instead of a category page?
No — direct product-page (PDP) URLs are not supported. Best Buy's PDPs reset the connection on direct fetch independent of proxy or geography, so the Actor skips them with a clear error rather than silently returning nothing. Supply a category browse URL instead.
Does it search by keyword?
No — Best Buy's free-text keyword search path is disallowed by robots.txt and is deliberately never used. Supply category or product URLs instead.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.