Kohl's Scraper icon

Kohl's Scraper

Scrape Kohl's (kohls.com) products by keyword search or category browsing. Extract product names, brands, prices, descriptions, ratings, customer…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Kohl's Scraper at a glance

Kohl's Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes product id, title, brand, price and price max, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Other
Pricing
$2.00 per 1,000 results (Free plan), from $1.60 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
19 options

Scrape Kohl's (kohls.com) products by keyword search or category browsing. Extract product names, brands, prices, descriptions, ratings, customer reviews and detailed product information. Ideal for price comparison, competitor analysis, product research and retail market intelligence.

What Kohl's Scraper can do

  • Two ways in. Point it at keyword searches, or paste any storefront links - search pages, category/catalog pages and product pages all walk with the same grammar.
  • Deep product records. Every listing row carries title, price (with sale and was-price ranges), rating, review count, badges and the full colorway list; detail enrichment adds the description, brand, per-variant SKUs, availability, sizes, image gallery and breadcrumbs.
  • Customer reviews included. Rating summary, star distribution and up to 20 review texts per product, with verified-purchaser and fit/size feedback fields.
  • Scheduled-run friendly. Incremental mode classifies every product NEW / UPDATED / UNCHANGED / EXPIRED across runs, so a daily monitor pushes only what moved, and resume mode continues an interrupted walk exactly where it stopped.
  • Fast and light. The actor reads the storefront's own page data directly over US connections, a few seconds per page, and moves to a fresh connection automatically when one is refused.

Choose what to collect

These inputs let you configure Kohl's Scraper - Products, Prices, Ratings & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringSearch mode walks keyword search result pages. Links mode walks the storefront links you paste: search pages, category pages and product pages.

Choices: search, urls

searchTermsarrayKeyword searches to walk (search mode). Each term walks its result pages in order.
urlsarrayLinks to walk (links mode): keyword search pages, category/catalog pages and product pages. Bare search/catalog/product links all work.
fetchDetailsbooleanRead each product's detail page: description, brand, per-variant SKUs, availability, colors (with out-of-stock markers), sizes, image gallery, breadcrumbs and specs. Billed per enriched record.
fetchReviewsbooleanCollect customer reviews per product (rating summary, distribution and up to Max reviews review texts). Billed per record that delivered reviews.
maxReviewsintegerCap on review texts collected per product (values above 1000 are treated as 1000). 0 skips review texts (rating summary still fetched with Fetch reviews on).
resumeFromRunIdstringInternal: continues an interrupted run. Records already collected by that run are skipped, and the walk picks up where it stopped.
Show 12 more inputs
More input fields
InputWhat it controls
incrementalModebooleanTrack changes across scheduled runs: each product is classified NEW, UPDATED, UNCHANGED or EXPIRED against the previous run of the same scope, and unchanged rows are suppressed unless you ask for them. Rows from search and category pages compare only the fields on the listing card: title, price, price range, was price, discount, price label, rating, review count, image, badges and colours. Pasted product links compare the full product-page record (availability, colours out of stock, sizes, specs, sellers, description and categories as well). A change in a compared field marks the row UPDATED and lists it in changedFields. Never compared (kept in the output): reviews, scrape time, grid position and list name. Use Change scope to narrow the comparison to price and availability.
stateKeystringInternal: names the incremental baseline so several differently-scoped runs can track separately. Empty derives the key from the run's scope.
emitUnchangedbooleanIncremental mode: also emit rows whose tracked fields did not change (changeType UNCHANGED) instead of suppressing them.
emitExpiredbooleanIncremental mode: emit EXPIRED rows for tracked products that disappeared from a complete scan of the scope.
expireAfterMissedScansintegerIncremental mode with Emit expired records: a product is marked EXPIRED only after it was missing from this many consecutive complete scans. 1 expires it at the first complete scan that misses it. EXPIRED means the product dropped out of the scanned listing; without opening its page a listing drop and a delisting cannot be told apart, so use the price and availability fields for stock.
changeScopestringIncremental mode: all compares every field. priceAndStock marks a row UPDATED only when its price, was price, discount or price label moved; availability and colours out of stock are tracked only on pasted product-link rows (search and category rows carry no stock data when they are compared). Title, images, badges, descriptions and other metadata never create an UPDATED row. Changing the scope changes the automatic state key, so the first run under a new scope is all NEW; set a State key to keep one baseline.

Choices: all, priceAndStock

compactUpdatesbooleanIncremental mode: UPDATED and EXPIRED rows carry only identifiers, the current price and availability, priceChanges (old/new per moved field) and variantChanges. NEW rows stay full. Product-page and review fees are not charged on a compact row, because it no longer carries that data.
ignoreFieldsForChangesarrayIncremental mode: field names that never decide UPDATED or appear in changedFields. They stay in the output. Use a plain name (rating) or a dotted path (offers.price) for a key inside every element of a list.
mcpConnectorsarrayInternal: connector ids that receive the run's records as they push.
notionParentPageUrlstringInternal: parent page for the Notion connector.
maxNotifyListingsintegerInternal: cap on records sent to connectors per run.
maxItemsintegerMaximum records this run may push. Values above 100000 are treated as 100000. 0 means the 100000 cap.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

productIdProduct ID (text)
titleTitle (text)
brandBrand (text)
pricePrice (number)
priceMaxPrice max (number)
wasPriceWas price (number)
discountPercentDiscount % (number)
ratingRating (number)
reviewsCountReviews (number)
availabilityAvailability (text)
colorsColors (json)
badgesBadges (json)
Show 30 more fields
positionPosition (number)
urlURL (link)
descriptionDescription (text)
skuSKU (text)
skusSKUs (json)
colorsOutOfStockColors out of stock (json)
sizesSizes (json)
specsSpecs (json)
imageUrlImage (link)
imageUrlsImages (json)
breadcrumbsBreadcrumbs (json)
categoryPathCategory path (json)
departmentDepartment (text)
categoryCategory (text)
subcategorySubcategory (text)
reviewsreviews
idReview ID (text)
textReview text (text)
authorAuthor (text)
locationLocation (text)
submissionTimeSubmitted (text)
verifiedPurchaserVerified (boolean)
isRecommendedRecommended (boolean)
helpfulVotesHelpful votes (number)
fitFit (text)
sizeSize feedback (text)
changeTypeChange (text)
changedFieldsChanged fields (json)
firstSeenAtFirst seen (text)
lastSeenAtLast seen (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordId": "kohls:7327369",
  "productId": "7327369",
  "title": "Nike V5 RNR Women's Running Shoes",
  "brand": "Nike",
  "price": 95,
  "priceMax": null,
  "wasPrice": null,
  "currency": "USD",
  "rating": 4.2,
  "reviewsCount": 468,
  "badges": [
    "Best Seller"
  ],
  "colors": [
    "Pink Black",
    "White",
    "Silt Red"
  ],
  "availability": "InStock",
  "url": "https://www.kohls.com/product/prd-7327369/nike-v5-rnr-womens-running-shoes.jsp"
}

Ways to use this data

  • Who: pricing teams tracking Kohl's promos on competitive assortments - sale and was-price ranges land per row, updated per scheduled run.
  • Who: sellers and brands auditing their shelf - badges (Best Seller, clearance), colorway coverage, availability and review velocity per product.
  • Who: analysts building category datasets - walk any catalog page with the same card grammar and export straight to CSV/Excel or a warehouse.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Kohl's Scraper return?

The documented output for Kohl's Scraper includes product id, title, brand, price, price max, was price, discount % and rating. Availability of each field depends on the source page and the selected mode.

How much does Kohl's Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

How do I run Kohl's Scraper - Products, Prices, Ratings & Reviews?

Open the actor on Apify, review the input form and current pricing, then run it with your chosen input. Inspect the output before using it in a larger workflow.

Where can I request a different source or output?

Contact us with the source URLs, fields you need and expected collection frequency. We can discuss a custom scraper or data pipeline.

Ready to collect with Kohl's Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.