---
title: "How to monitor competitor prices and stock"
canonical: "https://usestring.ai/use-cases/competitor-monitoring"
description: "The String Web Access API is the best way to monitor competitor prices: product pages or price and stock as JSON, even on retail sites that block scrapers, like Amazon, Walmart and Best Buy. 5,000 free requests."
updated: 2026-10-14
---

> Markdown version of https://usestring.ai/use-cases/competitor-monitoring, for AI agents. Reading this yourself? The full page is at https://usestring.ai/use-cases/competitor-monitoring.
>
> Updated October 14, 2026.

# How to monitor competitor prices and stock

The String Web Access API is the best way to monitor competitor prices. It returns any product page, or just its price and stock as JSON, even on retail sites that block scrapers, like Amazon, Walmart and Best Buy. It returned 97% of requests across 100 bot-protected sites in our [September 2026 benchmark](https://usestring.ai/benchmark), the most of 16 providers.

The first 5,000 requests are free. Set it up in one step with the [quickstart](#quickstart).

**On this page**

1. [Why monitor competitors?](#why-monitor-competitors)
2. [Why does competitor monitoring break?](#why-does-competitor-monitoring-break)
3. [How do I set up a competitor price monitor?](#how-do-i-set-up-a-competitor-price-monitor)
4. [Quickstart](#quickstart)
5. [Get a free sample feed](#get-a-free-sample-feed)
6. [Frequently asked questions](#frequently-asked-questions)

---

## Why monitor competitors?

Competitor prices, stock and listings change every week, and on large retail sites often every day. A competitor monitor checks those pages on a schedule and tells you what changed. It answers the questions most teams care about:

- **What are competitors charging?** Shoppers compare prices. If a competitor undercuts you, you lose sales until you notice.
- **What do they have in stock, and where?** When a competitor sells out, its customers shop elsewhere. That's your chance to win them.
- **Where are you winning and losing?** Without this, a drop in sales has no clear cause. With it, you know whether it was price or stock.

### What you can monitor

| What | Examples |
|---|---|
| Prices and promotions | List prices, sale prices, bundles, coupon codes and shipping costs, in each country you sell in |
| Assortment and stock | New SKUs, discontinued products, restocks and out-of-stock flags across category pages |
| Launches and landing pages | New product pages, homepage and landing-page copy, and campaign pages as they go live |
| Reviews and ratings | Star ratings and review counts on competitor products and marketplace listings |

---

## Why does competitor monitoring break?

- **Retail sites 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. String got all 5. See how 8 APIs did on 43 retail sites in [the best e-commerce scraping APIs](https://usestring.ai/comparisons/best-ecommerce-scraping-apis). A script that works once usually breaks when it runs every day.
- **Blocked pages can look real.** The page loads with no price on it, and your tracker saves the gap as data.

---

## Why do teams choose String?

- **It works where others fail.** String returned 97% of requests across 100 bot-protected sites in our [September 2026 benchmark](https://usestring.ai/benchmark), the most of 16 providers.
- **You pay only for pages that come back.** Blocks and errors are free.
- **There's nothing to maintain.** No proxies, fingerprints or captcha solvers on your side.
- **Blank pages don't become data.** Mark the price as required in your schema, and a page that comes back without one is flagged instead of saved as an empty price.

---

## How do I set up a competitor price monitor?

### 1. List the pages to watch

Pick the competitor product pages that match yours. Match products by model number, not by URL or retailer SKU. Retailers change SKUs, and a new listing can look like a price change.

**With String:** The sitemap endpoint lists every URL on a competitor's domain.

### 2. Fetch each page

Fetch every page with the same settings on every run, so a change in the data means a change on the page.

**With String:** Blocked requests are retried, and you don't pay for the ones that fail. Set `countryCode` to see a store in another country.

### 3. Read the price from the product data

Most retail pages include schema.org Product data with the name, price and availability. It's more reliable than the visible page, and it survives redesigns that break CSS selectors.

### 4. Treat a blank page as a failure

A page with no price was probably blocked or changed. Flag it and keep the last good price, so the gap never gets saved as data.

### 5. Save each run and compare it to the last

Store the date, URL, price and stock. Report only what changed, like a new price, a stock change or a new product.

### 6. Run it on a schedule

Daily suits most retail. Check hourly for flash sales and marketplaces. Send changes to Slack or email so someone acts on them.

---

## Quickstart

### From your agent

Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent a product URL. It calls the `web_access_fetch` tool and reads the price.

```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 the product, price and stock 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/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F",
    "countryCode": "US",
    "jsonSchema": {
      "type": "object",
      "properties": {
        "product": { "type": "string" },
        "price": { "type": "number" },
        "in_stock": { "type": "boolean" },
        "retailer": { "type": "string" }
      },
      "required": ["product", "price", "in_stock"]
    }
  }'
```

Response:

```json
{
  "product": "Apple - AirPods Pro 3, Wireless Active Noise Cancelling Earbuds with Heart Rate Sensing Feature - White",
  "price": 199.99,
  "in_stock": true,
  "retailer": "Best Buy"
}
```

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

---

## Get a free sample feed

Tell us which competitors and products you watch. We'll run String on their pages and email you a sample feed of their prices and stock, free.

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

What a feed looks like (rows from String fetches on Oct 13, 2026):

| Retailer | Product | Price | Stock |
|---|---|---|---|
| Amazon | AirPods Pro 3 | $199.00 | In stock |
| Best Buy | AirPods Pro 3 | $199.99 | In stock |
| Walmart | AirPods Pro 3 | $199.00 | In stock |
| Amazon | Nintendo Switch 2 | $499.00 | In stock |
| Best Buy | Nintendo Switch 2 | $499.99 | In stock |
| Walmart | Nintendo Switch 2 | $499.00 | In stock |

---

## Frequently asked questions

### What's the best way to monitor competitor prices?

Fetch each competitor product page on a schedule and read the price from the page's product data. The hard part is getting the page at all, because retail sites block most scrapers. The String Web Access API returned 97% of requests across 100 bot-protected sites in our [September 2026 benchmark](https://usestring.ai/benchmark), the most of 16 providers. For retail sites specifically, see [the best e-commerce scraping APIs](https://usestring.ai/comparisons/best-ecommerce-scraping-apis).

### How do I track Amazon prices automatically?

Fetch each product page (the `/dp/` URL) with String once a day and read the price. Use the buy box price for new items. The page also shows the lowest price across new and used offers, which is often lower and isn't what most shoppers pay. The full walkthrough, with code, is in [how to scrape Amazon product data](https://usestring.ai/blog/how-to-scrape-amazon).

### How often should I check competitor prices, and what does it cost?

Daily suits most retail. Check hourly for flash sales and marketplaces, where prices move during the day. Checking 1,000 products daily is about 30,000 requests a month, which is $9 in usage on the Starter plan ($20 a month, $0.30 per 1,000 standard requests). Pages that need a browser or premium proxies cost more. See [pricing](https://usestring.ai/pricing). Failed requests aren't billed.

### Is it legal to scrape competitor prices?

Prices are facts, and collecting public prices is the best-supported case in scraping law. The real limits are contract terms and antitrust. Stay on public pages, leave personal data out, keep your request rate reasonable, and check with your counsel. We go through the cases in [Is it legal to scrape competitor prices?](https://usestring.ai/answers/is-it-legal-to-scrape-competitor-prices)

### How do I avoid getting blocked when monitoring competitor sites?

Send each request to String instead of the site. Proxy rotation, browser fingerprints, captcha solving and retries happen behind the endpoint, and JavaScript rendering is switched on per request for pages that need it. Requests that still fail aren't billed.

### Can I see the prices shoppers see in other countries?

Yes, String can show the local prices. Set `countryCode` on each request and String fetches the page from that country, so you get its local prices, currency and stock.

### How do I find every product page on a competitor's site?

Run a sitemap crawl on the competitor's domain to list its URLs, then fetch the product and category pages you want to watch. To find pages by keyword, the `/search` endpoint returns live Google results.

### Can I monitor pages that only load after a click?

Yes, String can reach pages that load after a click. For pages that need interaction, like picking a store or opening a size menu, connect Playwright or Puppeteer to String's remote browser over CDP. Pages that don't need it stay on the cheaper fetch path.

### Does String work on the competitor sites I need?

Send us the URLs and we'll run them and show you what comes back before you commit. Ask for a [free sample feed](#get-a-free-sample-feed), or test them yourself with your first 5,000 free requests.

---

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