Tony Wang5 Min. LesezeitAirbnb scrapen in 2026 (API & Python)
Scrape Airbnb 2026 auf drei Wegen — DIY Python, No-Code oder eine strukturierte API für Suche, Room-Details, Reviews und Verfügbarkeit — inklusive der rechtlichen Grundlagen.
Am schnellsten scrapst du Airbnb 2026, indem du eine strukturierte Airbnb-API aufrufst, die normalisiertes JSON zurückgibt — Listing-Suche, Room-Details, Reviews und Verfügbarkeit — statt einen Headless-Browser durch Airbnbs JavaScript und Anti-Bot-Abwehr zu steuern. Du kannst einen eigenen Scraper bauen, aber Airbnb ist eine der am aggressivsten verteidigten Seiten im Web. Dieser Guide behandelt alle drei Ansätze, was jeder zurückgibt, wo jeder scheitert und die rechtlichen Grundlagen.
Warum Airbnb scrapen?
Daten zu Kurzzeitvermietungen treiben eine ganze Kategorie von Recherche und Produkten an:
- Marktintelligenz — verfolge Angebot, Übernachtungspreise und Auslastung nach Stadt oder Stadtviertel.
- Umsatz- & Preis-Recherche — vergleiche ähnliche Listings und Saisonalität für Gastgeber und Property Manager.
- Investment-Underwriting — schätze die Rendite aus durchschnittlichem Tagespreis und Verfügbarkeit ab, bevor du kaufst.
- Review- & Sentiment-Analyse — lies, was Gäste in einem Markt tatsächlich sagen.
- Reise- und Discovery-Produkte — betreibe Suche und Empfehlungen über öffentliche Listings.
Ist es legal, Airbnb zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
Airbnb rendert Listings clientseitig mit React und verteidigt aggressiv, also greifst du zu einem Headless-Browser:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://www.airbnb.com/s/Austin--TX/homes?checkin=2026-07-01&checkout=2026-07-05&adults=2")
# then wait for listing cards to render and parse the schema.org itemListElement blocks...
Es funktioniert in der Demo und scheitert dann — Airbnb gilt als eines der härtesten Ziele im Web:
- Akamai-gestützte Bot-Abwehr. Airbnb betreibt eine eigene WAF mit Verhaltensanalyse und Fingerprinting; Datacenter-IPs und schlichtes
requestsbekommen graue „Skeleton"-Seiten ohne Daten, du brauchst also Residential- oder Stealth-Proxys plus vollständiges JavaScript-Rendering. - Rotierende CSS-Klassennamen. Airbnb generiert Klassennamen automatisch (z. B.
lxq01kf,atm_mk_h2mmj6), die sich ohne Vorwarnung ändern, sodass robuste Scraper keine Klassen-Selektoren nutzen können — sie stützen sich aufdata-testid, schema.orgitempropundaria-label-Accessibility-Strings, und selbst die verschieben sich. - Die Daten liegen hinter internem GraphQL. Die Suche lädt über Airbnbs
/api/v3/StaysSearchund das Listing-Detail über/api/v3/PdpPlatformSections, also geben rohe HTML-Requests nur Platzhalter zurück; du betreibst entweder einen Browser oder reverse-engineerst signierte GraphQL-Calls. - Fummelige Parameter und Locale. Die Suche braucht eine
place_idim Google-Stil, Daten unditems_offset-Pagination (~18 pro Seite), und Preis und Bewertung tauchen nur im Locale-spezifischen Accessibility-Text auf — eine falsche Locale liefert also stillschweigend nulls.
Option 2: No-Code-Tools
Visuelle Extraktoren und Marktplatz-„Airbnb-Scraper"-Actors exportieren CSV/JSON und eignen sich für einmalige Abzüge, aber sie sind in einer produktinternen Pipeline mit vorhersehbaren Feldern umständlich und scheitern am selben Layout-Wildwuchs.
Option 3: Eine strukturierte Airbnb-API
Für wiederholbare Workflows gibt eine Airbnb scraping API normalisiertes JSON zurück, ohne dass ein Browser läuft. Suche nach Standort:
curl "https://api.crawlora.net/api/v1/airbnb/search?location=Austin,%20TX&check_in=2026-07-01&check_out=2026-07-05&adults=2¤cy=USD" \
-H "x-api-key: $CRAWLORA_API_KEY"
Rufe die Details eines Listings per room id in Python ab:
import requests
room = requests.get(
"https://api.crawlora.net/api/v1/airbnb/room/964337233639659839",
headers={"x-api-key": "YOUR_API_KEY"},
).json()["data"]
print(room.get("title"), room.get("price"), room.get("rating"))
Eine Suchantwort ist normalisiertes JSON, das du direkt speichern kannst (die Felder sind beispielhaft — prüfe die docs):
{
"code": 200,
"msg": "OK",
"data": {
"location": "New York, NY",
"page": 1,
"results": [
{
"id": "964337233639659839",
"title": "Cozy & Calm Studio",
"url": "https://www.airbnb.com/rooms/964337233639659839",
"image": "https://a0.muscache.com/image.jpeg",
"price": 717,
"rating": 4.47,
"review_count": 96,
"location": "Apartment in Union City",
"latitude": 40.77525,
"longitude": -74.02586
}
]
}
}
Anschließend reicherst du jedes Listing an — Reviews und Verfügbarkeit werden über dieselbe room id angesprochen:
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/airbnb"
results = requests.get(f"{base}/search", headers=h,
params={"location": "Austin, TX", "currency": "USD", "page": 1}).json()["data"]["results"]
room_id = results[0]["id"]
details = requests.get(f"{base}/room/{room_id}", headers=h).json()["data"]
reviews = requests.get(f"{base}/room/{room_id}/reviews", headers=h, params={"page": 1}).json()["data"]["reviews"]
calendar = requests.get(f"{base}/room/{room_id}/calendar", headers=h).json()["data"]["months"]
Die Suche paginiert über page; übergib currency für Preise in deinem Markt und check_in/check_out/adults, um echte Aufenthalte zu bepreisen. Für eine kartenbegrenzte Suche setzt du die Bounding-Box ne_lat/ne_lng/sw_lat/sw_lng mit zoom. Reviews paginieren über page. Speichere eine Zeile pro Listing und ziehe die Daten nach Zeitplan erneut ab, um Preis und Verfügbarkeit über die Zeit zu verfolgen.
Was du sammeln kannst
Soweit das öffentliche Listing sie offenlegt: room id, Titel, Listing-URL, Bild, Übernachtungspreis, Bewertung, Review-Anzahl, Standorttext mit Breiten-/Längengrad, Gastgeber, Ausstattung und Beschreibung; Reviews pro Listing (Autor, Datum, Bewertung, Text); und Verfügbarkeitsmonate aus dem Kalender — plus den Such- oder room-id-Kontext, den du angefragt hast. Bleib bei öffentlichen, faktischen Feldern.
Einschränkungen und typische Herausforderungen
- Keine offene öffentliche API. Airbnb hat keine allgemeine Listings-API (das API-Programm ist nur für Partner), also bedeutet das Sammeln beliebiger öffentlicher Listings Scraping.
- Eines der härtesten Ziele. Eine Akamai-gestützte WAF, clientseitiges GraphQL und rotierende Klassennamen bedeuten, dass DIY Stealth-Residential-Proxys, einen echten Browser und ständige Selektor-Pflege braucht — eine strukturierte API fängt das hinter einem Key ab.
- Preise sind dynamisch und datumsabhängig. Der Übernachtungspreis ändert sich mit Daten, Gästen, Aufenthaltsdauer und Nachfrage, also übergib
check_in/check_out/adultsund ziehe nach Zeitplan erneut ab; ein Listing ohne Preis für deine Daten gibt nulls zurück. - Reviews und Gastgebernamen sind personenbezogene Daten. Behandle Autorennamen und Review-Text als personenbezogen unter DSGVO/CCPA — sammle nur öffentliche, faktische Felder mit rechtmäßiger Grundlage und veröffentliche keine urheberrechtlich geschützten Fotos oder Beschreibungen erneut.
Wo das zum Einsatz kommt
- Reise- & Hospitality-Recherche — verfolge Listings, Preise und Verfügbarkeit über Märkte hinweg. Siehe den Use Case travel & hospitality research.
- Immobilienmarkt-Intelligenz — kombiniere das Angebot an Kurzzeitvermietungen mit umfassenderen Wohnungsdaten. Siehe property market intelligence.
- Review- & Reputations-Monitoring — lies das Gästesentiment über einen Markt hinweg mit review & reputation monitoring.
Sources
Leg los mit dem Sammeln
Probier es zuerst kostenlos: Schick eine beliebige öffentliche URL durch den Free Web Scraper oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste den Such-Endpoint im Playground, sieh dir das Schema in den API docs an und wirf einen Blick auf die pricing. Siehe auch how to scrape Zillow für die Immobilienseite, how to scrape Trustpilot reviews für den Review-Blickwinkel, how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Kann ich Airbnb scrapen, ohne blockiert zu werden?
Airbnb gehört zu den härtesten Zielen im Web — es betreibt eine Akamai-gestützte WAF mit Verhaltensanalyse und Fingerprinting, rendert Listings clientseitig und rotiert CSS-Klassennamen, sodass schlichte Requests und Datacenter-IPs graue Skeleton-Seiten ohne Daten bekommen. DIY braucht Stealth-Residential-Proxys, einen echten Browser und ständige Selektor-Pflege; eine strukturierte API übernimmt Proxys und Browser-Ausführung hinter einem Key.
Hat Airbnb eine offizielle API?
Keine offene. Airbnbs API-Programm ist nur für Partner, also bedeutet das Sammeln beliebiger öffentlicher Listings Scraping. Crawloras Airbnb-Endpoints geben öffentliche Suche, Room-Detail, Reviews und Verfügbarkeit als normalisiertes JSON aus einem API-Key zurück.
Welche Airbnb-Daten kann ich sammeln?
Öffentliche Listing-Felder: room id, Titel, Listing-URL, Bild, Übernachtungspreis, Bewertung, Review-Anzahl, Standort mit Breiten-/Längengrad, Gastgeber, Ausstattung und Beschreibung; Reviews pro Listing (Autor, Datum, Bewertung, Text); und Verfügbarkeitsmonate. Fakten wie Preis und Standort bergen das geringste Risiko; Fotos und Beschreibungen können urheberrechtlich geschützt sein.
Wie komme ich an die Reviews und Verfügbarkeit eines Listings?
Durchsuche einen Ort (oder starte von einer bekannten room id), um die Listing-id zu erhalten, und rufe dann /airbnb/room/{id} für Details, /airbnb/room/{id}/reviews für Gäste-Reviews (per page paginiert) und /airbnb/room/{id}/calendar für Verfügbarkeitsmonate auf.
Kann ich eine andere Stadt durchsuchen oder einen Datumsbereich setzen?
Ja. Übergib location plus check_in/check_out/adults und currency und paginiere mit page. Für ein präzises Gebiet setzt du statt eines Städtenamens die Karten-Bounding-Box ne_lat/ne_lng/sw_lat/sw_lng mit zoom.
Sind Airbnb-Reviews und Gastgebernamen personenbezogene Daten?
Ja. Namen von Rezensenten und Gastgebern sowie Review-Text sind personenbezogene Daten unter DSGVO/CCPA — sammle nur öffentliche, faktische Felder mit rechtmäßiger Grundlage und veröffentliche keine urheberrechtlich geschützten Fotos oder Beschreibungen erneut.
Wie oft kann ich aktualisieren?
Übernachtungspreis und Verfügbarkeit ändern sich mit Daten und Nachfrage, also ziehe die Daten nach Zeitplan innerhalb deines Plans und der Fair-Use-Limits erneut ab, statt kontinuierlich zu pollen.