Kleinanzeigen Real Time Data Scraper avatar

Kleinanzeigen Real Time Data Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Kleinanzeigen Real Time Data Scraper

Kleinanzeigen Real Time Data Scraper

Live Kleinanzeigen resale intelligence for thrift & vintage resellers: keyword search, full listing details, seller inventory, seller profiles, sold comps & URL collection. Stream structured JSON in real time — pay only for results.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Kleinanzeigen Real-Time Data

Free Apify plans are limited to 2 results per run. Upgrade to a paid Apify plan for unlimited results. See Free plan vs paid plans below.

Live Kleinanzeigen resale market intelligence — thrift price comps, seller inventory tracking, vintage deal finder.

Kleinanzeigen (formerly eBay Kleinanzeigen) is Germany's largest classifieds marketplace and one of the best hunting grounds for undervalued vintage and thrift inventory. This actor streams structured resale data in real time: live keyword search cards, full listing details, seller inventory, seller profiles, and sell-through snapshots — built for cross-listers, sourcing bots, and pricing teams.

👥 Who is this for?

  • Vintage & thrift resellers (cross-listers on Poshmark, eBay, Depop, Mercari, Grailed, Vinted) sourcing German-market inventory — vintage Carhartt, single-stitch band tees, designer denim, gorpcore, Y2K
  • Resale arbitrageurs tracking underpriced listings the moment they appear ("newest first" sort + webhook alerts)
  • Consignment & vintage shop owners monitoring competitor inventory and repricing moves by seller ID
  • Fashion researchers & pricing teams building sold comps, sell-through rates, and multi-platform price comparisons
  • AI agents / MCP workflows asking natural-language pricing questions over structured JSON

✨ Features (checkbox — enable only what you need)

FeatureInputWhat you get
🔍 Listing SearchsearchKeywords, searchMaxResults, searchSort, price/condition/size/category filtersFast search cards: price, title, description snippet, size/condition tags, location, listed time, shipping tags. Live keyword search for thrift brands, streetwear, and vintage finds.
📦 Listing DetailslistingUrls, listingIdsFull records: complete description, brand/size/color/condition specifics, full image gallery, shipping cost, seller context, buy-now/offers flags.
👚 Seller Inventory (closet)sellerIds, sellerMaxListingsPaginated active inventory per seller — competitor stock and repricing moves.
👤 Seller ProfilesellerIdsDisplay name, trust badges, member since, active listings count, reputation rating where available.
🧾 Sold Item Comps / HistorysellerIds, soldMaxItemsSell-through snapshot per seller: inventory rows with per-item sold status for comps and margin analysis.
🔗 Scrape By URLscrapeUrlsPaste any Kleinanzeigen URL — search, seller inventory, category page, or single listing. Page type is auto-detected.

Enrichment, not duplication

With "Enrich with full listing details" (searchFetchFullDetails) enabled, each search card stays ONE row (featureType: "listing_search", detailsFetched: true) and is enriched in place with description, item specifics, full image gallery, and seller context. Nothing is filtered out, no duplicate rows — every discovered item goes to the dataset. Adds a little extra time per listing.

Filters vs lead tags — what gets filtered and what doesn't

Server-side filters change how many pages a run must read, so only the predictable ones are filters:

  • Min/max price (EUR), sort order (relevance / newest / price low→high / price high→low) — apply per keyword with a predictable result volume
  • Buy-now and "Gesucht" (wanted) ads are tags, not filters: with "Tag buy-now & wanted leads" enabled, every row carries is_buy_now and is_wanted flags while every discovered listing still goes to the dataset. Results are never filtered — filter downstream in your own tooling instead. This keeps runtime per 1,000 listings predictable (and the tags cost nothing extra: they are read from the same listing card).
  • Category narrowing via the category slug from the marketplace URL (e.g. kleidung-herren)
  • Size as a free-text hint matched against listing tags

🚀 Quick start

  1. Enable Listing Search (on by default).
  2. Keep the prefilled keywords — carhartt detroit jacke, vintage levis 501, patagonia fleece — or type your own (German terms work best).
  3. Leave Max results per keyword at 10 for an instant first run.
  4. Click Start. Results stream into the dataset row by row as they are collected.

Example input

{
"enableListingSearch": true,
"searchKeywords": ["carhartt detroit jacke", "vintage levis 501", "patagonia fleece"],
"searchMaxResults": 10,
"searchSort": "newest",
"searchMaxPrice": 120
}

Example: seller inventory + profile + comps

{
"enableClosetListings": true,
"enableSellerProfile": true,
"enableSoldHistory": true,
"sellerIds": ["33915083"],
"sellerMaxListings": 30,
"soldMaxItems": 30
}

Seller IDs are the numeric profile IDs from a seller page URL (…bestandsliste.html?userId=33915083 → 33915083).

Example: Scrape By URL

{
"enableScrapeByUrl": true,
"scrapeUrls": [
"https://www.kleinanzeigen.de/s-suchanfrage.html?keywords=carhartt+jacke&sortBy=creationTime",
"https://www.kleinanzeigen.de/s-anzeige/carhartt-wip-detroit-jacket-jacke-l/3524930885-160-3508"
]
}

Only Kleinanzeigen URLs are accepted — other domains are rejected with a clear error.

📤 Output fields (per row)

Every row carries featureType (listing_search, listing_details, closet_listings, seller_profile, sold_history, scrape_by_url), scrapedAt, and url, plus the shared core below so datasets stay portable across marketplaces and downstream pricing tools:

GroupFields
Identityitem_id (ad ID), item_url, title, description, slug, status
Imagesmain_image_url, additional_image_urls (full gallery on enriched/detail rows)
Pricingcurrent_price, original_price (pre-reduction price), currency (EUR), discount_percentage, price_drop_amount, shipping_cost, free_shipping, accepts_offers (VB / buy-now)
Productbrand, size, condition, category, department, subcategory, color, style_tags, material, item_specifics (full attribute list on detail rows)
Timingcreated_at (best-effort from the listed-on stamp), updated_at, sold_at, is_newly_listed
Engagementlikes_count (watch count when exposed), shares_count, comments_count, number_of_offers, is_sold
Sellerseller_username (display name), seller_id (numeric ID), seller_rating, seller_closet_size (active listings), seller_location, seller_verified (trust badges)
Lead tagsis_buy_now (fixed "Direkt kaufen" price), is_wanted ("Gesucht" buyer ads) — tagging toggle, never a filter
Flagsis_nwt, is_nwot, is_vintage, is_promoted
Metaposition, detailsFetched, pageType (Scrape By URL rows)

Fields that the marketplace does not expose stay null — they are never faked.

🔔 Webhooks (deal alerts)

Set webhookUrl and every saved record is additionally POSTed in real time — fire-and-forget, so alerts never slow collection:

  • JSON (webhookFormat: "json"): the full record object — ideal for Discord/Zapier/Make/n8n/custom pricing bots.
  • Slack (webhookFormat: "slack"): a formatted message with title, price, original price, brand, size, condition, seller, and a link.
{
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"webhookFormat": "slack"
}

Typical alert flow: searchSort: "newest" + searchMaxPrice + webhook → ping your channel the moment fresh inventory matches your sourcing criteria. With lead tagging on, Slack alerts also show Leads: buy-now / Leads: wanted ad so you can triage at a glance.

🤖 AI agents / MCP

The actor works naturally through Apify MCP Server: expose it as a tool and ask questions like:

  • "What is the average asking price for a 90s Carhartt Detroit jacket on Kleinanzeigen?"
  • "Find vintage Levi's 501 under €60 listed in the last 24 hours."
  • "How many active listings does seller 33915083 have, and what share shows as sold?"

The structured rows (current_price, original_price, brand, size, condition, created_at, is_sold) make aggregations and cross-marketplace comparisons straightforward.

🛡️ Free plan vs paid plans

Apify injects your plan status into every platform run:

  • Paying plans (Bronze and above): full output, uncapped.
  • Free plan: results are capped at 2 items per run (owner-configurable) so you can test the actor end-to-end. Upgrade to a paid Apify plan for unlimited vintage and thrift data exports. The run log states this clearly and the run finishes gracefully — no crash.
  • Owners can alternatively set FREE_TIER_MODE=block so free users get no results, or adjust FREE_TIER_MAX_ITEMS.

The paywall object on the run OUTPUT shows what was applied (detected, isPaying, pricingTier, limited, blocked, freeTierMaxItems).

❓ FAQ

How fresh is the data? Rows are collected live at run time and streamed to the dataset immediately — what you see is what the marketplace serves at that moment. Use "newest first" sort for deal-alert freshness.

Do I need proxies? The actor defaults to Apify Residential connections matched to the German marketplace. You normally do not need to change anything; if you override proxy settings, keep residential egress in Germany for best results.

What are the rate limits? Keyword searches run with light parallelism plus small randomized pauses, and enrichment fans out moderately. The defaults are tuned for sustained, reliable runs — raise searchMaxResults rather than spawning more keywords at once.

Why do some fields stay null? The marketplace does not expose seller follower counts, watch counts on cards, or a completed-sales feed. Missing fields are always null, never invented.

Sold comps — what exactly do I get? The marketplace does not publish a per-seller completed-sales feed. Sold Item Comps gives you the closest public equivalent: a per-seller inventory snapshot with per-item sold status preserved, so you can measure sell-through and what is moving. Ask in outcome terms — "give me this seller's current sell-through picture" — and the feature delivers it.

Why is my free run capped at 2 results? That's the free-plan trial described above, not a bug. Upgrade for full output.

Why aren't buy-now / wanted ads a filter? Because filtering makes run volume unpredictable — a "buy-now only" run could need anywhere from one page to dozens to fill the same result count. Tagging every row keeps the number of listings (and therefore cost) predictable, and you still get complete output to slice downstream.

📚 Notes

  • One listing = one dataset row, always. Enrichment merges into the same row.
  • searchMaxResults defaults to 10 (1–200) so first runs finish in seconds.
  • All failures surface as sanitized, human-readable log messages — runs never crash on a single bad page.