Somantic
API-Referenz

Somantic API-Dokumentation

Zwei REST/GraphQL-Endpunkte für deutsche Immobiliendaten und sofortige Immobilienbewertungen. Authentifizierung über einen einzigen API-Schlüssel.

Einführung

Alle Endpunkte teilen sich die Basis-URL https://www.somantic.net/api. Anfragen und Antworten erfolgen im JSON-Format. Erstelle zunächst einen kostenlosen API-Schlüssel im Entwickler-Dashboard – auf der BASIC-Stufe ohne Kreditkarte.

ProduktMethodeEndpunkt
Immobiliendaten-API
POST
/graphql
Immobilienbewertungs-API
POST
/estimate

Authentifizierung

Übergib deinen geheimen Schlüssel bei jeder Anfrage im X-API-Key-Header. Alternativ wird auch ein Bearer-Token im Authorization-Header akzeptiert. Schlüssel haben die Form som_live_… und werden nur einmal bei der Erstellung angezeigt – bewahre sie sicher auf und gib sie niemals im Client-Code preis.

X-API-Key: som_live_DEIN_SCHLUESSEL
# oder
Authorization: Bearer som_live_DEIN_SCHLUESSEL

Kontingente & Limits

Jede API wird separat auf Monatsbasis abgerechnet. Die Nutzung wird zu Beginn jedes Kalendermonats zurückgesetzt und ist in deinem Dashboard sichtbar. Auf der kostenlosen BASIC-Stufe gibt die API nach Erreichen des inkludierten Kontingents 429 Too Many Requests zurück, bis du upgradest. Bezahlte Stufen liefern weiterhin Anfragen aus und rechnen Mehrverbrauch pro Anfrage ab.

StufeDaten-API / Mon.Bewertungs-API / Mon.Mehrverbrauch
BASIC (kostenlos)1510
PRO1.0005000,01 € / Anf.
ULTRA10.0002.5000,007 € / Anf.
MEGA35.00010.0000,004 € / Anf.

Immobiliendaten-API (GraphQL)

Ein flexibler GraphQL-Endpunkt über aggregierte deutsche Inserate für Häuser und Wohnungen – von Immowelt, Immonet, Kleinanzeigen, Ohne Makler und Immobilienscout24. Jedes Inserat wird mit dem fairen Schätzwert unseres SOM-Modells (som_model_price), der Abweichung vom Markt (som_model_percentage) sowie Cashflow- und ROI-Kennzahlen angereichert. Frage all_appartments oder all_houses mit dem filters-Argument ab und wähle genau die Felder, die du brauchst. Praxisnahe Vorlagen findest du unter Beispielabfragen.

Unterstützte Plattformen

immobilienscout24.de
immowelt.de
immonet.de
kleinanzeigen.de
ohne-makler.net
private-immobilienangebote.de
immobilien.de
immobilienmarkt.faz.net
ovbimmo.de
immo.swp.de
vrm-immo.de

In Arbeit: meinstadt.de, wohnung jetzt, regionalimmobilien, Sparkasse Immobilien.

Verfügbare Abfragen

AbfrageLiefert
all_appartmentsPaginierte Liste von Wohnungen (edges → node)
all_housesPaginierte Liste von Häusern (edges → node)
total_appartments_countInt: Gesamtanzahl passender Wohnungen
total_houses_countInt: Gesamtanzahl passender Häuser
avg_appartmentsDurchschnittswerte für Wohnungen (avg_price_per_square_meter, avg_rent_per_square_meter)
avg_housesDurchschnittswerte für Häuser (avg_price_per_square_meter, avg_rent_per_square_meter)

Alle Abfragen akzeptieren die Argumente filters, page, per_page (max. 100), order_by (Feldname für aufsteigend, - davor für absteigend, z. B. "-uptime_date") sowie equity_percentage, interest und repayment zur Anpassung der Cashflow- und ROI-Berechnung. is_active wird automatisch auf true gesetzt, sofern nicht anders angegeben.

Beispielabfrage

{
  all_appartments(
    filters: { city: "München", price_lt: 600000, square_meter_gt: 50 }
    per_page: 5
    order_by: "roi"
  ) {
    edges {
      node {
        immo_id
        title
        city
        price
        square_meter
        rooms
        price_per_square_meter
        som_model_price        # fairer Schätzwert unseres Modells
        som_model_percentage   # % über/unter Markt
        roi
      }
    }
  }
}

Abfrage senden

curl https://www.somantic.net/api/graphql \
  -H "X-API-Key: som_live_DEIN_SCHLUESSEL" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ all_appartments(filters:{city:\"München\"}, per_page:5){ edges{ node{ immo_id title price som_model_price roi } } } }"}'

Felder & Filter

Jedes Ergebnis wird als Relay-Verbindung zurückgegeben – die Objekte stehen unter edges → node. Wähle in der node-Auswahl beliebige der folgenden Felder; du erhältst ausschließlich die angefragten Felder zurück. avg_appartments und avg_houses liefern zusätzlich die aggregierten Felder avg_price_per_square_meter und avg_rent_per_square_meter.

Abfragbare Felder

Identifikation & Metadaten

FeldTypBeschreibung
immo_idStringEindeutige ID des Inserats auf der Quellplattform
titleStringTitel des Inserats
descriptionStringBeschreibungstext des Inserats
urlStringLink zum Original-Inserat
spiderStringQuellplattform (z. B. immoscout, immowelt, kleinanzeigen, immonet, ohnemakler)
typStringObjektart: "wohnung" oder "haus"
actionStringVermarktungsart: "kaufen" oder "mieten"
currencyStringWährung (i. d. R. EUR)
dateDateTimeZeitpunkt der letzten Aktualisierung des Datensatzes
uptime_dateDateTimeZeitpunkt, seit dem das Inserat online ist

Standort

FeldTypBeschreibung
streetStringStraße und Hausnummer (falls verfügbar)
cityStringStadt
zipcodeIntPostleitzahl
stateStringBundesland
locationStringNormalisierter Standort-Slug (z. B. bl-bayern)
latFloatBreitengrad
lonFloatLängengrad

Preis & Finanzen

FeldTypBeschreibung
priceFloatKaufpreis (€)
price_per_square_meterFloatKaufpreis pro m² (€)
rent_priceFloatKaltmiete (€)
rent_per_square_meterFloatKaltmiete pro m² (€)
warm_rent_priceFloatWarmmiete (€)
extra_charges_priceFloatNebenkosten (€)
heat_priceFloatHeizkosten (€)
parking_lot_priceFloatStellplatzpreis (€)
maintenance_priceFloatHausgeld / Instandhaltung (€)
cashflowFloatGeschätzter monatlicher Cashflow bei Kauf – berechnet
roiFloatGeschätzte Rendite – berechnet
price_changes[PriceChangeHistory]Historie der Preisänderungen: { date, price }
most_recent_price_changeFloatJüngster Preis aus der Änderungshistorie
most_oldest_price_changeFloatÄltester Preis aus der Änderungshistorie
price_has_changedBooleanOb sich der Preis seit Erfassung geändert hat
price_has_increasedBooleanOb der Preis zuletzt gestiegen ist
price_below_market_valueBooleanLiegt der Angebotspreis unter dem Modellwert

SOM-Modellwerte

FeldTypBeschreibung
som_model_priceFloatFairer Kaufpreis-Schätzwert des SOM-Modells (€)
som_model_rentFloatFairer Miet-Schätzwert des SOM-Modells (€)
som_model_percentageFloatAbweichung des Angebotspreises vom Modellwert (%); negativ = unter Markt

Objekt & Größe

FeldTypBeschreibung
square_meterFloatWohnfläche (m²)
property_square_meterFloatGrundstücksfläche (m²) – nur bei Häusern
roomsFloatAnzahl Zimmer
bed_roomsIntAnzahl Schlafzimmer
bath_roomsIntAnzahl Badezimmer
year_of_constructionDateTimeBaujahr
floor_numberStringEtage
floor_numbersIntAnzahl Etagen im Gebäude
type_categoryStringObjektkategorie
house_typeStringHaustyp
move_inStringBezugsfrei ab
parking_lot_countIntAnzahl Stellplätze
parking_lot_typeStringArt des Stellplatzes
more_roomsStringWeitere Räume
floor_typeStringBodenbelag
view_typeStringAusblick
windows_typeStringFensterart
security_technologyStringSicherheitstechnik
servicesStringServices
current_usageStringAktuelle Nutzung

Ausstattung & Zustand

FeldTypBeschreibung
has_balconyBooleanBalkon
has_terraceBooleanTerrasse
has_loggiaBooleanLoggia
has_gardenBooleanGarten
has_cellarBooleanKeller
has_storage_roomBooleanAbstellraum
has_kitchenBooleanEinbauküche
has_bathtubBooleanBadewanne
has_window_in_bathBooleanFenster im Bad
has_showerBooleanDusche
has_parking_lotBooleanStellplatz vorhanden
has_elevatorBooleanAufzug
has_caretakerBooleanHausmeister
has_cleanerBooleanReinigungsdienst
has_cable_connectionBooleanKabelanschluss
has_dsl_connectionBooleanDSL-Anschluss
is_barrier_freeBooleanBarrierefrei
pets_allowedBooleanHaustiere erlaubt
use_as_holiday_propertyBooleanAls Ferienimmobilie nutzbar
is_new_buildingBooleanNeubau
is_provisionfreeBooleanProvisionsfrei
is_rentedBooleanAktuell vermietet
is_foreclosureBooleanZwangsversteigerung
is_erbbaurechtBooleanErbbaurecht
vacantBooleanLeerstehend / bezugsfrei
renovation_neededBooleanRenovierungsbedarf
is_activeBooleanInserat noch online

Energie & Heizung

FeldTypBeschreibung
energy_efficency_classStringEnergieeffizienzklasse (A+ … H)
energy_consumptionStringEnergieverbrauch (kWh/m²a)
energy_sourceStringEnergieträger
heating_typeStringHeizungsart
energy_building_typeStringGebäudetyp laut Energieausweis
energy_type_documentStringArt des Energieausweises
energy_document_year_of_constructionStringBaujahr laut Energieausweis
energy_document_validityStringGültigkeit des Energieausweises
energy_supplyStringEnergieversorgung

Beschreibungen & Medien

FeldTypBeschreibung
location_descriptionStringLagebeschreibung
furnishing_descriptionStringAusstattungsbeschreibung
object_descriptionStringObjektbeschreibung
other_descriptionStringSonstige Hinweise
keywords_descriptionStringSchlagworte
seller_nameStringName des Anbieters
image_urls[Images]Bilder: { key, url, description }
renovation_estimateRenovationEstimateKI-Renovierungsschätzung: { items { item, cost, description }, total_cost, summary }

Filter

Übergib Filter als filters-Objekt. Numerische und Datumsfelder unterstützen die Suffixe _lt, _gt, _lte und _gte (kombiniere _gt und _lt für Bereiche). _in erwartet eine Liste, _exists einen Boolean und _contains eine case-insensitive Teilstring-Suche.

Identität, Plattform & Ort

FilterTypBeschreibung
immo_idStringGenau dieses Inserat
immo_id_in[String]Inserat ist eines der angegebenen immo_id
immo_id_all[String]Inserat enthält alle angegebenen immo_id
spiderStringQuellplattform (immoscout, immowelt, kleinanzeigen, immonet, ohnemakler, …)
typString"wohnung" oder "haus"
actionString"kaufen" oder "mieten"
locationStringStandort-Slug (z. B. bl-bayern, hamburg)
cityStringExakter Stadtname (schnell, tokenbasiert)
city_containsStringTeilstring im Stadtnamen (case-insensitive)
city_tokens_all[String]Stadt enthält alle angegebenen Tokens
title_containsStringTeilstring im Titel (case-insensitive)
zipcode_in[Int]Postleitzahl ist eine der angegebenen
zipcode_existsBooleanNur Inserate mit / ohne Postleitzahl

Preis, Größe & Finanzen

FilterTypBeschreibung
price_lt / price_gtIntKaufpreis kleiner / größer als
price_per_square_meter_lt / _gtIntKaufpreis pro m² kleiner / größer als
rent_price_lt / rent_price_gtIntKaltmiete kleiner / größer als
rent_per_square_meter_lt / _gtIntKaltmiete pro m² kleiner / größer als
square_meter_lt / square_meter_gtIntWohnfläche kleiner / größer als
rooms_lt / _gt / _lte / _gteFloatZimmeranzahl kleiner / größer (oder gleich) als
cashflow_lt / cashflow_gtIntMonatlicher Cashflow kleiner / größer als
roi_lt / roi_gtFloatRendite kleiner / größer als

Bewertung & SOM-Modell

FilterTypBeschreibung
price_below_market_valueBooleanNur Objekte unter dem Modellwert
som_model_percentage_lt / _gtFloatAbweichung vom Modellwert kleiner / größer als (negativ = unter Markt)
som_model_price_existsBooleanNur Objekte mit Kaufpreis-Schätzwert
som_model_rent_existsBooleanNur Objekte mit Miet-Schätzwert
price_has_changedBooleanPreis hat sich geändert
price_has_increasedBooleanPreis ist gestiegen

Zustand, Energie, Datum & Geo

FilterTypBeschreibung
is_activeBooleanInserat noch online (Standard: true)
is_foreclosureBooleanZwangsversteigerung
is_erbbaurechtBooleanErbbaurecht
vacantBooleanLeerstehend / bezugsfrei
renovation_neededBooleanRenovierungsbedarf
energy_efficency_class_in[String]Energieeffizienzklasse ist eine der angegebenen
year_of_construction_lt / _gt / _lte / _gteDateTimeBaujahr vor / nach (oder gleich)
year_of_construction_existsBooleanNur Inserate mit Baujahr-Angabe
uptime_date_lt / uptime_date_gtDateTimeOnline seit vor / nach
date_lt / date_gtDateTimeZuletzt aktualisiert vor / nach
lat_gt / lat_lt / lon_gt / lon_ltIntGeografische Eingrenzung (Bounding Box)
lat_exists / lon_existsBooleanNur Inserate mit Koordinaten

Beispielabfragen

Sende jede dieser Abfragen per POST an https://www.somantic.net/api/graphql – im JSON-Body unter dem Schlüssel query und mit deinem X-API-Key-Header (siehe Abfrage senden).

Aktive Kaufwohnungen in Bayern (nur Kleinanzeigen)

Die 10 neuesten aktiven Eigentumswohnungen in Bayern von kleinanzeigen.de, sortiert nach Online-Datum.

{
  all_appartments(
    order_by: "-uptime_date"
    per_page: 10
    page: 1
    filters: { is_active: true, action: "kaufen", location: "bl-bayern", spider: "kleinanzeigen" }
  ) {
    edges {
      node {
        uptime_date
        url
        square_meter
        price
      }
    }
  }
}

Nächste Seite (Pagination)

Zum Blättern einfach page erhöhen. per_page ist auf maximal 100 begrenzt.

{
  all_appartments(
    order_by: "-uptime_date"
    per_page: 10
    page: 2
    filters: { is_active: true, action: "kaufen", location: "bl-bayern", spider: "kleinanzeigen" }
  ) {
    edges { node { uptime_date url square_meter price } }
  }
}

Häuser zum Kauf in Baden-Württemberg (immowelt)

Die 20 teuersten aktiven Häuser in Baden-Württemberg von immowelt.de, absteigend nach Preis.

{
  all_houses(
    order_by: "-price"
    per_page: 20
    page: 1
    filters: { is_active: true, action: "kaufen", location: "bl-baden-wuerttemberg", spider: "immowelt" }
  ) {
    edges {
      node {
        uptime_date
        url
        square_meter
        property_square_meter
        price
      }
    }
  }
}

Durchschnittlicher Kaufpreis pro m² (Wohnungen, BW)

Durchschnittlicher Quadratmeterpreis aller aktiven Kaufwohnungen in Baden-Württemberg.

{
  avg_appartments(filters: { is_active: true, action: "kaufen", location: "bl-baden-wuerttemberg" }) {
    edges { node { avg_price_per_square_meter } }
  }
}

Durchschnittliche Miete pro m² (Wohnungen, Hamburg)

Durchschnittliche Kaltmiete pro Quadratmeter aller aktiven Mietwohnungen in Hamburg.

{
  avg_appartments(filters: { is_active: true, action: "mieten", location: "hamburg" }) {
    edges { node { avg_rent_per_square_meter } }
  }
}

Anzahl aktiver Mietwohnungen in Hamburg

Gesamtanzahl der passenden Wohnungen – ideal, um vor dem Paginieren die Treffermenge zu kennen.

{
  total_appartments_count(filters: { is_active: true, action: "mieten", location: "hamburg" })
}

Alle Mietwohnungen in einer Stadt (Hagen)

Bis zu 100 aktive Mietwohnungen in einer bestimmten Stadt, mit umfangreichem Feldsatz.

{
  all_appartments(
    order_by: "-uptime_date"
    per_page: 100
    page: 1
    filters: { is_active: true, city: "Hagen", action: "mieten" }
  ) {
    edges {
      node {
        immo_id
        url
        spider
        title
        location
        city
        zipcode
        rent_price
        warm_rent_price
        extra_charges_price
        rent_per_square_meter
        square_meter
        year_of_construction
        uptime_date
      }
    }
  }
}

Alle Kaufwohnungen in einer PLZ (Lübeck 23552)

Aktive Eigentumswohnungen in einer bestimmten Postleitzahl.

{
  all_appartments(
    order_by: "-uptime_date"
    per_page: 100
    page: 1
    filters: { is_active: true, zipcode_in: [23552], action: "kaufen" }
  ) {
    edges {
      node {
        immo_id
        url
        spider
        title
        location
        city
        state
        zipcode
        price
        price_per_square_meter
        square_meter
        year_of_construction
        uptime_date
      }
    }
  }
}

Unterbewertete Wohnungen finden

Aktive Kaufwohnungen, deren Angebotspreis laut SOM-Modell mindestens 10 % unter dem fairen Marktwert liegt – sortiert nach größter Abweichung.

{
  all_appartments(
    order_by: "som_model_percentage"
    per_page: 25
    filters: { is_active: true, action: "kaufen", city: "Leipzig", som_model_percentage_lt: -10 }
  ) {
    edges {
      node {
        immo_id
        url
        title
        price
        som_model_price
        som_model_percentage
        price_per_square_meter
      }
    }
  }
}

Cashflow-positive Kapitalanlagen

Kaufwohnungen mit positivem geschätzten Cashflow, sortiert nach Rendite (ROI). equity_percentage, interest und repayment passen die Finanzierungsannahmen an.

{
  all_appartments(
    order_by: "-roi"
    per_page: 25
    equity_percentage: 0.2
    interest: 0.035
    repayment: 0.02
    filters: { is_active: true, action: "kaufen", cashflow_gt: 0 }
  ) {
    edges {
      node {
        immo_id
        url
        title
        price
        rooms
        square_meter
        cashflow
        roi
        som_model_rent
      }
    }
  }
}

Immobilienbewertungs-API

Liefert eine sofortige Miet- und Kaufpreisschätzung für jede deutsche Adresse, basierend auf einem Self-Organizing-Map-Modell, das mit Live-Marktdaten trainiert wurde. Sende ein POST an /estimate mit den Objektdaten.

Anfrage-Body

FeldTypBeschreibung
typstring"wohnung" (Wohnung) oder "haus" (Haus)
streetstringStraße und Hausnummer
postcodestring5-stellige deutsche Postleitzahl
citystringStadt
square_metersnumberWohnfläche in m²
roomsnumberAnzahl der Zimmer
year_of_constructionnumberBaujahr

Anfrage senden

curl https://www.somantic.net/api/estimate \
  -H "X-API-Key: som_live_DEIN_SCHLUESSEL" \
  -H "Content-Type: application/json" \
  -d '{
    "typ": "wohnung",
    "street": "Marienplatz 1",
    "postcode": "80331",
    "city": "München",
    "square_meters": 75,
    "rooms": 3,
    "year_of_construction": 1990
  }'

Beispielantwort

{
  "estimates": {
    "rent": 1650.0,           // geschätzte monatliche Kaltmiete (€)
    "price": 712500.0,        // geschätzter Kaufpreis (€)
    "similar_properties": [ ... ]
  },
  "location": { "lat": 48.1374, "lon": 11.5755 },
  "typ": "wohnung"
}

Fehler

Fehler verwenden Standard-HTTP-Statuscodes mit einem JSON-Body der Form { "detail": "…" }.

StatusBedeutung
400Ungültiger Anfrage-Body oder ungültige Parameter
402Abonnement inaktiv – Zahlungsdaten im Dashboard aktualisieren
403Fehlender, ungültiger oder widerrufener API-Schlüssel
429Monatliches Kontingent auf einer gedeckelten Stufe erreicht – zum Fortfahren upgraden
500Serverfehler – bitte erneut versuchen oder den Support kontaktieren