Best Buy Product Scraper
Pricing
Pay per usage
Best Buy Product Scraper
Fast Best Buy product scraper. Pull product details (title, prices, savings, SKU, BSIN, model number, brand, ratings, reviews, specifications, images, category path) by SKU, direct URL, search keyword, or category. Reads Best Buy's GraphQL gateway directly, no headless browser.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Crikit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Fast, structured product data from Best Buy. Pull current price, regular price, savings, SKU, BSIN, brand, model number, ratings, review count, full specifications, image gallery, category path, and availability for any product on bestbuy.com.
Three discovery modes plus two precise modes: pass a list of SKUs, a list of product URLs, search keywords, or category IDs. Output is a flat JSON record per product.
What you get per product
- Identifiers -
skuId,bsin,upc,modelNumber - Pricing -
currentPrice,regularPrice,totalSavings,totalSavingsPercent,onSale - Catalog -
title,brand,categoryPath,whatItIs,releaseDate - Reviews -
averageRating,reviewCount - Media -
primaryImage,images(gallery) - Detail -
specifications(flat key-value map),highlights,features,dimensions - Status -
availability(active / archived / coming-soon)
How it works
The Best Buy Product Scraper reads Best Buy's public GraphQL gateway directly. It does NOT spin up a headless browser, so each request costs about 30 ms of compute and 10 KB of bandwidth. The fallback path parses the product page HTML directly when the gateway hiccups.
Under the hood:
curl_cffiwith Chrome 131 TLS impersonation to slip past Akamai Bot Manager- US residential proxy rotation (via Apify Proxy) with auto-rotation every 4 requests per IP
- PDP HTML fallback when the GraphQL gateway is rate-limited, so successful runs degrade gracefully
- Two-layer SKU discovery: the search page's embedded GraphQL response gives ~18 organic results per page (vs 4 from naive SSR scraping)
A note on pull-through
Best Buy uses Akamai Bot Manager with an aggressive policy on automated traffic. Even with all the mitigations above, expect roughly:
- SKU mode and direct URL mode: 50-70% of submitted SKUs returned on typical runs.
- Search mode: ~18 organic SKUs returned per result page; per-SKU pull-through then matches SKU mode.
- Category mode (leaf
pcmcat...IDs): similar yield to search mode.
For the highest pull-through, set requestConcurrency: 1 (the default) and run smaller batches (10-25 SKUs at a time). Bump requestConcurrency to 2 or 3 when you want faster runs and can tolerate lower per-SKU pull-through; the actor input has a tunable knob for exactly this trade-off.
Input modes
Mode A: SKUs (fastest, most precise)
{"skuIds": ["6447382", "6505725", "6620467"]}
Each SKU is fetched directly through the public GraphQL gateway. No discovery overhead.
Mode B: Direct product URLs
{"productUrls": ["https://www.bestbuy.com/site/apple-airpods-pro-2.../6447382.p?skuId=6447382","https://www.bestbuy.com/product/sony-wh-1000xm6.../J7XSRH5RCF"]}
Both URL formats are supported. The scraper extracts the SKU and reuses the same fast GraphQL path.
Mode C: Keyword search
{"searchQueries": ["airpods", "oled tv", "lego star wars"],"maxResults": 18}
The scraper walks Best Buy's search results, harvests organic SKUs (~18 per page from the embedded SSR data), and fetches each one's full detail. maxResults caps the total per search query. For maxResults > 18 you may not get additional results because Best Buy's SSR only includes the first page of organic results in the static HTML; deeper pages lazy-load via JavaScript and aren't reachable from an HTTP-only scraper.
For high-volume use, prefer Mode D (category browse, ~24 SKUs per leaf category page) or Mode A (explicit SKU lists).
Mode D: Category browse
{"categoryIds": ["pcmcat144700050004"],"maxResults": 24}
Category IDs come from any Best Buy PLP URL (the ?id= query parameter). Use leaf category IDs (pcmcat...), not parent IDs (abcat...). Parent categories are landing pages that link to sub-categories rather than listing actual products; the scraper detects this and returns zero results so you can switch to the correct ID. Leaf categories typically expose ~24 organic SKUs per page in the SSR data.
You can mix modes in a single run. Results are deduplicated by SKU.
Common Best Buy categories
| Category ID | Description |
|---|---|
pcmcat144700050004 | All Headphones |
pcmcat138500050001 | Cell Phones |
abcat0502000 | Computers & Tablets |
abcat0500000 | TV & Home Theater |
pcmcat209400050001 | Smart Home |
abcat0204000 | Headphones (parent) |
Pricing
Pay-per-event: $0.002 per product record (charged once per item written to the dataset). No subscription, no minimums. A test run of 10 products costs $0.02. A bulk run of 10,000 products costs $20.
Tips
- For price monitoring runs every day or every hour, set
includeSpecifications: falseto trim payload size by ~80%. The fast-path record still includes price, rating, availability, and primary image. - For competitive analysis, leave
includeSpecifications: true(default) and passsearchQueriesmatching the product category you want to map. - For catalog enrichment, pass your existing SKU list directly via
skuIds- fastest and cheapest mode. - Marketplace items sold by third-party sellers return slightly fewer fields. The scraper writes whatever Best Buy exposes anonymously.
Output sample
{"skuId": "6447382","bsin": "JJGCQ88C8X","upc": "195949704529","title": "Apple - AirPods Pro 2, Wireless Active Noise Cancelling Earbuds with Hearing Aid Feature - White","brand": "Apple","modelNumber": "MTJV3LL/A/MTJV3AM/A","currentPrice": 249.99,"regularPrice": 249.99,"totalSavings": 0,"totalSavingsPercent": 0,"currency": "USD","onSale": false,"averageRating": 4.8,"reviewCount": 31906,"availability": "active","categoryPath": ["Headphones", "All Headphones"],"primaryCategoryId": "pcmcat144700050004","primaryImage": "https://pisces.bbystatic.com/image2/BestBuy_US/images/products/6447/6447382_sd.jpg","specifications": {"Noise Cancelling (Active)": "true","Sound Mode": "Stereo","Battery Life": "6 hours","Bluetooth": "5.3"},"scrapedAt": "2026-05-24T20:00:00Z"}
Limits
- Geo: Best Buy serves US customers; the scraper runs through US residential proxies (configurable).
- Rate: ~6-15 products per minute per actor instance, depending on Best Buy's defensive posture. Akamai rate-limits aggressively; the scraper retries with proxy rotation but each successful fetch usually takes 5-15 seconds end-to-end.
- Search/category depth: ~18-24 organic SKUs per result page; deeper results require JS-rendered lazy loading and are not extracted.
- Stock data: real-time inventory and "in stock at store X" requires Best Buy auth and is not extracted. The
availabilityfield returns Best Buy's coarsedotComDisplayStatus. - Open box: open-box pricing for individual conditions is a separate query; this actor returns the main-line price only.
Why this Best Buy Product Scraper
- Fast: GraphQL gateway path is 100x cheaper than headless browser actors. Each product is ~9 KB on the wire and ~150-300 ms of compute (excluding retries under anti-bot pressure).
- Resilient: TLS impersonation defeats Best Buy's Akamai Bot Manager. When GraphQL is throttled, the scraper transparently falls back to parsing the PDP HTML so runs degrade gracefully instead of failing hard.
- Honest output: every field maps directly to a Best Buy schema field. No invented values, no LLM-rewritten descriptions.
- Mix-and-match input modes: SKU list, URL list, search, and category in one run.
Built by the Cirkit team. Reach out via the Apify Support tab for questions.