scraper-api-com Kleinanzeigen API
Kleinanzeigen: 3 public endpoints, no account needed, plus 4 signed-in routes (login, logout, messages, account) behind an `x-session-id`.
Kleinanzeigen: 3 public endpoints, no account needed, plus 4 signed-in routes (login, logout, messages, account) behind an `x-session-id`.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/scraper-api-com:scraper-api-com-kleinanzeigen-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: scraper-api.com Kleinanzeigen API
version: 0.1.0
description: 'Self-hosted social media scraping API — a drop-in replacement for scrapecreators.com.
## Authentication
Every request must send your API key in the `x-api-key` header.
## Credits
Billing is credit-based: **1 request = 1 credit** (some endpoints cost more — see each endpoint''s description). Credits are **non-expiring** — buy once, use whenever.
Response bodies match the ScrapeCreators shapes so existing integrations work unchanged.'
contact:
name: Fabian Bitter
email: fabian@bitter.de
servers:
- url: https://api.scraper-api.com
description: Production
security:
- apiKeyAuth: []
tags:
- name: Kleinanzeigen
description: 'Kleinanzeigen: 3 public endpoints, no account needed, plus 4 signed-in routes (login, logout, messages, account) behind an `x-session-id`.'
paths:
/v1/kleinanzeigen/search:
get:
tags:
- Kleinanzeigen
summary: Search Kleinanzeigen listings by keyword and/or category+location, with filters…
operationId: kleinanzeigen_v1_search
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters:
- name: query
in: query
required: false
description: 'Free-text keyword. Optional when a categoryId/locationId is given. Provide at least one of: query, categoryId, locationId.'
schema:
type: string
example: fahrrad
- name: categoryId
in: query
required: false
description: 'Kleinanzeigen category id (e.g. 203 = Mietwohnungen). Browse without a keyword. Provide at least one of: query, categoryId, locationId.'
schema:
type: string
example: '203'
- name: locationId
in: query
required: false
description: 'Location id from the /locations endpoint (city or ZIP). Anchors the search + `distance`. Provide at least one of: query, categoryId, locationId.'
schema:
type: string
example: '996'
- name: minPrice
in: query
required: false
description: Minimum price in EUR.
schema:
type: string
example: '50'
- name: maxPrice
in: query
required: false
description: Maximum price in EUR.
schema:
type: string
example: '1500'
- name: adType
in: query
required: false
description: Listing type.
schema:
type: string
enum:
- OFFERED
- WANTED
- name: posterType
in: query
required: false
description: Seller type.
schema:
type: string
enum:
- PRIVATE
- COMMERCIAL
- name: sortType
in: query
required: false
description: 'Result ordering (default: newest first).'
schema:
type: string
enum:
- PRICE_ASCENDING
- PRICE_DESCENDING
- DATE_DESCENDING
- DISTANCE
- name: distance
in: query
required: false
description: Search radius in km around locationId.
schema:
type: string
example: '20'
- name: attributes
in: query
required: false
description: 'Category attribute filters (rooms, floor space, …) as `name:value` pairs separated by `|`. The names are the ones the listings carry in `attributes`. A numeric attribute takes a `min,max` range with either end optional: `4.0,` = at least four, `,2.0` = at most two, `2.0,2.0` = exactly two. Names the category does not know come back in `warnings`.'
schema:
type: string
example: wohnung_mieten.zimmer:4.0,
- name: pictureRequired
in: query
required: false
description: Only listings with at least one photo.
schema:
type: string
enum:
- 'true'
- 'false'
- name: page
in: query
required: false
description: 0-based page index for pagination.
schema:
type: string
example: '0'
- name: size
in: query
required: false
description: Results per page (1–41, default 25).
schema:
type: string
example: '25'
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
success: true
query: fahrrad
page: 0
page_size: 25
count: 1
has_next_page: false
filters:
categoryId: null
locationId: null
minPrice: null
maxPrice: null
adType: null
posterType: null
sortType: null
distance: null
attributes: null
warnings: []
listings:
- id: '3460255282'
title: Bulls Sharptail Street 3 27,5 Zoll mit Originalrechnung
description: 'Bulls Sharptail Street 3 27,5 Zoll zu verkaufen
Rahmengröße 51 cm, sehr guter Zustand.'
url: https://www.kleinanzeigen.de/s-anzeige/bulls-sharptail-street-3-27-5-zoll-mit-originalrechnung/3460255282-217-8124
price:
amount: 250
currency: EUR
type: SPECIFIED_AMOUNT
ad_type: OFFERED
poster_type: PRIVATE
status: ACTIVE
category:
id: '217'
name: Fahrraeder
localized_name: Fahrräder & Zubehör
location:
zip_code: '68775'
state: Ketsch
latitude: 49.371643
longitude: 8.526013
radius_km: 3.58
user_id: '162153981'
posted_at: 2026-07-16T12:54:14.000+0200
attributes:
- name: fahrraeder.art
label: Art
type: ENUM
unit: null
values:
- value: herren
label: Herren
- name: fahrraeder.type
label: Typ
type: ENUM
unit: null
values:
- value: cityraeder
label: Cityräder
thumbnail: https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_2.AUTO
images:
- https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_59.AUTO
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
/v1/kleinanzeigen/ad:
get:
tags:
- Kleinanzeigen
summary: 'Get a single Kleinanzeigen listing (full detail: price, attributes, images…'
operationId: kleinanzeigen_v1_ad
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters:
- name: id
in: query
required: false
description: 'Numeric ad id. Provide at least one of: id, url.'
schema:
type: string
example: '3460253912'
- name: url
in: query
required: false
description: 'Full listing URL (web or API) — the ad id is extracted from it. Provide at least one of: id, url.'
schema:
type: string
example: https://www.kleinanzeigen.de/s-anzeige/…/3460253912-203-996
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
success: true
data:
id: '3460253912'
title: Bulls Sharptail Street 3 27,5 Zoll mit Originalrechnung
description: 'Bulls Sharptail Street 3 27,5 Zoll zu verkaufen
Rahmengröße 51 cm, sehr guter Zustand.'
url: https://www.kleinanzeigen.de/s-anzeige/bulls-sharptail-street-3-27-5-zoll-mit-originalrechnung/3460255282-217-8124
price:
amount: 250
currency: EUR
type: SPECIFIED_AMOUNT
ad_type: OFFERED
poster_type: PRIVATE
status: ACTIVE
category:
id: '217'
name: Fahrraeder
localized_name: Fahrräder & Zubehör
location:
zip_code: '68775'
state: Ketsch
latitude: 49.371643
longitude: 8.526013
radius_km: 3.58
user_id: '162153981'
posted_at: 2026-07-16T12:54:14.000+0200
attributes:
- name: fahrraeder.art
label: Art
type: ENUM
unit: null
values:
- value: herren
label: Herren
- name: fahrraeder.type
label: Typ
type: ENUM
unit: null
values:
- value: cityraeder
label: Cityräder
thumbnail: https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_2.AUTO
images:
- https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_59.AUTO
contact_name: Caroline
phone: null
seller_account_type: PRIVATE
user_rating: 0.8076923076923077
user_since: 2016-07-23T15:18:23.000+0200
last_edited: 2026-07-16T12:52:39.000+0200
locations:
- id: '3331'
name: Berlin
version: '1.16'
locale: de_DE
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
/v1/kleinanzeigen/locations:
get:
tags:
- Kleinanzeigen
summary: Resolve a place name (city / ZIP) to Kleinanzeigen locationId(s) for the search…
operationId: kleinanzeigen_v1_locations
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters:
- name: query
in: query
required: true
description: City name or ZIP code to resolve.
schema:
type: string
example: '51063'
- name: depth
in: query
required: false
description: How many sub-location levels to include (0 = the matched locations only).
schema:
type: string
example: '0'
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
success: true
query: Berlin
locations:
- id: '3331'
name: Berlin
localized_name: Berlin
latitude: 52.51607
longitude: 13.37698
radius_km: 15.35
parent_id: '0'
children_count: 49
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
/v1/kleinanzeigen/login:
post:
tags:
- Kleinanzeigen
summary: Open a Kleinanzeigen session with the account's own credentials.
operationId: kleinanzeigen_v1_login
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters: []
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
session_id: b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4
user_id: name@example.com
expires_at: '2026-08-09T22:02:00.000Z'
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.
example: name@example.com
password:
type: string
description: The portal account's password, or the one-time code where the platform has no password.
example: •••••••••
login_token:
type: string
description: The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
required:
- username
example:
username: name@example.com
/v1/kleinanzeigen/logout:
post:
tags:
- Kleinanzeigen
summary: Close a Kleinanzeigen session and drop everything it stored. Free of charge
operationId: kleinanzeigen_v1_logout
description: '**Live endpoint.** Free of charge.'
security:
- apiKeyAuth: []
parameters:
- name: x-session-id
in: header
required: true
description: The session id returned by login. Sent as the x-session-id header.
schema:
type: string
example: b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example: null
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
/v1/kleinanzeigen/messages:
get:
tags:
- Kleinanzeigen
summary: Read the signed-in Kleinanzeigen account's inbox, or one conversation in full…
operationId: kleinanzeigen_v1_messages
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters:
- name: x-session-id
in: header
required: true
description: The session id returned by login. Sent as the x-session-id header.
schema:
type: string
example: b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4
- name: conversation_id
in: query
required: false
description: One conversation of the inbox. Omit to list the inbox.
schema:
type: string
example: '412778905'
- name: page
in: query
required: false
description: 1-based page number.
schema:
type: string
example: '1'
- name: size
in: query
required: false
description: How many entries one page holds.
schema:
type: string
example: '20'
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
success: true
page: 1
page_size: 20
count: 1
conversations:
- id: '412778905'
ad_id: 5i79di5993027eh1d70e6f5d9g0h5h66
ad_title: E-bike Cube Stereo hibryd 120 pro 625 Allroad
partner: Bauer Noth
unread: true
last_message: Ist der Artikel noch verfuegbar?
last_message_at: '2026-08-08T18:24:00.000Z'
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
post:
tags:
- Kleinanzeigen
summary: 'Send a Kleinanzeigen message: a reply into conversation_id, or a first contact…'
operationId: kleinanzeigen_v1_messages_send
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters:
- name: x-session-id
in: header
required: true
description: The session id returned by login. Sent as the x-session-id header.
schema:
type: string
example: b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
success: true
conversation_id: '412778905'
data:
delivered: true
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The message text.
example: Ist der Artikel noch verfuegbar?
conversation_id:
type: string
description: One conversation of the inbox. Omit to list the inbox.
example: '412778905'
ad_id:
type: string
description: Start a new thread on this listing (instead of replying to a conversation).
example: 5i79di5993027eh1d70e6f5d9g0h5h66
ad_url:
type: string
description: The listing's full URL, an alternative to ad_id.
example: https://www.quoka.de/anzeigen/…/5i79di…html
required:
- message
example:
message: Ist der Artikel noch verfuegbar?
/v1/kleinanzeigen/account:
get:
tags:
- Kleinanzeigen
summary: The signed-in Kleinanzeigen account's own profile
operationId: kleinanzeigen_v1_account
description: '**Live endpoint.** Credit cost: **1** (1 request = 1 credit).'
security:
- apiKeyAuth: []
parameters:
- name: x-session-id
in: header
required: true
description: The session id returned by login. Sent as the x-session-id header.
schema:
type: string
example: b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4
responses:
'200':
description: Platform-native JSON payload (ScrapeCreators-compatible).
content:
application/json:
example:
success: true
data:
id: e63599e304f57gf2efi03735d45g21h6
name: Fabian
url: https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6
member_since: 13.07.2026
ad_count: 5
listings: []
'400':
description: Missing or invalid parameters.
content:
application/json:
example:
error:
message: 'Missing required parameter(s): handle'
'401':
description: Missing or invalid API key.
content:
application/json:
example:
error:
message: Invalid API key.
'402':
description: Not enough credits.
content:
application/json:
example:
error:
message: Insufficient credits.
'429':
description: Rate limit exceeded.
content:
application/json:
example:
error:
message: Rate limit exceeded.
'502':
description: Upstream scrape failed.
content:
application/json:
example:
error:
message: Upstream scrape failed.
components:
securitySchemes:
apiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: Your scraper-api.com API key.
x-tagGroups:
- name: Platforms
tags:
- Instagram
- TikTok
- YouTube
- Facebook
- LinkedIn
- Twitter
- Spotify
- Apple Music
- Kleinanzeigen
- Quoka
- markt.de
- mobile.de
- '11880'
- Gelbe Seiten
- ImmobilienScout24
- immowelt
- WG-Gesucht
- Bayut
- LOVOO
- Jaumo
- Tinder
- Bumble
- Snapchat
- Google
- Arbeitsagentur
- Ausbildung.de
- meinestadt.de