Best Buy Products Scraper

One search URL in,
ranked rows out.

This is not a product-detail scraper. You give it a Best Buy search results page and it returns a row for every listing on it, each one carrying the rank it held - so you can read price, rating and shelf position from the same table.

one-time 500 free rowsthen $0.002 per rowone search URL, many ranked rowsCSV · JSON · Excel
How it works

A search URL in, a spreadsheet out.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the Best Buy Products Scraper.
  3. STEP 3Paste the Best Buy search results URLs you want, one per line - the kind that looks like /site/searchpage.jsp?st=….
  4. STEP 4Choose your output format (CSV / JSON / XLSX).
  5. STEP 5Run the job.
  6. STEP 6Download the results - eleven columns per row, ranked in listing order.
What to expect

The things worth knowing before you run it.

Every row knows where it stood

position is the listing's rank on the results page, running from 1 downward. Our runs returned positions 1 to 23. That column is what separates this from a product scraper: you are capturing a shelf as it was ordered on a given day, not a set of unrelated product pages, so the same query run weekly gives you a movement series rather than a snapshot.

Eleven columns, not the seventeen you may expect

If you have used our other retail catalogues you will be reaching for parsed_price, currency, availability and a status flag. None of them are here. This service returns query, name, sku, brand, model, price, rating, reviews, image, url and position - a search-results shape, not a product-detail one.

The SKU is the join key, and it is in the URL

Best Buy's SKU is a plain number and every row carries it twice - once in sku and once inside url. Two URL shapes appeared in our export: 58 rows as /product/…/sku/<sku> and 27 as /site/-/<sku>.p?skuId=<sku>. Match on sku rather than on the address and both shapes reconcile to the same product.

The brand column is the head of the title

On 85 of our 85 rows the brand value is a leading substring of name. That works when the title starts with the maker and gives you "HP" or "Dell"; it does not when the title starts with a size or a marketing phrase, and our export accordingly contains values like "Customer", "Latitude" and '15.6" 2K Touchscreen Laptop'. Treat it as the head of the title, and normalise before grouping by it.

Depth varies between runs of the same query

Our seven runs all submitted the identical search URL and came back with 2, 3, 10, 14, 15, 18 and 23 rows. Positions always started at 1, so what changed was how far down the page the run got. Reconcile on sku and position, treat a short run as a short run rather than as products disappearing, and re-run when a series looks thin.

There is no status column here

The seventeen-column catalogue services write a per-row status so a blocked fetch is visible. This schema has none - a run that returns nothing returns no rows at all. The vendor catalogue marks this service Partial with the note -blocked (needs residential proxy), which matches what we see: rows arrive, but depth is not guaranteed. Count rows per run and alert on a drop.

What you get back

Eleven columns, measured on 85 rows.

In export order. The counts come from our own seven runs, so where this says a column carried a value it is describing rows we actually hold.

query
The search URL you submitted. Every row a search produces repeats it, which is what groups a result set back together after you combine exports. All 85 of our rows carry the same value because all seven runs submitted the same query.
name
The listing title as the results page prints it. Populated on all 85 rows. Expect the configuration inside the title - processor, memory, storage and screen size are part of the name rather than separate columns.
sku
Best Buy's own product number, and the column to join on. Populated on all 85 rows, 70 distinct values, and it also appears inside url on every row. Seven SKUs turned up in more than one of our runs, which is how you follow a product across dates.
brand
The head of the title, not a normalised manufacturer field. Populated on all 85 rows - and on all 85 it is a leading substring of name. Real makers appear, and so do fragments like "Customer" or a screen size. Normalise it before you group by it.
model
The manufacturer's model number where the listing prints one - 69 of 85 rows. This is the value that survives a move to another retailer's catalogue, so keep it even though it is the sparser of the two identifiers.
price
The price as displayed, with the currency symbol. 78 of 85 rows. There is no separate numeric column in this schema and no currency column, so strip the symbol yourself before doing arithmetic. Our run held values from two figures up to $4,199.98.
rating
The average star rating as a string. 81 of 85 rows. Read it together with reviews: 19 rows carry a rating of 0 alongside a review count of 0, which is a listing nobody has rated yet rather than a listing rated badly.
reviews
The number of reviews behind that rating. Same 81 rows as rating, and the same caveat about zeros. Our run ranged from 0 up to 5,929.
image
The listing thumbnail, served from Best Buy's image host. 84 of 85 rows. One row came back without one, so treat the column as optional in your importer.
url
The product page for that listing. Populated on all 85 rows, in one of two shapes - /product/…/sku/<sku> on 58 rows and /site/-/<sku>.p?skuId=<sku> on 27. Both embed the SKU, so the address is a link rather than an identity.
position
The rank the listing held on the results page, starting at 1. Populated on all 85 rows; ours ran to 23. This is the column that makes the export a picture of a shelf, and it is only meaningful next to query and the date you ran it.

Eleven columns per row · CSV, JSON or Excel

Two things to plan around. First, this schema is not the seventeen-column catalogue shape used by our distributor pages: there is no parsed_price, no currency, no availability, no description and - importantly - no per-row status. If you are writing one importer for several sources, this one needs its own branch. Second, depth is not fixed. Seven runs of the identical search URL returned 2, 3, 10, 14, 15, 18 and 23 rows, always starting at position 1. The vendor's own catalogue marks this service Partial with the note -blocked (needs residential proxy). Rows do arrive; how many is not something we will promise from seven runs, and we quote no success rate.

Common workflows

What a ranked shelf is good for.

Rank tracking

Watch where a product sits, week to week

Run the same query on a schedule and keep query, sku, position and the date. Because seven of our SKUs appeared in more than one run, the join is straightforward: same SKU, different position, different day. That series is the thing a screenshot cannot give you.

Merchandising · Monitoring
Price movement

Follow the asking price on a category

Price arrived on 78 of our 85 rows. Strip the symbol once at import, store the number next to the SKU and the date, and a weekly sweep of a handful of search URLs becomes a price series across a whole category rather than a handful of products.

Pricing · Competitive research
Review benchmarking

See which listings carry the social proof

rating and reviews arrived together on 81 rows. Sorted by review count, a results page tells you which products have accumulated attention and which are new - provided you exclude the 0/0 rows, which mean unrated rather than poor.

Category research · Positioning
Assortment mapping

Read the spec out of the title

There is no description column, so name is where the configuration lives. Parsing it across a full results page gives you a comparable spec table for a category - and model, on the 69 rows that carried it, is what lets you find the same unit in another retailer's catalogue.

Assortment · Sourcing
Pricing

Pay only for what you actually use.

Free tier

First 500 rows are free

One time, on signup. No card, and nothing to cancel afterwards.

One-time, on signup
Rate

then $0.002 per row

Billed on rows actually returned - which is the fair way round here, because one search URL can produce two rows or two dozen. Our 23-row run cost 23 rows; our 2-row run cost 2.

Billed on rows returned
No subscription

Nothing recurring

Credits do not expire on a monthly cycle. Track a category through the autumn and stop over the summer if that is the shape of the work.

No monthly expiry
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Register
Pairs well with

Other shelves, other schemas.

The legal bit

Is it legal to scrape Best Buy?

Prices, ratings and shelf order on a public search page are ordinary competitive information. The caveats worth naming are about rate, and about being straight where we could not check something.

A price, a product title, a rating and the order listings appear in are facts about goods offered for sale. Reading them from a page served to any visitor is what a shopper does by hand, at a useful speed. Nothing in the eleven columns describes a person: no name, no email address, no phone number, no account - so the data-protection questions that shape our people-facing services do not arise here.

Two things are specific to this site. First, rate. A search page is a heavier request than a product page and the depth we got back varied from two rows to twenty-three on the same query, so we run at a considerate pace and you should schedule accordingly rather than hammering one URL for a deeper page. The vendor's own catalogue marks this service Partial and notes that it needs a residential proxy, which is the same story from the other end. Second, and we would rather say this than gloss it: we could not read Best Buy's robots.txt. Three plain fetches from our machine on 12 August 2026 - the home page, the robots file and the search URL - timed out or had the connection reset, while an unrelated site answered normally in the same session. So this page quotes no robots.txt summary, because we have not seen the file.

Our own terms are the same as on every other service here. Publicly available pages only, nothing behind a login, no third-party trackers on the data layer, and exports auto-delete after 30 days. Your first 500 rows are free and need no credit card.

livescraper.app · what shapes a run
One search URL becomes many ranked rows
Depth varied from 2 to 23 rows in our runs
No status column - a thin run looks like a small shelf
Anonymous access only
Exports auto-delete after 30 days
We could not read the site's robots.txt from this machine, so this page quotes none.
Common questions

What people ask before signing up.

What do I submit - a product URL or a search URL?+
A search URL. Every run in our export submitted a Best Buy search results page of the form /site/searchpage.jsp?st=…, and each one returned a row per listing on that page with its rank in position. That is the shape this service is built around.
How many rows will one search URL return?+
It varies, and we will not pretend otherwise. Our seven runs of the identical query returned 2, 3, 10, 14, 15, 18 and 23 rows, always starting at position 1 - so what differed was how far down the page each run reached. The vendor catalogue marks this service Partial with the note that it needs a residential proxy. Count rows per run and re-run a thin one.
Is this the same seventeen-column schema as your other retail scrapers?+
No, and that catches people out. This one returns eleven columns - query, name, sku, brand, model, price, rating, reviews, image, url, position. There is no parsed_price, no currency, no availability, no description and no per-row status.
Why does the brand column contain things that are not brands?+
Because it is the head of the listing title. On all 85 of our rows the brand value is a leading substring of name, so a title that opens with the maker gives you "HP", and one that opens with a screen size gives you a screen size. Normalise it, or read the maker out of name yourself.
Which column should I join on?+
sku. It arrived on all 85 rows, holds 70 distinct values, and also appears inside url on every row - including the 27 rows whose address uses the /site/-/<sku>.p?skuId= form rather than the /product/…/sku/ one. If you need to match against another retailer instead, use model, which arrived on 69 rows.
A row has rating 0 and 0 reviews. Is the data broken?+
No - that is a listing nobody has reviewed yet. Nineteen of our rows carry both values as zero together. Filter them out of an average rather than treating them as one-star products.
Does the export include a currency?+
No. price arrives as displayed, symbol included, on 78 of our 85 rows, and there is no separate numeric or currency column in this schema. Strip the symbol at import if you plan to compute on it.
How much does it cost?+
Your first 500 rows are free, one time, no card. After that it is $0.002 per row, billed on rows actually returned - so a run that comes back thin costs less, not more.
What formats can I export?+
CSV, JSON or Excel. The eleven columns and their order are the same in all three.

Capture the shelf, not just the product.

One search URL, a row for every listing on it, with price, rating and the rank it held. Your first 500 rows are free, then $0.002 each.

Activates instantly · no card required

Scrape Best Buy product data

Best Buy is a consumer electronics retailer, and the service on this page reads its search results rather than its product pages. That distinction runs through everything else. You submit a URL of the form /site/searchpage.jsp?st=…, and what comes back is a row for every listing on that page, carrying the rank it held in a position column. Our seven runs all submitted the same laptops query and produced eighty-five rows between them, with positions running from one to twenty-three. If what you want is one product's full detail page, this is the wrong shape; if what you want is the state of a category on a given day, it is exactly the right one.

The schema is eleven columns and it is not the seventeen-column form our distributor catalogues use. There is no computable price column, no currency, no availability, no description, and - the one most likely to bite - no per-row status flag. In the seventeen-column services a blocked fetch still produces a row that says so. Here a run that reaches less of the page simply returns fewer rows, and nothing in the file distinguishes a short shelf from a short run. Our own evidence for that is direct: seven runs of an identical query returned two, three, ten, fourteen, fifteen, eighteen and twenty-three rows, every one of them starting at position one. The vendor's catalogue marks this service Partial and records that it needs a residential proxy. Count rows per run, keep the count, and alert on a drop rather than assuming the category shrank.

Two columns repay a careful read. sku is Best Buy's own product number and the right thing to join on: it arrived on every row, held seventy distinct values across our eighty-five, and appears inside the row's own URL in both of the two address shapes we saw. brand is not what its name suggests. On all eighty-five rows it is a leading substring of the listing title, which yields a real manufacturer when the title starts with one and yields a screen size or a stray word when it does not - our export contains "HP" and "Dell" alongside "Customer" and a fragment of a product description. Normalise it before grouping. model, present on sixty-nine rows, is the sparser but more portable identifier, and it is what lets you find the same unit in another retailer's catalogue. Ratings and review counts arrived together on eighty-one rows, and nineteen of those carry zero in both, which means unrated rather than badly rated.

One thing we will not do is describe a file we could not read. On 12 August 2026 three plain fetches from our machine - the Best Buy home page, its robots.txt and the search URL itself - timed out or had their connection reset, while an unrelated retailer answered normally in the same session. So this page carries no summary of the site's robots.txt, because we have not seen it, and no success rate, because seven runs of one query cannot support one. What we do state is what our own export contains and how it was measured. Publicly available pages only, nothing behind a login, no third-party trackers on the data layer, exports auto-delete after 30 days, and your first 500 rows are free with no credit card.