Kohl's
Kohl's Search API
Search kohls.com (US) by keyword: 120 products per page, sorted featured, new arrivals, best sellers, by price, highest rated or percent off, and filtered by brand, color, size, on sale, clearance or any facet value (price buckets, gender, rating, store pickup...). Each item has id, title, URL, image, current, regular and sale price, Kohl's price label (sale, clearance...), percent off, the with-code price and the public offer code behind it, a cart-only price flag, rating, review count, badges, colors, Sephora at Kohl's flag, availability flags and is_sponsored. Also returns total, total_pages, applied filters and every facet with its value ids and counts. When the site autocorrects the keyword, corrected_query says so. Costs 2 credits per request.
Authorizations
AuthorizationstringheaderrequiredBearer authentication header of the form Bearer <token>, where <token> is your Scavio API key (e.g. Bearer sk_live_your_key).
Body
application/jsonquerystringrequiredSearch keywords, 1-200 characters.
Example: jeans
brandstringOnly this brand, as the Brand facet lists it ("Levi's", "Hamilton Beach", "BLACK+DECKER"). One value.
Example: Levi's
pageintegerResults page, 1-based, up to 500. Defaults to 1. 120 products per page.
Example: 2
sortstringfeatured (default, the site's own order), new_arrivals, best_sellers, price_low_to_high, price_high_to_low, highest_rated or percent_off (percent_off is Kohl's own Percent Off order, which is loose; sort the items by percent_off yourself for a strict ranking).
colorstringOnly this color, as the Color facet lists it (Black, Blue, Beig/khaki...). One value; send more colors through filters.
Example: Black
sizestringOnly this size, as the Size facet lists it (M, 32X30, 10...). One value; send more sizes through filters.
Example: M
on_salebooleanOnly items on sale (the Sale promotion facet).
clearancebooleanOnly clearance items.
filtersstring | string[]Any facet value from a previous response: its facets[].values[].value, e.g. "Gender:Womens", "Price:%2425%20to%20%2450" (a price bucket), "TopRated:4", "InStoreOnline:Pick%20Up%20in%20Store". Unencoded values work too ("Price:$25 to $50"). Several facets combine (AND); at most 10 facets per request, the page's own included.
Example: ["Price:$25 to $50", "Gender:Womens"]
Request
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
res = client.kohls.search(query="jeans", clearance=True, sort="percent_off")["data"]
print(res["total"], "items over", res["total_pages"], "pages")
for item in res["items"]:
if item["is_sponsored"]:
continue
print(item["id"], item["title"], item["price"], item["regular_price"], item["percent_off"], item["price_label"])Response