KLEKT Sneaker & Apparel Resale Scraper
Pricing
from $1.00 / 1,000 product records
KLEKT Sneaker & Apparel Resale Scraper
Scrape sneaker and streetwear listings from KLEKT (klekt.com). Browse the catalog with filters and extract product details, prices, and availability for resale market research and price monitoring.
Pricing
from $1.00 / 1,000 product records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
KLEKT Scraper: Sneaker & Streetwear Resale Prices
KLEKT Scraper turns KLEKT (klekt.com), a sneaker and apparel resale marketplace, into structured product data. Get catalogue prices alongside the product page's own last sold price, lowest listing price and highest bid, plus brand, SKU, size, box condition and availability. Browse the site's own catalogue with real filters, paste exact product URLs, or stream the entire catalogue from the official sitemaps, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Three ways in. Browse KLEKT's own catalogue with filters, paste exact product URLs, or stream the whole catalogue from the official sitemaps. No need to build URLs by hand.
- Full market picture per product. Every record carries the catalogue asking price plus the product page's own last sold price, lowest listing price and highest bid, each under its own field, so the numbers never get mixed up.
- Six catalogue sections, correctly shaped. Trending, Drops, Upcoming, On sale, Used/pre-owned and Gift cards each map to the row shape they actually carry: product variants on Trending/Drops/Upcoming, individual listings (with size and box condition) on Used/On sale.
- Only the filters KLEKT actually applies. A filter the site would silently ignore, or apply to nothing, is dropped and reported in the run log instead of being sent for show.
- Price-accurate rows. In Browse mode the price on every record is the same number KLEKT's own price filter matched on, whether or not product-page enrichment is switched on.
- Works with zero input. Leave everything blank and it browses Trending straight away.
- Fails loudly, not quietly. A run that could not reach the source at all stops with a clear error instead of returning an empty dataset that looks like "nothing matched".
Use Cases
- Resale price tracking: compare catalogue asking prices against last sold price and highest bid to spot under or over priced listings.
- Drop and restock monitoring: watch the Drops and Upcoming sections for new releases and price movement.
- Marketplace and arbitrage research: compare KLEKT prices, by size and box condition, against other resale platforms.
- Product catalogue enrichment: pull structured brand, SKU, colorway and size data into a database or price-comparison tool.
- Pre-owned market research: track Used and On-sale listings by box condition and listing type.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
id | "a1b2c3d4-1111-2222-3333-000000000000" |
type | "catalog_product_variant" (also "catalog_listing", "gift_card") |
name | "Sample Runner 1 'Example' (2024)" |
brand | "Sample Brand" (from the product page; catalogue rows carry no brand) |
sku | "XX1234-000" |
slug | "sample-runner-example-2024" |
url | KLEKT link to the product or, on Used/On sale, the individual listing |
description | product description text (detail enrichment only) |
colorway | "Sample/White" |
size / sizeCategory | "US 9" / "Men" (Used and On sale rows only) |
boxCondition | "good" (Used and On sale rows only) |
listingType | "used" (Used section only) |
availability | "InStock" |
priceAmount / priceCurrency | 134.0 / "EUR": the catalogue asking price (in the two URL modes, the lowest live listing, else the last sale) |
lastSoldPrice | 162.4: the most recent completed sale (from the catalogue row when it carries one, refreshed from the product page) |
lowestListingPrice / lowestListingSize | 136.5 / "US 9" (detail enrichment only) |
highestBid | 101.0 (detail enrichment only, when the page shows one) |
releaseYear | "2024" |
imageUrl | catalogue thumbnail |
images | product-page photo list (detail enrichment only) |
seller | "KLEKT" (detail enrichment only; KLEKT authenticates every sale itself) |
model | product-page model name (detail enrichment only) |
detailScraped | true once the product page was fetched, else false |
How to Use
- Pick a Scrape mode: Browse the catalogue (default), Product URLs, or Full catalogue via sitemaps.
- For Browse, choose a catalogue section and any filters (brand, size, box condition, price range). For Product URLs, paste one KLEKT product page URL per line.
- Set Max items to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Browse Trending, the default:
{"mode": "browse","strategy": "trending","maxItems": 20}
Browse Used listings, filtered by brand, box condition and price:
{"mode": "browse","strategy": "used","brand": "Nike","boxCondition": "good","priceFrom": 80,"priceTo": 200,"maxItems": 30}
Scrape specific product pages:
{"mode": "product-urls","productUrls": ["https://klekt.com/product/new/sample-runner-example-2024"]}
Stream the full catalogue from the official sitemaps:
{"mode": "sitemap","maxItems": 500}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/klekt-com-scraper").call(run_input={"mode": "browse", "strategy": "trending", "maxItems": 20})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["name"], product.get("priceAmount"), product.get("priceCurrency"))
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/klekt-com-scraper').call({ mode: 'browse', strategy: 'trending', 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.
About the browse filters
The filters under Browse filters apply to Browse mode only; Product URLs mode and Full catalogue mode fetch specific product pages, so nothing in that section changes what they return. A Size value is dropped unless a Size system is chosen too (KLEKT only applies the pair). Listing type only narrows on the Used section; elsewhere it is dropped. An unrecognised Availability or Catalogue section value is replaced or dropped, since KLEKT would otherwise return its whole catalogue. The Gift cards section ignores every catalogue filter, so a filtered Gift cards run returns the whole section. Every drop is reported in the run log.
Tip: Max items, Max pages, and a fast-moving catalogue
Max items stops the run once that many products have been returned (0 = unlimited). Max pages is a safety bound on how many catalogue pages Browse walks (20 products per page); the walk also stops on its own at the natural end of a section, or when a page repeats products already collected earlier in the same run.
That repeat check compares each page against every product seen so far in the run, not just the page before it. KLEKT's section order is stable while nothing changes, but if the section is re-ranked while a long Browse walk is in progress, or a burst of new listings lands ahead of the walk, a later page can come back holding only products the run already collected. The walk treats that as the end and stops, even though further pages may still hold new products. The deeper into a section the walk already is, the more likely this becomes, so it mainly affects large, unfiltered runs (a large Max items with no narrowing filters) and tends to cut off the tail of the section. The run log then says the page "repeated the previous page's products". If a run seems to stop short of Max items, narrow with filters to shorten the walk, or run it again.
Send results into your apps (MCP connectors)
Optionally pipe scraped KLEKT products into the apps you already use via Model Context Protocol (MCP) connectors (Notion, Linear, Airtable, Apify). 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. Each item becomes one entry with a title and its key fields flattened to plain text. 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 have not authorized a connector yet.)
- For Notion, also set Notion parent page to the page where products should be created.
Use Max products to export per connector to cap how many are sent; that number is what is actually delivered. The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials, and a connector error is logged as a warning without failing or stalling the run. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | browse | browse, product-urls, or sitemap. |
productUrls | array | [] | KLEKT product page URLs, one per line (Product URLs mode). |
strategy | string | trending | Catalogue section to walk: trending, used, sale, drops, upcoming, or gift_cards (Browse mode). |
brand | string | "" | Filter to one brand, written the way KLEKT displays it (Browse mode). |
brandLine | string | "" | Optional narrower model family inside a brand (Browse mode). |
productCategory | string | "" | Sneakers, Streetwear, or Accessories. Leave empty for any. |
sizeCategory | string | "" | Men, Women, Youth, or Default. Leave empty for any. |
sizeMetric | string | "" | Size system for size (e.g. US, UK, EU, CM). Required together with size. |
size | string | "" | One size in the chosen sizeMetric, exactly as KLEKT writes it. Ignored without sizeMetric. |
boxCondition | string | "" | good, missing_lid, damaged, no_box, or replacement_box. |
listingType | string | "" | used or new_with_defect. Only narrows on the Used section. |
availability | string | "" | 0 (Available), 1 (Express dispatch), or 2 (Used available). |
priceFrom | integer | (none) | Minimum price in whole euros. |
priceTo | integer | (none) | Maximum price in whole euros. |
fetchDetails | boolean | true | Fetch each product's own page for the full record. Browse mode only; always on in Product URLs and Full catalogue mode. |
maxItems | integer | 50 | Stop after this many products (0 = unlimited). |
maxPages | integer | 200 | Safety bound on catalogue pages walked in Browse mode. |
proxy | object | Apify Proxy | Connection settings. |
mcpConnectors | array | [] | Optional: send a summary of each product to apps you authorized under Integrations. |
notionParentPageUrl | string | "" | Notion connector only: page under which products are created. |
maxNotifyListings | integer | 50 | Cap on products written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"id": "a1b2c3d4-1111-2222-3333-000000000000","type": "catalog_product_variant","name": "Sample Runner 1 'Example' (2024)","brand": "Sample Brand","sku": "XX1234-000","slug": "sample-runner-example-2024","url": "https://klekt.com/product/new/sample-runner-example-2024","description": "Sample product description text.","colorway": "Sample/White","availability": "InStock","priceAmount": 134.0,"priceCurrency": "EUR","lastSoldPrice": 162.4,"lowestListingPrice": 136.5,"lowestListingSize": "US 9","highestBid": 101.0,"releaseYear": "2024","imageUrl": "https://images.klekt.com/sample/thumb.jpg","images": ["https://images.klekt.com/sample/1.jpg","https://images.klekt.com/sample/2.jpg"],"seller": "KLEKT","detailScraped": true}
Plan Requirement
The default proxy setting works out of the box. Whichever proxy groups you select under Connection are the ones used, and turning Apify Proxy off connects directly. For large or frequent runs, a residential group gives more headroom.
FAQ
How much does it cost?
You pay per product returned, plus a smaller charge for each product page fetched when detail enrichment is on. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape KLEKT?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow KLEKT's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product prices and availability are generally facts, but photos and descriptions may be subject to third-party rights.
Can I run this on a schedule to track price changes?
Yes, schedule it from the Schedules tab. Each run is independent: there is no built-in incremental mode, so every scheduled run returns the full result set for its input (deduplicated by product id within that run), not just what changed since the last run. Build change-tracking in your own pipeline by comparing datasets across runs, or narrow the input (a single brand, price range, or section) to keep each run small.
Why did my run return fewer products than Max items?
A few reasons: the catalogue section, brand or size combination genuinely has fewer matching products than requested; a filter you set was dropped because KLEKT would have ignored it (check the run log for a note); or, rarely, the section was re-ranked or received a burst of new listings mid-run, so a later catalogue page came back holding only products already collected earlier in the same run, which the walk treats as reaching the end (the log says the page "repeated the previous page's products"). That last case mostly affects large, unfiltered runs deep into a section; re-running, or narrowing with filters, works around it.
Why does brand come back empty on some products?
KLEKT's catalogue rows carry no brand field at all. With Fetch product details on (the default in Browse, and always on in the other two modes), it is filled from the product page. With it off in Browse mode, catalogue-only rows have no brand. Pre-owned listing pages also do not publish a brand, so it can stay empty on Used and On sale rows even with detail fetching on.
Why did my run fail instead of returning an empty dataset?
If every request to KLEKT is refused, the run stops with a clear error so "no products matched" is never confused with "the source could not be reached". Run it again in a few minutes, or try a different proxy group.
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:
| 👗 KREAM Korea Scraper Scrape KREAM (kream.co.kr) sneaker and fashion resale data by keyword search, filters... | 👗 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... | 👗 ZOZOTOWN Scrape ZOZOTOWN (zozo.jp), Japan's largest fashion marketplace: name, brand, JPY price... |
| 🏷️ ThredUp Scraper Scrape ThredUp resale listings by keyword, department, brand, size, condition, price or... | 👗 Poshmark Scraper Scrape Poshmark fashion-resale listings: keyword search, brand and category browse, sold... |
💬 Support & custom scrapers
- 🐞 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 abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.