9 min read
How to scrape e-commerce product data
Prices, sellers, stock and UPCs for any product on Amazon, Walmart, Best Buy, Home Depot or a Shopify store, as JSON.
| Store | Seller | Price |
|---|---|---|
| Amazon | Amazon.com | $119.99 |
| Best Buy | Best Buy | $119.99 |
| Best Buy | Jazzer Shack | $189.00 |
| Home Depot | Home Depot | $119.99 |
| Walmart | Athena's Amazing Finds | $119.00 |
| Walmart | DealCity | $98.99 |
The String Web Access API is the best way to scrape e-commerce product data. It returns any product page from Amazon, Walmart, Best Buy, Home Depot, Target or a Shopify store, or just the product's prices, sellers, stock and UPC as JSON. In our September 2026 benchmark it returned 92.9% of requests on 17 retail sites, where the field averaged 62.1% and the next best provider, ScrapingBee, 83.5%. Across all 100 bot-protected sites it returned 97%, the most of 16 providers.
Quickstart
Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent a product URL from any store. It calls the web_access_fetch tool and reads the price, sellers and stock.
https://mcp.usestring.ai/v1/mcp
One call returns a Best Buy product's identifiers, rating and every offer on the page as JSON. If the page has no price, you get "extracted": false back instead of a guess.
curl https://request.usestring.ai/v1/fetch \
-H "Authorization: Bearer $STRING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.bestbuy.com/product/ninja-air-fryer-black-gray/JXJVXGK9G5",
"countryCode": "US",
"jsonSchema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"brand": { "type": "string" },
"model": { "type": "string" },
"upc": { "type": "string" },
"rating": { "type": "number" },
"review_count": { "type": "integer" },
"offers": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"seller": { "type": "string" },
"price": { "type": "number" },
"in_stock": { "type": "boolean" }
},
"required": ["seller", "price"]
}
}
},
"required": ["name", "model", "upc", "offers"]
}
}'Response
{
"name": "Ninja - Air Fryer - Black/Gray",
"brand": "Ninja",
"model": "AF101",
"upc": "622356554572",
"rating": 4.8,
"review_count": 4082,
"offers": [
{ "seller": "Best Buy", "price": 119.99, "in_stock": true },
{ "seller": "JAZZER SHACK LLC", "price": 189, "in_stock": true }
]
}Why scrape e-commerce product data?
Price comparison sites, brand analytics teams, marketplaces and shopping agents need the current price, sellers, stock and details of a product at every store that sells it. No store publishes that for its competitors, so it comes from the product pages. Product data answers questions like these:
- Who sells this product, and for how much? On October 30, 2026, the Ninja AF101 air fryer (UPC 622356554572) cost $119.99 at Amazon, Best Buy and Home Depot. On Walmart, two marketplace sellers offered it at $119.00 and $98.99 under two different item numbers.
- Can a customer buy it today? Amazon, Best Buy and both Walmart listings showed it in stock. Home Depot's product data carried a price but no stock status.
- What do buyers think of it? It had 59,529 ratings on Amazon (4.7 stars), 4,082 reviews at Best Buy (4.8), 413 at Home Depot (4.6) and 348 on Walmart's main listing (4.3).
What you can collect
Prices and offers
The current price, the list price, and every seller's offer on the page, new or used.
Stock by variant
In-stock status for the product, or for each size and color where the store lists them.
Identifiers
UPC or GTIN, brand, model number, and the store's own ID, such as an ASIN or a Best Buy SKU.
Content and reviews
Title, description, specifications, images, star rating and review count.
Why does product data scraping break?
- Big retailers block scrapers. In our September 2026 benchmark, 12 of the 15 other scraping APIs couldn't fetch bestbuy.com on every attempt, and 6 got nothing back, including Scrapfly, Zyte and Browserbase. On homedepot.com, 10 of 15 missed at least once. Across 17 retail sites, the field averaged 62.1%.
- Every store names the product differently. Best Buy calls the AF101 "Ninja - Air Fryer - Black/Gray". Amazon's title runs to 19 words. One of the two Walmart listings carried no UPC at all, so matching on titles fails.
- One page holds several prices. Best Buy's page carried a $119.99 offer from Best Buy and a $189.00 offer from a marketplace seller. Amazon showed a used one at $75.59 next to the new one. Take the first price you find and you may save the wrong one.
- Embedded data can disagree with the page. In our October test of 22 product pages, the schema.org data on two held the list price while the page showed a lower sale price, such as $148 against $99 at Lululemon.
Why do teams choose String?
- It fetches the retail sites others can't. String returned 92.9% of requests on the benchmark's 17 retail sites, and all 30 on Amazon, Walmart, Target, Best Buy, Home Depot and Lowe's, tied with ScrapingBee. Browserbase returned 8.
- One request shape for every store. Send the same
jsonSchemato Amazon, a Shopify store or a site with no API, and get the same fields back. You don't need a separate scraper or key for each store. - You pay only for pages that come back. Blocks and errors are free.
- Pages without a price are flagged. Mark price and offers as required, and a page that comes back without them returns
"extracted": falseinstead of an empty row.
How do I scrape product data from many stores?
List each store's product URLs
Most stores list their product pages in a sitemap. Shopify stores also serve their catalog as JSON at
/products.json. For the products you care about, search each store once and save the product URL.With String: Run a sitemap crawl to list a store's URLs, or fetch its search page and read the product links.
Read the page's own data first
Best Buy and Home Depot put a schema.org Product record in the page, with the UPC or GTIN, model, price and rating. Amazon and Walmart keep theirs in page state instead. A Shopify store's
/products.jsonlists every variant's price, SKU and stock. On October 30, Allbirds listed a flip flop in 7 sizes with only size 10 in stock.With String: Fetch with
format: "raw"to keep the embedded data, or pass ajsonSchemato get the same fields from every store.Match products on UPC, then model number
Use the UPC or GTIN as the key. Pad codes to 14 digits before comparing. Home Depot listed the AF101 as 0622356554572 and Best Buy as 622356554572, the same product. When a listing has no UPC, fall back to brand and model number, and check the title before you merge.
Save every offer on the page
Store the seller, condition and price of each offer. On marketplaces the retailer may not sell the product at all. Both Walmart listings for the AF101 were from third-party sellers. Keep the retailer's own offer in its own column.
Treat a blank page as a failure
A page with no price was probably blocked or changed. Flag it and keep the last good values. Only a page that loads and says out of stock is a stockout.
Store when and where each price was seen
Save the fetch time and the country with every row. Prices and delivery can depend on location: Amazon's page showed its price for delivery to Ashburn, Virginia. Recheck daily, and more often for products whose prices move.
With String: Set
countryCodeto fetch the store as a shopper in that country sees it.
Get a free sample product feed
Tell us which products and stores you need. We'll run String on their product pages and email you a sample feed of prices, sellers and stock, free.
| Store | Seller | Price |
|---|---|---|
| Amazon | Amazon.com | $119.99 |
| Best Buy | Best Buy | $119.99 |
| Best Buy | Jazzer Shack | $189.00 |
| Home Depot | Home Depot | $119.99 |
| Walmart | Athena's Amazing Finds | $119.00 |
| Walmart | DealCity | $98.99 |
Frequently asked questions
What's the best way to scrape e-commerce product data?
The best way to scrape e-commerce product data is to fetch each product page, read the store's own structured data where it has it, and extract the rest with one schema you use for every store. The hard part is getting the pages, because big retailers block most scrapers. In our September 2026 benchmark, the String Web Access API returned 92.9% of requests on 17 retail sites, against a field average of 62.1%, and 97% across all 100 bot-protected sites, the most of 16 providers. We rank the providers for this job in best e-commerce scraping APIs.
How much does it cost to scrape e-commerce product data?
Scraping e-commerce product data with String costs $0.16 to $0.90 per 1,000 product pages on the Growth plan ($99 a month, all of it usage credit), depending on whether a store bills at the standard or the premium rate. On October 30, 2026, Amazon, Best Buy and Home Depot product pages billed premium, and Walmart and a Shopify store billed standard. Checking 10,000 products once a day is 300,000 requests a month: $48 if every page bills standard, $270 if every page bills premium. At 2 million pages a day, Volume rates ($0.11 and $0.45 per 1,000) come to $6,600 to $27,000 in monthly usage, and an Enterprise rate card starts at $2,500 a month. Failed requests aren't billed. See pricing.
How do I make sure scraped prices are correct and current?
To keep scraped prices correct, store the fetch time and the country with every price, take the price from the offer you mean (new, sold by the retailer), and compare the structured-data price with the visible one. Schema.org data can hold the list price while the page shows a sale price. Set countryCode to the country you sell in, since prices, currency and delivery change with location. String sets the country, not a city or ZIP code.
How do I scrape Amazon product data?
To scrape Amazon product data, fetch the product page by its ASIN, such as amazon.com/dp/B07FDJMC9Q, and read the price, seller, stock, rating and the UPC from the details table. Amazon has no schema.org Product record on the page, so pass a jsonSchema for the fields you need. String returned 5 of 5 on amazon.com in our benchmark. Our guide on how to scrape Amazon product data covers it in more detail.
Can I get every size and color of a product?
Yes, you can collect every variant a store shows on the page or in its catalog JSON. Shopify stores list each variant's price, SKU and stock at /products.json. On other stores, add a variants array to your jsonSchema, or fetch each variant's URL if the store gives every color its own page.
Is it legal to scrape product data?
Prices, stock and product specifications are facts, and collecting public prices is among the best-supported cases in scraping law. Product photos, descriptions and reviews can be copyrighted, and site terms you accept can still bind you. Stay on public pages, keep your request rate reasonable, and check with your counsel. We cover the cases in is it legal to scrape competitor prices?
Does String work on the stores I need?
Send us the product URLs and we'll run them and show you what comes back before you commit. String returned all 5 attempts on 15 of the benchmark's 17 retail sites. It missed one on coupang.com, and none of the 16 providers fetched temu.com. Ask for a free sample product feed, or test the stores yourself with your first 20,000 free standard fetches.