Kleinanzeigen Scraper — Listings, Prices & Seller Data avatar

Kleinanzeigen Scraper — Listings, Prices & Seller Data

Pricing

from $1.49 / 1,000 listings

Go to Apify Store
Kleinanzeigen Scraper — Listings, Prices & Seller Data

Kleinanzeigen Scraper — Listings, Prices & Seller Data

Scrape Kleinanzeigen listings by keyword, location or URL. Export prices, sellers and optional details to JSON/CSV with result limits and run diagnostics.

Pricing

from $1.49 / 1,000 listings

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

22 days ago

Last modified

Features

Limited permissions

Share

What does Kleinanzeigen Scraper do?

Extract Kleinanzeigen listings, prices and public seller information from Kleinanzeigen.de, formerly eBay Kleinanzeigen. Search by keyword, category, German city or postal code, or supply search and individual listing URLs. Use the Apify API to export JSON or run it from the Console without writing code.

Start with a small result limit. Basic mode reads search pages; optional detail requests add descriptions, attributes and photos where the listing provides them. Pricing is $1.49 per 1,000 delivered listings, plus a start fee and separate Apify platform usage. Details and proxy requests increase usage costs. A listing can still be delivered when some detail fields are unavailable; check detailsFetched and the run summary.

How to scrape Kleinanzeigen

  1. Enter a keyword, such as iphone 13, or paste a Kleinanzeigen search URL. Clear the example keyword when you want URLs only.
  2. Add location, category, price or sorting filters for keyword searches. Pasted search URLs retain their own filters; privateOnly also applies to pasted URLs.
  3. Set Max listings in total to control output across searches. Enable Fetch full listing details only when you need richer fields.
  4. Start the Actor, inspect the dataset and Run summary and coverage output, then export JSON, CSV or Excel.

A small detail example:

{
"searchQueries": ["iphone 13"],
"maxItemsPerSearch": 50,
"maxItems": 3,
"fetchDetails": true
}

See the input tab for the full configuration. Omitted API input uses an iPhone example; explicitly empty source fields are rejected. An unknown location fails instead of silently returning nationwide results. Invalid URLs, reversed price ranges and unsupported options also fail visibly.

What data can you extract?

FieldTypeMeaning
id, url, titlestringListing identity, source link and title
price, currency, priceTypeLabelnumber/null, stringPrice and labels such as VB, fixed price or free
location, zipCode, citystringLocation shown by the source
postedAt, scrapedAtstringParsed posting date where available, and collection time
sellerType, sellerNamestringPublic seller classification and available name
imageUrl, allImagesstring, arrayAvailable image URLs; detail mode may add more
description, attributesstring, objectListing text and structured attributes in detail mode
shippingAvailable, shippingCostboolean, stringShipping information where exposed
detailsFetchedbooleanWhether a listing detail page was successfully parsed
viewsnumber/nullOptional view count, when accessible
_searchIndexintegerZero-based originating search, used for restart deduplication

Missing fields may be empty or null. detailsFetched=true means a detail page was parsed, not that every field exists. Dates and coordinates depend on what Kleinanzeigen exposes; they are not independently verified. Text descriptions may contain information supplied by the advertiser.

Output and coverage

You can download the dataset in various formats such as JSON, HTML, CSV or Excel. This shortened example is illustrative, not a current offer:

[
{
"id": "example-listing-1",
"title": "Example used phone",
"price": 200,
"currency": "EUR",
"priceTypeLabel": "VB",
"sellerType": "private",
"detailsFetched": true,
"attributes": {"Zustand": "Gut"},
"_searchIndex": 0
}
]

RUN_SUMMARY in the default key-value store records delivered rows, new versus resumed rows, detail successes/failures, per-search status, stop reason and HTTP diagnostics. partial means a budget/global limit or source/detail problem constrained the output. limit_reached for a search means its configured result limit was reached. Neither status proves that the whole marketplace was collected. An empty search can legitimately succeed with zero listings; a failed source with no usable listings fails the run.

Listing IDs are deduplicated across searches within a run. A compatible resurrected run reads its existing dataset, counts previously delivered rows against the limits and skips completed searches. Changing content-related input on restart requires a fresh run. Previously delivered basic rows with missing details are not upgraded on restart. New scheduled runs use new datasets and may include the same listings again.

How much does Kleinanzeigen scraping cost?

The current base fees are $0.00149 per delivered listing, plus $0.00005 per start per GB of allocated memory, with a minimum of one start event. At the default 512 MB:

  • 3 listings: $0.00452 in event fees, plus platform usage.
  • 50 listings: $0.07455 in event fees, plus platform usage.
  • 1,000 listings: $1.49005 in event fees, plus platform usage.

Platform usage is charged separately under this Actor's pay per event + usage setting. It can include compute, data transfer, storage operations and proxy usage. These examples are not all-inclusive prices. See the current pricing and run usage in Apify Console.

Detail mode does not add a separate listing event, but it performs more requests and can increase platform usage. A useful basic listing with failed enrichment is still a delivered, billable listing. Requests that produce no listings can still incur platform usage and the start fee.

The Actor checks the SDK's remaining event allowance before search/detail work and counts only accepted dataset rows. Use maxItems, maxItemsPerSearch, the run spending limit and a suitable timeout together; a result limit does not set a fixed platform-usage price.

Filters, proxies and larger searches

  • maxItemsPerSearch defaults to 200 when omitted through the API; the Console example is 50. maxItems=0 means no additional global cap.
  • Location and category filters apply to generated keyword searches. Copy a filtered search URL when you need the website's exact search configuration.
  • privateOnly removes non-private sellers; skipTopAds skips recognized paid TOP placements in search results.
  • The crawler visits at most 50 pages per search. Filtering, duplicate IDs, unavailable ads, source limits and blocks can reduce output. Split broad searches by location, category or price; full market coverage is not guaranteed.
  • Apify Proxy is enabled by default. The client may retry directly after proxy blocks. Set proxyConfiguration to {"useApifyProxy": false} for direct-only requests. A requested proxy that cannot be configured stops the run. Residential proxies can add substantial usage cost.
  • includeViews adds an extra lookup when fetching details or an individual listing URL. Counts may be unavailable and the lookup can affect the website's view counter.

API access and recurring monitoring

Use the API tab for request examples with your token kept in your application's secret configuration. The input JSON above works for API calls and Console runs. Export results into your pricing analysis, inventory research or public marketplace monitoring workflow. Apify also supports schedules, webhooks and integrations with tools such as Make, n8n and Google Sheets.

For periodic monitoring, keep a small limit and newest-first sorting, then compare listing IDs and prices in your own storage. This Actor exports snapshots; it does not send alerts or maintain a cross-run price history automatically.

Troubleshooting and support

Fewer results than expected? Check RUN_SUMMARY, your filters, result limits and spending allowance. Source counts may include ads excluded by your filters or repeated placements.

Missing descriptions or attributes? Enable detail mode and inspect detailsFetched. A removed or blocked detail page can leave a valid basic row. Individual fields are optional even after a successful detail request.

Location not found? Try a five-digit German postal code or paste a filtered search URL. The Actor stops rather than silently changing your intended geography.

Source layout or access changed? Open an issue in the Actor's Issues tab with the run URL and a non-sensitive input example. Website changes can cause failures; uninterrupted availability is not guaranteed.

The Actor accesses publicly visible pages without an account login. Public listings can contain personal data, including names, location and advertiser-written text. Use and retain such data only for a legitimate purpose consistent with applicable rules and the source website's terms.