Zappos Scraper - Shoe & Apparel Price Tracker (USA) avatar

Zappos Scraper - Shoe & Apparel Price Tracker (USA)

Pricing

from $3.50 / 1,000 product scrapeds

Go to Apify Store
Zappos Scraper - Shoe & Apparel Price Tracker (USA)

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

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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

FieldNotes
searchTermsOne 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.
maxItemsProducts to read per term (default 100, up to 10,000). 100 per page.
onlyOnSaleReturn 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.
proxyConfigurationApify 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).

FieldNotes
query, positionThe 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_idZappos'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, colorAs the page shows them, HTML entities decoded (PFG Tidal™ Dress). brand and color are null if the page sends none.
urlThe product link for this colour.
product_type, gendersThe site's product type (Shoes, Clothing, Accessories, Bags, Jewelry...) and who it is for, any of Men, Women, Boys, Girls (empty list if none).
priceThe current price.
original_priceThe list price before any reduction. Zappos sends it for every colourway, equal to price when nothing is marked down.
on_saleTrue 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_offDollars off and the site's whole-number percent off. Null when not on sale, never 0.
rating, review_countThe 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_handThe 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, badgesWhether 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_urlThe main photo, a JPEG on m.media-amazon.com.
currencyUSD.

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_hand is 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 by onlyOnSale, 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. The p= parameter is ignored on Zappos's search: p=0, 1, 2, 90, 200 all return the first 100 products. page=2 returns the next 100. A brand term such as nike or UGG is redirected to the brand's own list when no page is sent; with page=1 or 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 by percent_off or price instead, or set onlyOnSale.
  • 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 (sneaker and SNEAKERS read the same 9,013) and punctuation inside a term is dropped (a/b searches a). 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.