Automatisiertes Airbnb-Scraping: Immobilien-Einblicke sofort erhalten

Zuletzt aktualisiert am April 28, 2026

Airbnb hostet über in mehr als 220 Ländern – und bietet keinen öffentlichen API-Zugriff auf Marktdaten. Wenn du Preis-Intelligence, Wettbewerbs-Benchmarks oder Forschungsdatensätze brauchst, bleibt Scraping im Grunde die einzige Option.

Der Haken? Airbnb gehört zu den schwierigsten Websites, die man im modernen Web scrapen kann. Die Seite läuft mit einem eigenen WAF, unterstützt von Akamai Bot Manager, rendert alles clientseitig mit React und rotiert CSS-Klassennamen, als würde ein misstrauischer Schlüsseldienst ständig die Schlösser wechseln. Ich habe viel Zeit damit verbracht, verschiedene Ansätze für das Airbnb-Scraping zu testen – von schlanken HTTP-Bibliotheken über vollständige Browserautomatisierung bis hin zu No-Code-KI-Tools – und die Realität ist: Keine einzelne Methode funktioniert für jeden Anwendungsfall perfekt.

Dieser Leitfaden führt dich durch alle fünf praktikablen Ansätze, mit echtem Code, ehrlichen Abwägungen und praxisnahen Tipps, damit deine IP nicht ins Bodenlose gebannt wird. Egal, ob du Python-Entwickler, Datenanalyst oder Immobilieninvestor bist, der einfach nur eine Tabelle möchte – hier findest du einen Weg.

Warum Airbnb scrapen? Praxisnahe Anwendungsfälle

Niemand scrapt Airbnb aus Spaß daran, verschachteltes HTML zu parsen. Menschen haben konkrete Projekte und Geschäftsziele – hier sind die sechs häufigsten:

AnwendungsfallWas du scrapestWer das macht
Dynamische PreisstrategieNächtliche Wettbewerberpreise innerhalb eines bestimmten RadiusHosts, Immobilienverwalter
InvestitionsanalyseAuslastungsindikatoren (Bewertungsfrequenz, KalenderverfĂĽgbarkeit), ADR, RevPARImmobilieninvestoren
Benchmarking von ReinigungsgebührenReinigungsgebühren über verschiedene Immobilientypen hinweg (Durchschnittsspanne von $81–$335 in großen US-Städten)Hosts, Pricing-Berater
Sentiment-Analyse von BewertungenGästebewertungen für NLP-/Sentiment-BewertungDatenwissenschaftler, Hospitality-Teams
Akademische ForschungDatensätze auf Marktebene für Wohnungspolitik, Tourismus, StadtökonomieForschende (48,7 % von 1.021 wissenschaftlichen Arbeiten zu Airbnb nutzten gescrapte Daten)
WettbewerbsbeobachtungNeue Inserate, Preisänderungen, Verfügbarkeit im ZeitverlaufSTR-Betreiber, Marktanalysten

Für laufende Anwendungsfälle wie Preisüberwachung oder Wettbewerbsbeobachtung ist geplantes oder automatisiertes Scraping besonders wertvoll – du brauchst aktuelle Daten, keinen einmaligen Schnappschuss.

Der Markt für Kurzzeitvermietungen wächst schneller als klassische Hotels: Die STR-Nachfrage , während die Hotelnachfrage um 0,3 % zurückging. Wenn du in diesem Bereich unterwegs bist, sind Daten dein Vorteil.

Warum Airbnb so schwierig zu scrapen ist

Bevor du eine einzige Zeile Code schreibst, hilft es zu verstehen, warum Airbnb bei der Scraping-Schwierigkeit mit bewertet wird. Drei Probleme addieren sich hier.

Airbnbs Anti-Bot-Abwehr

Airbnb verwendet einen eigenen WAF in Kombination mit , einem Bot-Erkennungssystem für Unternehmen, das jede Anfrage gleichzeitig über mehrere Dimensionen bewertet. Das ist nicht nur Rate Limiting – das ist KI-gestütztes Fingerprinting.

airbnb-unique-stays.webp

Die Erkennungsstufe, nach Risikoniveau geordnet:

  • TLS-Fingerprinting (HOCH): Die requests-Bibliothek von Python hat einen einzigartigen TLS-Handshake-Fingerprint, der zu keinem echten Browser passt. Akamai analysiert Cipher Suites, Erweiterungen und die ALPN-Reihenfolge mit JA3-/JA4-Methoden. Standard-requests erreicht auf geschĂĽtzten Seiten nur etwa gegenĂĽber 92 % bei Bibliotheken, die Browser-TLS-Fingerprints vortäuschen.
  • JavaScript-AusfĂĽhrung (HOCH): Akamai setzt clientseitige Skripte ein, die „Sensordaten“ sammeln – Geräteparameter, Hardware-Fähigkeiten, Betriebssystemdetails. Daraus wird das _abck-Cookie erzeugt. Ohne AusfĂĽhrung dieses JavaScripts werden Anfragen blockiert.
  • Browser-Fingerprinting (HOCH): Canvas-, WebGL- und Schriftartenanalyse erkennen Automatisierungstools. Headless-Browser verraten sich durch navigator.webdriver, fehlende Plugins und inkonsistente Hardwarewerte.
  • HTTP-Header-Analyse (HOCH): Fehlende Sec-Fetch-*-Header sind auf Airbnb.
  • IP-Reputation (MITTEL): Rechenzentrums-IPs werden sofort blockiert. Residential Proxies sind in größerem Umfang Pflicht.
  • Verhaltensanalyse (MITTEL): Zu regelmäßige Timing-Muster, keine Mausbewegung, kein Scrollen – alles eindeutige Hinweise.

Wenn du blockiert wirst, siehst du: 403 Forbidden (Fingerprint-Fehler), 429 Too Many Requests (Rate-Limit), 503 Service Unavailable (Akamai-Challenge-Seite) oder eine CAPTCHA-Seite.

Dynamische, stark JavaScript-basierte Seiten bei Airbnb

Ein einfaches requests.get() auf Airbnb liefert nur eine React-Hülle mit Platzhalter-HTML – keine eigentlichen Listungsdaten. Wie : „Einfache HTTP-Anfragen funktionieren schlicht nicht, und ohne passende Proxys und echtes JavaScript-Rendering scrapst du nicht Airbnb, sondern Platzhalter.“

Die tatsächlichen Daten werden clientseitig über interne GraphQL-API-Aufrufe geladen (/api/v3/StaysSearch für Suchergebnisse, /api/v3/PdpPlatformSections für Inseratsdetails). Das bedeutet: Für die meisten nützlichen Daten brauchst du entweder einen vollständigen Browser oder API-Intercepting.

Das DOM ändert sich ständig

Airbnb nutzt CSS-in-JS mit gehashten Klassennamen, die sich mit jedem Deployment ändern. Dokumentierte Beispiele sind _tyxjp1, lxq01kf, atm_mk_h2mmj6, t1jojoys und _8s3ctt. Wie erklärt: „Diese Klassen sind nicht dazu gedacht, stabil zu sein, und können sich jederzeit ändern, oft ohne sichtbare Änderungen an der Seite.“

Die Entwickler-Community hat diesen Schmerz ausführlich dokumentiert. , dass „CSS-Klassen sich ständig ändern, und sich darauf zu verlassen, ist der schnellste Weg, deinen Scraper zu zerstören.“ Ein erfahrener Entwickler in der DEV Community brachte es gut auf den Punkt: „Ein Scraper, der 50 % langsamer ist, aber nie kaputtgeht, ist unendlich wertvoller als ein schneller, der wöchentlich stirbt.“

Branchen-Schätzungen gehen davon aus, dass – wegen DOM-Verschiebungen, Fingerprinting-Updates oder Drosselung der Endpunkte.

Wähle deinen Ansatz: 5 Wege, Airbnb zu scrapen

Bevor es an Code geht, hier der Vergleich. Jeder Ansatz hat echte Vor- und Nachteile – es gibt keine universell „beste“ Methode.

AnsatzEinrichtungsaufwandGeschwindigkeitRobustheit gegen BotsWartungAm besten geeignet fĂĽr
Reines HTTP (requests / pyairbnb)GeringSchnellMittel (anfällig für API-Änderungen)MittelSchnelle Recherche, kleine Datensätze
Browser-Automatisierung (Selenium)HochLangsamMittelHoch (DOM-Brüche)Dynamische Inhalte, preisabhängig von Datum
Browser-Automatisierung (Playwright)MittelMittelMittel bis hochMittelModerne Alternative zu Selenium
Scraping-API (ScrapingBee, Bright Data)GeringSchnellHoch (Proxy-Rotation integriert)GeringScraping in groĂźem Umfang, Produktionseinsatz
No-Code (Thunderbit)MinimalSchnellHoch (KI passt sich Layout-Änderungen an)KeineNicht-Entwickler, einmalige Analysen

Der Rest dieses Artikels führt dich Schritt für Schritt durch die Python-Ansätze; am Ende gibt es einen No-Code-Abschnitt für alle, die den Code lieber ganz überspringen.

Schritt fĂĽr Schritt: Airbnb mit Python und Requests scrapen (HTTP-first)

Das ist die schlanke, schnelle Einstiegsoption – kein Browser nötig, keine Chromedriver-Probleme. Der Kompromiss: Es funktioniert für einige Daten, aber nicht für alle.

Python-Umgebung einrichten

Lege einen Projektordner an und richte eine virtuelle Umgebung ein:

1mkdir airbnb-scraper && cd airbnb-scraper
2python -m venv venv
3source venv/bin/activate  # Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 pandas pyairbnb

pyairbnb ist eine schlanke Bibliothek (, zuletzt veröffentlicht im Februar 2026), die Airbnbs interne StaysSearch-GraphQL-API abfängt. Sie scrapt überhaupt kein HTML, was sie robust gegenüber Änderungen an CSS-Klassen macht. Das Ein-Personen-Maintainer-Modell ist ein Risiko, aber die Bibliothek wird aktiv aktualisiert.

Option A: pyairbnb fĂĽr schnelle Suchergebnisse nutzen

Der schnellste Weg zu strukturierten Airbnb-Daten:

1import pyairbnb
2import pandas as pd
3# Nach Ort und Datum suchen
4results = pyairbnb.search_all(
5    query="Austin, TX",
6    checkin="2025-08-01",
7    checkout="2025-08-03",
8    adults=2,
9    currency="USD"
10)
11# In DataFrame umwandeln
12df = pd.DataFrame(results)
13print(df[['name', 'price', 'rating', 'reviewsCount', 'url']].head())
14df.to_csv("airbnb_austin.csv", index=False)

pyairbnb unterstĂĽtzt auĂźerdem get_details(), get_price(), get_reviews(), get_calendar() und get_listings_from_user(). Alle Funktionen akzeptieren einen Proxy-URL-Parameter fĂĽr die Rotation.

Option B: Manuelle HTTP-Anfragen mit BeautifulSoup

Wenn du nicht von einer Drittanbieter-Bibliothek abhängig sein willst, kannst du Anfragen direkt senden. Vorwarnung: Reines requests wird wegen TLS-Fingerprinting schnell blockiert. Der Einsatz von curl_cffi (das Browser-TLS-Fingerprints imitiert) verbessert die Erfolgsquote deutlich.

1from curl_cffi import requests as cffi_requests
2from bs4 import BeautifulSoup
3import json
4url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
5headers = {
6    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
7    "Accept-Language": "en-US,en;q=0.9",
8    "Sec-Fetch-Dest": "document",
9    "Sec-Fetch-Mode": "navigate",
10    "Sec-Fetch-Site": "none",
11    "Sec-Fetch-User": "?1",
12}
13response = cffi_requests.get(url, headers=headers, impersonate="chrome131")
14soup = BeautifulSoup(response.text, "html.parser")

Daten aus Schema.org-Mikrodaten extrahieren

Airbnb bindet schema.org-Mikrodaten direkt ins HTML ein – und diese semantischen Tags sind . Achte auf Container mit itemprop="itemListElement":

1listings = soup.find_all("div", itemprop="itemListElement")
2data = []
3for listing in listings:
4    name_tag = listing.find("meta", itemprop="name")
5    url_tag = listing.find("meta", itemprop="url")
6    position_tag = listing.find("meta", itemprop="position")
7    data.append({
8        "name": name_tag["content"] if name_tag else None,
9        "url": url_tag["content"] if url_tag else None,
10        "position": position_tag["content"] if position_tag else None,
11    })
12df = pd.DataFrame(data)
13df.to_csv("airbnb_listings.csv", index=False)

Die Einschränkung: schema.org-Tags liefern dir Inseratsnamen, URLs und Positionen – aber keine Preise, Bewertungen oder Annehmlichkeiten. Für reichhaltigere Daten brauchst du Browserautomatisierung oder API-Intercepting.

Schritt fĂĽr Schritt: Airbnb mit Python und Selenium oder Playwright scrapen

Wenn du dynamische Inhalte brauchst – preisabhängig von Datum, Annehmlichkeiten hinter „Mehr anzeigen“-Buttons, vollständige Bewertungstexte – ist Browserautomatisierung das richtige Werkzeug.

Wann du Browserautomatisierung einsetzen solltest

  • Seiten, die eine Datumsauswahl benötigen, um echte Preise anzuzeigen
  • Annehmlichkeiten und Bewertungen, die hinter interaktiven Elementen verborgen sind
  • Alle Daten, die erst nach JavaScript-AusfĂĽhrung geladen werden
  • Wenn du mit der Seite interagieren musst (scrollen, klicken)

Selenium vs. Playwright: Playwright hat sich durchgesetzt (meistens)

Playwright hat Selenium als bevorzugtes Tool für Browserautomatisierung überholt. Es ist schneller, hat integrierte Async-Unterstützung, installiert Browser-Binaries automatisch und kommt mit modernen Web-Apps besser zurecht. Slelniums anhaltendes – bei dem ChromeDriver hinter Chrome-Updates zurückbleibt – bleibt ein ständiger Nervfaktor.

Trotzdem hat Selenium ein größeres Ökosystem an Tutorials und StackOverflow-Antworten – nutze also das, womit du dich wohler fühlst.

Playwright einrichten

1pip install playwright playwright-stealth
2playwright install chromium

Zu Airbnb navigieren und Inserate extrahieren

1import asyncio
2from playwright.async_api import async_playwright
3from playwright_stealth import stealth_async
4import json
5async def scrape_airbnb():
6    async with async_playwright() as p:
7        browser = await p.chromium.launch(headless=False)  # headless=True ist riskanter
8        context = await browser.new_context(
9            viewport={"width": 1920, "height": 1080},
10            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
11        )
12        page = await context.new_page()
13        await stealth_async(page)
14        url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
15        await page.goto(url, wait_until="networkidle")
16        # Auf Karten mit Inseraten warten, mittels data-testid (stabiler als Klassen)
17        await page.wait_for_selector('[data-testid="card-container"]', timeout=15000)
18        # Inseratsdaten extrahieren
19        listings = await page.query_selector_all('[data-testid="card-container"]')
20        results = []
21        for listing in listings:
22            title_el = await listing.query_selector('[data-testid="listing-card-title"]')
23            subtitle_el = await listing.query_selector('[data-testid="listing-card-subtitle"]')
24            title = await title_el.inner_text() if title_el else None
25            subtitle = await subtitle_el.inner_text() if subtitle_el else None
26            results.append({"title": title, "subtitle": subtitle})
27        await browser.close()
28        return results
29data = asyncio.run(scrape_airbnb())

Die GraphQL-API abfangen (die zuverlässigste DIY-Methode)

Statt DOM-Elemente zu parsen, die ständig kaputtgehen, kannst du Airbnbs interne API-Aufrufe abfangen. Das liefert sauberes, strukturiertes JSON:

1api_responses = []
2async def handle_response(response):
3    if "StaysSearch" in response.url:
4        try:
5            data = await response.json()
6            api_responses.append(data)
7        except:
8            pass
9page.on("response", handle_response)
10await page.goto(url, wait_until="networkidle")
11# API-Antwort parsen
12if api_responses:
13    search_results = api_responses[0]["data"]["presentation"]["staysSearch"]["results"]["searchResults"]
14    for result in search_results:
15        listing = result.get("listing", {})
16        pricing = result.get("pricingQuote", {})
17        print(f"{listing.get('name')} — {pricing.get('price', {}).get('total')}")

Die StaysSearch-Antwort enthält id, name, roomTypeCategory, bedrooms, bathrooms, personCapacity, avgRating, reviewsCount, isSuperhost und vollständige Preisaufschlüsselungen. Das sind dieselben Daten, die Airbnbs Frontend zum Rendern der Seite nutzt.

Pagination handhaben

Airbnb zeigt ungefähr 18 Inserate pro Seite an und nutzt den URL-Parameter items_offset. Das Maximum liegt bei etwa 17 Seiten (~300 Inserate pro Suche).

1import time
2import random
3base_url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
4all_results = []
5for page_num in range(17):  # Max. ~17 Seiten
6    offset = page_num * 18
7    paginated_url = f"{base_url}&items_offset={offset}"
8    # ... wie oben navigieren und scrapen ...
9    time.sleep(random.uniform(3, 7))  # Zufällige Pause zwischen den Seiten

So scrapst du Airbnb-Preise mit Python (das Problem mit datumsabhängigen Preisen lösen)

Das ist der Abschnitt, den die meisten Tutorials überspringen – und genau der ist für die Preisanalyse am wichtigsten.

Warum Airbnb-Preise ohne Daten nicht angezeigt werden

In etwa 90 % der Fälle verlangt Airbnb Check-in-/Check-out-Daten, bevor ein echter Preis angezeigt wird. Ohne Daten bekommst du nur eine vage Spanne für den „Preis pro Nacht“ (oder manchmal gar keinen Preis). Wie : „Wenn ein Inserat keinen Preis anzeigt (zum Beispiel, wenn Airbnb möchte, dass du Daten oder Gästezahl anpasst), gibt die Funktion einfach None zurück.“

Gute Nachrichten: Seit April 2025 zeigt Airbnb standardmäßig für alle Gäste weltweit an. Zuvor gab es eine Option „Gesamtpreis anzeigen“ – fast 17 Millionen Gäste nutzten sie, bevor sie zum Standard wurde.

Daten ĂĽber URL-Parameter ĂĽbergeben

FĂĽge in deiner Such-URL immer checkin und checkout ein:

1https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2

Dadurch liefert Airbnb echte Nacht- und Gesamtpreise in der Seite und in den API-Antworten zurĂĽck.

Datumsbereiche fĂĽr die Preisanalyse durchlaufen

Für Hosts und Investoren, die Preisdaten über mehrere Saisons hinweg benötigen:

1from datetime import datetime, timedelta
2start_date = datetime(2025, 7, 1)
3end_date = datetime(2025, 12, 31)
4stay_length = 2  # Nächte
5current = start_date
6date_ranges = []
7while current + timedelta(days=stay_length) <= end_date:
8    checkin = current.strftime("%Y-%m-%d")
9    checkout = (current + timedelta(days=stay_length)).strftime("%Y-%m-%d")
10    date_ranges.append((checkin, checkout))
11    current += timedelta(days=7)  # Wöchentliche Intervalle
12for checkin, checkout in date_ranges:
13    url = f"https://www.airbnb.com/s/Austin--TX/homes?checkin={checkin}&checkout={checkout}&adults=2"
14    # ... Preisdaten scrapen ...
15    time.sleep(random.uniform(5, 10))  # RĂĽcksichtsvoll bei der Taktung

Beim Parsen der Preise aus der GraphQL-API-Antwort solltest du nach dem pricingQuote-Objekt suchen. Es enthält price.total, price.priceItems (einzelne Positionen wie Reinigungsgebühr, Servicegebühr) und rate.amount (Nachtpreis).

So ĂĽberlebt dein Python-Airbnb-Scraper Website-Redesigns

Das ist der Wartungsabschnitt, den niemand schreiben will – aber er ist wahrscheinlich der wichtigste Teil jedes Airbnb-Scraping-Projekts.

Fragile vs. robuste Selektoren

Selektor-StrategieBruchrisikoCodeaufwandBeispiel
CSS-Klassennamen (z. B. .t1jojoys)🔴 Hoch — ändert sich häufigGeringsoup.select('.t1jojoys')
data-testid-Attribute🟡 Mittel — stabilerGeringsoup.select('[data-testid="listing-card-title"]')
Schema.org-Mikrodaten in HTML🟢 Niedrig — struktureller StandardMittelsoup.find("meta", itemprop="name")
GraphQL-API-Intercepting🟢 Niedrig — strukturiertes JSONMittelresponse.json()["data"]["presentation"]
KI-basierte Extraktion (Thunderbit)🟢 Keine — passt sich automatisch anKeine2-Klick-UI, kein Code

data-testid-Attribute verwenden

Aktuell dokumentierte data-testid-Werte auf Airbnb sind unter anderem card-container, listing-card-title, listing-card-subtitle und listing-card-name. Diese hängen mit Airbnbs internem Test-Framework zusammen, nicht mit der visuellen Gestaltung, daher ändern sie sich seltener als CSS-Klassen. Ganz ausgeschlossen ist eine Änderung aber nicht – nur eben seltener.

1# Robuster als Selektoren auf Klassenbasis
2title = await page.query_selector('[data-testid="listing-card-title"]')

Schema.org-Mikrodaten verwenden

Airbnb nutzt itemprop-Attribute direkt im HTML-Markup. Diese folgen Webstandards und ändern sich weit seltener als visuelle CSS-Klassen:

1# Alle Inserats-Elemente per schema.org-Markup extrahieren
2listings = soup.find_all("div", itemprop="itemListElement")
3for listing in listings:
4    name = listing.find("meta", itemprop="name")["content"]
5    url = listing.find("meta", itemprop="url")["content"]

Die GraphQL-API abfangen

Der zuverlässigste DIY-Ansatz. Airbnbs interne API liefert sauberes JSON, das für das Frontend strukturiert ist. Das Antwortformat ändert sich seltener als das DOM, weil auch das Frontend-Team darauf angewiesen ist.

Warum KI-basierte Extraktion Wartung komplett eliminiert

Auch die besten Selektorstrategien gehen irgendwann kaputt. data-testid-Werte werden umbenannt. API-Antwortstrukturen werden versioniert. Der einzige Ansatz, der Wartung wirklich eliminiert, ist einer, der die Seite bei jedem Lauf frisch mit KI liest – ganz ohne fest verdrahtete Selektoren. Mehr dazu im Thunderbit-Abschnitt unten.

So vermeidest du Blocks beim Airbnb-Scraping

Praxisnahe Tipps aus Erfahrung und Community-Konsens.

Proxys rotieren (Residential ist Pflicht)

Datacenter-IPs werden von Airbnb sofort blockiert. Residential Proxies sind bei jeder relevanten Größenordnung erforderlich. Die leistungsstärksten Anbieter mit Blick auf Preis und Performance:

AnbieterPreis (pro GB)ErfolgsquoteHinweise
Decodo (frĂĽher Smartproxy)ca. $2,20/GB bei 100 GB99,68 %Schnellste gemessene Antwort (0,54 s)
Bright Dataca. $5,04/GB bei 100 GB99 %+Größter Pool, die meisten Funktionen
Oxylabsca. $4/GB bei 100 GB99 %+Stark fĂĽr E-Commerce

Wichtige Erkenntnis zur Rotation von einem erfahrenen Entwickler: „Bei jeder Anfrage die IP zu rotieren ist eigentlich ein Warnsignal. Echte Nutzer behalten für eine Session dieselbe IP.“ Empfohlen werden Sticky Sessions von 5–10 Minuten, mit Rotation alle 20–30 Anfragen.

1proxies = {
2    "http": "http://user:pass@residential-proxy:port",
3    "https": "http://user:pass@residential-proxy:port",
4}
5response = cffi_requests.get(url, headers=headers, proxies=proxies, impersonate="chrome131")

Deine Anfragen drosseln

Community-Konsens zu sicheren Grenzen:

  • Max. Seiten pro Stunde: ≤100 (~1,6/Min.)
  • Pause zwischen Anfragen: 3–10 Sekunden (zufällig, idealerweise mit GauĂź-Verteilung)
  • Session-Pausen: Alle 20 Anfragen eine Pause von 30–60 Sekunden
  • Optimales Scraping-Zeitfenster: Nebenzeiten (~2 Uhr morgens Ortszeit)
  • Bei 429-Fehlern: Exponentielles Backoff mit Jitter
1import random
2import time
3delay = random.gauss(5, 1.5)  # Mittelwert 5 Sekunden, Standardabweichung 1,5
4delay = max(2, min(delay, 10))  # Auf 2–10 Sekunden begrenzen
5time.sleep(delay)

Vollständige, konsistente Header verwenden

Fehlende Sec-Fetch-*-Header sind . Jeder Header muss intern konsistent sein – wenn dein User-Agent Chrome 131 unter Windows behauptet, müssen alle anderen Header zu dieser Identität passen.

1headers = {
2    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
3    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
4    "Accept-Language": "en-US,en;q=0.9",
5    "Accept-Encoding": "gzip, deflate, br",
6    "Sec-Fetch-Dest": "document",
7    "Sec-Fetch-Mode": "navigate",
8    "Sec-Fetch-Site": "none",
9    "Sec-Fetch-User": "?1",
10    "Sec-CH-UA": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
11    "Sec-CH-UA-Platform": '"Windows"',
12}

Headless-Browser mit Vorsicht verwenden

Bei Playwright patcht das Paket playwright-stealth etwa 17 Umgehungsmodule (navigator.webdriver, Plugins, Sprachen, WebGL). Moderne Anti-Bot-Systeme prüfen jedoch mehr als 40 Eigenschaften, während nur rund 12 gepatcht werden. Der Betrieb im Nicht-Headless-Modus (headless=False) ist sicherer, aber langsamer.

Bei Selenium patcht undetected-chromedriver das ChromeDriver-Binary, um Automatisierungsindikatoren zu entfernen, aber der Headless-Modus bleibt instabil.

FĂĽr groĂźe Mengen eine Scraping-API in Betracht ziehen

Wenn du Tausende von Seiten scrapen willst, übernimmt eine Scraping-API Proxy-Rotation, CAPTCHA-Lösung und JavaScript-Rendering für dich. In einem erreichte Bright Data 99 % Erfolgsquote mit 48 Feldern pro Inserat. Der Nachteil sind die Kosten – der Stealth-Proxy-Modus von ScrapingBee kostet , sodass ein Tarif für 49 $/Monat nur etwa 3.333 Stealth-Anfragen ermöglicht.

Airbnb ohne Python scrapen: Die No-Code-Alternative mit Thunderbit

Nicht jeder, der Airbnb scrapt, ist Entwickler. Hosts wollen Preisvergleiche. Investoren wollen Marktdaten. Analysten wollen eine Tabelle. Wenn du die Python-Abschnitte gelesen hast und gedacht hast: „Das ist mehr Wartung, als ich mir vorgenommen habe“, dann ist dieser Abschnitt für dich.

Wie Thunderbit Airbnb in wenigen Klicks scrapt

ist ein KI-Web-Scraper, der als läuft. So funktioniert der Ablauf:

  1. Erweiterung installieren aus dem Chrome Web Store
  2. Zu einer Airbnb-Suchergebnisseite navigieren – füge Daten in die URL ein, damit die Preise korrekt sind (z. B. ?checkin=2025-08-01&checkout=2025-08-03)
  3. Auf „KI-Felder vorschlagen“ klicken – Thunderbit scannt die Seite und erkennt automatisch Spalten wie Inseratsname, Preis, Bewertung, Standort und URL
  4. Auf „Scrapen“ klicken – die Daten werden in einer strukturierten Tabelle ausgegeben
  5. „Unterseiten scrapen“ verwenden, um jede Inseratsdetailseite zu besuchen und Annehmlichkeiten, Bewertungen, Host-Infos und vollständige Preisaufschlüsselungen zu extrahieren – ganz ohne zusätzliche Konfiguration
  6. Exportieren nach Google Sheets, Excel, Airtable oder Notion

Die Unterseiten-Funktion ist hier besonders wichtig. Bei den Python-Ansätzen bedeutet das Scrapen von Detailseiten, dass du separate Parsing-Logik schreiben, Pagination innerhalb der Bewertungen behandeln und parallele Anfragen verwalten musst. Mit Thunderbit ist das ein Klick.

Warum Thunderbit die drei größten Airbnb-Scraping-Probleme löst

Die drei Probleme, die ich oben beschrieben habe – Anti-Bot-Abwehr, JavaScript-Rendering und DOM-Brüche – sind genau das, was Python-Scraper wartungsintensiv macht. Thunderbit adressiert alle drei:

  • Keine IP-Blockierungsprobleme: Der Cloud-Scraping-Modus von Thunderbit ĂĽbernimmt die Proxy-Rotation intern
  • Keine Selektor-BrĂĽche: Die KI liest die Seite bei jedem Lauf frisch – keine CSS-Selektoren, die gepflegt werden mĂĽssen, kein Code-Update bei Airbnb-Redesigns
  • Keine Einrichtungsprobleme: Keine Selenium-Driver, keine Python-Umgebung, keine Abhängigkeitskonflikte
  • Geplantes Scraping: Beschreibe das Zeitintervall in natĂĽrlicher Sprache fĂĽr laufende PreisĂĽberwachung – ideal fĂĽr dynamische Preisgestaltung und Wettbewerbsbeobachtung

Wann Python und wann Thunderbit?

Das ist kein Entweder-oder – es hängt davon ab, was du brauchst:

BedarfPythonThunderbit
Vollständige Kontrolle über die Scraping-Logik✅ Ja❌ Nein
Funktioniert ohne Programmierkenntnisse❌ Nein✅ Ja
Verarbeitet DOM-Änderungen automatisch❌ Nein✅ Ja (KI-basiert)
Unterseiten-Scraping (Detailseiten)Komplexes Setup1 Klick
Geplantes/wiederkehrendes ScrapingEigener Cron-JobIntegrierter Planer
Export nach Sheets/Excel/AirtableManueller CodeIntegriert
Integration in Datenpipelines✅ JaEingeschränkt
Kosten bei groĂźem Umfang (10.000+ Seiten)Server- + Proxy-KostenThunderbit-Preise

Wenn du Kontrolle auf Code-Ebene, eigene Logik oder die Integration in eine bestehende Datenpipeline brauchst, nimm Python. Wenn du die Daten schnell und ohne Wartungsaufwand brauchst, ist Thunderbit die pragmatische Wahl.

Rechtliche und ethische Hinweise zum Airbnb-Scraping

Kurz und praxisnah – ich bin kein Anwalt, und das ist keine Rechtsberatung.

Was das Gesetz grob sagt:

  • Das Urteil stellte fest, dass das Scrapen öffentlich zugänglicher Daten von Websites ohne Authentifizierung nicht gegen den CFAA verstößt
  • (Januar 2024): Ein Richter entschied, dass Nutzungsbedingungen Scraper im ausgeloggten Zustand nicht binden
  • Der Fall (2025) fĂĽhrt eine neue Theorie ein, wonach das Umgehen von CAPTCHAs und Rate Limits gegen DMCA-Anti-Umgehungsregelungen verstoĂźen könnte – das ist noch nicht getestet, aber es lohnt sich, das im Blick zu behalten

Was Airbnb sagt: Die verbieten automatisierte Datenerfassung ausdrücklich. Allerdings hat Airbnb noch nie öffentlich gegen einen Scraper geklagt. ist seit über 11 Jahren ohne rechtliche Schritte aktiv, obwohl Airbnb es als „Müll“ bezeichnet.

Praktische Leitlinien:

  • Nur öffentlich verfĂĽgbare Daten scrapen (Login-Schranken nicht umgehen)
  • robots.txt-Hinweise respektieren
  • Server nicht mit aggressiven Anfragelasten ĂĽberfordern
  • Personendaten unter GDPR/CCPA sorgfältig behandeln
  • FĂĽr kommerzielle Anwendungsfälle Rechtsberatung einholen

Fazit und wichtigste Erkenntnisse

Airbnb-Scraping reicht von „schnell und schmutzig“ bis „produktionstauglich“. Die wichtigsten Erkenntnisse:

  1. Übergib immer Daten in der URL (checkin- und checkout-Parameter) – ohne sie sind Preisdaten wertlos
  2. Verlass dich nicht auf CSS-Klassennamen. Nutze stattdessen data-testid-Attribute, schema.org-Mikrodaten oder API-Intercepting per GraphQL
  3. Residential Proxies sind im groĂźen Umfang Pflicht. Datacenter-IPs werden sofort blockiert
  4. Drossele Anfragen – zufällige Pausen von 3–10 Sekunden, Sticky Sessions und exponentielles Backoff bei Fehlern
  5. Für Scraping ohne Wartungsaufwand eliminieren KI-basierte Tools wie Selektorbrüche komplett – genau das Problem, das Python-Scraper teuer in der Pflege macht
  6. Wähle dein Werkzeug passend zum Projekt. Schnelle Recherche? pyairbnb. Dynamische Preisanalyse? Playwright mit API-Intercepting. Laufende Überwachung ohne Code? Thunderbit. Produktion im großen Maßstab? Eine Scraping-API.

Wenn du den No-Code-Weg ausprobieren möchtest, bietet – du kannst ihn in etwa zwei Minuten auf ein paar Airbnb-Suchergebnisseiten testen. Für den Python-Ansatz lassen sich alle Code-Muster in diesem Artikel direkt auf deinen konkreten Anwendungsfall anpassen.

Weitere Informationen zu Web-Scraping-Ansätzen und Tools findest du in unseren Leitfäden zu , und . Du kannst dir auch Tutorials auf dem ansehen.

FAQs

Kann Airbnb dich fĂĽrs Scraping blockieren?

Ja. Airbnb nutzt Akamai Bot Manager mit TLS-Fingerprinting, JavaScript-Challenges, Browser-Fingerprinting und IP-Reputationsbewertung. Wenn du erkannt wirst, bekommst du 403-, 429- oder CAPTCHA-Antworten. Proxy-Rotation, realistische Header und das Drosseln von Anfragen senken das Risiko, aber es gibt bei hohem Volumen keine garantierte Methode, Erkennung zu vermeiden.

Ist es legal, Airbnb zu scrapen?

Das Scrapen öffentlich verfügbarer Daten ist nach US-Rechtsprechung grundsätzlich zulässig (hiQ v. LinkedIn, Meta v. Bright Data), aber Airbnbs Nutzungsbedingungen verbieten es ausdrücklich. Die Rechtslage variiert je nach Jurisdiktion, und die aufkommende DMCA-Anti-Umgehungs-Theorie (Reddit v. Perplexity) könnte Scraper betreffen, die Anti-Bot-Maßnahmen umgehen. Für kommerzielle Nutzung solltest du Rechtsberatung einholen.

Welche Daten kann man von Airbnb scrapen?

Aus Suchergebnissen: Inseratsname, Preis (mit Daten), Bewertung, Anzahl der Bewertungen, Standort, Immobilientyp und URL. Aus Detailseiten: vollständige Beschreibung, Annehmlichkeiten, Host-Infos, alle Bewertungen, Fotos, Kalenderverfügbarkeit, Reinigungsgebühren und Preisaufschlüsselungen. Die Tiefe hängt davon ab, ob du nur Suchseiten scrapest oder auch einzelne Inseratsseiten besuchst.

Brauche ich Proxys, um Airbnb mit Python zu scrapen?

Für ein paar Seiten kommst du eventuell ohne Proxys aus. Für alles jenseits von 20–30 Anfragen wird eine Residential-Proxy-Rotation dringend empfohlen. Datacenter-IPs werden sofort blockiert. Der Community-Konsens empfiehlt maximal etwa 100 Seiten pro Stunde von einer einzelnen IP mit zufälligen Pausen von 3–10 Sekunden zwischen den Anfragen.

Was ist der einfachste Weg, Airbnb ohne Code zu scrapen?

ermöglicht es dir, Airbnb-Suchergebnisse und Inserats-Detailseiten mit KI-gestützter Felderkennung zu scrapen – keine Selektoren, die konfiguriert werden müssen, kein Code zum Schreiben. Sie unterstützt das Scraping von Unterseiten (für Annehmlichkeiten, Bewertungen und Host-Infos), exportiert nach Google Sheets, Excel, Airtable oder Notion und bietet geplantes Scraping für die laufende Preisüberwachung an.

Mehr erfahren

Fawad Khan
Fawad Khan
Fawad verdient seinen Lebensunterhalt mit Schreiben und liebt es ehrlich gesagt ziemlich. Seit Jahren beschäftigt er sich damit, was gute Texte einprägsam macht – und was dazu führt, dass Leser einfach weiterscrollen. Frag ihn nach Marketing, und er redet stundenlang. Frag ihn nach Carbonara, und er redet noch länger.
Inhaltsverzeichnis

Teste Thunderbit

Leads und andere Daten in nur 2 Klicks extrahieren. Mit KI unterstĂĽtzt.

Thunderbit holen Kostenlos
Daten mit KI extrahieren
Daten einfach zu Google Sheets, Airtable oder Notion ĂĽbertragen
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week