# Kohl's Scraper (`happyendpoint/kohls-scraper`) Actor

Kohl's scraper & API: extract Kohls.com product data with real-time prices, sale prices, discounts, ratings, availability, reviews, Q\&As, categories and store locations. Search by keyword with brand, size, color and price filters. Price monitoring, retail analytics. No proxies. Macy's alternative.

- **URL**: https://apify.com/happyendpoint/kohls-scraper.md
- **Developed by:** [Happy Endpoint](https://apify.com/happyendpoint) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🛍️ Kohl's Scraper - Products, Prices, Reviews, Q\&As & Stores

### 🚫 No Proxies Needed

Extract **real-time product data from Kohls.com**: search results with regular and sale prices, ratings and availability, plus product reviews, customer questions and answers, the full category tree and Kohl's store locations.

***

### What This Actor Does

| Operation | What you get |
|---|---|
| 🛍️ **Search products** | Products for any keyword: title, regular and sale price, price label, rating, review count, colours, ship/pickup availability, product URL and image. Supports Kohl's sorting and filters |
| 🧰 **List filters** | Every filter value available for a keyword (brand, gender, size, colour, price range, rating, ...) ready to paste into **Filters** |
| ⭐ **Product reviews** | Full reviews: rating, title, text, nickname, location, recommendation, secondary ratings (fit, quality, ...), photos and helpfulness votes |
| ❓ **Product Q\&As** | Customer questions with all their answers attached |
| 🗂️ **Categories** | The complete Kohl's category tree (700+ categories) with paths and URLs |
| 📍 **Store locator** | Kohl's stores near a latitude/longitude: address, city, state, ZIP, coordinates, store page and specialties |
| 🩺 **Health check** | The default operation: confirms the actor is working and saves one status row. Choose another operation to get data |

Pages are fetched automatically: set **Max Products** or **Max Reviews / Questions per Product** and the actor does the rest. Duplicates are removed, so you never pay twice for the same item.

***

### How to Use

#### Search products

```json
{
    "operation": "search-products",
    "keyword": "tshirt",
    "filters": "Gender:Mens, Price:$10 to $25",
    "sort": "4",
    "maxItems": 200
}
```

Sort values: `1` Featured · `2` New Arrivals · `4` Price Low-High · `5` Price High-Low · `6` Highest Rated · `7` Percent Off.

#### Find the right filters

Run **List filters** with your keyword:

```json
{ "operation": "list-filters", "keyword": "tshirt" }
```

Each row has a `filter` value such as `Brand:Nike`, `Color:Black` or `TopRated:4`. Combine several with commas in **Filters**.

#### Reviews and Q\&As

Use the `webID` values from a search:

```json
{ "operation": "product-reviews", "productIds": ["3910467"], "maxReviews": 500 }
```

```json
{ "operation": "product-qnas", "productIds": ["3910467"] }
```

#### Stores near a location

```json
{ "operation": "store-locator", "latitude": 40.7128, "longitude": -74.0060, "radius": 25 }
```

***

### 📥 Input Parameters

| Field | Used by | Description |
| :--- | :--- | :--- |
| `operation` | All | `health-check` (default), `search-products`, `list-filters`, `product-reviews`, `product-qnas`, `categories`, `store-locator` |
| `keyword` | Search, List filters | What to search for |
| `sort` | Search | Sort order (see above) |
| `filters` | Search | Comma-separated `Group:Value` filters, for example `Brand:Nike, Color:Black` |
| `maxItems` | Search | Maximum products to save (default 100) |
| `productIds` | Reviews, Q\&As | One or more `webID` values |
| `maxReviews` | Reviews, Q\&As | Maximum reviews or questions per product (default 100) |
| `latitude` / `longitude` | Store locator | Centre of the search |
| `radius` | Store locator | Radius in miles (default 25) |

Invalid input (for example a filter without `Group:`) stops the run straight away with a message explaining why.

***

### 📤 Output Example (Search products)

```json
{
  "webID": "3910467",
  "productTitle": "Men's Sonoma Goods For Life® Supersoft Essential Crewneck Tee",
  "regularPrice": 9.99,
  "salePrice": 7.99,
  "priceLabel": "sale",
  "avgRating": 4.4,
  "ratingCount": 9667,
  "productUrl": "https://www.kohls.com/product/prd-3910467/mens-sonoma-goods-for-life-supersoft-essential-crewneck-tee.jsp",
  "imageUrl": "https://media.kohlsimg.com/is/image/kohls/3910467_Grey?wid=180&hei=180&op_sharpen=1",
  "isAvailableforShip": true,
  "isAvailableforPickUp": true,
  "swatchImages": [{ "color": "Rust", "URL": "https://..." }],
  "prices": [{ "regularPrice": { "minPrice": 9.99 }, "salePrice": { "minPrice": 7.99 }, "...": "..." }],
  "search_keyword": "tshirt"
}
```

The **Output** tab has table views for Products, Reviews, Q\&As, Filters, Categories and Stores. Export to **JSON**, **CSV** or **Excel**, or send the data to **Google Sheets**, **webhooks** and other integrations.

***

### 💡 Use Cases

- **Price monitoring:** schedule daily searches and track sale prices and promotions.
- **Competitor and assortment research:** compare brands, price ranges and ratings in any category.
- **Review and Q\&A analysis:** collect thousands of reviews for sentiment and product-quality insights.
- **Retail location data:** build store maps and catchment analyses.

***

### 📞 Contact & Custom Solutions

Need more retail data or a custom integration? We provide tailored data solutions.

- **Website:** [happyendpoint.com](https://happyendpoint.com)
- **Twitter:** [@happyendpointhq](https://x.com/happyendpointhq)
- **Email:** <happyendpointhq@gmail.com>

### 🔗 Useful Links

- **Our Official Website:** [Happy Endpoint](https://happyendpoint.com)
- **Kohl's Data API (use this data in your own app):** [happyendpoint.com/library/kohls-data](https://happyendpoint.com/library/kohls-data)
- **Kohl's:** [www.kohls.com](https://www.kohls.com)

### Our Other Scrapers

- [Priceline Hotels Scraper](https://apify.com/happyendpoint/priceline-hotels-scraper)
- [Tesco Scraper](https://apify.com/happyendpoint/tesco-scraper)
- [Sephora Scraper](https://apify.com/happyendpoint/sephora-scrapper)
- [Ikea Scraper](https://apify.com/happyendpoint/ikea-scraper)
- [Ikea Product Scraper By Category](https://apify.com/happyendpoint/ikea-products-bycategory)
- [Idealista Scraper](https://apify.com/happyendpoint/idealista-scraper)
- [Idealista Scraper by URL](https://apify.com/happyendpoint/idealista-scraper-by-url)

### Other Products

- [UAE Bayut Data API](https://bayutapi.dev)
- [Propertyfinder UAE Data API](https://uaepropertyapi.com)

> This actor is an independent service and is not affiliated with, endorsed, or sponsored by Kohl's.

# Actor input Schema

## `operation` (type: `string`):

**Health check** (default) only confirms the actor is working and saves one status row. To get data, start with **Search products**, then use the `webID` values it returns for **Product reviews** or **Product Q\&As**.

## `keyword` (type: `string`):

**\[Search products, List filters]** What to search for, for example `jeans`, `air fryer` or `nike shoes`.

## `sort` (type: `string`):

**\[Search products]**

## `filters` (type: `string`):

**\[Search products]** Comma-separated `Group:Value` filters. Examples: `Gender:Mens` · `Brand:Nike, Color:Black` · `Price:$10 to $25` · `TopRated:4`. Run **List filters** with your keyword to see every available value.

## `maxItems` (type: `integer`):

**\[Search products]** Maximum number of products to save. Pages are fetched automatically (up to 120 products per page).

## `productIds` (type: `array`):

**\[Product reviews, Product Q\&As]** One or more `webID` values from **Search products**. Example: `3910467`.

## `maxReviews` (type: `integer`):

**\[Product reviews, Product Q\&As]** Maximum reviews or questions to save for each product. Pages are fetched automatically.

## `latitude` (type: `number`):

**\[Store locator]** Example: `40.7128` (New York).

## `longitude` (type: `number`):

**\[Store locator]** Example: `-74.0060` (New York).

## `radius` (type: `integer`):

**\[Store locator]** Search radius around the location, in miles.

## Actor input object example

```json
{
  "operation": "health-check",
  "keyword": "tshirt",
  "sort": "1",
  "maxItems": 100,
  "maxReviews": 100,
  "radius": 25
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "tshirt"
};

// Run the Actor and wait for it to finish
const run = await client.actor("happyendpoint/kohls-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keyword": "tshirt" }

# Run the Actor and wait for it to finish
run = client.actor("happyendpoint/kohls-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "tshirt"
}' |
apify call happyendpoint/kohls-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,happyendpoint/kohls-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xyT3hOMn7EOOyYuNN/builds/zvmt3igSyVDL6AC23/openapi.json
