---
title: "How to track luxury prices and markdowns"
canonical: "https://usestring.ai/use-cases/luxury-price-tracking"
description: "The String Web Access API is the best way to track luxury prices and markdowns. It returns any Louis Vuitton, Saks Fifth Avenue, Neiman Marcus or Ralph Lauren page, or just the SKU, full price, sale price and stock as JSON."
updated: 2026-10-27
---

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

# How to track luxury prices and markdowns

The String Web Access API is the best way to track luxury prices and markdowns. It returns any Louis Vuitton, Saks Fifth Avenue, Neiman Marcus or Ralph Lauren page, or just the SKU, full price, sale price and stock as JSON. It returned 97% of requests across 100 bot-protected sites in our [September 2026 benchmark](https://usestring.ai/benchmark), the most of 16 providers, and was the only one to fetch all four of these sites on every attempt.

**On this page**

1. [Quickstart](#quickstart)
2. [Why track luxury prices?](#why-track-luxury-prices)
3. [Why does luxury price tracking break?](#why-does-luxury-price-tracking-break)
4. [How do I build a luxury price tracker?](#how-do-i-build-a-luxury-price-tracker)
5. [Get a free sample price feed](#get-a-free-sample-price-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 Louis Vuitton, Saks, Neiman Marcus or Ralph Lauren product URL. It calls the `web_access_fetch` tool and reads the prices on the page.

```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 Saks product's brand, name, full price, sale price and stock as JSON. The schema lets the sale price be null, so an item at full price still comes back. If the page has no list price, you get `"extracted": false` 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.saksfifthavenue.com/product/mcqueen-mini-jewelled-croc-embossed-leather-shoulder-bag-0400026548891.html",
    "countryCode": "US",
    "jsonSchema": {
      "type": "object",
      "properties": {
        "brand": { "type": "string" },
        "product": { "type": "string" },
        "list_price": { "type": "number" },
        "sale_price": { "type": ["number", "null"] },
        "in_stock": { "type": "boolean" }
      },
      "required": ["brand", "product", "list_price"]
    }
  }'
```

Response (keyed run on October 27, 2026, `x-json-schema-applied: true`, billed `request_premium`):

```json
{
  "brand": "McQueen",
  "product": "Mini Jewelled Croc-Embossed Leather Shoulder Bag",
  "list_price": 2390,
  "sale_price": 1673,
  "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 track luxury prices?

Luxury houses like Louis Vuitton sell at full price on their own sites. Department stores like Saks and Neiman Marcus sell the same designers and mark them down in sale events. A tracker reads both kinds of page every day and records each product's prices against its SKU. It answers questions like these:

- **When did the brand raise its price?** Louis Vuitton's site doesn't run sales, so any change in its price is a change to the list price. A daily record per SKU gives you the date and size of each one.
- **How deep is the markdown?** On October 27, 2026, 18 of the 23 marked-down items on the first page of Saks's sale section were 30% off, and the rest were 25% or 40% off.
- **What does it cost in another country?** The same Neverfull MM (SKU M46987) was $2,240 on Louis Vuitton's US site and £1,460 on its UK site that day.

### What you can collect

| What | Examples |
|---|---|
| Full and sale prices | List price, sale price and the store's own label, such as Neiman Marcus's "30% Off:", for every product on a sale page |
| Stock by color | Louis Vuitton product pages mark each color that is out of stock, and Ralph Lauren shows which colors carry the sale price |
| Prices by country | Each country site's own price and currency, fetched from that country with `countryCode` |
| Product identifiers | Brand SKUs such as M46987, Saks product IDs such as 0400026548891 and Neiman Marcus product IDs, so a product lines up from run to run |

---

## Why does luxury price tracking break?

- **Luxury sites block most scrapers.** In our [September 2026 benchmark](https://usestring.ai/benchmark), 12 of the 15 other scraping APIs couldn't fetch us.louisvuitton.com on every attempt, and 7 got 0 of 5, including Apify, Bright Data, Zyte and Browserbase. On saksfifthavenue.com, 9 got 0 of 5, Firecrawl among them. Across Louis Vuitton, Saks, Neiman Marcus and Ralph Lauren, only String returned all 20 attempts. ScraperAPI returned 19, Scrapfly 15 and Browserbase 0. See how 8 APIs did on retail and fashion sites in [the best e-commerce scraping APIs](https://usestring.ai/comparisons/best-ecommerce-scraping-apis).
- **Category data can disagree with the product page.** Louis Vuitton's handbag page marked all 52 bags InStock in its schema.org data, including the Cherry Neverfull MM that its own product page showed as out of stock.
- **One product can have several prices.** Ralph Lauren's polo page showed The Iconic Mesh Polo at $118, with $89.99 for select colors. A tracker that keeps one price per product gets most colors wrong.

Per-site results from the September 16, 2026 run (attempts that returned the real page, out of 5; columns in the benchmark's order):

| Site | String | Scrapfly | ScraperAPI | Firecrawl | Apify | Bright | ScrapingBee | Context.dev | Oxylabs | Nimble | Zyte | Decodo | Scrapingdog | Browserbase | ZenRows | ScrapingAnt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| us.louisvuitton.com | 5 | 5 | 4 | 5 | 0 | 0 | 1 | 0 | 1 | 3 | 0 | 5 | 0 | 0 | 0 | 1 |
| saksfifthavenue.com | 5 | 5 | 5 | 0 | 0 | 0 | 3 | 0 | 5 | 0 | 0 | 3 | 0 | 0 | 5 | 0 |
| neimanmarcus.com | 5 | 5 | 5 | 4 | 5 | 5 | 2 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 3 | 0 |
| ralphlauren.com | 5 | 0 | 5 | 5 | 5 | 5 | 2 | 1 | 5 | 4 | 4 | 4 | 0 | 0 | 5 | 1 |
| Total (of 20) | 20 | 15 | 19 | 14 | 10 | 10 | 8 | 1 | 12 | 7 | 4 | 12 | 0 | 0 | 13 | 2 |

---

## Why do teams choose String?

- **It fetches the most pages.** String returned 97% of requests across 100 bot-protected sites in our [September 2026 benchmark](https://usestring.ai/benchmark), the most of 16 providers, and every attempt on Louis Vuitton, Saks, Neiman Marcus and Ralph Lauren.
- **Each request can come from another country.** Set `countryCode` and String fetches the page from there, with that country's prices and currency.
- **You pay only for pages that come back.** Blocks and errors are free.
- **There's nothing to maintain.** You don't run proxies, fingerprints or captcha solvers.

---

## How do I build a luxury price tracker?

### 1. Key every product on its SKU

Names and URLs change between sites and countries. Louis Vuitton calls M46987 "Neverfull MM" in the US and "Neverfull MM Tote Bag" in the UK, at a different URL. Store the brand SKU, or the store's product ID at Saks and Neiman Marcus, and map each URL to it.

### 2. Watch the sale pages for markdowns

A department store's sale category page lists dozens of products with both prices. Saks's sale tiles carry the list price and the sale price, and Neiman Marcus's page data carries the retail price, the promo price and the "30% Off:" label. Saks's sale section held 25,390 items, 24 to a page, so pick the categories and designers you care about.

**With String:** Fetch the sale page and parse its tile markup or page data in your code. Use `jsonSchema` on product pages, where the page is small enough to extract.

### 3. Read stock from the product page

Category data can be wrong about stock, as Louis Vuitton's was. Use the product page for stock, and record it per color, because a color can sell out while the rest of the line is available.

### 4. Record a price for each color

When a sale covers select colors, as on Ralph Lauren, store the price with the color it applies to. Otherwise the sale price looks like a cut for the whole product.

### 5. Treat a missing price as a failure

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

### 6. Store the full price and the sale price apart

A rise in the full price is a price increase. A new sale price is a markdown. Compute the percentage off yourself and check it against the store's label.

### 7. Run it daily and send the changes

Daily is enough for brand sites. During a sale event, check the sale pages more often. Send new markdowns and price increases to Slack or email so someone acts on them.

---

## Get a free sample price feed

Tell us which brands, products and stores you track. We'll run String on their pages and email you a sample feed with full prices, sale prices and stock, free.

Email [support@usestring.ai](mailto:support@usestring.ai) with your work email, what you want to track and the luxury sites or product URLs, or use the [form on the page](https://usestring.ai/use-cases/luxury-price-tracking#sample-feed). The form posts to `/api/sample-request`, which emails you a confirmation from support@usestring.ai.

What a price feed looks like (from String fetches on October 27, 2026, `countryCode` US except the UK row, which used GB):

| Site | Product | Full | Now |
|---|---|---|---|
| Louis Vuitton US | Neverfull MM | $2,240 | $2,240 |
| Louis Vuitton UK | Neverfull MM | £1,460 | £1,460 |
| Saks | McQueen mini bag | $2,390 | $1,673 |
| Saks | D&G Sicily bag | $2,495 | $1,746.50 |
| Neiman Marcus | Versace Medusa bag | $3,300 | $2,310 |
| Ralph Lauren | Iconic Mesh Polo | $118 | $89.99 |

The Louis Vuitton rows are SKU M46987 (Monogram, Cherry lining) from each product page's schema.org Product data. The Saks rows are the McQueen Mini Jewelled Croc-Embossed Leather Shoulder Bag (the keyed quickstart run) and the Dolce&Gabbana Sicily Leather Top Handle Bag from the sale page's tiles. The Neiman Marcus row is the Versace Medusa Small Suede Bucket Bag from the Fall Style Sale handbags page data (labeled "30% Off:"). The Ralph Lauren row is The Iconic Mesh Polo Shirt on the men's classic polo page, where $89.99 applies to select colors.

---

## Frequently asked questions

### What's the best way to track luxury prices and markdowns?

Fetch the brand's product pages and the department stores' sale pages every day, key each product on its SKU, and store the full price, sale price and stock. The hard part is getting the pages, because luxury 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, and was the only one to fetch Louis Vuitton, Saks, Neiman Marcus and Ralph Lauren on every attempt.

### How do I track Louis Vuitton price increases?

Fetch each Louis Vuitton product page daily and read the price from its schema.org Product data, which carries the SKU, price and currency (M46987, 2240, USD on October 27, 2026). Louis Vuitton's category pages list every product in the category with its SKU and price, 52 handbags in one fetch, so one request a day covers a whole line. A higher full price than the last run is an increase.

### How do I get alerts when designer bags go on sale at Saks or Neiman Marcus?

Fetch the sale category pages for the designers you follow, once or twice a day. Saks's sale tiles show the price "reduced from" and the sale price, and Neiman Marcus's page data lists the retail price, promo price and a label like "30% Off:". Compare each run's product IDs and prices with the last, and alert on new products and new prices.

### How do I compare Louis Vuitton prices between countries?

Fetch the same SKU from each country's Louis Vuitton site with String's `countryCode` set to that country, then convert at one day's exchange rate. On October 27, 2026, the Neverfull MM (M46987) was $2,240 in the US and £1,460 in the UK. UK prices include VAT and US prices are before sales tax, so adjust for tax before you call one country cheaper.

### How much does it cost to track luxury prices?

Louis Vuitton and Saks pages billed at String's premium fetch rate on our runs, $2.40 per 1,000 successful requests on the Starter plan ($19 a month) and $0.90 per 1,000 on Growth ($99 a month). Tracking 1,000 product pages daily is about 30,000 requests a month, which is $72 in usage on Starter or $27 on Growth. Sale and category pages list dozens of products per fetch, so reading prices from them costs less. Structured extraction with `jsonSchema` adds a per-request fee that scales with page size. The $5 of free credit covers about 2,000 premium fetches, and failed requests aren't billed. See [pricing](https://usestring.ai/pricing).

### Is it legal to scrape luxury brand and department store prices?

Prices and stock on public product pages are facts, and collecting public prices is the best-supported case in scraping law. Site terms often restrict automated access, and product photos and descriptions are copyrighted, so keep the prices and leave the content. Stay on public pages, 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 know a fetch returned the real page?

Check for the values you need, not the status code. A blocked or changed page can still return HTTP 200 with no price on it. Require the SKU and price in your schema or your parser, reject empty values, and see [how to detect a bot block behind an HTTP 200](https://usestring.ai/answers/detect-bot-block-http-200).

### Does String work on the luxury 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 price feed](#get-a-free-sample-price-feed), or test them 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.
