Automatisiertes Airbnb-Scraping: Immobilien-Einblicke sofort erhalten

Zuletzt aktualisiert am June 9, 2026
Automatisiertes Airbnb-Scraping: Immobilien-Einblicke sofort erhalten

Airbnb verwaltet über 8 Millionen aktive Inserate in mehr als 220 Ländern – und stellt für Marktdaten keine öffentliche API bereit. Wer Preis-Intelligence, Wettbewerbs-Benchmarks oder Forschungsdatensätze braucht, kommt am Scraping praktisch nicht vorbei.

Der Haken daran: Airbnb zählt zu den anspruchsvollsten Websites, die das moderne Web zu bieten hat. Die Seite betreibt einen eigenen WAF, gestützt auf Akamai Bot Manager, rendert alles clientseitig mit React und tauscht CSS-Klassennamen so oft aus, als würde jemand pausenlos die Schlösser wechseln. Ich habe viele Stunden damit zugebracht, unterschiedliche Ansätze fürs Airbnb-Scraping auszuprobieren – von schlanken HTTP-Bibliotheken über vollständige Browserautomatisierung bis hin zu No-Code-KI-Tools – und das Fazit lautet: Keine einzelne Methode passt für jeden Anwendungsfall.

Dieser Leitfaden führt dich durch alle fünf praktikablen Ansätze, mit echtem Code, ehrlichen Abwägungen und konkreten Tipps, damit deine IP nicht dauerhaft gesperrt wird. Egal ob Python-Entwickler, Datenanalyst oder Immobilieninvestor, der einfach nur eine Tabelle möchte – hier wirst du fündig.

Warum Airbnb scrapen? Praxisnahe Anwendungsfälle

Niemand scrapt Airbnb zum Vergnügen am Parsen von verschachteltem HTML. Dahinter stehen konkrete Projekte und Geschäftsziele – hier 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 zahlt sich geplantes oder automatisiertes Scraping besonders aus – du willst aktuelle Daten, keinen einmaligen Schnappschuss.

Der Markt für Kurzzeitvermietungen wächst schneller als das klassische Hotelgeschäft: Die STR-Nachfrage stieg 2025 um 6,0 %, während die Hotelnachfrage um 0,3 % zurückging. Wer in diesem Feld unterwegs ist, verschafft sich mit Daten einen Vorteil.

Warum Airbnb so schwierig zu scrapen ist

Bevor du die erste Zeile Code schreibst, lohnt es sich zu verstehen, warum Airbnb bei der Scraping-Schwierigkeit 4 von 5 Punkten (schwierig) bekommt. Drei Probleme greifen hier ineinander.

Airbnbs Anti-Bot-Abwehr

Airbnb kombiniert einen eigenen WAF mit Akamai Bot Manager, einem Bot-Erkennungssystem für Unternehmen, das jede Anfrage gleichzeitig über mehrere Dimensionen bewertet. Das geht weit über Rate Limiting hinaus – das ist KI-gestütztes Fingerprinting.

airbnb-unique-stays.webp

Die Erkennungsmechanismen, nach Risikoniveau sortiert:

  • TLS-Fingerprinting (HOCH): Die requests-Bibliothek von Python hinterlässt einen einzigartigen TLS-Handshake-Fingerprint, der zu keinem echten Browser passt. Akamai wertet Cipher Suites, Erweiterungen und die ALPN-Reihenfolge mit JA3-/JA4-Methoden aus. Standard-requests kommt auf geschützten Seiten nur auf etwa 12 % Erfolgsquote, während Bibliotheken, die Browser-TLS-Fingerprints nachahmen, 92 % erreichen.
  • JavaScript-Ausführung (HOCH): Akamai lädt clientseitige Skripte, die „Sensordaten“ sammeln – Geräteparameter, Hardware-Fähigkeiten, Betriebssystemdetails. Daraus entsteht das _abck-Cookie. Wird dieses JavaScript nicht ausgeführt, blockiert Airbnb die Anfrage.
  • Browser-Fingerprinting (HOCH): Canvas-, WebGL- und Schriftartenanalyse decken Automatisierungstools auf. Headless-Browser verraten sich über navigator.webdriver, fehlende Plugins und unstimmige Hardwarewerte.
  • HTTP-Header-Analyse (HOCH): Fehlende Sec-Fetch-*-Header sind eine häufige, klar belegbare Ursache für 403-Blocks auf Airbnb.
  • IP-Reputation (MITTEL): Rechenzentrums-IPs werden sofort geblockt. Ab einer gewissen Größenordnung sind Residential Proxies Pflicht.
  • Verhaltensanalyse (MITTEL): Zu gleichmäßige Timing-Muster, keine Mausbewegung, kein Scrollen – das sind eindeutige Verräter.

Wirst du blockiert, 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 simples requests.get() auf Airbnb liefert nur eine React-Hülle mit Platzhalter-HTML – keine eigentlichen Inseratsdaten. Wie ein Entwickler es ausdrückte: „Einfache HTTP-Anfragen funktionieren schlicht nicht, und ohne passende Proxys und echtes JavaScript-Rendering scrapst du nicht Airbnb, sondern Platzhalter.“

Die tatsächlichen Daten kommen clientseitig über interne GraphQL-API-Aufrufe (/api/v3/StaysSearch für Suchergebnisse, /api/v3/PdpPlatformSections für Inseratsdetails). Für die meisten brauchbaren Daten brauchst du daher entweder einen vollständigen Browser oder API-Intercepting.

Das DOM ändert sich ständig

Airbnb setzt CSS-in-JS mit gehashten Klassennamen ein, die sich mit jedem Deployment ändern. Dokumentierte Beispiele sind _tyxjp1, lxq01kf, atm_mk_h2mmj6, t1jojoys und _8s3ctt. Wie Automatio (2025) 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 Frust ausführlich festgehalten. ScrapingBee merkt an, 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 fasste es treffend zusammen: „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 10–15 % der Crawler inzwischen wöchentliche Fixes brauchen – wegen DOM-Verschiebungen, Fingerprinting-Updates oder gedrosselter Endpunkte.

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

Bevor es an den Code geht, hier der Überblick. Jeder Ansatz hat reale Stärken und Schwächen – die eine, universell „beste“ Methode gibt es nicht.

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 des Artikels führt dich Schritt für Schritt durch die Python-Ansätze; am Ende folgt ein 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 der schlanke, schnelle Einstieg – kein Browser, keine Chromedriver-Probleme. Der Kompromiss: Es deckt einige Daten ab, aber nicht alle.

Python-Umgebung einrichten

Lege einen Projektordner an und richte eine virtuelle Umgebung ein:

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

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

Option A: pyairbnb für schnelle Suchergebnisse nutzen

Der schnellste Weg zu strukturierten Airbnb-Daten:

import pyairbnb
import pandas as pd

# Nach Ort und Datum suchen
results = pyairbnb.search_all(
    query="Austin, TX",
    checkin="2025-08-01",
    checkout="2025-08-03",
    adults=2,
    currency="USD"
)

# In DataFrame umwandeln
df = pd.DataFrame(results)
print(df[['name', 'price', 'rating', 'reviewsCount', 'url']].head())
df.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ängen willst, kannst du Anfragen direkt verschicken. Achtung: Reines requests wird wegen TLS-Fingerprinting schnell geblockt. Mit curl_cffi (das Browser-TLS-Fingerprints imitiert) steigt die Erfolgsquote deutlich.

from curl_cffi import requests as cffi_requests
from bs4 import BeautifulSoup
import json

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

headers = {
    "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",
    "Accept-Language": "en-US,en;q=0.9",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
}

response = cffi_requests.get(url, headers=headers, impersonate="chrome131")
soup = BeautifulSoup(response.text, "html.parser")

Daten aus Schema.org-Mikrodaten extrahieren

Airbnb bettet schema.org-Mikrodaten direkt ins HTML ein – und diese semantischen Tags sind stabiler als CSS-Klassenselektoren. Halte nach Containern mit itemprop="itemListElement" Ausschau:

listings = soup.find_all("div", itemprop="itemListElement")

data = []
for listing in listings:
    name_tag = listing.find("meta", itemprop="name")
    url_tag = listing.find("meta", itemprop="url")
    position_tag = listing.find("meta", itemprop="position")
    
    data.append({
        "name": name_tag["content"] if name_tag else None,
        "url": url_tag["content"] if url_tag else None,
        "position": position_tag["content"] if position_tag else None,
    })

df = pd.DataFrame(data)
df.to_csv("airbnb_listings.csv", index=False)

Der Haken: schema.org-Tags liefern Inseratsnamen, URLs und Positionen – aber keine Preise, Bewertungen oder Annehmlichkeiten. Für umfangreichere Daten brauchst du Browserautomatisierung oder API-Intercepting.

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

Wenn du dynamische Inhalte brauchst – Preise abhängig vom Datum, Annehmlichkeiten hinter „Mehr anzeigen“-Buttons, vollständige Bewertungstexte – ist Browserautomatisierung das passende Werkzeug.

Wann du Browserautomatisierung einsetzen solltest

  • Seiten, die eine Datumsauswahl verlangen, um echte Preise anzuzeigen
  • Annehmlichkeiten und Bewertungen, die hinter interaktiven Elementen liegen
  • Alle Daten, die erst nach JavaScript-Ausführung laden
  • Wenn du mit der Seite interagieren musst (scrollen, klicken)

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

Playwright hat Selenium als Standard für Browserautomatisierung abgelöst. Es ist schneller, bringt Async-Unterstützung von Haus aus mit, installiert Browser-Binaries automatisch und kommt mit modernen Web-Apps besser klar. Seleniums hartnäckiges ChromeDriver-Version-Mismatch-Problem – bei dem ChromeDriver den Chrome-Updates hinterherhinkt – bleibt ein ständiger Störfaktor.

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

Playwright einrichten

pip install playwright playwright-stealth
playwright install chromium

Zu Airbnb navigieren und Inserate extrahieren

import asyncio
from playwright.async_api import async_playwright
from playwright_stealth import stealth_async
import json

async def scrape_airbnb():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)  # headless=True ist riskanter
        context = await browser.new_context(
            viewport={"width": 1920, "height": 1080},
            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"
        )
        page = await context.new_page()
        await stealth_async(page)
        
        url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
        await page.goto(url, wait_until="networkidle")
        
        # Auf Karten mit Inseraten warten, mittels data-testid (stabiler als Klassen)
        await page.wait_for_selector('[data-testid="card-container"]', timeout=15000)
        
        # Inseratsdaten extrahieren
        listings = await page.query_selector_all('[data-testid="card-container"]')
        
        results = []
        for listing in listings:
            title_el = await listing.query_selector('[data-testid="listing-card-title"]')
            subtitle_el = await listing.query_selector('[data-testid="listing-card-subtitle"]')
            
            title = await title_el.inner_text() if title_el else None
            subtitle = await subtitle_el.inner_text() if subtitle_el else None
            
            results.append({"title": title, "subtitle": subtitle})
        
        await browser.close()
        return results

data = asyncio.run(scrape_airbnb())

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

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

api_responses = []

async def handle_response(response):
    if "StaysSearch" in response.url:
        try:
            data = await response.json()
            api_responses.append(data)
        except:
            pass

page.on("response", handle_response)
await page.goto(url, wait_until="networkidle")

# API-Antwort parsen
if api_responses:
    search_results = api_responses[0]["data"]["presentation"]["staysSearch"]["results"]["searchResults"]
    for result in search_results:
        listing = result.get("listing", {})
        pricing = result.get("pricingQuote", {})
        print(f"{listing.get('name')} — {pricing.get('price', {}).get('total')}")

Die StaysSearch-Antwort enthält id, name, roomTypeCategory, bedrooms, bathrooms, personCapacity, avgRating, reviewsCount, isSuperhost sowie vollständige Preisaufschlüsselungen. Es sind dieselben Daten, mit denen Airbnbs Frontend die Seite aufbaut.

Pagination handhaben

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

import time
import random

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

all_results = []
for page_num in range(17):  # Max. ~17 Seiten
    offset = page_num * 18
    paginated_url = f"{base_url}&items_offset={offset}"
    
    # ... wie oben navigieren und scrapen ...
    
    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)

Diesen Abschnitt überspringen die meisten Tutorials – dabei ist er für die Preisanalyse der entscheidende.

Warum Airbnb-Preise ohne Daten nicht angezeigt werden

In rund 90 % der Fälle verlangt Airbnb Check-in-/Check-out-Daten, bevor es einen echten Preis anzeigt. Ohne Daten bekommst du nur eine grobe Spanne für den „Preis pro Nacht“ (manchmal gar keinen Preis). Wie ScrapingBee anmerkt: „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.“

Eine gute Nachricht: Seit April 2025 zeigt Airbnb standardmäßig den Gesamtpreis (inklusive aller Gebühren vor Steuern) für alle Gäste weltweit an. Zuvor gab es die Option „Gesamtpreis anzeigen“ – fast 17 Millionen Gäste nutzten sie, bevor sie zum Standard wurde.

Daten über URL-Parameter übergeben

Hänge an deine Such-URL immer checkin und checkout an:

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

Dann liefert Airbnb echte Nacht- und Gesamtpreise sowohl in der Seite als auch in den API-Antworten.

Datumsbereiche für die Preisanalyse durchlaufen

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

from datetime import datetime, timedelta

start_date = datetime(2025, 7, 1)
end_date = datetime(2025, 12, 31)
stay_length = 2  # Nächte

current = start_date
date_ranges = []

while current + timedelta(days=stay_length) <= end_date:
    checkin = current.strftime("%Y-%m-%d")
    checkout = (current + timedelta(days=stay_length)).strftime("%Y-%m-%d")
    date_ranges.append((checkin, checkout))
    current += timedelta(days=7)  # Wöchentliche Intervalle

for checkin, checkout in date_ranges:
    url = f"https://www.airbnb.com/s/Austin--TX/homes?checkin={checkin}&checkout={checkout}&adults=2"
    # ... Preisdaten scrapen ...
    time.sleep(random.uniform(5, 10))  # Rücksichtsvoll bei der Taktung

Beim Parsen der Preise aus der GraphQL-API-Antwort hältst du dich am pricingQuote-Objekt fest. 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

Den Wartungsabschnitt schreibt niemand gern – dabei ist er bei jedem Airbnb-Scraping-Projekt wahrscheinlich der wichtigste Teil.

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

Zu den aktuell dokumentierten data-testid-Werten auf Airbnb zählen card-container, listing-card-title, listing-card-subtitle und listing-card-name. Sie hängen an Airbnbs internem Test-Framework, nicht an der visuellen Gestaltung, und ändern sich daher seltener als CSS-Klassen. Ganz ausgeschlossen ist eine Änderung trotzdem nicht – nur eben seltener.

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

Schema.org-Mikrodaten verwenden

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

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

Die GraphQL-API abfangen

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

Warum KI-basierte Extraktion Wartung komplett eliminiert

Selbst die besten Selektorstrategien gehen irgendwann kaputt. data-testid-Werte werden umbenannt, API-Antwortstrukturen versioniert. Der einzige Ansatz, der Wartung tatsächlich überflüssig macht, liest die Seite bei jedem Lauf frisch mit KI – ganz ohne fest verdrahtete Selektoren. Mehr dazu im Thunderbit-Abschnitt weiter unten.

So vermeidest du Blocks beim Airbnb-Scraping

Praxisnahe Tipps aus Erfahrung und Community-Konsens.

Proxys rotieren (Residential ist Pflicht)

Datacenter-IPs blockiert Airbnb sofort. Ab jeder relevanten Größenordnung führt an Residential Proxies kein Weg vorbei. Die stärksten Anbieter mit Blick auf Preis und Leistung:

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

Eine 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.

proxies = {
    "http": "http://user:pass@residential-proxy:port",
    "https": "http://user:pass@residential-proxy:port",
}
response = 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
import random
import time

delay = random.gauss(5, 1.5)  # Mittelwert 5 Sekunden, Standardabweichung 1,5
delay = max(2, min(delay, 10))  # Auf 2–10 Sekunden begrenzen
time.sleep(delay)

Vollständige, konsistente Header verwenden

Fehlende Sec-Fetch-*-Header sind eine häufige, klar belegbare Ursache für 403-Blocks. Jeder Header muss in sich stimmig sein – behauptet dein User-Agent Chrome 131 unter Windows, müssen alle anderen Header zu dieser Identität passen.

headers = {
    "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",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "Sec-CH-UA": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
    "Sec-CH-UA-Platform": '"Windows"',
}

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 Nicht-Headless-Modus (headless=False) ist sicherer, aber langsamer.

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

Für große Mengen eine Scraping-API in Betracht ziehen

Wenn du Tausende Seiten scrapen willst, übernimmt eine Scraping-API Proxy-Rotation, CAPTCHA-Lösung und JavaScript-Rendering für dich. In einem AIMultiple-Benchmark mit 250 Airbnb-URLs erreichte Bright Data 99 % Erfolgsquote mit 48 Feldern pro Inserat. Der Nachteil sind die Kosten – der Stealth-Proxy-Modus von ScrapingBee schlägt mit 75 Credits pro Anfrage zu Buche, sodass ein Tarif für 49 $/Monat (ca. 45 €/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 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

Thunderbit ist ein KI-Web-Scraper, der als Chrome-Erweiterung läuft. Der Ablauf:

  1. Erweiterung installieren aus dem Chrome Web Store
  2. Zu einer Airbnb-Suchergebnisseite navigieren – Daten in die URL einfügen, damit die Preise stimmen (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 landen in einer strukturierten Tabelle
  5. „Unterseiten scrapen“ verwenden, um jede Inseratsdetailseite zu besuchen und Annehmlichkeiten, Bewertungen, Host-Infos und vollständige Preisaufschlüsselungen herauszuholen – ganz ohne weitere Konfiguration
  6. Exportieren nach Google Sheets, Excel, Airtable oder Notion

Die Unterseiten-Funktion ist hier besonders wertvoll. Bei den Python-Ansätzen bedeutet das Scrapen von Detailseiten, dass du eigene Parsing-Logik schreibst, die Pagination innerhalb der Bewertungen handhabst und parallele Anfragen verwaltest. Mit Thunderbit ist es ein Klick.

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

Die drei oben beschriebenen Probleme – Anti-Bot-Abwehr, JavaScript-Rendering und DOM-Brüche – sind genau das, was Python-Scraper so wartungsintensiv macht. Thunderbit nimmt sich aller drei an:

  • 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 zum Pflegen, 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

Brauchst du Kontrolle auf Code-Ebene, eigene Logik oder die Anbindung an eine bestehende Datenpipeline, nimm Python. Brauchst du die Daten schnell und ohne Wartungsaufwand, 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 hiQ Labs v. LinkedIn stellte fest, dass das Scrapen öffentlich zugänglicher Daten von Websites ohne Authentifizierung nicht gegen den CFAA verstößt
  • Meta v. Bright Data (Januar 2024): Ein Richter entschied, dass Nutzungsbedingungen Scraper im ausgeloggten Zustand nicht binden
  • Der Fall Reddit v. Perplexity AI (2025) bringt eine neue Theorie ins Spiel, wonach das Umgehen von CAPTCHAs und Rate Limits gegen DMCA-Anti-Umgehungsregelungen verstoßen könnte – das ist noch ungetestet, aber im Blick zu behalten

Was Airbnb sagt: Die Nutzungsbedingungen verbieten automatisierte Datenerfassung ausdrücklich. Verklagt hat Airbnb einen Scraper bislang allerdings nie öffentlich. Inside Airbnb ist seit über 11 Jahren ohne rechtliche Schritte aktiv, obwohl Airbnb es als „Müll“ abtut.

Praktische Leitlinien:

  • Nur öffentlich verfügbare Daten scrapen (Login-Schranken nicht umgehen)
  • robots.txt-Hinweise respektieren
  • Server nicht mit aggressiven Anfragelasten überfordern
  • Personendaten nach DSGVO/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. Nimm 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 machen KI-basierte Tools wie Thunderbit Selektorbrüche komplett überflüssig – 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.

Thunderbit für Airbnb-Scraping testen

Willst du den No-Code-Weg ausprobieren, bietet Thunderbit einen kostenlosen Tarif – in etwa zwei Minuten testest du ihn auf ein paar Airbnb-Suchergebnisseiten. Für den Python-Weg lassen sich alle Code-Muster aus diesem Artikel direkt auf deinen konkreten Anwendungsfall zuschneiden.

Mehr zu Web-Scraping-Ansätzen und Tools findest du in unseren Leitfäden zu Daten von Websites nach Excel scrapen, den besten KI-Web-Scrapern und Best Practices für Web-Scraping. Tutorials gibt es außerdem auf dem Thunderbit YouTube-Kanal.

FAQs

Kann Airbnb dich fürs Scraping blockieren?

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

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), doch 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 treffen, 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. Wie tief du kommst, 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 rät zu 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?

Die Chrome-Erweiterung von Thunderbit lässt dich Airbnb-Suchergebnisse und Inserats-Detailseiten mit KI-gestützter Felderkennung scrapen – keine Selektoren zum Konfigurieren, 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.

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
Thunderbit · KI-Webdaten-Agent

Extract data from any page in 1 click

Vertrauen von über 250.000 Nutzern
Kostenloser Plan verfügbar
Daten mit KI extrahieren
Daten einfach in Google Sheets, Airtable oder Notion übertragen
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week