π eBay Kleinanzeigen Scraper
Pricing
from $4.99 / 1,000 results
π eBay Kleinanzeigen Scraper
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Kleinanzeigen.de (formerly eBay-Kleinanzeigen) at scale β full ad details, seller info, prices, images, and commercial shop data. With smart, escalating proxy fallback and per-section output tables so your data lands exactly where you expect it.
β¨ Why Choose Us?
| Other scrapers | π This actor |
|---|---|
| Only return search-results summaries | Returns full ad details (art, brand, color, size, shipping, images, seller, company) |
| Use a single proxy strategy | Smart 3-tier proxy ladder: direct β datacenter β residential |
| Dump everything into one table | 5 separate output tables: Overview, Pricing, Seller, Company, Media |
| One-shot only | Monitoring mode for daily change detection (new / updated / delisted) |
| Crash β lose everything | Live save β every record is persisted as it's scraped |
| Guess at fields when missing | Brand & size inference from title + description when the seller didn't fill them in |
π Key Features
- π Bulk input β pass any number of search URLs or single-ad URLs
- π Smart proxy ladder β starts direct, escalates to datacenter, then residential (3 retries) on blocks. Once escalated, it sticks.
- πΎ Live persistence β every ad is pushed to the dataset as soon as it's enriched
- π 5 output tables per run β Overview / Pricing / Seller / Company / Media
- π Monitoring mode β diff against the last run and emit only new / updated / delisted ads
- π‘οΈ Anti-block resilience β fresh sessions per search page, random jitter, Chrome TLS impersonation
- π’ Commercial seller enrichment β full impressum (address, phone, email, opening hours) for
/pro/shops - π©πͺ German-aware β handles
GrΓΆΓe/Marke/Farbe, Buyer-Protection fee parsing, soft-block recovery
π₯ Input
{"startUrls": [{ "url": "https://www.kleinanzeigen.de/s-berlin/basecap/k0l3331" }],"query": "basecap","maxItems": 100,"concurrency": 10,"maxRetries": 3,"requestDelay": 2.0,"monitoringMode": false,"monitoringFields": ["price", "title", "address"],"proxyConfiguration": { "useApifyProxy": false }}
| Field | Type | Description |
|---|---|---|
startUrls | array | List of Kleinanzeigen URLs. Each can be a search-results page (/s-β¦) or a single ad page (/s-anzeige/β¦). Required. |
query | string | Optional plain keyword used to build a Germany-wide search URL when startUrls is empty. |
maxItems | integer | Maximum number of ads to scrape across all start URLs. Default 100. |
concurrency | integer | Max simultaneous HTTP requests. Default 10. |
maxRetries | integer | Retries per request before escalating proxy tier. Default 3. |
requestDelay | number | Politeness delay (s) between search-results page fetches. Random jitter is added. Default 2.0. |
monitoringMode | boolean | Compare against the last run's snapshot and emit only new / updated / delisted ads. Default false. |
monitoringFields | array | Which fields trigger an 'updated' diff entry. Default ["price", "title", "address"]. |
proxyConfiguration | object | Apify proxy config. Default = no proxy. Falls back to DATACENTER, then RESIDENTIAL on blocks. |
π€ Output
Each record matches the original schema you'd expect from a Kleinanzeigen ad.
{"url": "https://www.kleinanzeigen.de/s-anzeige/tofu-maus-dad-cap-basecap-β¦/3413526891-156-3398","id": "3413526891","title": "Tofu Maus Dad Cap Basecap Organic Anti Eat Meat Club","price": "25.00","priceCurrency": "EUR","art": "MΓΌtzen, Schals & Handschuhe","brand": "AntiEatMeatClub","color": "Grau","size": null,"shippingPrice": "1.99","kauferschutzPrice": "1.63","address": "12043 Berlin - NeukΓΆlln","date": "20.05.2026","viewsCount": 22,"primaryImageURL": "https://img.kleinanzeigen.de/api/v1/prod-ads/β¦","imageURLs": ["β¦", "β¦", "β¦"],"categoryURLs": ["β¦", "β¦"],"descriptionText": "Dad Cap mit Tofu Maus Aufschrift in Anthazit von AntiEatMeatClubβ¦","sellerName": "Jacob","sellerURL": "https://kleinanzeigen.de/s-bestandsliste.html?userId=1890453","sellerPhone": null,"sellerEmailFromDescription": null,"sellerPhoneFromDescription": null,"companyInfo": null}
π Output sections
Inside Apify Console, the Output tab presents 5 pre-configured tables:
| Section | What it shows |
|---|---|
| π Overview | The headline β title, price, brand, location, views, primary image |
| π° Pricing & Shipping | Price, currency, shipping cost, buyer-protection fee |
| π€ Seller Info | Seller name + profile URL + extracted phone / email |
| π’ Commercial Sellers | Full companyInfo for /pro/ shops only (address, hours, email, phone) |
| πΌοΈ Media & Images | Primary image + the full image gallery as an array |
The default dataset contains every field; the alias datasets (overview / pricing / seller / company / media) carry slimmed projections, ideal for analytics or CSV export.
π How to Use (Apify Console)
- Log in at console.apify.com β Actors
- Find this actor (π eBay Kleinanzeigen Scraper) and open it
- Paste one or more Kleinanzeigen URLs into π Kleinanzeigen URLs
- Tweak π¦ Maximum items to control how much to scrape
- (Optional) Keep π Proxy at default (no proxy) β the actor will escalate automatically if blocked
- Click Start
- Watch the live log: π / π / β / πͺ emojis tell you exactly what is happening
- Open Output when the run completes β pick a section view from the dropdown
- Export to JSON / CSV / XLSX from the same tab
π€ Use via API / MCP
Sync (waits for completion, returns dataset items):
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{ "url": "https://www.kleinanzeigen.de/s-berlin/basecap/k0l3331" }],"maxItems": 50}'
Async (fire-and-forget):
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "query": "basecap", "maxItems": 100 }'
MCP clients (Claude, Cursor) can call this actor via the Apify MCP server at mcp.apify.com.
π Proxy Strategy
ββββββββββββ block ββββββββββββββ block βββββββββββββββRequest ββββΊ β DIRECT β ββββββββββΊ β DATACENTER β ββββββββββΊ β RESIDENTIAL β ββΊ 3 retriesββββββββββββ ββββββββββββββ βββββββββββββββ
- Default = direct. No proxy is used until the platform actually blocks us.
- On block (HTTP 403 / 429 / 5xx, captcha page, or network error), the actor escalates one tier and sticks there for the rest of the run.
- On RESIDENTIAL the actor retries each request up to 3 times before giving up.
- Every escalation is logged with πͺ so you can audit it in the run log.
π― Best Use Cases
- ποΈ Price monitoring for resellers
- π Market research on private/used-goods categories
- π Vehicle / electronics arbitrage
- ποΈ Real estate / rental listing tracking
- π Daily change detection (new / updated / delisted ads β use
monitoringMode)
πΈ Pricing
This actor runs on pay-per-event pricing.
| Event | What it bills for |
|---|---|
apify-actor-start | Run startup (covered by Apify for the first 5s of compute) |
apify-default-dataset-item | One charge per ad pushed to the dataset |
Stop the run anytime to cap your spend β partial results are already in the dataset thanks to live persistence.
β Frequently Asked Questions
Q: Will I get blocked? Probably not on small runs β the actor starts direct, jitters its delays, uses a fresh session per search-results page, and impersonates Chrome's TLS fingerprint. If Kleinanzeigen does push back, the proxy ladder kicks in automatically.
Q: Why are some fields null?
Many Kleinanzeigen ads are posted by private sellers who skip the Marke / GrΓΆΓe / Farbe form fields. This actor falls back to inferring brand and size from the title and description, but if the cues aren't there, the field stays null rather than guessing wrong.
Q: How fast is it?
~25 ads per search page in roughly one round-trip-bound batch at concurrency=10. A 100-ad run typically completes in 1β3 minutes from direct (longer on residential).
Q: How do I scrape only new ads each day?
Turn on π Monitoring mode. The actor stores a snapshot in the run's key-value store and emits a changes alias dataset with _change: new | updated | delisted tags on subsequent runs.
Q: Can I scrape commercial shops in full?
Yes β when an ad belongs to a /pro/<slug> shop the actor automatically fetches the shop's impressum page and fills companyInfo.companyAddress, companyPhone, companyEmails, openingHours, and companyUrl.
π Support and Feedback
- π Issues: open an issue in the actor's Apify Console Issues tab
- π§ Contact: scrapier.io@gmail.com
- β If this actor helped you, leave a review β it helps other scrapers find it!
βοΈ Cautions / Legal
- Only public ad data is collected (no private accounts, no logins).
- You are responsible for compliance with GDPR, CCPA, anti-spam laws, and Kleinanzeigen's ToS when using the scraped data.
- Honor robots.txt and reasonable rate limits β the actor's default
concurrency=10andrequestDelay=2.0are tuned to be a good citizen.