KREAM Scraper - Sneakers, Prices, Bids & Market Data
Pricing
from $1.50 / 1,000 product results
KREAM Scraper - Sneakers, Prices, Bids & Market Data
Scrape KREAM (kream.co.kr) sneaker and fashion resale data by keyword search, filters, sorts, or product URLs. Extract 34+ fields, including lowest ask, highest bid, market price, premium, retail price, style code, sizes, and optional price history.
Pricing
from $1.50 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
24
Total users
4
Monthly active users
13 days ago
Last modified
Categories
Share
KREAM Scraper: Sneaker & Streetwear Resale Prices
KREAM Scraper turns KREAM (kream.co.kr), Korea's sneaker and streetwear resale marketplace, into a clean pricing data feed. Search by keyword or paste product and search links to get lowest ask, highest bid, market price, premium, retail price, style code, release date, sizes and wish counts for every result, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to find products. Search by keyword, or paste KREAM product and search links directly.
- Market data on every result. Lowest ask, highest bid, market price, last sale, premium and total sales come back with the base listing, no separate detail fetch needed.
- Full listing detail out of the box. Style code, colorway, release date, retail price, every size and the full image set are already included.
- Optional deep detail. Turn on Fetch full details for price history, per-size ask/bid inventory and recent sales, asks and bids, plus up to 100 reviews per product nested on the row.
- Eleven sort orders and five filters. Order by popularity, price, premium, wish count or release date, and narrow by quick delivery, below-retail, sold-out status, category or gender, in either mode.
- Built for schedules. Incremental mode returns only new and changed products on recurring runs, and a refused run ends with a clear BLOCKED status message, so it is never mistaken for a search with no matches.
- Resume large crawls. Continue an interrupted or capped run without paying twice for products already collected.
Use Cases
- Resale price tracking and arbitrage: watch lowest ask, highest bid and premium across sneakers and streetwear to spot mispriced listings.
- Market research and trend analysis: build historical datasets of prices, wish counts and sales volume by brand or category.
- Drop and release monitoring: track new releases and price movement in the period after launch.
- Inventory and pricing tools: feed live ask/bid data into a reseller's own pricing or listing tool.
- Fashion and sneaker media: source current market prices and premiums for articles and price guides.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
productId | 30001 |
url | KREAM link to the product |
productName / productNameKo | "Nike Dunk Low Retro Black" / "나이키 덩크로우 레트로 블랙" |
brand / brandId | "Nike" / 1 |
category / categoryName | "sneakers" / "스니커즈" |
styleCode | "DD1391-100" |
colorway / gender | "BLACK/WHITE" / "men" |
releaseDate | "2024-01-20" |
retailPrice / retailPriceFormatted | 109000 / "109,000원" |
productNameEn / productUrl / modelNumber / releasePrice / price | Alias names for drop-in use: same values as productName / url / styleCode / retailPrice / lowestAsk |
currency | "KRW" |
imageUrl / imageUrls | main product photo / the full image set |
lowestAsk / highestBid | 135000 / 128000 |
marketPrice / lastSalePrice | 132000 / 130000 |
totalSales | 842 |
changeValue / changePercentage | 2000 / 1.5 |
premium / premiumPercentage | 26000 / 23.9 |
hasImmediateDelivery | true |
wishCount / reviewCount / haveCount | 5210 / 312 / 890 |
isActive / isTradable | true / true |
sizes / sizeOptions | ["250","260","270","280"] / per-size id, key and display name |
priceHistory / inventoryBySize | price series by time span and per-size ask/bid (when Fetch full details is on, and always for pasted product URLs) |
recentSales / recentAsks / recentBids | most recent trade rows (when Fetch full details is on, and always for pasted product URLs) |
reviews | nested review rows, each with reviewId, reviewer, reviewerId, rating, purchasedSize, wearerInfo, fitSurvey, reviewDate, helpfulCount (and text when a review carries free text). Added when Fetch full details is on and Reviews per product is above 0. KREAM reviews are a rating plus a size and fit survey, so most carry no free-text body and none carry seller replies |
changeType / changedFields / firstSeenAt / lastSeenAt | "NEW" / [] / run timestamps (incremental mode only) |
Prices are in KRW. A product marked EXPIRED (incremental mode only) carries the same fields as its last successful scrape, unchanged, plus the changeType and timestamp fields above.
Output views
The Output tab offers four tables: Products (overview), Detail (price history, per-size ask/bid and recent sales, asks and bids; filled when detail mode is on), Reviews (the nested reviews; filled when detail mode is on and Reviews per product is above 0) and Changes (change type, changed fields, first and last seen; filled in incremental mode).
How to Use
- Pick a mode:
search(by keyword) orurl(paste KREAM product or search links). - Fill in keywords or URLs, and set the sort and filters you want; they apply in both modes.
- Turn on Fetch full details if you need price history and per-size inventory, and set Max items to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
URL mode: supported links
URL mode behaviour change: the urls field now ships with one example of every supported link type below, so a URL-mode run started with the field untouched scrapes one example of each (7 sources) instead of a single product. Clear the field and paste your own links to scrape only those.
| Link type | Example | What you get |
|---|---|---|
| Keyword search | https://kream.co.kr/search?keyword=nike | Matching products, paged automatically |
| Korean keyword (percent-encoded or plain) | https://kream.co.kr/search?keyword=%EB%82%98%EC%9D%B4%ED%82%A4 | Matching products |
| Search with category | https://kream.co.kr/search?keyword=nike&category_id=1 | Products narrowed to that KREAM category id |
| Search with sort and tab | https://kream.co.kr/search?keyword=nike&sort=date_released&tab=products | Products in the sort written in the link (gender works the same way) |
| Product page | https://kream.co.kr/products/23879 | One product in full detail |
| Product page with size (not in the default list) | https://kream.co.kr/products/23879?size=270 | The same product in full detail; the size query is ignored and the log says so |
| Search on the www host | https://www.kream.co.kr/search?keyword=jordan&tab=products | Matching products (the www host is treated like kream.co.kr) |
| Brand page | https://kream.co.kr/brands/nike | The brand's products, paged automatically |
A sort, category id or gender written inside a link applies to that link only and wins over the matching input field; the other sort and filter fields still apply. A page=N (or cursor=N) in a search link starts at that page, and because earlier pages are not scanned it is not a full scan, so it never produces EXPIRED rows; a shop_category_id in a search link is ignored and the log says so (use category_id or the Category input). Links to other KREAM pages (the home page, exhibitions, old category paths) are skipped and the log says so. A run where any link was skipped or could not be resolved (an unsupported page, or a brand link whose brand is not found in KREAM's brand list) is not a full scan, so it never produces EXPIRED rows either.
Basic keyword search:
{"mode": "search","keywords": ["nike dunk", "jordan 1"],"maxItems": 20}
Filtered search: below retail, in stock, quick delivery:
{"mode": "search","keywords": ["stussy"],"belowRetail": true,"excludeSoldOut": true,"quickDelivery": true,"sort": "premium_low","maxItems": 30}
Paste KREAM product and search links:
{"mode": "url","urls": ["https://kream.co.kr/products/23879","https://kream.co.kr/search?keyword=asics"],"maxItems": 40}
Daily incremental monitoring with full detail:
{"mode": "search","keywords": ["yeezy"],"fetchDetails": true,"incrementalMode": true,"stateKey": "yeezy-daily","maxItems": 100}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/kream-scraper").call(run_input={"mode": "search", "keywords": ["nike dunk"], "maxItems": 20})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["productName"], product["lowestAsk"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/kream-scraper').call({ mode: 'search', keywords: ['nike dunk'], maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted or capped run: paste its run or dataset ID and the actor skips every product already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduled runs over the same search or URLs. Each product is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED. A product only becomesREAPPEAREDif an earlier run had already marked itEXPIRED;EXPIREDitself is only produced after a run that reached the natural end of the tracked search, withemitExpiredon, not capped by Max items, not a Resume, not blocked, with every link starting at page 1, and with every link scanned (none skipped or unresolved).UPDATEDcompares every output field with the previous run (price, ask, bid and wish-count moves are real signal; the alias fieldsproductNameEn,productUrl,modelNumber,releasePriceandpriceare not compared on their own because they mirrorproductName,url,styleCode,retailPriceandlowestAsk, which are compared; nothing else is excluded by default) andchangedFieldslists what moved.ignoreFieldsForChangesexcludes noisy fields (top-level names or dotted paths for nested ones) from that comparison while keeping them in the output; editing it never causes a one-time wave ofUPDATEDrows.stateKeynames or shares the stored state; leave it empty to derive one automatically from the search scope (keywords or URLs, sort, filters and Fetch full details; Max items and Max pages are output caps and don't affect the key). Nestedreviewsare compared like any other field (addreviewstoignoreFieldsForChangesto keep review churn from marking a productUPDATED); the first run that starts deliveringreviewsfor products already tracked does not report them asUPDATED. With incremental mode off, output is exactly as before.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each product, not the full JSON record. For Notion, each item becomes its own page with its name, brand, style code, lowest ask, highest bid, retail price, premium, release date, wish count and URL. Other connectors receive one combined digest of up to 25 items. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword) or url (paste KREAM URLs). |
keywords | array | ["nike"] | Search terms. Search mode only; in URL mode the keyword is read from each pasted search URL instead. |
urls | array | one example of each supported link type (see the URL mode table) | KREAM product, search or brand links (url mode). |
sort | string | popularity | Order results: popularity, lowest_ask, highest_bid, wish, style_tags (most reviewed), date_released, discount_rate, premium_high, premium_low, male_popularity, female_popularity. Applies in both search mode and URL mode. |
quickDelivery | boolean | false | Only products with KREAM Quick Delivery stock. Applies in both search mode and URL mode. |
belowRetail | boolean | false | Only products whose lowest ask is below retail. Applies in both search mode and URL mode. |
excludeSoldOut | boolean | false | Drop products with no live ask. Applies in both search mode and URL mode. |
category | string | none | Optional KREAM category slug (e.g. sneakers). Applies in both search mode and URL mode. |
gender | string | none (Any) | men, women, kids, or leave empty for any. Applies in both search mode and URL mode. |
fetchDetails | boolean | false | Add price history, per-size ask/bid inventory and recent sales/asks/bids. |
maxReviewsPerProduct | integer | 20 | Only with fetchDetails. Reviews nested on each product row under reviews; 0 skips reviews; clamped to a maximum of 100 (20 are served per request, so the default costs one extra request per product). |
maxItems | integer | 20 | Stop after this many products across all keywords/URLs. 0 = unlimited; the schema accepts up to 100000. |
maxPages | integer | 0 | Safety bound on result pages walked per keyword. 0 = no page limit; the run still stops at Max items. |
resumeFromRunId | string | none | Continue one interrupted or capped run without re-collecting products already returned there. |
incrementalMode | boolean | false | Return only new and changed products on recurring runs of the same search. |
stateKey | string | none | Name or share an incremental-mode monitoring campaign. Leave empty to derive one from the search scope. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) products marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return (and bill) products marked EXPIRED, only after a run that fully scanned the tracked search. |
ignoreFieldsForChanges | array | [] | Incremental mode only. Field names, or dotted paths for nested fields, to exclude from UPDATED detection and changedFields. The field stays in the output. |
proxy | object | Apify Residential | Connection settings. |
mcpConnectors | array | none | Optional: send a summary of each product to apps you authorized under Integrations. |
notionParentPageUrl | string | none | Notion connector only: page under which items are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run (non-Notion digests are further limited to 25). |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"productId": 30001,"url": "https://kream.co.kr/products/30001","productName": "Nike Dunk Low Retro Black","productNameKo": "나이키 덩크로우 레트로 블랙","brand": "Nike","brandId": 1,"category": "sneakers","categoryName": "스니커즈","styleCode": "DD1391-100","colorway": "BLACK/WHITE","gender": "men","releaseDate": "2024-01-20","retailPrice": 109000,"retailPriceFormatted": "109,000원","currency": "KRW","imageUrl": "https://image.kream.co.kr/products/30001/main.jpg","imageUrls": ["https://image.kream.co.kr/products/30001/main.jpg"],"lowestAsk": 135000,"highestBid": 128000,"marketPrice": 132000,"lastSalePrice": 130000,"totalSales": 842,"changeValue": 2000,"changePercentage": 1.5,"premium": 26000,"premiumPercentage": 23.9,"hasImmediateDelivery": true,"wishCount": 5210,"reviewCount": 312,"haveCount": 890,"isActive": true,"isTradable": true,"sizes": ["250", "260", "270", "280"],"sizeOptions": [{ "id": 1, "key": "270", "name": "270", "displayName": "270" }]}
Plan Requirement
KREAM gates its product API by request headers rather than by country, so no Korea pin is needed. Both datacenter and residential connections load most pages, so no particular proxy plan is required to try the actor. Apify Residential is optional and is still the default, because it is the most consistent; a few requests (for example some sorted or filtered result pages) can stall on a datacenter connection.
If the selected connection is unavailable to your run (for example Apify free plans, which do not include residential proxies), the run continues on a backup connection and the log says so:
The selected connection is unavailable to this run.followed byContinuing on a backup connection; some pages may still be unavailable.Served over the backup connection (the default connection was unavailable).once a page loads that way.
If no page can be loaded at all, the run ends as failed with one of these messages instead of finishing with an empty dataset:
The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required.No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested KREAM pages.Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later.
You can also choose another connection or your own proxy URLs under Proxy configuration.
FAQ
How much does it cost?
You pay per product returned, plus a small per-run start fee. Detail enrichment is billed when Fetch full details is on, and for every pasted product URL, which always returns full detail. Reviews are billed on that same detail-enrichment event: one extra unit for every full or partial block of 10 reviews actually delivered on a returned product row (20 reviews = 2 extra units), counted only after the row is returned, never for a product that incremental mode suppresses as unchanged and never for reviews that were not delivered; set Reviews per product to 0 to turn reviews off. The Pricing tab on the actor page shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape KREAM?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow KREAM's terms and the laws that apply to you, and get legal advice before any commercial redistribution. Prices and stock levels reflect the moment the run was made, not a live feed.
Can I get only new or changed prices on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, since a price, ask, bid or wish-count move is real signal on a resale marketplace, not noise, and unchanged products are not billed unless you turn on Emit unchanged.
Do the sort and filter fields work when I paste a search link?
Yes. sort, quickDelivery, belowRetail, excludeSoldOut, category and gender all apply in both search mode and URL mode: a pasted KREAM search URL is re-run through KREAM's search with them applied. The one exception is a pasted product URL, which always returns that single product in full, unfiltered.
How do I tell a blocked run from a search with no matches?
If KREAM keeps refusing requests, the run stops early and its status message reads 0 listings (BLOCKED), while a genuine empty search reads 0 listings (ZERO_RESULTS). Products collected before a block are kept. Switch the connection to Apify Residential and run it again.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more fashion data?
Pair this actor with these related scrapers from the same team:
| 👗 GOAT Scraper Scrape GOAT (goat.com), the sneaker and streetwear resale marketplace. Search or paste... | 👗 StockX Scraper Scrape StockX market data by keyword, category or URL. Every row carries lowest ask... |
| 👗 SNKRDUNK Scraper Scrape SNKRDUNK (snkrdunk.com), Japan's sneaker and streetwear resale marketplace: JP and... | 👗 KLEKT Sneaker & Apparel Resale Scraper Scrape sneaker and streetwear listings from KLEKT (klekt.com). Browse the catalog with... |
| 🏷️ Curtsy Fashion Resale Scraper Scrape Curtsy, the US secondhand fashion marketplace: listings with brand, size, list vs... | 👗 Showpo Scraper Scrape Showpo women's fashion by keyword, collection or URL. Extract product prices... |
💬 Support
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.