---
title: "How to scrape e-commerce product data"
canonical: "https://usestring.ai/use-cases/ecommerce-product-scraping"
description: "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."
updated: 2026-10-30
---

> Markdown version of https://usestring.ai/use-cases/ecommerce-product-scraping, for AI agents. Reading this yourself? The full page is at https://usestring.ai/use-cases/ecommerce-product-scraping.

# How to scrape e-commerce product data

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](https://usestring.ai/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.

**On this page**

1. [Quickstart](#quickstart)
2. [Why scrape e-commerce product data?](#why-scrape-e-commerce-product-data)
3. [Why does product data scraping break?](#why-does-product-data-scraping-break)
4. [How do I scrape product data from many stores?](#how-do-i-scrape-product-data-from-many-stores)
5. [Get a free sample product feed](#get-a-free-sample-product-feed)
6. [Frequently asked questions](#frequently-asked-questions)

---

## Quickstart

### From your agent

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.

```text
https://mcp.usestring.ai/v1/mcp
```

[MCP setup](https://portal.usestring.ai/docs/mcp/remote) · [n8n](https://portal.usestring.ai/docs/integrations/n8n) · [Zapier](https://portal.usestring.ai/docs/integrations/zapier)

### From the API

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.

```bash
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 (two keyed runs on October 30, 2026, identical; billed as `request_premium`, `x-json-schema-applied: true`):

```json
{
  "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 }
  ]
}
```

[Get a free API key](https://portal.usestring.ai/sign-up) · [Structured extraction docs](https://portal.usestring.ai/docs/fetch/structured-extraction)

---

## 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

| What | Examples |
|---|---|
| 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](https://usestring.ai/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](https://usestring.ai/answers/scraping-api-structured-json) 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.

Benchmark rows (Web Data Frontier Benchmark, run September 16, 2026, successful attempts out of 5, in the benchmark's column order):

| Site | String | Scrapfly | ScraperAPI | Firecrawl | Apify | Bright | ScrapingBee | Context.dev | Oxylabs | Nimble | Zyte | Decodo | Scrapingdog | Browserbase | ZenRows | ScrapingAnt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| target.com | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 4/5 | 5/5 | 5/5 | 3/5 |
| amazon.com | 5/5 | 5/5 | 5/5 | 5/5 | 2/5 | 5/5 | 5/5 | 5/5 | 0/5 | 5/5 | 5/5 | 0/5 | 2/5 | 3/5 | 4/5 | 4/5 |
| lowes.com | 5/5 | 5/5 | 5/5 | 5/5 | 4/5 | 3/5 | 5/5 | 4/5 | 5/5 | 0/5 | 0/5 | 5/5 | 0/5 | 0/5 | 3/5 | 0/5 |
| walmart.com | 5/5 | 5/5 | 5/5 | 2/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 0/5 | 0/5 | 5/5 | 3/5 |
| bestbuy.com | 5/5 | 0/5 | 3/5 | 3/5 | 2/5 | 2/5 | 5/5 | 5/5 | 5/5 | 0/5 | 0/5 | 4/5 | 2/5 | 0/5 | 0/5 | 0/5 |
| homedepot.com | 5/5 | 2/5 | 5/5 | 0/5 | 5/5 | 5/5 | 5/5 | 0/5 | 4/5 | 0/5 | 5/5 | 4/5 | 3/5 | 0/5 | 4/5 | 0/5 |

Retail & ecommerce, all 17 sites: String 92.9%, field average 62.1%, ScrapingBee 83.5% (best other provider).

---

## 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 `jsonSchema` to 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": false` instead of an empty row.

---

## How do I scrape product data from many stores?

### 1. 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.

### 2. 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.json` lists 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 a `jsonSchema` to get the same fields from every store.

### 3. 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.

### 4. 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.

### 5. 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.

### 6. 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 `countryCode` to 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.

Email [support@usestring.ai](mailto:support@usestring.ai) with your work email, what you want to collect and the stores or product URLs, or use the [form on the page](https://usestring.ai/use-cases/ecommerce-product-scraping#sample-feed).

What a product feed looks like (rows from String fetches of the US product pages for the Ninja AF101 air fryer, UPC 622356554572, on October 30, 2026; new condition; Amazon price is the buy box; Walmart rows are two item numbers, 516008834 and 9745021678, both from third-party sellers):

| Store | Seller | Price | Stock |
|---|---|---|---|
| Amazon | Amazon.com | $119.99 | In stock |
| Best Buy | Best Buy | $119.99 | In stock |
| Best Buy | Jazzer Shack LLC | $189.00 | In stock |
| Home Depot | Home Depot | $119.99 | Not shown |
| Walmart | Athena's Amazing Finds | $119.00 | In stock |
| Walmart | DealCity, LLC | $98.99 | In stock |

---

## 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](https://usestring.ai/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](https://usestring.ai/comparisons/best-ecommerce-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](https://usestring.ai/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](https://usestring.ai/blog/how-to-scrape-amazon) 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?](https://usestring.ai/answers/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](#get-a-free-sample-product-feed), or test the stores yourself with your first 20,000 free standard fetches.

---

## Send us the sites you can't get

We'll show you what comes back. [Get started](https://portal.usestring.ai/sign-up) · [Book a demo](https://usestring.ai/book-demo)

All use cases: https://usestring.ai/use-cases

---

[llms.txt](https://usestring.ai/llms.txt): machine-readable index of this site for AI agents.
