Retail category and campaign monitoring
Use Kohl's endpoints to turn retail category and campaign monitoring into repeatable API requests with documented inputs and JSON responses.
Turn a Kohl's category or curated campaign page into structured retail data — a normalized product grid (page 1) plus facets for discovering further category values, all as normalized JSON. Credential-free.
Browse a Kohl's category or curated campaign page's product grid, with normalized products and facets, as structured JSON.
Endpoint families
4
Documented params
9
Examples
4
Live catalog snapshot
Active endpoints
4
Methods
GET
Required params
8
Schema refs
4
{
"platform": "Kohl's",
"endpoint": "kohls-category",
"method": "GET",
"path": "/kohls/category",
"auth": "apiKey"
}Use cases
Browse a Kohl's category or curated campaign page's product grid, with normalized products and facets, as structured JSON.
Use Kohl's endpoints to turn retail category and campaign monitoring into repeatable API requests with documented inputs and JSON responses.
Use Kohl's endpoints to turn product catalog research into repeatable API requests with documented inputs and JSON responses.
Use Kohl's endpoints to turn facet-driven category discovery into repeatable API requests with documented inputs and JSON responses.
Managed execution
Crawlora's Kohl's API is designed around Kohl's's own data surface, not a generic fetch endpoint — combining endpoint-specific request logic, managed infrastructure, parsing, normalization, billing, and Playground-tested examples.
Request behavior for Kohl's endpoints is tuned to the platform's own response shapes and edge cases.
Supported Kohl's endpoints can use managed proxy routing to improve reliability and reduce infrastructure work.
Dynamic Kohl's pages can be routed through managed browser instances where JavaScript rendering is required.
Challenge pages and unusable Kohl's responses are detected and surfaced clearly, not silently returned as empty data.
Kohl's results are returned as documented JSON instead of raw HTML.
Test the same Kohl's route from Docs and Playground before production integration.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/kohls/category
/kohls/product/reviews
/kohls/stores
/kohls/suggest
Endpoint catalog
/kohls/categoryReturns a Kohl's category or curated campaign page's product grid (page 1 only), with normalized products (title, image, colors, pricing, rating, availability) and facets for discovering further category values. category is Kohl's own catalog taxonomy string, e.g. "Room:Dorm" or "Department:Kitchen & Dining" -- combine multiple dimensions with a literal "+", percent-encoded as "%2B" so it survives as "+" rather than being decoded to a space (e.g. "Room%3ADorm%2BDepartment%3ABedding"). Every facets[].options[].category value in a response is a ready-to-use category string for a follow-up call, so a caller can discover the full taxonomy by starting from a known category (e.g. "Room:Dorm") and following facets. A category value Kohl's does not recognize returns a 404 rather than an unfiltered listing; a recognized dimension with no matching products returns a genuine zero-result response instead.
Response notes
- Pagination is page 1 only. `product_count` is the category's total result count across all pages; `total_pages` and `limit` describe the upstream page size, but this endpoint does not fetch page 2 or beyond. - Every `facets[].options[].category` value in a response is a ready-to-use `category` string for a follow-up call -- this is how a caller discovers the full taxonomy, starting from a known category (e.g. `Room:Dorm`) and following its facets (e.g. `Department`, `Brand`, `Price`). - A `category` value Kohl's does not recognize at all returns a `404` rather than an unfiltered listing. A recognized dimension with a value that matches nothing (e.g. a real department with a typo'd name) returns a genuine zero-result response (`count: 0`, empty `products`) instead of an error. - `sale_price` is present only when the product is genuinely on sale; `on_sale` is `false` and `sale_price` is omitted otherwise. - `regular_price`/`sale_price` are min/max ranges rather than single prices, because a product can span multiple sizes/colors at different price points. Example response: ```json {"code":200,"msg":"OK","data":{"category":"Room:Dorm","title":"Essential Dorm Items for College-Bound Students | Kohl's","product_count":1317,"count":1,"limit":120,"total_pages":11,"products":[{"web_id":"4569328","title":"The Big One® Solid Bath Towel, Bath Sheet, Hand Towel or Washcloth","image_url":"https://media.kohlsimg.com/is/image/kohls/4569328_Medium_Gray?wid=180&hei=180&op_sharpen=1","colors":["Medium Gray"],"currency_code":"USD","regular_price":{"min_price":2.99,"max_price":9.99},"sale_price":{"min_price":2.09,"max_price":8.99},"on_sale":true,"rating":3.9,"review_count":27103,"available_for_ship":true,"available_for_pickup":false,"url":"https://www.kohls.com/product/prd-4569328/the-big-one-solid-bath-towel-bath-sheet-hand-towel-or-washcloth.jsp"}],"facets":[{"name":"Department","label":"Department","options":[{"category":"Room:Dorm+Department:Bedding","name":"Bedding","product_count":479,"active":false}]}],"source_url":"https://www.kohls.com/shopnext-web-findability/api/web-shop/pmp-catalog?CN=Room:Dorm","fetched_at":"2026-08-12T04:00:00Z"}} ```
/kohls/product/reviewsReturns one page of a Kohl's product's normalized customer reviews (title, text, rating, secondary ratings such as quality/durability/value/style, reviewer name and location, submission date, and photo URLs). web_id is the same identifier a GET /kohls/category response's products[].web_id field carries. A web_id with zero reviews returns a genuine zero-result response rather than an error.
Response notes
- `secondary_ratings` (e.g. Quality, Durability, Value, Style) is present only on reviews that carry it -- not every review rates every dimension. - `photo_urls` is present only on reviews with customer-submitted photos. - A `web_id` with zero reviews (a real product that has none yet, or an id the review platform has never heard of) returns a genuine zero-result response (`total_count: 0`, empty `reviews`) rather than an error. Example response: ```json {"code":200,"msg":"OK","data":{"web_id":"4569328","total_count":11249,"page":1,"page_size":10,"reviews":[{"id":"400246016","title":"U Love these towels","text":"I have been buying them for years and love them!","rating":5,"recommended":true,"author":"Kimmy","location":"Fayetteville, AR","submitted_at":"2026-08-12T01:40:45.000+00:00","secondary_ratings":[{"name":"Quality","value":4,"max_value":5}]}],"source_url":"https://apps.bazaarvoice.com/bfd/v1/clients/Kohls/api-products/cv2/resources/data/reviews.json?...","fetched_at":"2026-08-12T10:00:00Z"}} ```
/kohls/storesReturns physical Kohl's store locations near a free-text location (city/state, zip code, or address): address, phone, weekly hours, distance, and store badges/services. A search with no results returns a genuine empty list rather than an error.
Response notes
- `hours` lists every open/close interval for the store's regular weekly schedule, one entry per day the store is open. - `badges` and `services` are flat lists of the store's own labeled amenities (e.g. `Sephora`, `In-Store Pickup`, `Wifi Enabled`) when present. - A search with no nearby stores, or a location the store locator cannot resolve at all, returns a genuine empty result (`count: 0`, empty `stores`) rather than an error. Example response: ```json {"code":200,"msg":"OK","data":{"search":"Seattle, WA","count":13,"stores":[{"id":"1152","name":"Kohl's Tukwila","address":"17150 SOUTHCENTER PKWY","city":"TUKWILA","state":"WA","postal_code":"98188","country":"US","phone":"(206) 394-0078","distance_miles":11.3,"latitude":47.450079,"longitude":-122.2581113,"hours":[{"day":"Sunday","open":"09:00","close":"20:00"},{"day":"Monday","open":"09:00","close":"21:00"}],"badges":["Sephora","Baby Gifting Shop","Kids Room Shop"],"services":["In-Store Pickup","Wifi Enabled"],"url":"https://www.kohls.com/stores/wa/tukwila-1152.shtml"}],"source_url":"https://maps.kohlslocal.com/api/getAsyncLocations?...","fetched_at":"2026-08-12T10:00:00Z"}} ```
/kohls/suggestReturns Kohl's own search-box typeahead result for a partial query: a flat list of suggested search phrases (no product data). A nonsense query returns a genuine, well-formed empty list rather than an error.
Response notes
- There is no pagination -- `suggestions` is a single flat list. - A nonsense query returns a normal, well-formed empty result (`count: 0`, empty `suggestions`) rather than an error. Example response: ```json {"code":200,"msg":"OK","data":{"query":"coff","count":8,"suggestions":["coffee makers","keurig coffee makers","ninja coffee makers","coffee mugs","coffee","cuisinart coffee makers","coffee grinder","keurig single serve coffee maker"],"source_url":"https://www.kohls.com/typeahead/coff.jsp","fetched_at":"2026-08-12T10:00:00Z"}} ```
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
How to scrape Kohl's
Crawlora's Kohl's endpoint returns a category or campaign page's product grid as normalized JSON with one API key — no Kohl's account required.
Pass a known category or curated campaign slug (from a Kohl's storefront URL) to /kohls/category for that page's normalized product grid (page 1 only) and facets for discovering further category values.
FAQ
No — /kohls/category returns page 1 of the product grid only. Use the returned facets to narrow into a more specific category or campaign slug instead of paging further.
Not directly — Crawlora's Kohl's coverage is category/campaign browsing only (/kohls/category), with no free-text search endpoint yet.