REI Product Scraper
Pricing
from $3.00 / 1,000 results
REI Product Scraper
Scrape live outdoor gear, apparel, and footwear listings from REI.com - search by keyword, browse by category or brand, or look up full product detail (price, member price, rating, images) by URL. No login required.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape REI.com — live outdoor gear, apparel, and footwear listings from REI Co-op. Search by keyword, browse by category or filter by brand within a category, or look up a specific product by URL. No login required.
What this actor does
- Four modes:
search,browseByCategory,browseByBrand,productDetail - 125+ category shortcuts across hiking, camping, climbing, cycling, water sports, snow sports, running, footwear, and apparel — plus a free-text override for any of REI's 400+ category slugs
- Filters: price range, minimum rating, on-sale-only (includes clearance/outlet), gender (real server-side REI facet)
- Sort: 10 options — relevance, price (low/high), rating, most reviewed, newest, bestselling, biggest % off, brand A-Z/Z-A — most are REI's own server-side sort, so results reflect the true order/cheapest/newest across the whole category, not just whichever pages were fetched
- Advanced facet passthrough (
additionalFacets) for category-specific filters REI exposes in its sidebar — features, best-use, sustainability certifications, and more - Available colors, rating, review count, and description on every product
- Empty fields are omitted
Gender filter fix (2026-07)
gender is now wired into REI's real server-side r=gender:<value> facet (confirmed live: filtering hiking-boots by Women's genuinely drops the category's total page count roughly in half, and every returned title matches). Previously this filter only checked a raw JSON field that is blank on almost every REI listing, so it was a near-total no-op — selecting "Men's" silently returned unfiltered results. A client-side check is still kept as a harmless safety net, but the server-side facet is now the real mechanism.
Output per product
prodId— REI's numeric product identifierproductName,brandNameprice— current selling price (USD)originalPrice,percentOff,onSaleclearance,outlet— REI Outlet / clearance flagsaverageRating(1–5),reviewCountgender(when the product is gender-specific)color,availableColors[]descriptioninStockimageUrlproductUrlrecordType: "product",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / browseByCategory / browseByBrand / productDetail |
searchQuery | string | hiking boots | Free-text keyword search (mode=search) |
category | string | hiking-boots | Category to browse (mode=browseByCategory, browseByBrand) |
categoryOther | string | – | Custom category slug when category = "Other" |
brand | string | Patagonia | Brand to filter by within the category (mode=browseByBrand) |
productUrls | array | – | REI product page URLs (mode=productDetail) |
gender | string | Any | Men's / Women's / Boys' / Girls' / Kids' / Unisex |
minPrice / maxPrice | int | – | Price range in USD |
minRating | int | – | Drop products rated below this (1–5) |
onSaleOnly | bool | false | Only emit discounted/clearance/outlet products |
sortBy | string | relevance | Result sort order — see "Sort options" below |
additionalFacets | array | [] | Advanced: raw REI facetKey:value strings, e.g. features:Waterproof — see "Advanced facets" below |
maxItems | int | 20 | Hard cap (1–300) |
Sort options
sortBy value | REI server key | Mechanism |
|---|---|---|
relevance | (default, no param) | Server |
priceLowToHigh | min-price | Server |
priceHighToLow | max-price | Server |
ratingHighToLow | rating|num-reviews | Server (rating desc, review count as tiebreaker) |
mostReviewed | (none confirmed) | Client-side re-sort of fetched pages only |
newest | days-old | Server |
bestselling | sc_revenue | Server |
percentOff | percentageoff | Server |
brandAtoZ | title | Server |
brandZtoA | title_r | Server |
All server-backed options fetch pages already in that true order across the whole category. mostReviewed has no confirmed direct REI sort key — REI's closest key (rating|num-reviews) sorts by rating first and review count only as a tiebreaker, so it isn't a true "most reviewed" order; mostReviewed stays a re-sort of whatever pages were fetched, same limitation every sort option used to have.
Advanced facets (additionalFacets)
REI's category pages expose extra sidebar filters that are genuinely category-specific (hiking boots and tents don't share the same filter set), so instead of a fixed dropdown, pass raw facetKey:value strings. Values are case-sensitive and must match REI's displayed filter label exactly (Title Case, spaces not hyphens) — features:waterproof returns nothing; features:Waterproof works.
Confirmed-real examples:
| Category | Facet entries |
|---|---|
hiking-boots | features:Waterproof, features:Vegan, features:Top Rated, features:Insulated, features:New Arrivals, best-use:Hiking, best-use:Backpacking, best-use:Trail Running, sustainability:bluesign (lowercase — intentional), sustainability:Recycled Materials |
tents | features:Ultralight |
Multiple facets (including brand and gender) all combine correctly in the same request — pass as many additionalFacets entries as you like. Works for search, browseByCategory, and browseByBrand; ignored for productDetail (a single product lookup should not be excluded by a facet).
Example: search with price and rating filters
{"mode": "search","searchQuery": "2-person tent","minPrice": 100,"maxPrice": 400,"minRating": 4,"maxItems": 30}
Example: browse a category, on sale only
{"mode": "browseByCategory","category": "backpacking-packs","onSaleOnly": true,"sortBy": "priceLowToHigh","maxItems": 50}
Example: browse a brand within a category
{"mode": "browseByBrand","category": "mens-jackets","brand": "Patagonia","maxItems": 30}
Example: product detail by URL
{"mode": "productDetail","productUrls": ["https://www.rei.com/product/237486/merrell-moab-3-mid-waterproof-hiking-boots-womens"]}
Example: women's hiking boots, newest first, waterproof only
{"mode": "browseByCategory","category": "hiking-boots","gender": "Women's","sortBy": "newest","additionalFacets": ["features:Waterproof"],"maxItems": 30}
Example: bestselling Patagonia men's jackets
{"mode": "browseByBrand","category": "mens-jackets","brand": "Patagonia","gender": "Men's","sortBy": "bestselling","maxItems": 30}
Use cases
- Price monitoring — track REI sale, clearance, and outlet pricing over time
- Assortment research — see which brands dominate each outdoor activity category
- Competitive intelligence — compare gear pricing/ratings against other outdoor retailers
- Review analytics — pull rating and review-count trends by brand or category
- Gear guides — build "best hiking boots" or "best tents" content from live REI listings
FAQ
Is this affiliated with REI? No — this is an independent, third-party actor that reads REI's public website. It is not endorsed by or affiliated with Recreational Equipment, Inc. (REI Co-op).
Do I need an REI account or cookies? No. All modes work against publicly browsable pages — no login required.
Why does browseByBrand require a category? REI does not publish a brand-wide catalog page — brand pages (e.g. rei.com/b/patagonia) are marketing landing pages without a product grid. Brand filtering only works scoped to a category (e.g. "Patagonia jackets"), which mirrors how REI's own site filters work.
Why is the category list a dropdown of ~125 options instead of all of REI's categories? REI has 400+ category slugs. The dropdown covers the most popular ones across every major activity; pick "Other" and type any valid slug from a rei.com/c/<slug> URL to reach the rest.
How does keyword search work if there's no dedicated search field in the results? search matches your query against REI's own category taxonomy (e.g. "waterproof hiking boots" routes to the hiking-boots category) and applies REI's in-category keyword filter on top. This returns highly relevant, always-live results without depending on REI's separate search page. If your query doesn't map well to any category, try browseByCategory directly with the closest category from the dropdown.
How does productDetail resolve a URL? The actor extracts the product ID and descriptive words from the URL slug, routes them through the same category-matching logic as search, and returns the matching product record. If REI has since delisted the product or moved it to a category the matcher can't infer from the URL slug, the run reports 0 results for that URL — no data is ever fabricated.
What counts as "on sale"? Any product marked sale, clearance, or outlet by REI, or where the current price is below the regular/compare-at price.
How fresh is the data? Real-time — every run loads the live REI page.
Why do productUrl/imageUrl sometimes fail to load in a script or curl but work fine in my browser? REI's anti-bot system blocks automated, non-browser requests specifically on /product/* and image-CDN paths (it does not block /c/<category> browsing). A normal person clicking the link in a real browser — from search results, a shared link, etc. — loads it without any issue. Only scripted curl/fetch-style requests to those two specific path types are affected.
Can I get REI Co-op member pricing? No — member-only pricing requires a logged-in REI Co-op account. The actor returns REI's publicly displayed price.
Why do additionalFacets values need exact capitalization? REI's facet filter matches the exact text shown in its own sidebar (e.g. "Waterproof", "Top Rated"), not the lowercase-hyphenated URL slug REI uses internally for the same option — a lowercase or hyphenated guess returns REI's 404 page instead of filtered results. Open the category on rei.com, check the filter sidebar for the exact label, and use that.
Does gender combine correctly with brand and additionalFacets? Yes — all REI facets you set (brand, gender, additionalFacets) are combined into a single request and are confirmed live to genuinely narrow the result set together (e.g. Merrell + Women's + Waterproof returns only matching boots, not just one of the three filters).