Zappos Scraper - Shoe & Apparel Price Tracker (USA)
Pricing
from $3.50 / 1,000 product scrapeds
Zappos Scraper - Shoe & Apparel Price Tracker (USA)
Zappos scraper: search terms to one row per shoe or apparel colourway with USD price, list price, markdown dollars and percent, on-sale flag, brand, colour, gender, rating and reviews, units on hand, link and photo. For shoe and apparel price and markdown watching.
Pricing
from $3.50 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Zappos scraper: shoe and apparel price and markdown tracker (USA)
This Zappos scraper searches Zappos (the US shoe and apparel retailer) by keyword and returns one flat row per product colourway: the current price in USD, the list price, the markdown in dollars and percent, brand, colour, who it is for, rating and review count, units on hand, badges, the product link and the photo. Run it on a schedule and diff the dataset to get a shoe and apparel price and markdown watch: which Nike, ASICS or Columbia colourways were reduced since last week, and by how much.
No account, no API key, no login, no browser. One request returns 100 products.
Input
| Field | Notes |
|---|---|
searchTerms | One or more search terms, one per line (sneakers, nike air max, rain jacket). Each term is read separately, in the site's own relevance order. A colourway found by two terms is returned once, under the first. A term with no letter or digit in it (Japanese text, !, #) is not searched by Zappos, which answers with its whole catalogue of 50,000 products; the actor skips such a term at no charge. |
maxItems | Products to read per term (default 100, up to 10,000). 100 per page. |
onlyOnSale | Return only products whose price is below their list price (on_sale). Products that are not marked down are read, not returned and not charged, and do not count toward maxItems. A term with few markdowns reads many pages to find them. |
proxyConfiguration | Apify datacenter proxy by default. |
Example input:
{"searchTerms": ["sneakers", "rain jacket"],"maxItems": 300,"onlyOnSale": true}
Output
Prices are numbers in US dollars; currency is USD (every page measured).
| Field | Notes |
|---|---|
query, position | The search term that first found the colourway, and its place in Zappos's relevance order for that term (1 is first, counted over every product of the pages read). |
product_id, style_id | Zappos's product id and colourway id, both strings. One row is one colourway: the same product_id comes once per colour, each with its own style_id, price and link, so style_id is the unique key. |
name, brand, color | As the page shows them, HTML entities decoded (PFG Tidal™ Dress). brand and color are null if the page sends none. |
url | The product link for this colour. |
product_type, genders | The site's product type (Shoes, Clothing, Accessories, Bags, Jewelry...) and who it is for, any of Men, Women, Boys, Girls (empty list if none). |
price | The current price. |
original_price | The list price before any reduction. Zappos sends it for every colourway, equal to price when nothing is marked down. |
on_sale | True when price is below original_price. This includes the small 1-9% markdowns: Zappos's own on-sale flag starts at 10% off. Of 2,083 colourways read on 2026-10-18, 625 were flagged by the site and 52 more had a lower price without the flag. |
discount_amount, percent_off | Dollars off and the site's whole-number percent off. Null when not on sale, never 0. |
rating, review_count | The average star rating (1 to 5) and how many reviews it is from. rating is null for a colourway with no reviews (the page sends 0, which is not a rating of 0); review_count is 0 then. |
units_on_hand | The site's onHand count as sent. Zappos does not say what it counts; it reads as units in stock across sizes. Null if absent. |
is_new, badges | Whether the page flags the colourway as new, and its badge codes as sent (NEW, BS, NWC, OZ were seen; the site does not define them). |
image_url | The main photo, a JPEG on m.media-amazon.com. |
currency | USD. |
Example row (real values, 2026-10-18):
{"query": "sneakers","position": 22,"product_id": "10054363","style_id": "6652718","name": "Jumper","brand": "Madden Girl","url": "https://www.zappos.com/p/madden-girl-jumper-sand-multi/product/10054363/color/6563","image_url": "https://m.media-amazon.com/images/I/61mf74cYFwL.jpg","product_type": "Shoes","genders": ["Women"],"color": "Multi","currency": "USD","price": 47.96,"original_price": 55.0,"on_sale": true,"discount_amount": 7.04,"percent_off": 13,"rating": 4.3,"review_count": 6,"units_on_hand": 122,"is_new": false,"badges": []}
Honest nulls
A field the page did not send is null, never 0 or "". genders and
badges are empty lists when there are none.
- No sizes or per-size stock. The search list does not carry them;
units_on_handis one total. - No sponsored flag and no sort. Zappos's search page has none in its data; products come in its relevance order (see below for why no sort is offered).
- No description or variants. This is the search list, one row per colour.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing. - $0.0035 per product row written (
product-scraped), i.e. $3.50 per 1,000 products. A row that is not written is not charged: rows filtered byonlyOnSale, and repeats of a colourway another term already returned, are free.
How it fetches
It reads the product list that zappos.com's own search page embeds in its page
state (window.__INITIAL_STATE__). Measured 2026-10-18: HTTP 200 HTML (0.4 to
2.4 MB a page) from a plain home connection and from Apify datacenter addresses
(20 of 20 pages on each of two days), no key or cookie needed. A refusal (403,
429, 5xx), a 200 that carries no page data, a page other than the one asked for,
or a dropped connection is treated as the address being blocked, and the actor
rotates to a fresh one and retries.
Things worth knowing, all measured:
- Paging uses
page=, 1-based, and is always sent. Thep=parameter is ignored on Zappos's search:p=0,1,2,90,200all return the first 100 products.page=2returns the next 100. A brand term such asnikeorUGGis redirected to the brand's own list when nopageis sent; withpage=1or higher it stays an ordinary search, in one order across all pages. The page says which page it rendered, and the actor treats a mismatch as a refusal rather than return the first page again and charge for it. - No sort. Zappos's
s=sort parameter is ignored on the search page (price, percent off, newest all returned the default order), so none is offered. Sort the dataset bypercent_offorpriceinstead, or setonlyOnSale. - Depth. 100 products per page and no page-size setting. A page past the
last is HTTP 200 with no products, and the actor stops there. The deepest
term measured has 492 pages (
the, 49,105 matches); at most 10,000 products per term are read. - Totals drift. The same search reported 9,013, 9,015 and 9,016 matches within minutes.
- Terms are normalised by the site. Case does not matter, a plural is
stemmed (
sneakerandSNEAKERSread the same 9,013) and punctuation inside a term is dropped (a/bsearchesa). A term with no match returns nothing and costs nothing. A term containing<or>is refused by Zappos's firewall.
If Zappos changes its page data, the run fails with a message instead of returning empty rows.