KLEKT Sneaker & Apparel Resale Scraper avatar

KLEKT Sneaker & Apparel Resale Scraper

Pricing

from $1.00 / 1,000 product records

Go to Apify Store
KLEKT Sneaker & Apparel Resale Scraper

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

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 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 (brand, category, price, On sale), 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.
  • Listing-level catalogue cards. Every catalogue row is an individual marketplace listing carrying its own price, size, box condition, condition badge, seller and likes count - and every listing URL opens its own product page for enrichment.
  • 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 the full catalogue 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.
  • New-release monitoring: sort the catalogue by the freshest listings and watch prices move from day one.
  • 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.
  • Sale and pre-owned research: track the On sale section and per-listing box condition and condition badges.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id"a1b2c3d4-1111-2222-3333-000000000000"
type"catalog_listing" (every catalogue row is an individual listing)
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"
urlKLEKT link to the product or, on Used/On sale, the individual listing
descriptionproduct description text (detail enrichment only)
colorway"Sample/White"
size"US 9" (every catalogue card carries its own size)
boxCondition"good" (on the catalogue card, from the listing)
condition"Deadstock / New" (the listing's own condition badge)
likesCount / postedAgo424 / "17m ago" (catalogue card only)
priceAmount / priceCurrency134.0 / "EUR": the catalogue asking price (in the two URL modes, the lowest live listing, else the last sale)
lastSoldPrice162.4: the most recent completed sale (from the catalogue row when it carries one, refreshed from the product page)
lowestListingPrice / lowestListingSize136.5 / "US 9" (detail enrichment only)
highestBid101.0 (detail enrichment only, when the page shows one)
releaseYear"2024"
imageUrlcatalogue thumbnail
imagesproduct-page photo list (detail enrichment only)
seller"KLEKT" (detail enrichment only; KLEKT authenticates every sale itself)
modelproduct-page model name (detail enrichment only)
detailScrapedtrue once the product page was fetched, else false

How to Use

  1. Pick a Scrape mode: Browse the catalogue (default), Product URLs, or Full catalogue via sitemaps.
  2. For Browse, choose a catalogue section and any filters (brand, product category, price range). For Product URLs, paste one KLEKT product or listing page URL per line.
  3. Set Max items to control run size and cost, then click Start.
  4. 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 the On sale section for one brand and price band:

{
"mode": "browse",
"strategy": "sale",
"brand": "Nike",
"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 ApifyClient
client = 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. Since KLEKT rebuilt its storefront (October 2026), the catalogue narrows server-side on Brand (written the way KLEKT displays it, e.g. Nike), Product category, Minimum/Maximum price (whole euros) and the On sale section. The size, box-condition, listing-type, availability and brand-line options no longer have a server-side filter on the rebuilt catalogue, so setting one drops it with a note in the run log rather than sending it for show - the listing cards themselves still carry each listing's size, box condition and condition badge. Naming any section other than On sale (Trending, Used, Drops, Upcoming, Gift cards) walks the full catalogue and says so in the run log; an unrecognised section value is replaced with the default. 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 (18 listing cards 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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you have not authorized a connector yet.)
  3. 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

ParameterTypeDefaultDescription
modestringbrowsebrowse, product-urls, or sitemap.
productUrlsarray[]KLEKT product page URLs, one per line (Product URLs mode).
strategystringtrendingCatalogue section to walk (Browse mode). Only sale narrows as its own section since the storefront rebuild; the other names walk the full catalogue and say so in the run log.
brandstring""Filter to one brand, written the way KLEKT displays it (Browse mode).
brandLinestring""Optional narrower model family inside a brand (Browse mode).
productCategorystring""Sneakers, Streetwear, or Accessories. Leave empty for any.
sizeCategorystring""Men, Women, Youth, or Default. Dropped with a run-log note (the rebuilt catalogue has no server-side size filter).
sizeMetricstring""Size system for size (e.g. US, UK, EU, CM). Dropped with a run-log note (no server-side size filter).
sizestring""One size in the chosen sizeMetric, exactly as KLEKT writes it. Dropped with a run-log note (no server-side size filter).
boxConditionstring""good, missing_lid, damaged, no_box, or replacement_box.
listingTypestring""used or new_with_defect. Dropped with a run-log note (no server-side listing-type filter).
availabilitystring""0 (Available), 1 (Express dispatch), or 2 (Used available). Dropped with a run-log note (no server-side availability filter).
priceFrominteger(none)Minimum price in whole euros.
priceTointeger(none)Maximum price in whole euros.
fetchDetailsbooleantrueFetch each product's own page for the full record. Browse mode only; always on in Product URLs and Full catalogue mode.
maxItemsinteger50Stop after this many products (0 = unlimited).
maxPagesinteger200Safety bound on catalogue pages walked in Browse mode.
proxyobjectApify ProxyConnection settings.
mcpConnectorsarray[]Optional: send a summary of each product to apps you authorized under Integrations.
notionParentPageUrlstring""Notion connector only: page under which products are created.
maxNotifyListingsinteger50Cap 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.

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:

👗 GOAT Scraper
Scrape GOAT (goat.com), the sneaker and streetwear resale marketplace. Search or paste...
👗 KREAM Scraper
Scrape KREAM (kream.co.kr) sneaker and fashion resale data by keyword search, filters...
👗 SNKRDUNK Scraper
Scrape SNKRDUNK (snkrdunk.com), Japan's sneaker and streetwear resale marketplace: JP and...
👗 StockX Scraper
Scrape StockX market data by keyword, category or URL. Every row carries lowest ask...
🏷️ Poshmark Scraper
Scrape Poshmark fashion-resale listings: keyword search, brand and category browse, sold...
👗 Showpo Scraper
Scrape Showpo women's fashion by keyword, collection or URL. Extract product prices...

👉 Browse all abotapi scrapers

💬 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.