Kleinanzeigen is Germany's largest classifieds site, and it is one of the few large marketplaces that serves the same page to everyone: on 28 September 2026 kleinanzeigen.de answered a plain HTTP client with 200 OK, 288,478 bytes and 506 words through a German residential exit, and 503 words through a British one. Rendering it cost 1,305,776 bytes and returned 530 words. There is no geo gate on this site; the fence is in robots.txt, which closes every listing page from the sixth onward to crawlers. The setting that works on Kleinanzeigen is residential, plain HTTP, country=de, and the kleinanzeigen_search collector when you need ads rather than pages: 10 ads with price, VB flag and ZIP in 3.5 seconds.
The no-JavaScript page carries the structured data; the browser adds 24 words
Kleinanzeigen's home is served by what its own header calls microfrontend-red-web behind Akamai, and the server-rendered HTML is complete. The seo_audit tool in our MCP server fetched it as a pure HTTP bot and fully rendered, and both passes returned the same title, the same meta description, a self-referencing canonical, the h1 "Kleinanzeigen entdecken", a robots meta of index, follow, and three JSON-LD blocks: Organization, WebSite and WebPage. The rendered page added 24 words of teaser tiles.
| Fetch (28 September 2026) | Status | Bytes returned | Time | Words | Notes |
|---|---|---|---|---|---|
| kleinanzeigen.de, plain HTTP, German exit | 200 | 288,478 | 5.0 s | 506 | Title, description, canonical, h1, JSON-LD Organization + WebSite + WebPage |
| kleinanzeigen.de, rendered, German exit | 200 | 1,305,776 | 39.4 s | 530 | Same head; 24 more words of tiles |
| kleinanzeigen.de, plain HTTP, UK exit | 200 | n/a | 12.1 s (audit) | 503 | Same German page; no redirect, no country notice |
| kleinanzeigen.de/robots.txt | 200 | 11,141 | 0.2 s | n/a | Content-language de-DE |
On 26 September the rendered count was 903 against 512 plain; two days later 530 against 506. The render figure depends on how many teaser tiles the browser has painted at capture, so it swings by hundreds of words between runs while the plain figure moves by six. A number that swings that much is not a reason to pay 4.5 times the bytes. The page's data, the head, the JSON-LD and the category links, is in the first 288 kilobytes.
Nothing changes by country, so the exit is a courtesy, not a key
We fetched the home through a German exit and through a British one and got the same page: 506 and 503 words, identical title, identical h1, no redirect, no banner. Kleinanzeigen serves one country and does not check where a reader is. That settles the geo question for a research job: the exit does not unlock anything. It still matters, for the reason it matters on any marketplace: a residential exit in Germany produces the traffic pattern of the readers the site actually has, and mixing exits across countries inside one session is the one thing no real visitor does. Pin country=de and keep it.
The intent behind "kleinanzeigen scraper api" is narrower than most guides assume. The Reddit thread that ranks for it is a developer whose client manages inventory only on Kleinanzeigen and wants those ads mirrored on the client's own site: one fetch per ad, a HEAD request every few hours to see if it is still live, three runs a day. That is the shape of most legitimate demand here: monitoring a small set of listings, tracking a price band in a ZIP radius, or checking that an ad is still up. None of it needs a browser, and none of it needs more than a handful of requests an hour.
The fence is at page six, and the JSON is closed
Kleinanzeigen's robots.txt is 11,141 bytes decoded, and it is the most specific pagination rule we have read on a marketplace. For every user agent it disallows /*/seite:6* through /*/seite:59*, one line per page number: the first five pages of any listing are open to crawlers, the sixth onward are not. It also disallows /*.json, /api, /belen-gateway/*, /search, /s-feed.rss, every sort order, every price and radius filter (r5 to r200) and dozens of attribute filters. A polite crawler on Kleinanzeigen reads unfiltered category and search pages one to five, and nothing else.
Two groups get more. GPTBot, ChatGPT-User, OAI-SearchBot and PerplexityBot are each named and allowed the whole site except account pages, and the sitemap index is public. The Nutzungsbedingungen, in force since 17 February 2024, then add the contractual layer in clause 5: users must not use crawlers, spiders, scrapers or other automated mechanisms to access the services and collect content without Kleinanzeigen's express written consent, must not collect other users' e-mail addresses or phone numbers, and must not circumvent access restrictions. That is the one plain line: automated collection of Kleinanzeigen content without written consent is against its terms, and a proxy does not change it. Kleinanzeigen's own sanctioned interface for professionals runs the other way: its business help centre documents an OpenImmo import for estate agents pushing listings in, not an API for reading them out.
The collector returns ten ads in 3.5 seconds, VB flag included
We ran the Kleinanzeigen collector once on 28 September 2026 with the query "fahrrad" and max_results 10. It delivered 10 rows in 3.46 seconds. Each row carries the ad id, title, ad URL, the price as shown and as a number, a negotiable flag for "VB", the location as ZIP plus town, the listing date as shown, a description excerpt, the first photo and whether the ad is a promoted top ad.
| Field in the run | What came back for 10 rows |
|---|---|
| Price | 9 of 10 with a clean numeric value, from 15 € to 6,499 €; 1 flagged negotiable, "450 € VB" |
| Location | 10 of 10 with a five-digit ZIP and town: 94365 Parkstetten, 02796 Kurort Jonsdorf, 26129 Oldenburg, 76456 Kuppenheim |
| Date | 8 of 10 "Heute, 19:04", the minute of the run; 2 dealer ads without a date on the card |
| Top ad | 0 of 10 promoted |
| Sellers | A mix of bike shops running an autumn sale and private sellers of a 12-inch children's bike and a home trainer |
The VB flag is the field a price monitor needs and a card parser drops: "VB" means the seller expects an offer, and a 450 € VB and a 450 € Festpreis are different data points. The ZIP on every row is what makes radius queries possible in your own database, which matters because robots.txt closes Kleinanzeigen's own radius filters to crawlers. At $0.001 per delivered ad, the run cost one cent.
Cost math with real numbers
Prices from our pricing page: residential Basic $0.80/GB, Premium $2.20/GB, the web scraping API from $0.0002 per page ($0.001 rendered) and the Kleinanzeigen collector at $0.001 per delivered ad. One gigabyte is counted as 10^9 bytes.
| Approach | Bytes per page | Pages per GB | Cost per 1,000 |
|---|---|---|---|
| Plain HTTP over residential Basic ($0.80/GB) | 288,478 | about 3,466 | about $0.23 per 1,000 pages |
| Plain HTTP over residential Premium ($2.20/GB) | 288,478 | about 3,466 | about $0.63 per 1,000 pages |
| Rendered over residential Basic | 1,305,776 | about 766 | about $1.04 per 1,000 pages |
| Web scraping API, plain HTTP | n/a | n/a | $0.20 per 1,000 pages |
| kleinanzeigen_search collector | n/a | n/a | $1.00 per 1,000 ads, price, VB and ZIP parsed |
Byte figures are decoded HTML; wire transfer after compression is lower and headers add a little back. Rendering multiplies the bill by 4.5 and the wait by 8 for 24 words of tiles; skip it. For the Italian equivalent of this market, where the raw page is 183 KB and the collector restores the truncated description, see Subito through residential proxies; for the site where the page weighs two megabytes and the render subtracts, Vinted.
The setting that works on Kleinanzeigen
- Network: residential, Basic at $0.80/GB. Nothing in our fetches challenged a residential exit from either country, and at 288 KB a page the tier is a rounding error.
- Fetch mode: engine: tls, plain HTTP. 506 words with the full head and three JSON-LD blocks in 5.0 seconds; the rendered page returns 530 words for 1,305,776 bytes and 39.4 seconds.
- Country: country=de. The page is the same from the UK (503 words, no redirect), so the exit is pinned for a German traffic pattern, not for access.
- When the proxy is not enough: the kleinanzeigen_search collector, 10 ads in 3.5 seconds with price, VB flag, ZIP and town, date and top-ad flag, $0.001 per delivered ad, with pagination and filters handled where robots.txt closes them to a crawler.
- Every account gets $2 of free API usage per month, and failed requests are never billed.