# Decathlon US Scraper: Products, Prices & Stock (`getascraper/decathlon-scraper`) Actor

Scrape Decathlon US products: name, price, SKU, every size and color variant with its own price and stock status, vendor sub-brand, category, images, description. Filter by vendor, category, price, stock, gender, or sport. Includes a price and stock change monitoring mode.

- **URL**: https://apify.com/getascraper/decathlon-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.38 / 1,000 product listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🏋️ Decathlon US Scraper: Products, Prices & Stock

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EAF4FC;border:1px solid #BFE0F5;border-top:4px solid #0072CE;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get every Decathlon US product, size, color, price and stock status, ready for your spreadsheet in minutes.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pulls the full decathlon.com catalog, with every size and color variant carrying its own price and stock status, plus a built-in monitor that flags only what changed.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE0F5;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0058A3">🛒 Full catalog, not a slice</span><br>
<span style="font-size:12px;color:#57534E">Every product on decathlon.com, not one category at a time</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE0F5;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0058A3">📏 Price and stock per variant</span><br>
<span style="font-size:12px;color:#57534E">Every size and color gets its own price and stock status</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE0F5;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0058A3">🎯 Filters that match how Decathlon sells</span><br>
<span style="font-size:12px;color:#57534E">Category, sub-brand, gender, sport, price range, in-stock only</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE0F5;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0058A3">📈 Built-in price and stock monitor</span><br>
<span style="font-size:12px;color:#57534E">Schedule it and only get products that are new or changed</span>
</td>
</tr>
</table>

**Decathlon US Scraper** pulls product data straight from decathlon.com, the US storefront of the sporting-goods retailer. It returns every product's title, sub-brand (Quechua, Kalenji, Domyos, Simond and more), category, description, images and tags, plus every individual size and color variant with its own SKU, price, compare-at price and stock status. No login and no manual browsing required, and you can schedule it to run on its own so your data stays current.

### 🔍 What does Decathlon US Scraper do?

This actor crawls the entire decathlon.com US product catalog, or just the collections you point it at, and returns a clean, structured record for every product. Each record includes the sub-brand, category, gender and sport tags, description, images, and a full list of that product's size and color variants, each carrying its own price, compare-at price and stock status rather than one blended headline price.

You can narrow results with filters for category, sub-brand, gender, sport, and price range, or restrict output to in-stock items only. Turn on monitoring mode and the actor remembers what it saw last time, so scheduled runs only return products that are brand new or whose price or stock changed since the previous run. Results download as JSON, CSV, Excel, or HTML directly from the Apify platform, and every run can be scheduled, triggered by API, or wired into your own pipeline.

### 💡 Why use Decathlon US Scraper?

- **I am a price-monitoring analyst** tracking Decathlon prices for clients, looking to capture every size and color variant's own price and stock status in order to catch changes the moment they happen, not just the headline product price.
- **I am a reseller** sourcing products for my own store, looking to browse Decathlon's full US catalog by sub-brand and category in order to find items worth listing before competitors spot them.
- **I am a sporting-goods market researcher**, looking to analyze Decathlon's brand assortment and pricing across categories in order to benchmark it against other outdoor and sports retailers.
- **I am a developer building a stock-alert tool**, looking to pull per-variant availability straight from Decathlon's catalog in order to notify my users the second a sold-out size comes back.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAF4FC;border:1px solid #BFE0F5;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0072CE;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick your scope</span><br>
<span style="font-size:12px;color:#57534E">Paste collection URLs or leave the field blank to crawl the whole catalog, then set your filters.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF4FC;border:1px solid #BFE0F5;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0072CE;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the actor</span><br>
<span style="font-size:12px;color:#57534E">It reads Decathlon's live catalog directly, so runs finish fast without needing a slow rendered browser.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF4FC;border:1px solid #BFE0F5;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0072CE;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get clean data</span><br>
<span style="font-size:12px;color:#57534E">Download products and variants as JSON, CSV or Excel, or turn on monitoring for changed-only runs.</span>
</td>
</tr>
</table>

1. Click **Try for free** and open the Input tab.
2. Optionally paste one or more collection URLs, or leave it empty to crawl the full catalog. Add any category, sub-brand, gender, sport, price, or stock filters you need.
3. Click **Start** and let the run finish.
4. Open the Output tab and export your results as JSON, CSV, Excel, or HTML.

### 📥 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `startUrls` | array of URLs | No | One or more decathlon.com collection page URLs, for example `https://www.decathlon.com/collections/camping-tents`. Leave empty to crawl the entire catalog instead. |
| `maxItems` | integer | No | Maximum number of products to return across all sources. Defaults to 100. Set to 0 for no limit. |
| `productType` | string | No | Only keep products whose category text contains this value, for example "Down jacket" or "Running shoes". Leave empty for all categories. |
| `vendor` | string | No | Only keep products from this sub-brand, for example "Quechua", "Kalenji", "Domyos", or "Simond". Leave empty for all sub-brands. |
| `gender` | enum | No | Only keep products tagged for a specific gender. Leave on "All genders" to include everything, including untagged products. |
| `sport` | string | No | Only keep products whose sport tag contains this value, for example "camping" or "running". Leave empty for all sports. |
| `minPrice` | integer | No | Only keep products with at least one variant priced at or above this amount in US dollars. Defaults to 0. |
| `maxPrice` | integer | No | Only keep products with at least one variant priced at or below this amount in US dollars. Defaults to 0, meaning no upper limit. |
| `inStockOnly` | boolean | No | When enabled, only keep products with at least one variant currently in stock. Defaults to false. |
| `proxyConfiguration` | object | No | Proxy settings for the run. The default setting works out of the box since decathlon.com does not require special proxy handling. |
| `maxRequestRetries` | integer | No | How many times to retry a failed request before giving up on it. Defaults to 3. |
| `maxConcurrency` | integer | No | Maximum number of parallel requests against decathlon.com. Defaults to 5. |
| `onlyChangedProducts` | boolean | No | Turns this run into a price and stock monitor. The first run builds a baseline; later runs with the same monitoring state key only return products that are new or whose price or stock changed. Defaults to false. |
| `monitoringStateKey` | string | No | Names the saved baseline used by monitoring mode. Use a different key for each schedule so monitors do not share state. Defaults to "default". |
| `resetMonitoringState` | boolean | No | Clears the saved baseline for the given monitoring state key before this run, so every matching product is treated as new again. Defaults to false. |

### 📤 Output

Every scraped product is saved as one dataset item. Here is a simplified example:

```json
{
  "productId": "8721456123456",
  "title": "Quechua MH100 Waterproof Hiking Jacket",
  "handle": "quechua-mh100-waterproof-hiking-jacket",
  "url": "https://www.decathlon.com/products/quechua-mh100-waterproof-hiking-jacket",
  "vendor": "Quechua",
  "productType": "Hiking jacket",
  "minPrice": 34.99,
  "maxPrice": 34.99,
  "currency": "USD",
  "inStock": true,
  "variantCount": 6,
  "variants": [
    { "id": "44821001", "sku": "MH100-JKT-M-BLU", "title": "M / Blue", "price": 34.99, "compareAtPrice": 44.99, "available": true },
    { "id": "44821002", "sku": "MH100-JKT-L-BLU", "title": "L / Blue", "price": 34.99, "compareAtPrice": 44.99, "available": false }
  ],
  "tags": ["GENDER: MEN'S", "SPORT: mountain trekking", "PRODUCT_TYPE: Hiking jacket"],
  "description": "A waterproof, breathable jacket for short hikes on rainy days.",
  "gender": "MEN'S",
  "sport": "mountain trekking",
  "imageUrl": "https://contents.mediadecathlon.com/p2547896/k$abc123/quechua-mh100-jacket.jpg",
  "imageUrls": [
    "https://contents.mediadecathlon.com/p2547896/k$abc123/quechua-mh100-jacket.jpg",
    "https://contents.mediadecathlon.com/p2547896/k$def456/quechua-mh100-jacket-back.jpg"
  ],
  "publishedAt": "2024-11-02T10:15:00Z",
  "updatedAt": "2026-08-20T06:42:11Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel directly from the Output tab.

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `productId` | string | Decathlon's internal product identifier. |
| `title` | string | Full product name. |
| `handle` | string | URL-friendly product slug. |
| `url` | string | Direct link to the product page on decathlon.com. |
| `vendor` | string | Sub-brand, for example Quechua, Kalenji, Domyos, or Simond. |
| `productType` | string | Product category, for example "Hiking jacket" or "Camping tent". |
| `description` | string | Product description text. |
| `gender` | string | Gender the product is tagged for, parsed from Decathlon's own tags. |
| `sport` | string | Sport the product is tagged for, parsed from Decathlon's own tags. |
| `minPrice` | number | Lowest price across all of this product's variants, in US dollars. |
| `maxPrice` | number | Highest price across all of this product's variants, in US dollars. |
| `currency` | string | Currency code, always USD for this storefront. |
| `inStock` | boolean | True if at least one variant is currently available. |
| `variantCount` | number | Number of size or color variants this product has. |
| `variants` | array | Every variant with its own id, SKU, title (size or color), price, compare-at price, and stock status. |
| `imageUrl` | string | Primary product image URL. |
| `imageUrls` | array | Every product image URL. |
| `tags` | array | Raw tags as returned by Decathlon, including the gender and sport taxonomy. |
| `publishedAt` | string | When the product was first published on decathlon.com. |
| `updatedAt` | string | When the product listing was last updated. |
| `changeType` | string | Only present in monitoring mode: "new", "price\_changed", "stock\_changed", or "price\_and\_stock\_changed". |
| `scrapedAt` | string | Timestamp of this scrape. |

### 💰 Pricing

Decathlon US Scraper uses pay-per-result pricing. You are billed only for the products actually saved to your dataset, so a run that returns nothing costs nothing. There are no subscriptions, no monthly minimums, and no setup fees. Check the Pricing tab on this actor's page for the exact current rate, and use the `maxItems` input to cap spend on any run before you start it.

### ⭐ Enjoying Decathlon US Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EAF4FC;border:1px solid #BFE0F5;border-left:5px solid #0072CE;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this actor is saving you hours of manual catalog checking, a rating helps a lot.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other resellers and price-monitoring teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0072CE;border:1px solid #BFE0F5;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/decathlon-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips

- Start with a small `maxItems` value while testing your filters, then raise it once you know your run returns what you expect.
- Point `startUrls` at a handful of collection pages when you only care about a few categories. It is faster and cheaper than crawling the full catalog and filtering afterward.
- For price and stock tracking, enable `onlyChangedProducts` and schedule the actor to run daily or weekly. Give each saved schedule its own `monitoringStateKey` so they never share a baseline.
- Combine `vendor` and `gender` filters to pull a focused slice, for example every women's Domyos item, without downloading the rest of the catalog.

### ❓ FAQ

##### Does it get blocked?

No. Decathlon's US storefront serves its public product catalog without anti-bot challenges, so this actor runs reliably without needing residential proxies or browser automation.

##### Does it cover every Decathlon country?

No. This actor covers decathlon.com, the US storefront, only. Decathlon's European storefronts run on different technology and are not supported here.

##### How fresh is the data?

Every run reads the live catalog at the moment it runs, so prices and stock reflect what is currently on decathlon.com. For ongoing freshness, schedule the actor with monitoring mode enabled.

##### Are all categories and sub-brands supported?

Yes. The actor covers every category and every sub-brand sold on decathlon.com, including Quechua, Kalenji, Domyos, and Simond. Use the `productType` and `vendor` filters to narrow results to the ones you care about.

### 🔗 Other actors

- [Kroger Scraper](https://apify.com/getascraper/kroger-scraper) ↗ - Scrapes Kroger product prices, stock, and search results.
- [Kroger Price Monitor](https://apify.com/getascraper/kroger-price-monitor) ↗ - Tracks Kroger price and stock changes on a schedule.
- [Shopify product scraper](https://apify.com/getascraper/shopify-store-product-monitor) ↗ - Scrapes product catalogs from any Shopify-powered store.
- [WooCommerce product scraper](https://apify.com/getascraper/woocommerce-store-monitor) ↗ - Scrapes product catalogs from any WooCommerce-powered store.
- [Wildberries Price & Rank Tracker](https://apify.com/getascraper/wildberries-price-tracker) ↗ - Monitors Wildberries prices and search rank positions daily.

# Actor input Schema

## `startUrls` (type: `array`):

Paste one or more decathlon.com collection page URLs (e.g. https://www.decathlon.com/collections/camping-tents) to scrape only those collections' products. Leave empty to crawl the entire catalog via the full products feed instead.

## `maxItems` (type: `integer`):

Maximum number of products to scrape across all sources. Set to 0 for no limit (full catalog).

## `productType` (type: `string`):

Only keep products whose product\_type field contains this text (case-insensitive), e.g. 'Down jacket', 'Tent', 'Running shoes'. Leave empty for all categories.

## `vendor` (type: `string`):

Only keep products from this vendor/sub-brand (case-insensitive exact match), e.g. 'Quechua', 'Kalenji', 'Domyos', 'Simond', 'Decathlon'. Leave empty for all vendors.

## `gender` (type: `string`):

Only keep products tagged with this gender in Decathlon's own 'GENDER: ...' tag taxonomy (parsed from the tags array). Leave empty for all genders. Note: tag taxonomy is not present on every product, so this filter naturally excludes untagged items.

## `sport` (type: `string`):

Only keep products whose parsed 'SPORT: ...' tag(s) contain this text (case-insensitive), e.g. 'camping', 'mountain trekking', 'running'. Leave empty for all sports.

## `minPrice` (type: `integer`):

Only keep products with at least one variant priced at or above this amount, in USD.

## `maxPrice` (type: `integer`):

Only keep products with at least one variant priced at or below this amount, in USD. Set to 0 for no upper limit.

## `inStockOnly` (type: `boolean`):

When enabled, only keep products with at least one variant currently marked available. When disabled, out-of-stock products are included too (with their variants' stock status still shown per-variant).

## `proxyConfiguration` (type: `object`):

decathlon.com's public Shopify products.json feed is a standard unauthenticated, unprotected storefront API (confirmed: plain GET requests succeed with no anti-bot challenge). Datacenter proxy is sufficient and far cheaper than residential; only switch to residential if you observe blocking.

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed page-fetch request before giving up on it.

## `maxConcurrency` (type: `integer`):

Maximum number of parallel requests against decathlon.com.

## `onlyChangedProducts` (type: `boolean`):

When enabled, the first run builds a baseline of every product's id, price(s), and stock status. Later runs with the same Monitoring State Key only output products that are new, or whose price or stock status changed since the last run, turning this into a price/stock-change monitor for scheduled runs.

## `monitoringStateKey` (type: `string`):

Identifies the seen-products baseline in the key-value store. Use a distinct key per saved query/schedule so multiple monitors do not share state.

## `resetMonitoringState` (type: `boolean`):

Clear the stored baseline for the given Monitoring State Key before this run, so all matching products are treated as new/changed again.

## Actor input object example

```json
{
  "startUrls": [],
  "maxItems": 100,
  "productType": "",
  "vendor": "",
  "gender": "",
  "sport": "",
  "minPrice": 0,
  "maxPrice": 0,
  "inStockOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxRequestRetries": 3,
  "maxConcurrency": 5,
  "onlyChangedProducts": false,
  "monitoringStateKey": "default",
  "resetMonitoringState": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/decathlon-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("getascraper/decathlon-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/decathlon-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/decathlon-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fEAGgHLypLZtmhCK8/builds/alDuyDCdWXZmKwXWE/openapi.json
