# REI Scraper: Outdoor Gear, Sale Prices & Product Specs (`getascraper/rei-scraper`) Actor

Extract REI.com products at super-fast speeds with 35+ detailed columns including bar codes, sale prices, sizing, and stock. Includes an automated block solver that works in the background. Stable design with easy downloads to Excel, CSV, and Google Sheets. $14.99 per 1,000 results.

- **URL**: https://apify.com/getascraper/rei-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 $14.99 / 1,000 scraped products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## REI Scraper: Outdoor gear, sale prices and product specs

**Extract clean product listings and complete specifications from REI.com for any brand, category, or activity, with 32 fields per row including sizing, colors, and stock.** Built for retail teams, competitive intelligence analysts, and e-commerce researchers who need real product catalog data without manual work. Drop the data straight into n8n, Make, Zapier, Airtable, or Google Sheets. $14.99 per 1,000 reviews.

### What does REI Scraper do?

REI is one of the largest specialty outdoor retailers in the US, with a massive catalog of active outdoor gear across thousands of categories. 

This Actor turns those public listing and product pages into clean, structured data you can analyze. Downloads up to 50 product listings per second (over 3,000 products per minute), pulling:
*   **Variant datasets**: Every size, color, price, sale price, original retail price, stock level, and high-resolution image URL.
*   **Specification datasets**: Full spec-sheet tables (weight, materials, temperature ratings, intended use) parsed cleanly.

You can export everything as JSON, CSV, Excel, or HTML and load it into any spreadsheet, dashboard, or workflow tool.

### Why use REI Scraper?

Real product data is crucial for competitive retail analysis, pricing strategies, and product intelligence. REI Scraper gives you the clean catalog details automatically.

*   **Competitor price monitoring**: See exactly how other stores price similar gear. Track sale markdowns, clearance inventory, and price fluctuations over time.
*   **Brand analysis at scale**: Pull complete product listings from Patagonia, The North Face, Arc'teryx, Black Diamond, or REI Co-op to track catalog expansion.
*   **Inventory tracking**: Watch stock status (InStock, OutOfStock, PreOrder) to identify fast-selling items and high-demand gear.
*   **AI training sets**: Fuel your recommendations and visual search systems with structured gear descriptions, technical specs, and high-resolution product images.
*   **Affiliate and deal curation**: Find the best-reviewed products on sale automatically to create high-converting roundups and retail deal feeds.

### How to use REI Scraper

1.  Open the Actor in Apify Console and go to the **Input** tab.
2.  Pick your filters: choose specific categories (like `backpacking-sleeping-bags`) and brands (like `rei-co-op`), or paste direct REI URLs.
3.  Set your limit: choose the maximum total products you want to return.
4.  Click **Start** and wait for the results. Most runs finish in under a minute.
5.  Download your data as JSON, CSV, Excel, or HTML. Connect your account to n8n, Make, or Zapier for automated workflows.

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `categories` | array of strings | No | Category slugs to scrape. Example: `["backpacking-sleeping-bags", "mens-jackets"]`. |
| `brands` | array of strings | No | Brand slugs to scrape. Example: `["rei-co-op", "patagonia"]`. |
| `activity` | enum | No | Filter by activity: `hiking`, `climbing`, `camping`, `running`, `snow`, `water`, `cycle`, `travel`. |
| `gender` | enum | No | Filter by gender: `mens`, `womens`, `kids`, `unisex`. |
| `startUrls` | array of URLs | No | Paste direct category, brand, search, or product links. |
| `onSaleOnly` | boolean | No | Set to true to only extract products currently on sale. |
| `inStockOnly` | boolean | No | Set to true to skip any out-of-stock items. |
| `minPrice` | integer | No | Lowest price in USD. |
| `maxPrice` | integer | No | Highest price in USD. |
| `minRating` | number | No | Minimum average rating (0 to 5). |
| `includeReviews` | boolean | No | Set to true to download the top customer reviews. |
| `includeSpecs` | boolean | No | Set to true to extract the complete technical spec sheet. |
| `maxItems` | integer | No | Maximum number of products to return. |
| `maxConcurrency` | integer | No | How many pages to download in parallel. |
| `debugLogging` | boolean | No | Set to true to show detailed logging steps. |
| `proxyConfiguration` | object | Yes | Automated proxy settings. Default uses residential proxies. |

---

### Output

Each row in the dataset represents a single product variant. Here is a real-world example:

```json
{
  "product_id": "C031160007",
  "sku": "C031160007",
  "parent_sku": "C03116",
  "url": "https://www.rei.com/product/C03116/rei-co-op-trailmade-25-sleeping-bag?sku=C031160007",
  "source_category_url": "https://www.rei.com/b/rei-co-op/c/backpacking-sleeping-bags",
  "scraped_at": "2026-06-19T09:13:44.930Z",
  "title": "Trailmade 25 Sleeping Bag - Terracotta - Short",
  "brand": "REI Co-op",
  "category": "Backpacking Sleeping Bags",
  "description": "For your next backpacking trip or simply an overnight setup in the car, this REI Co-op synthetic sleeping bag checks all the boxes. It offers a trifecta of warmth, packability and light weight.",
  "color": "Terracotta",
  "size": "Short",
  "gtin": "0400000103457",
  "price": 119,
  "price_currency": "USD",
  "price_formatted": "$119.00",
  "availability": "InStock",
  "rating": 4.8,
  "review_count": 14,
  "image_url": "https://www.rei.com/media/9e56cabb-e7ab-47b2-869b-1a9662947a7f",
  "color_1_name": "ALPINE TEAL",
  "color_1_image": "/media/3b6a853b-4b5a-4fa2-9960-01e93118b67e.jpg?size=784x588",
  "color_1_available": true,
  "color_2_name": "ALPINE TEAL",
  "color_2_image": "",
  "color_2_available": true,
  "color_3_name": "ALPINE TEAL",
  "color_3_image": "/media/color/C03116.jpg?colorId=210485&size=40",
  "color_3_available": true,
  "color_4_name": "TERRACOTTA",
  "color_4_image": "/media/color/C03116.jpg?colorId=122726&size=40",
  "color_4_available": true,
  "badge_1": "TOP RATED",
  "spec_best_use": "Backpacking - Camping",
  "spec_tested_lower_limit": "20 degrees (F) - ISO",
  "spec_tested_comfort": "31 degrees (F) - ISO",
  "spec_temperature_rating_f": "25 degrees (F)",
  "spec_temperature_rating_c": "-4 degrees (C)",
  "spec_weight": "Short: 2 lbs. 12.35 oz. - Short Wide: 3 lbs. - Medium: 2 lbs. 15.14 oz. - Medium Wide: 3 lbs. 3.25 oz. - Long: 3 lbs. 2.48 oz. - Long Wide: 3 lbs. 8.26 oz.",
  "spec_shell": "30-denier, 100% recycled ripstop polyester with DWR made without PFAS (bluesign approved)",
  "spec_zipper_location": "Left",
  "spec_insulation_type": "Synthetic",
  "spec_fill": "100% recycled polyester",
  "spec_fill_weight": "Short: 1 lb. 12.4 oz. - Short Wide: 1 lb. 15.1 oz. - Medium: 1 lb. 14.7 oz. - Medium Wide: 2 lbs. 1.2 oz. - Long: 2 lbs. 0.7 oz. - Long Wide: 2 lbs. 3.8 oz.",
  "spec_sleeping_capacity": "1-person",
  "spec_lining": "100% polyester with DWR made without PFAS",
  "spec_sleeping_bag_shape": "Mummy",
  "spec_fits_up_to_in": "Short: 66 inches - Short Wide: 66 inches - Medium: 72 inches - Medium Wide: 72 inches - Long: 78 inches - Long Wide: 78 inches",
  "spec_shoulder_girth_in": "Short: 61.5 inches - Short Wide: 69 inches - Medium: 62 inches - Medium Wide: 69 inches - Long: 63 inches - Long Wide: 70 inches",
  "spec_hip_girth_in": "Short: 53 inches - Short Wide: 61.6 inches - Medium: 54 inches - Medium Wide: 62.5 inches - Long: 55 inches - Long Wide: 63.5 inches",
  "spec_stuff_sack_volume": "Short: 7.8 liters - Short Wide: 10.2 liters - Medium: 10.2 liters - Medium Wide: 10.2 liters - Long: 10.2 liters - Long Wide: 12.6 liters",
  "spec_compressed_volume": "Short: 7.3 liters - Short Wide: 8 liters - Medium: 8 liters - Medium Wide: 9.1 liters - Long: 8.5 liters - Long Wide: 10.3 liters",
  "spec_gender": "Unisex",
  "spec_sustainability": "Contains materials that meet the bluesign criteria - Contains recycled materials - From a Climate Label Certified brand",
  "color_names": "ALPINE TEAL, ALPINE TEAL, ALPINE TEAL, TERRACOTTA",
  "total_colors": 4,
  "badge_names": "TOP RATED",
  "total_badges": 1,
  "total_specs": 21
}
````

### Data table

| Field | Type | Description |
|---|---|---|
| `product_id` | text | The product identification code. |
| `sku` | text | The stock keeping unit code. |
| `url` | link | Direct link to the product page. |
| `source_category_url` | link | The category page where the product was found. |
| `scraped_at` | date | The exact time this data was extracted. |
| `title` | text | Full product name. |
| `brand` | text | Brand or manufacturer name. |
| `category` | text | Leaf category name. |
| `description` | text | Full product description copy. |
| `price` | number | Current active price in USD. |
| `price_currency` | text | Active currency code (always USD). |
| `price_formatted` | text | Formatted price with the dollar sign. |
| `sale_price` | number | Active markdown price (only if on sale). |
| `sale_price_formatted` | text | Formatted markdown price with the dollar sign. |
| `msrp` | number | Original retail list price. |
| `discount_percent` | number | Savings percentage off original list price. |
| `availability` | text | Current stock status (InStock, OutOfStock). |
| `rating` | number | Average star rating out of 5. |
| `review_count` | number | Total number of customer reviews. |
| `image_url` | image | High-resolution product image link. |
| `is_member_only` | boolean | True if restricted to co-op members. |
| `is_eco_friendly` | boolean | True if recycled or organic materials are used. |
| `spec_best_use` | text | Primary outdoor activity/use. |
| `spec_weight` | text | Total physical weight. |
| `spec_sleeping_bag_shape` | text | Design shape (Mummy, Semi-rectangular). |
| `spec_temperature_rating_f` | text | Temperature rating in Fahrenheit. |

### Pricing

You pay only for product results successfully saved to your dataset. A typical run with 1,000 records costs exactly **$14.99** and finishes in 20 to 60 seconds.

The first 50 rows of every run are free so you can test the data quality before paying.

> 💰 **Cost-Saving Tip**: You can safely run this scraper on the lowest memory settings (512 MB or 1 GB) in your Apify settings. This is much cheaper to run than other tools on the market and will save you a lot of money!

### Tips

- **Start small**: Run a small query with 10 to 20 products first to verify the data shape matches your needs.
- **Turn off reviews for price checks**: Disable `includeReviews` if you only need price and listing data. This makes the crawl run much faster and cheaper.
- **Filter for sale items**: Use the "On Sale Only" toggle together with a minimum star rating to instantly find the best-performing discounts.
- **Combine brands with categories**: Search for multiple brands and categories simultaneously. The scraper automatically combines them to locate all products.

### FAQ, disclaimers, and support

**Is scraping REI legal?** This scraper retrieves publicly visible product information that is open to the public and search engines. You are responsible for ensuring your usage complies with local regulations and the target site's guidelines. Do not scrape private account details or pages behind a login screen.

**Why do I need proxies?** The target site uses aggressive anti-bot screens to block automated visits. The scraper automatically manages rotating home-internet connections in the background to bypass these screens. No configuration is required.

**What is the difference between price, sale\_price, and msrp?**

- `price` is the current active price you pay.
- `sale_price` is the discount price (present only during sales).
- `msrp` is the manufacturer suggested retail price (the original list price).
- `discount_percent` is the calculation of your savings.

**What if some fields are blank?**
Some products do not have an original list price, reviews, or technical specifications. Optional fields are left blank, and the spreadsheet tables handle them gracefully.

**How does the free trial work?**
New Apify accounts receive $5 of platform credits. The first 50 results of every run are completely free so you can evaluate the spreadsheet quality before spending anything.

***

### Disclaimers and support

- **Disclaimer**: This actor retrieves publicly available product data. Make sure your usage complies with applicable guidelines. This tool is not affiliated with, endorsed by, or sponsored by Recreational Equipment Inc. (REI).
- **Support**: Submit an issue from the [Issues tab](https://apify.com/actorstack/rei-scraper/issues) for bug reports, questions, or custom requests.
- **Need a custom scraper?** If you need authenticated member pricing, special custom columns, or massive enterprise volumes, reach out to us through our Apify profile page.

# Actor input Schema

## `categories` (type: `array`):

REI category slugs to browse. Each slug is the part of the URL after /c/. Example: 'backpacking-sleeping-bags' becomes /c/backpacking-sleeping-bags. Combine with brands to filter (e.g. all REI Co-op sleeping bags). Leave empty to skip category browsing.

## `brands` (type: `array`):

REI brand slugs to filter by. Each slug is the part of the URL after /b/. Example: 'rei-co-op' becomes /b/rei-co-op. Common brands: rei-co-op, the-north-face, patagonia, arc-teryx, black-diamond, smartwool, merrell, salomon, osprey.

## `activity` (type: `string`):

Filter products by primary outdoor activity. Combines with the category list to scope the crawl. Leave blank to skip activity filtering.

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

Filter products by gender category. Leave blank to include all genders.

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

Paste full REI URLs (one per line). Mix category, brand, product, or search URLs. The auto-detected path overrides the category/brand/activity/gender inputs above for any URL you provide.

## `onSaleOnly` (type: `boolean`):

Return only products currently on sale. Internally appends ?r=sale to category URLs.

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

Skip products that are OutOfStock, PreOrder, Discontinued, or BackOrder.

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

Skip anything cheaper than this. Set to 0 to skip the filter.

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

Skip anything more expensive than this. Set to 0 to skip the filter.

## `minRating` (type: `number`):

Only include products with an average rating at or above this value (0 to 5). Set to 0 to skip.

## `includeReviews` (type: `boolean`):

Fetch each product's review page and attach the top reviews (rating, title, body, author, date). Roughly 5x slower per product. Turn off for cheap price-monitoring runs.

## `includeSpecs` (type: `boolean`):

Fetch each product's detail page for the full specification table (weight, materials, temperature ratings, etc.). On by default; turn off for list-only runs.

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

The most products to return across all input sources. Higher numbers mean longer runs and higher cost. Cap at 100,000.

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

How many requests the Actor runs at the same time. Default 3 is safe for Cloudflare. Lower if you hit 403s.

## `debugLogging` (type: `boolean`):

Turn on to see exactly what the Actor is doing step by step. Useful if something goes wrong, but makes logs noisy. Off by default.

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

REI is behind Cloudflare. This Actor needs Apify's residential proxy (real home internet connections) to pass the challenge. Default works for most runs.

## Actor input object example

```json
{
  "categories": [
    "backpacking-sleeping-bags"
  ],
  "brands": [
    "rei-co-op"
  ],
  "activity": "",
  "gender": "",
  "startUrls": [],
  "onSaleOnly": false,
  "inStockOnly": false,
  "minPrice": 0,
  "maxPrice": 0,
  "minRating": 0,
  "includeReviews": false,
  "includeSpecs": true,
  "maxItems": 100,
  "maxConcurrency": 3,
  "debugLogging": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All scraped REI product records pushed to the dataset.

## `runSummary` (type: `string`):

JSON metadata describing the run: total products scraped, breakdown by availability, Cloudflare challenges resolved, runtime in seconds, source categories and brands used.

# 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 = {
    "categories": [
        "backpacking-sleeping-bags"
    ],
    "brands": [
        "rei-co-op"
    ],
    "activity": "",
    "gender": "",
    "startUrls": [],
    "onSaleOnly": false,
    "inStockOnly": false,
    "minPrice": 0,
    "maxPrice": 0,
    "minRating": 0,
    "includeReviews": false,
    "includeSpecs": true,
    "maxItems": 100,
    "maxConcurrency": 3,
    "debugLogging": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/rei-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 = {
    "categories": ["backpacking-sleeping-bags"],
    "brands": ["rei-co-op"],
    "activity": "",
    "gender": "",
    "startUrls": [],
    "onSaleOnly": False,
    "inStockOnly": False,
    "minPrice": 0,
    "maxPrice": 0,
    "minRating": 0,
    "includeReviews": False,
    "includeSpecs": True,
    "maxItems": 100,
    "maxConcurrency": 3,
    "debugLogging": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "categories": [
    "backpacking-sleeping-bags"
  ],
  "brands": [
    "rei-co-op"
  ],
  "activity": "",
  "gender": "",
  "startUrls": [],
  "onSaleOnly": false,
  "inStockOnly": false,
  "minPrice": 0,
  "maxPrice": 0,
  "minRating": 0,
  "includeReviews": false,
  "includeSpecs": true,
  "maxItems": 100,
  "maxConcurrency": 3,
  "debugLogging": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call getascraper/rei-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/rei-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "REI Scraper: Outdoor Gear, Sale Prices & Product Specs",
        "description": "Extract REI.com products at super-fast speeds with 35+ detailed columns including bar codes, sale prices, sizing, and stock. Includes an automated block solver that works in the background. Stable design with easy downloads to Excel, CSV, and Google Sheets. $14.99 per 1,000 results.",
        "version": "0.1",
        "x-build-id": "5kUjxcMI1Gr7hF1Mg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~rei-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-rei-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/getascraper~rei-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-rei-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/getascraper~rei-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-rei-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "proxyConfiguration"
                ],
                "properties": {
                    "categories": {
                        "title": "REI Categories",
                        "type": "array",
                        "description": "REI category slugs to browse. Each slug is the part of the URL after /c/. Example: 'backpacking-sleeping-bags' becomes /c/backpacking-sleeping-bags. Combine with brands to filter (e.g. all REI Co-op sleeping bags). Leave empty to skip category browsing.",
                        "default": [
                            "backpacking-sleeping-bags"
                        ]
                    },
                    "brands": {
                        "title": "Brands",
                        "type": "array",
                        "description": "REI brand slugs to filter by. Each slug is the part of the URL after /b/. Example: 'rei-co-op' becomes /b/rei-co-op. Common brands: rei-co-op, the-north-face, patagonia, arc-teryx, black-diamond, smartwool, merrell, salomon, osprey.",
                        "default": [
                            "rei-co-op"
                        ]
                    },
                    "activity": {
                        "title": "Activity",
                        "enum": [
                            "",
                            "hiking",
                            "climbing",
                            "camping",
                            "running",
                            "snow",
                            "water",
                            "cycle",
                            "travel"
                        ],
                        "type": "string",
                        "description": "Filter products by primary outdoor activity. Combines with the category list to scope the crawl. Leave blank to skip activity filtering.",
                        "default": ""
                    },
                    "gender": {
                        "title": "Gender",
                        "enum": [
                            "",
                            "mens",
                            "womens",
                            "kids",
                            "unisex"
                        ],
                        "type": "string",
                        "description": "Filter products by gender category. Leave blank to include all genders.",
                        "default": ""
                    },
                    "startUrls": {
                        "title": "Direct REI URLs",
                        "type": "array",
                        "description": "Paste full REI URLs (one per line). Mix category, brand, product, or search URLs. The auto-detected path overrides the category/brand/activity/gender inputs above for any URL you provide.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "onSaleOnly": {
                        "title": "On Sale Only",
                        "type": "boolean",
                        "description": "Return only products currently on sale. Internally appends ?r=sale to category URLs.",
                        "default": false
                    },
                    "inStockOnly": {
                        "title": "In Stock Only",
                        "type": "boolean",
                        "description": "Skip products that are OutOfStock, PreOrder, Discontinued, or BackOrder.",
                        "default": false
                    },
                    "minPrice": {
                        "title": "Minimum Price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip anything cheaper than this. Set to 0 to skip the filter.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum Price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip anything more expensive than this. Set to 0 to skip the filter.",
                        "default": 0
                    },
                    "minRating": {
                        "title": "Minimum Rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Only include products with an average rating at or above this value (0 to 5). Set to 0 to skip.",
                        "default": 0
                    },
                    "includeReviews": {
                        "title": "Include Top Reviews",
                        "type": "boolean",
                        "description": "Fetch each product's review page and attach the top reviews (rating, title, body, author, date). Roughly 5x slower per product. Turn off for cheap price-monitoring runs.",
                        "default": false
                    },
                    "includeSpecs": {
                        "title": "Include Full Specifications",
                        "type": "boolean",
                        "description": "Fetch each product's detail page for the full specification table (weight, materials, temperature ratings, etc.). On by default; turn off for list-only runs.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max Products",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "The most products to return across all input sources. Higher numbers mean longer runs and higher cost. Cap at 100,000.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Requests In Parallel",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many requests the Actor runs at the same time. Default 3 is safe for Cloudflare. Lower if you hit 403s.",
                        "default": 3
                    },
                    "debugLogging": {
                        "title": "Show Detailed Logs",
                        "type": "boolean",
                        "description": "Turn on to see exactly what the Actor is doing step by step. Useful if something goes wrong, but makes logs noisy. Off by default.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Settings",
                        "type": "object",
                        "description": "REI is behind Cloudflare. This Actor needs Apify's residential proxy (real home internet connections) to pass the challenge. Default works for most runs.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
