Kohl's API: Search products
Searches Kohl's products in site order and returns prices, offers, ratings and links for each result.
Unofficial. Not affiliated with or endorsed by Kohl's.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Sort optional
sort Result order, for example price_low_to_high.
featured (default)
One of
featured,top_rated,newest,price_low_to_high,price_high_to_low.- Query, required
query Words to search for, such as men's running shoes.
men's running shoes
- Max Results optional
max_results Maximum products to return, for example 24.
24 (default)
Whole number from 1 to 96.
- On Sale Only optional
on_sale_only Only show products in the Sale promotion, for example true.
false (default)
True or false.
Input as JSON
{ "query": "men's running shoes"}Output
{ "products": [ { "brand": "Nike", "currency": "USD", "image_link": "https://media.kohlsimg.com/is/image/kohls/5829295_Gray_Black_White?wid=180&hei=180&op_sharpen=1" , "offer_text": null, "product_id": "5829295", "sale_price": null, "star_rating": 4.5, "product_link": "https://www.kohls.com/product/prd-5829295/nike-run-swift-3-mens-road-running-shoes.jsp" , "product_name": "Nike Run Swift 3 Men's Road Running Shoes", "review_count": 580, "current_price": null, "regular_price": null }, { "brand": "Under Armour", "currency": "USD", "image_link": "https://media.kohlsimg.com/is/image/kohls/7579208_Black_Black?wid=180&hei=180&op_sharpen=1" , "offer_text": null, "product_id": "7579208", "sale_price": null, "star_rating": 4.6, "product_link": "https://www.kohls.com/product/prd-7579208/under-armour-charged-assert-11-mens-running-shoes.jsp" , "product_name": "Under Armour Charged+ Assert 11 Men's Running Shoes", "review_count": 343, "current_price": null, "regular_price": null }, { "brand": "Nike", "currency": "USD", "image_link": "https://media.kohlsimg.com/is/image/kohls/7311900_Black_Anthracite?wid=180&hei=180&op_sharpen=1" , "offer_text": null, "product_id": "7311900", "sale_price": null, "star_rating": 4.5, "product_link": "https://www.kohls.com/product/prd-7311900/nike-run-defy-mens-running-shoes.jsp" , "product_name": "Nike Run Defy Men's Running Shoes", "review_count": 366, "current_price": null, "regular_price": null } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"kohls.com/search_products","input":{"query":"men' \''s running shoes"}}'# Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "kohls.com/search_products" , "input": { "query": "men's running shoes" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "kohls.com/search_products" , "input": { "query": "men's running shoes" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run kohls.com/search_products# with {"query":"men's running shoes"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "sort": { "enum": [ "featured", "top_rated", "newest", "price_low_to_high", "price_high_to_low" ], "type": "string", "default": "featured", "description": "Result order, for example price_low_to_high." }, "query": { "type": "string", "minLength": 1, "description": "Words to search for, such as men's running shoes." }, "max_results": { "type": "integer", "default": 24, "maximum": 96, "minimum": 1, "description": "Maximum products to return, for example 24." }, "on_sale_only": { "type": "boolean", "default": false, "description": "Only show products in the Sale promotion, for example true." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "products" ], "properties": { "products": { "type": "array", "items": { "type": "object", "required": [ "product_name", "brand", "current_price", "currency", "regular_price", "sale_price", "offer_text", "star_rating", "review_count", "image_link", "product_link", "product_id" ], "properties": { "brand": { "type": [ "string", "null" ] }, "currency": { "enum": [ "USD" ], "type": "string" }, "image_link": { "type": [ "string", "null" ] }, "offer_text": { "type": [ "string", "null" ], "description": "Kohl's Cash or other offer shown for this item, if any." }, "product_id": { "type": [ "string", "null" ] }, "sale_price": { "type": [ "number", "null" ], "description": "Lowest sale price in USD when prices vary." }, "star_rating": { "type": [ "number", "null" ] }, "product_link": { "type": "string" }, "product_name": { "type": "string" }, "review_count": { "type": [ "integer", "null" ] }, "current_price": { "type": [ "number", "null" ], "description": "Lowest currently shown price in USD when prices vary." }, "regular_price": { "type": [ "number", "null" ], "description": "Lowest regular price in USD when prices vary." } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
kohls.com/search_products- Returns
- product name, brand, current and regular prices, sale price, offer text, star rating, review count, image, link, product ID
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method kohls.com/search_products with the inputs above.
Ask your agent
- Find me women's winter parkas on sale, sorted from lowest to highest price, and show the top 12 with ratings
- I need Kohl's men's running shoes under the sale filter, highest rated first, at most 20 items
- Show cheap queen-size bed sheets sorted price low to high with their star ratings and review counts
- What blue ceramic dinnerware sets are available, newest arrivals first, limit 30 results
- Search for kids' hooded raincoats on sale only, featured order, and give me product IDs and links
See more
Search Nordstrom products by words, price, sale status and sort order. Prices are the lowest listed price. Available sizes may be empty when a product page is unavailable.
nordstrom.com/search_productsSearches Macy's products in the site's order with optional USD price bounds, sale-only results and sorting. Prices for products with a range use the lowest shown price.
macys.com/search_productsSearches clothes and shoes in one Zalando country shop, with optional gender, brand, deal and sort filters. Prices and discounts are those shown on the product cards; size-dependent prices may be starting prices.
zalando.com/search_productsSearches Best Buy US products with an optional price range, sort order and page. Prices and availability come from public listings and may vary by location.
bestbuy.com/search_productsSearches Sephora US beauty products in Sephora's order, with brand and USD price filters and shopper sort options. Loves counts are null when a product page cannot be loaded.
sephora.com/search_productsSearches Target products and returns prices, ratings, photos and product links. Prices can vary by store, so you can give a ZIP code for local pricing.
target.com/search_productsSearch Chewy products by words, pet type, and sort order. Returns up to 72 products in Chewy's order, including listed and first-order Autoship prices when shown.
chewy.com/search_productsSearches Flipkart products by keyword, with an optional price range and sort order. Returns current listings in site order.
flipkart.com/search_products