Cookbook·Ecommerce·kohls.com

Scrape Kohl's prices, sale ladders and store stock

Regular price, sale price, the promotion that applies, Kohl's Cash eligibility and pickup availability by ZIP from kohls.com. No browser.

99.0% success · Aug 2026No browser neededComplex price · 2 credits

Measured on Crawlbase

99.0% success in August 2026. Kohl's sits in the complex tier: it challenges plain fetches, and Crawlbase clears that for you, which is why a page costs two credits and still needs no browser on your side. 1.3% of successful calls used the JavaScript token.

The call

Run in Playground
# Product page, rendered HTML
curl "https://api.crawlbase.com/?token=YOUR_TOKEN&country=US&url=https%3A%2F%2Fwww.kohls.com%2Fproduct%2Fprd-6248533%2Fsonoma-goods-for-life-mens-supersoft-crewneck-tee.jsp"

# Same page, stock for the store nearest a ZIP
curl "https://api.crawlbase.com/?token=YOUR_TOKEN&country=US&cookies=zipCode%3D60601&url=https%3A%2F%2Fwww.kohls.com%2Fproduct%2Fprd-6248533%2Fsonoma-goods-for-life-mens-supersoft-crewneck-tee.jsp"

Parameters that matter

ParameterSet it toWhy
countryUSKohl's serves a blocking page to non-US exits. Set it on every call.
javascriptleave unsetPrices, the sale ladder and the promo text are in a JSON blob in the HTML. Almost every successful call in the measured month ran without a browser.
cookieszipCode=<zip>Sets the store used for pickup availability. Without it you get the national default, which is not a stock answer.
autoparsenot yetNo dedicated scraper. The embedded JSON is stable and the fields below map straight from it.

Fields you get, from the embedded JSON

productTitlestring
webIDstring
price.regularPricenumber
price.salePricenumber | null
price.promoTextstring
kohlsCashEligibleboolean
SKUS[].sizestring
SKUS[].availabilitystring
storeAvailabilityobject
reviews.averageRatingnumber

What breaks, and the fix

Category pages paginate by WS=, not by page number. The offset is the count of items already seen, in steps of 48. A wrong step returns page one again and you will believe the category is 48 items long.
Sale prices depend on the day. Kohl's runs promotions that switch at midnight Central. If you compare prices across a day boundary you will see phantom changes; stamp each row with the fetch time.
Nothing to solve on your side. The challenge Kohl's puts in front of plain clients is handled inside Crawlbase; it is why the tier is complex, and why you do not need a browser.

Run it on a schedule

A daily price watch over 50,000 products is 100,000 credits a day at two credits a page. Use the Crawler so bursts are smoothed and pass the ZIP as a cookie per job when you track stock per store.

Questions

Why does a Kohl's page cost two credits?

Kohl's is in the complex tier. Crawlbase clears its bot challenge for you; the price reflects that work, and it still needs no browser.

Can I get store stock?

Yes. Pass cookies=zipCode=<zip> and read storeAvailability from the embedded JSON.

Site names identify the pages a recipe fetches. Crawlbase is not affiliated with any site listed. Use recipes within the acceptable use policy.Measured numbers from August 2026, refreshed monthly