# Calvin Klein Product Scraper (`datascrapers/calvinklein-scraper`) Actor

Scrape Calvin Klein products from official European and UK shops using search queries or category/search URLs, with optional full product details.

- **URL**: https://apify.com/datascrapers/calvinklein-scraper.md
- **Developed by:** [Data Scrapers](https://apify.com/datascrapers) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

Calvin Klein product records from the public storefront. One dataset item is one product colorway, such as Straight 90s Jeans, product id LV04RH700G7IB, on the German store: name, gender, colour, product group, current price, and the product URL. Query with a search phrase, a start URL, a country, and a language. Turn on product details when you need the longer description and size variants. Export the default dataset as JSON, CSV, Excel, or XML.

[![Calvin Klein Scraper — input to structured data](https://raw.githubusercontent.com/faizanalii/apify-actor-assets/main/calvinklein-scraper/calvinklein-scraper-value-demo.gif)](https://apify.com/datascrapers/calvinklein-scraper)

### Dataset at a glance

| | |
|---|---|
| Source | Calvin Klein storefront |
| One record | One product colorway |
| Deduplicate on | `productId` |
| Main fields | `name`, `gender`, `colour`, `productGroup`, `price`, `url` |
| Query | `searchQueries`, `startUrls`, `country`, `language` |
| Export | JSON, CSV, Excel, XML |

### Coverage and available records

- Records come from the public search or category URL you pass in.
- `country` and `language` select the storefront, such as Germany and German.
- `scrapeProductDetails` adds description and size data and charges `product-details`.
- A search row still includes the price, colour, and product URL when details are off.
- `maxItems` of `0` does not cap the result set.

### Data dictionary

| Field | Meaning |
|---|---|
| `productId` | Colorway id. Use this to deduplicate. |
| `styleId` | Style id shared by colour variants. |
| `name` | Product name on the storefront. |
| `brandName` | Brand line, such as Calvin Klein Jeans. |
| `url` | Public product page. |
| `gender` | Storefront gender label. |
| `colour` | Colour name for this colorway. |
| `mainColour` | Coarser colour family. |
| `productGroup` | Group such as Jeans. |
| `price` | Current price in `currency`. |
| `wasPrice` | Previous price when the item is on sale. |
| `currency` | ISO currency code for the selected store. |
| `imageUrl` | Primary image. |
| `onSale` | Whether the store marks the item on sale. |
| `soldOut` | Whether the store marks the item sold out. |
| `country` | Storefront country used for the request. |
| `sourceQuery` | Search phrase or URL that produced the row. |

### Example dataset record

```json
{
  "productId": "LV04RH700G7IB",
  "styleId": "LV04RH700G",
  "name": "Straight 90s Jeans",
  "brandName": "CALVIN KLEIN JEANS",
  "url": "https://www.calvinklein.de/straight-90s-jeans-lv04rh700g7ib",
  "gender": "Herren",
  "colour": "VAPOR",
  "mainColour": "Blue",
  "productGroup": "Jeans",
  "price": 99.9,
  "currency": "EUR",
  "country": "DE"
}
```

Confirm `price` against your own run. The store changes it.

### Query and input reference

| Field | What it does |
|---|---|
| `searchQueries` | Product search terms to run on the selected country shop. e.g. bags, jeans, boxers. Agents can pass natural-language keywords without collecting page URLs fi... |
| `startUrls` | Official Calvin Klein listing, search, or product URLs (e.g. https://www.calvinklein.de/search?searchTerm=bags or https://www.calvinklein.de/bestseller-herre... |
| `country` | Which official Calvin Klein shop to search. These are the country stores from the site picker (Germany, UK, France, Italy, Spain, Netherlands, and other Euro... |
| `language` | Shop language when the country has more than one (e.g. German or English on calvinklein.de, Dutch or French on calvinklein.be). auto uses the default languag... |
| `scrapeProductDetails` | When enabled, fetch full product pages in parallel (description, size variants, stock flags). Charged as a separate product-details event. Off by default. |
| `detailsConcurrency` | How many product-detail requests to run at once. Each request uses a rotated proxy. Ignored when scrapeProductDetails is off. |
| `gender` | Gender facet from the website filters. e.g. men, women. |
| `colors` | Color facet values from the website (e.g. black, blue, beige, brown). Multiple values are combined. |
| `sizes` | Size facet values from the website (e.g. S, M, L, XL, W32). You can also paste the site query token such as s.100492_s. |
| `productGroups` | Product group facet from the website (e.g. jeans, jacketsandcoats, t2dshirts). Matches filter chips such as Jeans or Jackets. |
| `materials` | Material facet from the website (e.g. cotton, leather, nylon, fauxleather). |
| `brands` | Brand facet from the website. e.g. Calvin Klein, Calvin Klein Jeans. |
| `onSale` | Restrict results to sale prices when the website sale filter is available. |
| `priceMin` | Minimum price for the website price slider. Must be set together with maximum price. e.g. 20 |
| `priceMax` | Maximum price for the website price slider. Must be set together with minimum price. e.g. 150 |
| `sortBy` | Listing sort from the website. recommended is the default shop ranking. |
| `extraFilters` | Advanced facet map copied from the website API, keyed by facet id (e.g. {"productgroup": "s.productgroup_jeans", "maincolour": "s.maincolour_black"}). Merged... |
| `maxItems` | Maximum number of products to scrape (0 = unlimited) |
| `proxyConfiguration` | Residential proxies are recommended for Calvin Klein catalog requests. |

### Retrieve the data through the API

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("datascrapers/calvinklein-scraper").call(run_input={
    "searchQueries": ["jeans"],
    "country": "DE",
    "language": "de",
    "maxItems": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["productId"], item["name"], item["price"])
```

This is the Apify Actor API, not a Calvin Klein API.

### Data quality and record handling

- One dataset item is one colorway. Each pushed product charges one `product` event.
- Deduplicate on `productId`.
- `scrapeProductDetails` charges one `product-details` event for each enriched product.
- Prices are the store numbers in `currency`. The Actor does not convert them.
- Colour and gender labels follow the selected storefront language.

### Pricing and cost examples

`product` and `product-details` are **$1.50 per 1,000** on the free plan. Bronze is $1.40, Silver is $1.30, and Gold is $1.20 per 1,000. Platinum and Diamond use the Gold rate. Platform usage is not billed on top of these events.

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| `product` per 1,000 | $1.50 | $1.40 | $1.30 | $1.20 |
| `product-details` per 1,000 | $1.50 | $1.40 | $1.30 | $1.20 |

A free-plan run of 1,000 products with details is $3.00 in events.

### Limitations and responsible data use

- Coverage is the public search you request, not the full catalog.
- Prices, promotions, and stock change on the store. This dataset is not a historical archive.
- You are responsible for complying with the store's terms and applicable law.

### Dataset questions

#### What does one dataset item represent?

One Calvin Klein product colorway from a search or product URL.

#### Which field should I use as a unique identifier?

Use `productId`.

#### Are fields nullable or conditional?

Yes. Detail-only fields are present when `scrapeProductDetails` is enabled and the product page returns them. `wasPrice` is present when the store sends a previous price.

#### Can I retrieve the records as CSV or JSON?

Yes. Export the default dataset as JSON, CSV, Excel, XML, or another Apify format.

#### How do I paginate large datasets?

Use `limit` and `offset` on the dataset items endpoint. `maxItems` limits how many rows the run saves.

### Related datasets from Data Scrapers

- [Cdiscount Scraper](https://apify.com/datascrapers/cdiscount-scraper)
- [Carrefour Scraper](https://apify.com/datascrapers/carrefour-scraper)
- [Back Market Scraper](https://apify.com/datascrapers/backmarket-scraper)
- [Adidas Scraper](https://apify.com/datascrapers/adidas-scraper)
- [Best Buy Scraper](https://apify.com/datascrapers/best-buy-scraper)

### Data Scrapers support

Questions about a field, a run, or an export: stardustspotlight@gmail.com.

# Actor input Schema

## `searchQueries` (type: `array`):

Product search terms to run on the selected country shop. e.g. bags, jeans, boxers. Agents can pass natural-language keywords without collecting page URLs first. Ignored for a seed when that seed is a start URL.

## `startUrls` (type: `array`):

Official Calvin Klein listing, search, or product URLs (e.g. https://www.calvinklein.de/search?searchTerm=bags or https://www.calvinklein.de/bestseller-herren). Country is inferred from the hostname when possible. Optional when searchQueries is set.

## `country` (type: `string`):

Which official Calvin Klein shop to search. These are the country stores from the site picker (Germany, UK, France, Italy, Spain, Netherlands, and other European shops). The United States and Canada use a different website and are not in this list. Used for searchQueries; startUrls override the shop from the URL host.

## `language` (type: `string`):

Shop language when the country has more than one (e.g. German or English on calvinklein.de, Dutch or French on calvinklein.be). auto uses the default language for that country.

## `scrapeProductDetails` (type: `boolean`):

When enabled, fetch full product pages in parallel (description, size variants, stock flags). Charged as a separate product-details event. Off by default.

## `detailsConcurrency` (type: `integer`):

How many product-detail requests to run at once. Each request uses a rotated proxy. Ignored when scrapeProductDetails is off.

## `gender` (type: `string`):

Gender facet from the website filters. e.g. men, women.

## `colors` (type: `array`):

Color facet values from the website (e.g. black, blue, beige, brown). Multiple values are combined.

## `sizes` (type: `array`):

Size facet values from the website (e.g. S, M, L, XL, W32). You can also paste the site query token such as s.100492_s.

## `productGroups` (type: `array`):

Product group facet from the website (e.g. jeans, jacketsandcoats, t2dshirts). Matches filter chips such as Jeans or Jackets.

## `materials` (type: `array`):

Material facet from the website (e.g. cotton, leather, nylon, fauxleather).

## `brands` (type: `array`):

Brand facet from the website. e.g. Calvin Klein, Calvin Klein Jeans.

## `onSale` (type: `boolean`):

Restrict results to sale prices when the website sale filter is available.

## `priceMin` (type: `number`):

Minimum price for the website price slider. Must be set together with maximum price. e.g. 20

## `priceMax` (type: `number`):

Maximum price for the website price slider. Must be set together with minimum price. e.g. 150

## `sortBy` (type: `string`):

Listing sort from the website. recommended is the default shop ranking.

## `extraFilters` (type: `object`):

Advanced facet map copied from the website API, keyed by facet id (e.g. {"productgroup": "s.productgroup_jeans", "maincolour": "s.maincolour_black"}). Merged on top of the named filters above.

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

Maximum number of products to scrape (0 = unlimited)

## `proxyConfiguration` (type: `object`):

Residential proxies are recommended for Calvin Klein catalog requests.

## Actor input object example

```json
{
  "searchQueries": [
    "bags"
  ],
  "startUrls": [
    {
      "url": "https://www.calvinklein.de/search?searchTerm=bags"
    }
  ],
  "country": "DE",
  "language": "auto",
  "scrapeProductDetails": false,
  "detailsConcurrency": 8,
  "gender": "any",
  "onSale": false,
  "sortBy": "recommended",
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset containing scraped Calvin Klein products

## `runStats` (type: `string`):

Record counts and timestamps for this run

# 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 = {
    "searchQueries": [
        "bags"
    ],
    "startUrls": [
        {
            "url": "https://www.calvinklein.de/search?searchTerm=bags"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascrapers/calvinklein-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 = {
    "searchQueries": ["bags"],
    "startUrls": [{ "url": "https://www.calvinklein.de/search?searchTerm=bags" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("datascrapers/calvinklein-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 '{
  "searchQueries": [
    "bags"
  ],
  "startUrls": [
    {
      "url": "https://www.calvinklein.de/search?searchTerm=bags"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call datascrapers/calvinklein-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datascrapers/calvinklein-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/LSaLMhU8SGdqWAg7d/builds/7FTRyyJHTWmuCiRnT/openapi.json
