Kleinanzeigen.de Scraper with Contacts & Descriptions avatar

Kleinanzeigen.de Scraper with Contacts & Descriptions

Pricing

$1.49 / 1,000 results

Go to Apify Store
Kleinanzeigen.de Scraper with Contacts & Descriptions

Kleinanzeigen.de Scraper with Contacts & Descriptions

Scrape Kleinanzeigen.de at scale with clean, structured listings. Capture titles, prices, descriptions, photos, locations and seller details for local offers and services. Ideal for price tracking, lead gen, resale sourcing and market research.

Pricing

$1.49 / 1,000 results

Rating

5.0

(1)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

2

Bookmarked

33

Total users

5

Monthly active users

5 days ago

Last modified

Share

Kleinanzeigen.de Scraper | Enterprise Grade

Slug: fatihtahta/ebay-kleinanzeigen-scraper

Overview

Kleinanzeigen.de Scraper collects structured public listing records from Kleinanzeigen search terms, category pages, filtered result URLs, merchant profiles, and direct ad URLs. Each record can include listing identity, price, location, category path, public media URLs, seller context, listing attributes, and source provenance when those fields are publicly available. Kleinanzeigen.de is a major German classifieds marketplace, making its public listings useful for marketplace research, inventory monitoring, pricing analysis, local supply discovery, and operational reporting. The actor is designed for repeatable collection workflows where teams need consistent JSON records rather than manual page review. Results are delivered as structured Apify dataset records suitable for review, export, enrichment, BI workflows, and downstream processing. Use it for recurring acquisition jobs, scoped market snapshots, and automated research pipelines where dependable record shape matters more than one-off browsing.

Who Should Use This Actor

  • Market research and analytics teams: collect structured extraction outputs for pricing, supply, category, geography, and seller analysis across Kleinanzeigen segments.
  • Marketplace, catalog, and content teams: turn public listings into normalized records for catalog review, taxonomy mapping, inventory checks, and content quality workflows.
  • Developers and data engineering teams: feed predictable JSON into downstream systems, warehouses, search indexes, enrichment pipelines, and reporting jobs.
  • AI agents and workflow automations: acquire scoped marketplace records, summarize changes, route outliers, and trigger follow-up review without relying on manual browsing.
  • Sales, sourcing, and lead enrichment teams: identify public sellers, merchant profiles, listing categories, and location signals for qualified outreach or company enrichment.
  • Monitoring and operations teams: schedule repeated runs for listing availability, price movement, category movement, and operational watchlists.
  • Real estate, vehicle, and commerce analysts: use category-specific filters to build focused datasets for houses, apartments, cars, electronics, home goods, and other public classified segments.

Common Use Cases

  • Market intelligence: monitor public supply, pricing, categories, seller types, locations, and listing freshness for a defined marketplace segment.
  • Competitive monitoring: track recurring search terms, filtered result pages, or merchant profiles to compare listing movement over time.
  • Lead generation and sourcing: build scoped lists of public listings and sellers for review, qualification, enrichment, or operational routing.
  • Catalog and directory building: populate owned databases with structured listing titles, categories, prices, media, locations, seller labels, and public URLs.
  • Data enrichment: add current public attributes from Kleinanzeigen to existing CRM, BI, research, procurement, or inventory datasets.
  • Recurring reporting: schedule runs for dashboards, alerts, periodic exports, and category or geography trend reporting.
  • Agentic research workflows: let an AI agent collect a bounded dataset, compare it with a prior run, summarize changes, and hand records to the next workflow step.
  • Segmented analysis: run separate inputs by query, category, location, price band, seller type, or source URL to keep downstream comparisons clean.

Real-World Questions This Data Can Answer

  • Which Kleinanzeigen listings match a specific keyword, category, geography, seller type, or price range?
  • Which public listings are new, removed, repriced, or changed when compared with a previous run?
  • Which locations, categories, or seller groups have the strongest public supply for a target search term?
  • Which records have enough title, price, location, seller, media, and attribute detail for review queues or dashboards?
  • How do public asking prices differ across category segments, listing conditions, or local markets?
  • Which merchant profiles or source URLs should be watched repeatedly for inventory movement?
  • Which records are suitable for enrichment, sourcing, or follow-up based on stable listing IDs and public provenance fields?

Quick Start

  1. Choose either source URLs in startUrls, search terms in queries, or both.
  2. Add scope controls such as location, category, price range, seller type, shipping option, or category-specific filters when you need a narrower dataset.
  3. Set a small limit for the first validation run.
  4. Run the actor in Apify Console.
  5. Inspect the first dataset records to confirm the output shape and field coverage.
  6. Increase coverage, split segments, export results, or schedule the actor once the output is verified.

Input Parameters

Provide at least one direct source URL in startUrls or one search term in queries.

ParameterTypeDescriptionDefault
startUrlsarray of stringsOne Kleinanzeigen URL per line. Supports search pages, category pages, filtered result pages, /pro/ merchant profiles, and direct /s-anzeige/ listing URLs.
queriesarray of stringsOne search term per line, such as a product name, brand, model, category, or market phrase. Each term is collected as its own source.
locationstringCity, district, or place name for search-query discovery, such as Frankfurt am Main or Berlin. Leave empty for Germany-wide query discovery. Direct URLs keep their own scope.""
categorystring enumKleinanzeigen category ID for search-query discovery. Leave empty for all categories. See "Category Values" below.""
offer_typestring enumOffer type for query discovery: "" all offer types, for_sale listings for sale, requested wanted ads and buy requests.""
seller_typestring enumSeller type for query discovery: "" all seller types, private individual sellers, business commercial sellers.""
buy_nowbooleanWhen enabled, query discovery targets listings marked with direct purchase availability. Leave disabled for broader discovery.false
shippingstring enumShipping availability for query discovery: "" all shipping options, shipping_available, or pickup_only.""
shipping_carrierstring enumCarrier filter for query discovery: "" all carriers, dhl, or hermes. Use only when carrier availability matters.""
min_priceintegerMinimum listing price in EUR for query discovery. Use with max_price to define a budget or market band.
max_priceintegerMaximum listing price in EUR for query discovery. Use with min_price to exclude listings outside the target price band.
conditionarray of string enumsGoods-style condition filter where supported. Values: new, very_good, good, okay, defect.[]
car_makestring enumVehicle make for Autos searches. Values: "", audi, bmw, mercedes_benz, volkswagen, opel, ford, skoda, renault, seat, peugeot, fiat, hyundai, toyota, nissan, mazda, tesla, sonstige_autos.""
car_modelstringOptional vehicle model to apply with car_make, such as A6, Golf, or Model 3.""
min_mileageintegerMinimum vehicle mileage in kilometers for Autos searches.
max_mileageintegerMaximum vehicle mileage in kilometers for Autos searches.
min_first_registration_yearintegerEarliest first registration year for Autos searches. Minimum accepted value is 1900.
max_first_registration_yearintegerLatest first registration year for Autos searches. Minimum accepted value is 1900.
fuel_typestring enumVehicle fuel type: "", benzin, diesel, cng, lpg, hybrid, elektro, andere.""
transmissionstring enumVehicle transmission: "", automatic, manual.""
vehicle_typestring enumVehicle body type: "", small_car, sedan, wagon, convertible, suv, van, coupe, other.""
damagedstring enumVehicle damage status: "" any condition, damaged, or undamaged.""
exterior_colorstring enumVehicle exterior color: "", black, white, gray, silver, blue, red, green, brown, beige, yellow, orange, gold, violet, other.""
car_featuresarray of string enumsVehicle equipment filters: trailer_coupling, park_assistant, alloy_wheels, xenon_led_light, air_conditioning, navigation, radio_tuner, bluetooth, handsfree, sunroof, seat_heating, cruise_control, non_smoking, abs, full_service_history.[]
min_living_areanumberMinimum living area in square meters for Mietwohnungen searches.
max_living_areanumberMaximum living area in square meters for Mietwohnungen searches.
min_roomsnumberMinimum room count for Mietwohnungen searches. Decimal values can represent half-room layouts where supported.
max_roomsnumberMaximum room count for Mietwohnungen searches.
min_floorintegerMinimum floor for Mietwohnungen searches.
max_floorintegerMaximum floor for Mietwohnungen searches.
apartment_typestring enumApartment type: "", attic, ground_floor, apartment_floor, raised_ground_floor, loft, maisonette, penthouse, basement, terrace, other.""
online_viewingstring enumOnline viewing status for Mietwohnungen searches: "", yes, no.""
swap_offerstring enumSwap-offer status for Mietwohnungen searches: "", yes, no.""
home_garden_colorstring enumHaus & Garten color filter: "", other, beige, blue, brown, multicolor, burgundy, yellow, gold, gray, green, wood, khaki, purple, orange, pink, red, black, silver, transparent, white.""
home_garden_materialstring enumHaus & Garten material filter: "", cotton, organic_cotton, bronze, oak, iron, flannel, glass, wood, ceramic, pine, rattan_wicker, fake_fur, plastic, lacquered, leather, linen, marble, solid_wood, metal, mixed_fabric, natural_fibres, pvc_synthetic, paper, cotton_percale, polyester, velvet, cotton_satin, formica, other, steel, stone, fabric, viscose, oilcloth, wool.""
enrich_databooleanEnables more complete listing detail when available, including fuller descriptions, attributes, address details, media, price context, seller context, and shipping details. Leave disabled for faster standard result records.false
maximize_coveragebooleanEnables broader coverage behavior for large search or category scopes when many matching listings are available. Use for monitoring or research jobs where recall is more important than speed.false
limitintegerMaximum records to save per source URL or search term. Minimum is 1. Use a small value for validation and a larger value for scheduled exports.–; Apify prefill 100

Category Values

Use "" for All categories. The category field also supports these Kleinanzeigen category IDs:

  • Auto, Rad & Boot: 210 Auto, Rad & Boot; 216 Autos; 223 Autoteile & Reifen; 211 Boote & Bootszubehör; 217 Fahrräder & Zubehör; 305 Motorräder & Motorroller; 306 Motorradteile & Zubehör; 276 Nutzfahrzeuge & Anhänger; 280 Reparaturen & Dienstleistungen; 220 Wohnwagen & -mobile; 241 Weiteres Auto, Rad & Boot.
  • Dienstleistungen: 297 Dienstleistungen; 288 Altenpflege; 289 Auto, Rad & Boot; 290 Babysitter/-in & Kinderbetreuung; 293 Elektronik; 291 Haus & Garten; 292 Künstler/-in & Musiker/-in; 294 Reise & Event; 295 Tierbetreuung & Training; 296 Umzug & Transport; 298 Weitere Dienstleistungen.
  • Eintrittskarten & Tickets: 231 Eintrittskarten & Tickets; 286 Bahn & ÖPNV; 254 Comedy & Kabarett; 287 Gutscheine; 252 Kinder; 255 Konzerte; 257 Sport; 251 Theater & Musical; 256 Weitere Eintrittskarten & Tickets.
  • Elektronik: 161 Elektronik; 172 Audio & Hifi; 226 Dienstleistungen Elektronik; 245 Foto; 173 Handy & Telefon; 176 Haushaltsgeräte; 279 Konsolen; 278 Notebooks; 228 PCs; 225 PC-Zubehör & Software; 285 Tablets & Reader; 175 TV & Video; 227 Videospiele; 405 Wearables; 406 Wearables Zubehör; 168 Weitere Elektronik.
  • Familie, Kind & Baby: 17 Familie, Kind & Baby; 236 Altenpflege; 22 Baby- & Kinderkleidung; 19 Baby- & Kinderschuhe; 258 Baby-Ausstattung; 21 Babyschalen & Kindersitze; 237 Babysitter/-in & Kinderbetreuung; 25 Kinderwagen & Buggys; 20 Kinderzimmermöbel; 23 Spielzeug; 18 Weiteres Familie, Kind & Baby.
  • Freizeit, Hobby & Nachbarschaft: 185 Freizeit, Hobby & Nachbarschaft; 232 Esoterik & Spirituelles; 248 Essen & Trinken; 187 Freizeitaktivitäten; 282 Handarbeit, Basteln & Kunsthandwerk; 240 Kunst & Antiquitäten; 191 Künstler/-in & Musiker/-in; 249 Modellbau; 233 Reise & Eventservices; 234 Sammeln; 230 Sport & Camping; 250 Trödel; 189 Verloren & Gefunden; 242 Weiteres Freizeit, Hobby & Nachbarschaft.
  • Haus & Garten: 80 Haus & Garten; 91 Badezimmer; 93 Büro; 246 Dekoration; 239 Dienstleistungen Haus & Garten; 89 Gartenzubehör & Pflanzen; 90 Heimtextilien; 84 Heimwerken; 86 Küche & Esszimmer; 82 Lampen & Licht; 81 Schlafzimmer; 88 Wohnzimmer; 87 Weiteres Haus & Garten.
  • Haustiere: 130 Haustiere; 138 Fische; 134 Hunde; 136 Katzen; 132 Kleintiere; 135 Nutztiere; 139 Pferde; 133 Tierbetreuung & Training; 283 Vermisste Tiere; 243 Vögel; 313 Zubehör.
  • Immobilien: 195 Immobilien; 199 Auf Zeit & WG; 402 Container; 196 Eigentumswohnungen; 275 Ferien- & Auslandsimmobilien; 197 Garagen & Stellplätze; 277 Gewerbeimmobilien; 207 Grundstücke & Gärten; 208 Häuser zum Kauf; 205 Häuser zur Miete; 203 Mietwohnungen; 403 Neubauprojekte; 238 Umzug & Transport; 198 Weitere Immobilien.
  • Jobs: 102 Jobs; 118 Ausbildung; 111 Bau, Handwerk & Produktion; 114 Büroarbeit & Verwaltung; 110 Gastronomie & Tourismus; 105 Kundenservice & Call Center; 107 Mini- & Nebenjobs; 125 Praktika; 123 Sozialer Sektor & Pflege; 247 Transport, Logistik & Verkehr; 117 Vertrieb, Einkauf & Verkauf; 109 Weitere Jobs.
  • Mode & Beauty: 153 Mode & Beauty; 224 Beauty & Gesundheit; 154 Damenbekleidung; 159 Damenschuhe; 160 Herrenbekleidung; 158 Herrenschuhe; 156 Taschen & Accessoires; 157 Uhren & Schmuck; 155 Weiteres Mode & Beauty.
  • Musik, Filme & Bücher: 73 Musik, Filme & Bücher; 76 Bücher & Zeitschriften; 281 Büro & Schreibwaren; 284 Comics; 77 Fachbücher, Schule & Studium; 79 Film & DVD; 78 Musik & CDs; 74 Musikinstrumente; 75 Weitere Musik, Filme & Bücher.
  • Nachbarschaftshilfe: 400 Nachbarschaftshilfe; 401 Nachbarschaftshilfe.
  • Unterricht & Kurse: 235 Unterricht & Kurse; 269 Beauty & Gesundheit; 260 Computerkurse; 265 Esoterik & Spirituelles; 263 Kochen & Backen; 264 Kunst & Gestaltung; 262 Musik & Gesang; 268 Nachhilfe; 261 Sportkurse; 271 Sprachkurse; 267 Tanzkurse; 266 Weiterbildung; 270 Weitere Unterricht & Kurse.
  • Verschenken & Tauschen: 272 Verschenken & Tauschen; 273 Tauschen; 274 Verleihen; 192 Verschenken.

Choosing Inputs

Use queries when you want the actor to discover matching public listings from one or more search phrases. Use startUrls when you already have a search page, category page, filtered result page, merchant profile, or direct listing URL that defines the exact source scope. Query-level fields such as location, category, offer_type, seller_type, price filters, condition filters, and category-specific refinements affect search terms; direct source URLs keep the scope already encoded in the URL. Narrower filters produce more targeted datasets, while broader filters improve discovery and can be better for market scans. Use one query, category, geography, price band, or source URL group per run when you need clean downstream comparisons. Start with a small limit, inspect the records, then increase the limit or schedule recurring runs after the output matches your use case.

Input Recipes

  • Validation run: use one simple queries value such as laptop, set limit to a small number, and inspect the first dataset records before widening scope.
  • Targeted electronics collection: combine queries, location, category, min_price, max_price, condition, and optional shipping fields to build a focused product dataset.
  • Direct URL monitoring: place known search, category, filtered result, merchant profile, or listing URLs in startUrls and repeat the same input on a schedule.
  • Vehicle analysis: use category for Autos, then apply car_make, car_model, mileage, registration year, fuel type, transmission, vehicle type, damage status, color, or feature filters.
  • Apartment research: use the Mietwohnungen category with room, floor, living-area, apartment-type, online-viewing, and swap-offer fields for a specific housing profile.
  • Detail enrichment: use direct listing URLs or a narrow query with enrich_data enabled when full descriptions, seller context, image links, and listing attributes matter.

Example Inputs

Example: query-driven electronics validation

{
"queries": ["laptop"],
"location": "Berlin",
"category": "278",
"min_price": 150,
"max_price": 1200,
"condition": ["new", "very_good"],
"limit": 25
}

Example: known listing or merchant source

{
"startUrls": [
"https://www.kleinanzeigen.de/s-laptop/k0",
"https://www.kleinanzeigen.de/pro/sample-merchant-profile"
],
"enrich_data": true,
"limit": 50
}

Example: vehicle segment monitoring

{
"queries": ["golf"],
"category": "216",
"car_make": "volkswagen",
"car_model": "Golf",
"max_mileage": 90000,
"fuel_type": "benzin",
"transmission": "automatic",
"limit": 100
}

Output

Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, AI agents, and downstream APIs with minimal post-processing. The example below documents the product listing record shape represented by the provided output contract.

Record Envelope And Stable Identifiers

Each record is saved as a product record with a stable record_id when a Kleinanzeigen listing ID is available. The recommended idempotency key is record_id; source_context.canonical_url is a useful secondary key when URL-based matching is required. For deduplication and upserts, prefer record_id and keep source_context.source_url or source_context.canonical_url as audit links. Stable identifiers make records easier to merge, deduplicate, sync, and compare across repeated runs.

Example: Product Listing Record

{
"record_type": "product",
"record_id": "3412293903",
"source_context": {
"source_id": "kleinanzeigen_product_scraper",
"source": "Kleinanzeigen",
"source_domain": "kleinanzeigen.de",
"source_url": "https://www.kleinanzeigen.de/s-anzeige/sample-family-home-with-garden/3412293903-208-464",
"canonical_url": "https://www.kleinanzeigen.de/s-anzeige/sample-family-home-with-garden/3412293903-208-464",
"seed_url": "https://www.kleinanzeigen.de/s-anzeige/sample-family-home-with-garden/3412293903-208-464",
"seed_type": "search_result",
"search_query": "haus kaufen",
"seed_value": "haus kaufen",
"position": 3,
"language": "de",
"country": "DE"
},
"entity": {
"title": "Sample family home with garden in Bad Schwartau",
"name": "Sample family home with garden in Bad Schwartau",
"description": "Sample listing description for a family home with garden, parking, basement, and energy details.\n# Ausstattung\n- Insgesamt ca. 150 m²\n- Aufgeteilt auf 7 Zimmer\n- Baujahr Haupthaus ca. 1953\n- Baujahr Anbau ca. 1993\n- Großzügiger Wohn-Essbereich\n- Wohnküche\n- 4 Schlafzimmer möglich\n- Arbeits-/ Gästezimmer\n- Gäste-Duschbad\n- Wannenbad\n# Weitere Angaben\n- Verfügbar ab: nach Vereinbarung\n- Grundstücksfläche: ca. 951 m²\n# Energie\n- Energieausweis: Energiebedarfsausweis\n- Wesentliche Energieträger: GAS\n- Endenergiebedarf: 270.3 kWh/(m²*a)\n- Energieeffizienzklasse: H\nAnbieter-Objekt-ID: SAMPLE-219899",
"url": "https://www.kleinanzeigen.de/s-anzeige/sample-family-home-with-garden/3412293903-208-464",
"external_ids": {
"listing_id": "3412293903"
}
},
"location": {
"address": "23611 Kreis Ostholstein - Bad Schwartau",
"city": "23611 Kreis Ostholstein - Bad Schwartau",
"postal_code": "23611",
"latitude": 53.9263967,
"longitude": 10.6777027,
"display_location": "23611 Kreis Ostholstein - Bad Schwartau",
"locality": "23611 Kreis Ostholstein - Bad Schwartau"
},
"pricing": {
"price": 320000.0,
"price_text": "320.000 €",
"currency": "EUR",
"price_type": "FIXED",
"negotiable": false,
"free": false
},
"media": {
"main_image_url": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/sample-main-image?rule=$_59.AUTO",
"primary_image_url": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/sample-main-image?rule=$_59.AUTO",
"image_urls": [
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/sample-main-image?rule=$_59.AUTO",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/70/sample-image-2?rule=$_59.JPG",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/e4/sample-image-3?rule=$_59.JPG"
]
},
"product": {
"product_id": "3412293903",
"listing_id": "3412293903",
"description": "Sample listing description for a family home with garden, parking, basement, and energy details.\n# Ausstattung\n- Insgesamt ca. 150 m²\n- Aufgeteilt auf 7 Zimmer\n- Baujahr Haupthaus ca. 1953\n- Baujahr Anbau ca. 1993\n- Großzügiger Wohn-Essbereich\n- Wohnküche\n- 4 Schlafzimmer möglich\n- Arbeits-/ Gästezimmer\n- Gäste-Duschbad\n- Wannenbad\n# Weitere Angaben\n- Verfügbar ab: nach Vereinbarung\n- Grundstücksfläche: ca. 951 m²\n# Energie\n- Energieausweis: Energiebedarfsausweis\n- Wesentliche Energieträger: GAS\n- Endenergiebedarf: 270.3 kWh/(m²*a)\n- Energieeffizienzklasse: H\nAnbieter-Objekt-ID: SAMPLE-219899",
"category": "Häuser zum Kauf",
"category_path": [
"Immobilien",
"Haus_kaufen"
],
"url": "https://www.kleinanzeigen.de/s-anzeige/sample-family-home-with-garden/3412293903-208-464",
"attributes": {
"Wohnfläche": "150 m²",
"Zimmer": "7",
"Schlafzimmer": "4",
"Badezimmer": "2",
"Grundstücksfläche": "951 m²",
"Haustyp": "Einfamilienhaus freistehend",
"Etagen": "2",
"Baujahr": "1953",
"Provision": "Mit Provision",
"Ausstattung": [
"Einbauküche",
"Keller",
"Garage/Stellplatz"
]
}
},
"offer": {
"offer_id": "3412293903",
"listed_at_text": "17.06.2026",
"ad_type": "OFFERED",
"price_type": "FIXED"
},
"seller": {
"seller_name": "Sample Immobilien GmbH - Jana Beispiel",
"seller_type": "Trade",
"name": "Sample Immobilien GmbH - Jana Beispiel",
"business_name": "Sample Immobilien GmbH - Lübeck",
"business_profile_url": "https://www.kleinanzeigen.de/pro/sample-immobilien-luebeck",
"active_since": "19.07.2019",
"listing_count": 118,
"phone": "040-0000000"
},
"relationships": {
"seller": {
"name": "Sample Immobilien GmbH - Jana Beispiel",
"seller_type": "Trade"
},
"merchant": {
"name": "Sample Immobilien GmbH - Lübeck",
"url": "https://www.kleinanzeigen.de/pro/sample-immobilien-luebeck"
}
},
"attributes": {
"categories": [
"Immobilien",
"Haus_kaufen"
],
"listing_attributes": {
"Wohnfläche": "150 m²",
"Zimmer": "7",
"Schlafzimmer": "4",
"Badezimmer": "2",
"Grundstücksfläche": "951 m²",
"Haustyp": "Einfamilienhaus freistehend",
"Etagen": "2",
"Baujahr": "1953",
"Provision": "Mit Provision",
"Ausstattung": [
"Einbauküche",
"Keller",
"Garage/Stellplatz"
]
},
"description_sections": {
"Ausstattung": {
"items": [
"Insgesamt ca. 150 m²",
"Aufgeteilt auf 7 Zimmer",
"Baujahr Haupthaus ca. 1953",
"Baujahr Anbau ca. 1993",
"Großzügiger Wohn-Essbereich",
"Wohnküche",
"4 Schlafzimmer möglich",
"Arbeits-/ Gästezimmer",
"Gäste-Duschbad",
"Wannenbad"
],
"details": {
"Erbpacht": "199,- € p.M"
}
},
"Weitere Angaben": {
"Verfügbar ab": "nach Vereinbarung",
"Provisionshinweis": "Sample commission notice for public documentation.",
"Grundstücksfläche": "ca. 951 m²"
},
"Energie": {
"Energieausweis": "Energiebedarfsausweis",
"Wesentliche Energieträger": "Gas",
"Endenergiebedarf": "270.3 kWh/(m²*a)",
"Energieeffizienzklasse": "H",
"Gültig bis": "05-2036",
"Heizungsart": "Etagenheizung",
"Anbieter-Objekt-ID": "SAMPLE-219899"
}
}
}
}

Field Reference

Record Envelope

  • record_type (string, required): normalized record family. Product and classified listings are saved as product.
  • record_id (string, required when available): stable Kleinanzeigen listing identifier and recommended upsert key.

Source Context

  • source_context (object, required): provenance and input context for the record.
  • source_context.source_id (string, optional): source label for the actor output.
  • source_context.source (string, optional): human-readable source name.
  • source_context.source_domain (string, optional): public source domain.
  • source_context.source_url (string, optional): public listing URL associated with the record.
  • source_context.canonical_url (string, optional): normalized public listing URL for matching or audit use.
  • source_context.seed_url (string, optional): input URL that led to the record.
  • source_context.seed_type (string, optional): source input shape that produced the record.
  • source_context.search_query (string, optional): query that produced the listing when query discovery is used.
  • source_context.seed_value (string, optional): compact value for the source input, usually a query or URL.
  • source_context.position (integer, optional): one-based result position within the collected source scope.
  • source_context.language (string, optional): normalized language code.
  • source_context.country (string, optional): normalized country code.

Entity

  • entity (object, required): primary listing identity.
  • entity.title (string, optional): listing title.
  • entity.name (string, optional): display name, usually matching the title.
  • entity.description (string, optional): listing description when available.
  • entity.url (string, optional): public listing URL.
  • entity.external_ids (object, optional): source identifiers for the listing.
  • entity.external_ids.listing_id (string, optional): Kleinanzeigen listing ID.

Location

  • location (object, optional): displayed location and geographic details.
  • location.address (string, optional): displayed address or location text.
  • location.city (string, optional): city, district, or locality text.
  • location.postal_code (string, optional): parsed postal code when available.
  • location.latitude (number, optional): latitude coordinate when available.
  • location.longitude (number, optional): longitude coordinate when available.
  • location.display_location (string, optional): best display-ready location label.
  • location.locality (string, optional): locality or postal locality text.

Pricing

  • pricing (object, optional): price and price classification.
  • pricing.price (number, optional): parsed numeric listing price.
  • pricing.price_text (string, optional): source display price text.
  • pricing.currency (string, optional): currency code, usually EUR.
  • pricing.price_type (string, optional): source price classification, such as FIXED.
  • pricing.negotiable (boolean, optional): whether negotiation is indicated.
  • pricing.free (boolean, optional): whether the listing appears to be free.

Media

  • media (object, optional): image URLs associated with the listing.
  • media.main_image_url (string, optional): primary display image URL.
  • media.primary_image_url (string, optional): primary source image URL.
  • media.image_urls (array of strings, optional): image URLs in source order.

Product

  • product (object, optional): product, listing, and category fields for catalog-style analysis.
  • product.product_id (string, optional): product-facing copy of the listing ID.
  • product.listing_id (string, optional): Kleinanzeigen listing ID in the product group.
  • product.description (string, optional): listing description repeated for product-oriented exports.
  • product.category (string, optional): most specific category label.
  • product.category_path (array of strings, optional): category hierarchy from broad to specific.
  • product.url (string, optional): public listing URL repeated in the product group.
  • product.attributes (object, optional): category-specific attributes such as area, rooms, construction year, condition, equipment, or other listing facts.

Offer

  • offer (object, optional): offer-level fields.
  • offer.offer_id (string, optional): offer-facing copy of the listing ID.
  • offer.listed_at_text (string, optional): source date or freshness text.
  • offer.ad_type (string, optional): offer classification such as OFFERED.
  • offer.price_type (string, optional): price classification repeated at offer level.

Seller And Relationships

  • seller (object, optional): seller or merchant context visible on the listing.
  • seller.seller_name (string, optional): seller display name.
  • seller.seller_type (string, optional): seller type, such as private or trade.
  • seller.name (string, optional): seller display name repeated for generic consumers.
  • seller.business_name (string, optional): business or merchant name.
  • seller.business_profile_url (string, optional): public business profile URL.
  • seller.active_since (string, optional): source display text for account activity start.
  • seller.listing_count (integer, optional): listing count shown publicly.
  • seller.phone (string, optional): public phone text when exposed by the listing.
  • relationships (object, optional): compact related entities for seller and merchant joins.
  • relationships.seller.name (string, optional): seller name in relationship form.
  • relationships.seller.seller_type (string, optional): seller type in relationship form.
  • relationships.merchant.name (string, optional): merchant name in relationship form.
  • relationships.merchant.url (string, optional): public merchant profile URL.

Attributes

  • attributes (object, optional): additional listing facts, categories, and structured description sections.
  • attributes.categories (array of strings, optional): category path repeated for attribute-oriented systems.
  • attributes.listing_attributes (object, optional): category-specific listing attributes such as area, room count, equipment, or condition.
  • attributes.description_sections (object, optional): structured sections extracted from long descriptions when available.
  • attributes.description_sections.Ausstattung.items (array of strings, optional): equipment or feature bullets from the example record.
  • attributes.description_sections.Ausstattung.details (object, optional): key-value details from the equipment section.
  • attributes.description_sections.Weitere Angaben (object, optional): additional key-value details from the listing description.
  • attributes.description_sections.Energie (object, optional): energy-related key-value details for real estate records when available.

Data Model Notes

  • Identity fields: use record_id as the primary matching, deduplication, and upsert key when present.
  • Source/provenance fields: use source_context.source_url, source_context.canonical_url, source_context.search_query, and source_context.position to trace records back to the public source and input scope.
  • Business attributes: entity, pricing, location, product, offer, seller, and attributes carry the main review and analysis value.
  • Nested objects: related fields are grouped together so JSON-first tools can preserve structure and analysts can flatten deliberately when needed.
  • Optional fields: public listings vary by category, region, seller type, and listing detail; null-check optional fields in dashboards and pipelines.
  • Repeated runs: compare records across runs with record_id plus Apify run metadata, input segment, and export timestamp stored outside or alongside the record.

Data Quality, Guarantees, And Handling

  • Structured records: results are normalized into predictable JSON objects for downstream use.
  • Best-effort extraction: fields may vary by region, availability, account visibility, UI experiments, or source-side changes.
  • Optional fields: null-check in downstream code, spreadsheets, dashboards, and AI workflows.
  • Deduplication: use record_id as the strongest stable key, with source_context.canonical_url as a secondary audit key.
  • Freshness: results reflect the publicly available data at run time.
  • Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, vector stores, or monitoring systems.
  • Schema awareness: downstream systems should rely on documented fields and handle newly missing optional fields gracefully.

Tips For Best Results

  • Start with a small limit to validate the output shape before scaling up.
  • Use one geography, category, keyword, or source segment per run when you need cleaner comparison.
  • Leave optional filters empty when the goal is broad discovery.
  • Add filters gradually to understand how each field changes coverage.
  • Use direct startUrls for repeatable monitoring of known result pages, merchant profiles, or listing URLs.
  • Enable enrich_data when full descriptions, attributes, seller context, or image sets are important.
  • Schedule recurring runs for monitoring workflows instead of relying on manual one-off exports.
  • Keep a saved copy of the input configuration used for each recurring workflow.

How to Run on Apify

  1. Open the Actor in Apify Console.
  2. Configure the available input fields for the target scope.
  3. Set limit to control the maximum number of outputs per source.
  4. Click Start and wait for the run to finish.
  5. Open the dataset and inspect the first records.
  6. Download results in JSON, CSV, Excel, or another supported format.

Agentic And API-First Usage

This actor can be used as a structured data acquisition step inside larger automated workflows. It is well suited for systems that need a bounded Kleinanzeigen dataset, predictable JSON fields, and stable identifiers before running analysis, enrichment, alerting, or human review.

Agent workflow pattern:

  1. Generate or select a scoped input from the supported schema.
  2. Run the actor manually, on a schedule, or through Apify platform automation.
  3. Wait for completion and read the dataset records.
  4. Validate records against the Field Reference.
  5. Upsert records into the downstream system using record_id.
  6. Trigger analysis, enrichment, alerts, or human review.

Practical notes for agentic use:

  • Keep prompts and automations grounded in the documented input parameters.
  • Start with small validation runs before allowing broad automated collection.
  • Feed the Field Reference and a small output sample to downstream AI steps.
  • Treat optional fields as nullable instead of asking agents to infer missing values.
  • Store run ID, input configuration, and dataset export metadata outside the record when building audit trails.

Scheduling & Automation

Scheduling

Automated Data Collection

Use Apify schedules to run the actor repeatedly and keep recurring datasets current. Scheduled runs are useful for pricing dashboards, listing availability checks, merchant monitoring, and category trend reporting.

  • Navigate to Schedules in Apify Console.
  • Create a new schedule, such as daily, weekly, or custom cron.
  • Configure input parameters.
  • Enable notifications for run completion.
  • Add webhooks for automated processing.

Integration Options

  • BI dashboards: monitor pricing, availability, category movement, seller mix, and geographic coverage over time.
  • Warehouses and lakehouses: store normalized listing records for historical analysis, joins, and reporting.
  • Scheduled exports: deliver recurring CSV, Excel, or JSON files to analysts and operations teams.
  • Webhooks: trigger ingestion, alerting, validation, or review workflows after each completed run.
  • CRM enrichment: sync public seller, merchant, location, and listing attributes into account or lead records where appropriate.
  • Search and vector indexes: make listing titles, descriptions, categories, and attributes searchable for research or agent context.
  • Google Sheets, Airtable, Zapier, or Make: route smaller datasets into lightweight review and no-code workflow tools.

Export Formats And Downstream Use

  • JSON: for APIs, applications, AI agents, and data pipelines that should preserve nested objects.
  • CSV or Excel: for spreadsheet workflows, stakeholder review, QA, and lightweight analysis.
  • API access: for automated ingestion into owned systems.
  • BI and warehouses: for reporting, dashboards, historical analysis, and monitoring.
  • Search or vector indexes: for discovery, semantic search, retrieval workflows, or agent context built from listing text and attributes.

Downstream Pipeline Guide

  • Idempotency: use record_id for upserts, and keep source_context.canonical_url as a secondary audit key.
  • Null handling: treat optional fields as nullable because category, seller, media, location, and attribute coverage can vary.
  • Type handling: preserve numbers, booleans, arrays, and nested objects when exporting to JSON-first systems.
  • Flattening: if exporting to CSV or Excel, flatten nested objects deliberately and keep the original JSON export for full fidelity.
  • Partitioning: store run date, input segment, source_context.search_query, geography, category, or workflow name outside or alongside records for easier analysis.
  • Change detection: compare repeated runs by record_id and selected business fields such as pricing.price, pricing.price_text, offer.listed_at_text, and seller.listing_count.
  • Quality checks: monitor record count, duplicate rate, missing record_id, and fill rates for important optional groups such as pricing, location, seller, and attributes.
  • Human review: route records with missing critical fields, unusual values, or changed price/status signals into a review queue when needed.
  • Retention: decide how long to keep raw exports versus normalized warehouse tables based on your use case.

Performance

  • Small runs (< 1,000 outputs): ~3-5 minutes.
  • Medium runs (1,000-5,000 outputs): ~5-15 minutes.
  • Large runs (5,000+ outputs): ~15-30 minutes.

Execution time varies based on filters, result volume, target availability, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

Limitations

  • Availability depends on what Kleinanzeigen publicly exposes at run time.
  • Some optional fields may be missing on sparse records, search-result records, certain categories, or listings with limited public detail.
  • Very broad searches may take longer or require higher limits.
  • Target-side changes can affect field availability, naming, or record completeness.
  • Regional, account, visibility, or availability differences may change visible results.
  • The actor provides structured public data, not business advice, legal advice, valuation advice, or guaranteed completeness.
  • Direct URLs, categories, filters, and limits should be reviewed when workflows require high precision.

Troubleshooting

  • No results returned: check filters, location or category spelling, direct URLs, and whether Kleinanzeigen has matching public records.
  • Fewer results than expected: broaden filters, raise limit, or verify that the target scope contains enough matching records.
  • Some fields are empty: optional fields depend on what each listing publicly provides.
  • Duplicate-looking records: compare record_id and decide whether records represent variants, locations, reposts, or updates.
  • Run takes longer than expected: reduce scope, lower limit for validation, or split broad collection into smaller segments.
  • Output changed: compare the current output with the Field Reference and report a small sample if support is needed.
  • Downstream import failed: check JSON validity, nullable fields, nested objects, and whether your destination expects flattened columns.

FAQ

What data does this actor collect?

It collects structured public Kleinanzeigen listing records, including listing identity, price, location, category, media, offer details, seller context, relationships, attributes, and source context when available.

Can I filter by location, category, price, seller type, shipping, or keyword?

Yes. Use queries with fields such as location, category, min_price, max_price, seller_type, shipping, shipping_carrier, condition, and category-specific filters. Direct URLs keep the scope already encoded in the URL.

Why did I receive fewer results than my limit?

The target scope may contain fewer matching public listings than requested, filters may be too narrow, or some records may not expose enough usable public detail.

How should I choose a limit for my first run?

Start with a small limit such as 10-50 records, inspect the dataset, then increase the limit for recurring exports or broader coverage.

Can I schedule recurring runs?

Yes. Use Apify schedules to run the same input daily, weekly, or on a custom cadence.

How do I avoid duplicates across runs?

Use record_id as the main unique key. Keep source_context.canonical_url or source_context.source_url as an audit reference.

What is the best field to use as a unique key?

Use record_id when present. For URL-based reconciliation, use source_context.canonical_url as a secondary key.

Can I use the output with AI agents or automated workflows?

Yes. The dataset is JSON-based and includes stable identifiers, source context, and nested field groups that are suitable for agentic review, routing, enrichment, and monitoring workflows.

Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets can be exported in JSON, CSV, Excel, and other supported formats. JSON preserves the full nested record structure.

Does this actor collect private data?

The actor is intended for publicly available Kleinanzeigen information. Users are responsible for using exported data lawfully and responsibly.

What should I include when reporting an issue?

Include the redacted input, run ID, expected behavior, actual behavior, a small output sample if relevant, and the downstream export or destination if the issue is pipeline-related.

Compliance & Ethics

Responsible Data Collection

This actor collects publicly available Kleinanzeigen listing information for legitimate business purposes. Users are responsible for ensuring that their use of collected records complies with applicable laws, regulations, platform terms, and company policies.

Legitimate use cases include:

  • Marketplace research and market analysis.
  • Inventory, pricing, and availability monitoring.
  • Public listing enrichment for operational review, reporting, and analytics.

This section is informational and not legal advice.

Best Practices

  • Use collected data in accordance with applicable laws, regulations, and the target site's terms.
  • Respect individual privacy and personal information.
  • Use data responsibly and avoid disruptive or excessive collection.
  • Do not use this actor for spamming, harassment, discrimination, or other harmful purposes.
  • Follow relevant data protection requirements where applicable, including GDPR, CCPA, or sector-specific rules.
  • Review your own retention, access control, and data-sharing policies before operationalizing the dataset.

Support

For help, use the actor page or Issues. Include the redacted input used, run ID, expected versus actual behavior, a small output sample when useful, and the downstream destination or export format if the issue is related to a pipeline or import workflow.