Zwei REST/GraphQL-Endpunkte für deutsche Immobiliendaten und sofortige Immobilienbewertungen. Authentifizierung über einen einzigen API-Schlüssel.
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.
| Produkt | Methode | Endpunkt |
|---|---|---|
| Immobiliendaten-API | POST | /graphql |
| Immobilienbewertungs-API | POST | /estimate |
Ü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_SCHLUESSELJede 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.
| Stufe | Daten-API / Mon. | Bewertungs-API / Mon. | Mehrverbrauch |
|---|---|---|---|
| BASIC (kostenlos) | 15 | 10 | — |
| PRO | 1.000 | 500 | 0,01 € / Anf. |
| ULTRA | 10.000 | 2.500 | 0,007 € / Anf. |
| MEGA | 35.000 | 10.000 | 0,004 € / Anf. |
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
In Arbeit: meinstadt.de, wohnung jetzt, regionalimmobilien, Sparkasse Immobilien.
Verfügbare Abfragen
| Abfrage | Liefert |
|---|---|
all_appartments | Paginierte Liste von Wohnungen (edges → node) |
all_houses | Paginierte Liste von Häusern (edges → node) |
total_appartments_count | Int: Gesamtanzahl passender Wohnungen |
total_houses_count | Int: Gesamtanzahl passender Häuser |
avg_appartments | Durchschnittswerte für Wohnungen (avg_price_per_square_meter, avg_rent_per_square_meter) |
avg_houses | Durchschnittswerte 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 } } } }"}'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.
| Feld | Typ | Beschreibung |
|---|---|---|
immo_id | String | Eindeutige ID des Inserats auf der Quellplattform |
title | String | Titel des Inserats |
description | String | Beschreibungstext des Inserats |
url | String | Link zum Original-Inserat |
spider | String | Quellplattform (z. B. immoscout, immowelt, kleinanzeigen, immonet, ohnemakler) |
typ | String | Objektart: "wohnung" oder "haus" |
action | String | Vermarktungsart: "kaufen" oder "mieten" |
currency | String | Währung (i. d. R. EUR) |
date | DateTime | Zeitpunkt der letzten Aktualisierung des Datensatzes |
uptime_date | DateTime | Zeitpunkt, seit dem das Inserat online ist |
| Feld | Typ | Beschreibung |
|---|---|---|
street | String | Straße und Hausnummer (falls verfügbar) |
city | String | Stadt |
zipcode | Int | Postleitzahl |
state | String | Bundesland |
location | String | Normalisierter Standort-Slug (z. B. bl-bayern) |
lat | Float | Breitengrad |
lon | Float | Längengrad |
| Feld | Typ | Beschreibung |
|---|---|---|
price | Float | Kaufpreis (€) |
price_per_square_meter | Float | Kaufpreis pro m² (€) |
rent_price | Float | Kaltmiete (€) |
rent_per_square_meter | Float | Kaltmiete pro m² (€) |
warm_rent_price | Float | Warmmiete (€) |
extra_charges_price | Float | Nebenkosten (€) |
heat_price | Float | Heizkosten (€) |
parking_lot_price | Float | Stellplatzpreis (€) |
maintenance_price | Float | Hausgeld / Instandhaltung (€) |
cashflow | Float | Geschätzter monatlicher Cashflow bei Kauf – berechnet |
roi | Float | Geschätzte Rendite – berechnet |
price_changes | [PriceChangeHistory] | Historie der Preisänderungen: { date, price } |
most_recent_price_change | Float | Jüngster Preis aus der Änderungshistorie |
most_oldest_price_change | Float | Ältester Preis aus der Änderungshistorie |
price_has_changed | Boolean | Ob sich der Preis seit Erfassung geändert hat |
price_has_increased | Boolean | Ob der Preis zuletzt gestiegen ist |
price_below_market_value | Boolean | Liegt der Angebotspreis unter dem Modellwert |
| Feld | Typ | Beschreibung |
|---|---|---|
som_model_price | Float | Fairer Kaufpreis-Schätzwert des SOM-Modells (€) |
som_model_rent | Float | Fairer Miet-Schätzwert des SOM-Modells (€) |
som_model_percentage | Float | Abweichung des Angebotspreises vom Modellwert (%); negativ = unter Markt |
| Feld | Typ | Beschreibung |
|---|---|---|
square_meter | Float | Wohnfläche (m²) |
property_square_meter | Float | Grundstücksfläche (m²) – nur bei Häusern |
rooms | Float | Anzahl Zimmer |
bed_rooms | Int | Anzahl Schlafzimmer |
bath_rooms | Int | Anzahl Badezimmer |
year_of_construction | DateTime | Baujahr |
floor_number | String | Etage |
floor_numbers | Int | Anzahl Etagen im Gebäude |
type_category | String | Objektkategorie |
house_type | String | Haustyp |
move_in | String | Bezugsfrei ab |
parking_lot_count | Int | Anzahl Stellplätze |
parking_lot_type | String | Art des Stellplatzes |
more_rooms | String | Weitere Räume |
floor_type | String | Bodenbelag |
view_type | String | Ausblick |
windows_type | String | Fensterart |
security_technology | String | Sicherheitstechnik |
services | String | Services |
current_usage | String | Aktuelle Nutzung |
| Feld | Typ | Beschreibung |
|---|---|---|
has_balcony | Boolean | Balkon |
has_terrace | Boolean | Terrasse |
has_loggia | Boolean | Loggia |
has_garden | Boolean | Garten |
has_cellar | Boolean | Keller |
has_storage_room | Boolean | Abstellraum |
has_kitchen | Boolean | Einbauküche |
has_bathtub | Boolean | Badewanne |
has_window_in_bath | Boolean | Fenster im Bad |
has_shower | Boolean | Dusche |
has_parking_lot | Boolean | Stellplatz vorhanden |
has_elevator | Boolean | Aufzug |
has_caretaker | Boolean | Hausmeister |
has_cleaner | Boolean | Reinigungsdienst |
has_cable_connection | Boolean | Kabelanschluss |
has_dsl_connection | Boolean | DSL-Anschluss |
is_barrier_free | Boolean | Barrierefrei |
pets_allowed | Boolean | Haustiere erlaubt |
use_as_holiday_property | Boolean | Als Ferienimmobilie nutzbar |
is_new_building | Boolean | Neubau |
is_provisionfree | Boolean | Provisionsfrei |
is_rented | Boolean | Aktuell vermietet |
is_foreclosure | Boolean | Zwangsversteigerung |
is_erbbaurecht | Boolean | Erbbaurecht |
vacant | Boolean | Leerstehend / bezugsfrei |
renovation_needed | Boolean | Renovierungsbedarf |
is_active | Boolean | Inserat noch online |
| Feld | Typ | Beschreibung |
|---|---|---|
energy_efficency_class | String | Energieeffizienzklasse (A+ … H) |
energy_consumption | String | Energieverbrauch (kWh/m²a) |
energy_source | String | Energieträger |
heating_type | String | Heizungsart |
energy_building_type | String | Gebäudetyp laut Energieausweis |
energy_type_document | String | Art des Energieausweises |
energy_document_year_of_construction | String | Baujahr laut Energieausweis |
energy_document_validity | String | Gültigkeit des Energieausweises |
energy_supply | String | Energieversorgung |
| Feld | Typ | Beschreibung |
|---|---|---|
location_description | String | Lagebeschreibung |
furnishing_description | String | Ausstattungsbeschreibung |
object_description | String | Objektbeschreibung |
other_description | String | Sonstige Hinweise |
keywords_description | String | Schlagworte |
seller_name | String | Name des Anbieters |
image_urls | [Images] | Bilder: { key, url, description } |
renovation_estimate | RenovationEstimate | KI-Renovierungsschätzung: { items { item, cost, description }, total_cost, summary } |
Ü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.
| Filter | Typ | Beschreibung |
|---|---|---|
immo_id | String | Genau dieses Inserat |
immo_id_in | [String] | Inserat ist eines der angegebenen immo_id |
immo_id_all | [String] | Inserat enthält alle angegebenen immo_id |
spider | String | Quellplattform (immoscout, immowelt, kleinanzeigen, immonet, ohnemakler, …) |
typ | String | "wohnung" oder "haus" |
action | String | "kaufen" oder "mieten" |
location | String | Standort-Slug (z. B. bl-bayern, hamburg) |
city | String | Exakter Stadtname (schnell, tokenbasiert) |
city_contains | String | Teilstring im Stadtnamen (case-insensitive) |
city_tokens_all | [String] | Stadt enthält alle angegebenen Tokens |
title_contains | String | Teilstring im Titel (case-insensitive) |
zipcode_in | [Int] | Postleitzahl ist eine der angegebenen |
zipcode_exists | Boolean | Nur Inserate mit / ohne Postleitzahl |
| Filter | Typ | Beschreibung |
|---|---|---|
price_lt / price_gt | Int | Kaufpreis kleiner / größer als |
price_per_square_meter_lt / _gt | Int | Kaufpreis pro m² kleiner / größer als |
rent_price_lt / rent_price_gt | Int | Kaltmiete kleiner / größer als |
rent_per_square_meter_lt / _gt | Int | Kaltmiete pro m² kleiner / größer als |
square_meter_lt / square_meter_gt | Int | Wohnfläche kleiner / größer als |
rooms_lt / _gt / _lte / _gte | Float | Zimmeranzahl kleiner / größer (oder gleich) als |
cashflow_lt / cashflow_gt | Int | Monatlicher Cashflow kleiner / größer als |
roi_lt / roi_gt | Float | Rendite kleiner / größer als |
| Filter | Typ | Beschreibung |
|---|---|---|
price_below_market_value | Boolean | Nur Objekte unter dem Modellwert |
som_model_percentage_lt / _gt | Float | Abweichung vom Modellwert kleiner / größer als (negativ = unter Markt) |
som_model_price_exists | Boolean | Nur Objekte mit Kaufpreis-Schätzwert |
som_model_rent_exists | Boolean | Nur Objekte mit Miet-Schätzwert |
price_has_changed | Boolean | Preis hat sich geändert |
price_has_increased | Boolean | Preis ist gestiegen |
| Filter | Typ | Beschreibung |
|---|---|---|
is_active | Boolean | Inserat noch online (Standard: true) |
is_foreclosure | Boolean | Zwangsversteigerung |
is_erbbaurecht | Boolean | Erbbaurecht |
vacant | Boolean | Leerstehend / bezugsfrei |
renovation_needed | Boolean | Renovierungsbedarf |
energy_efficency_class_in | [String] | Energieeffizienzklasse ist eine der angegebenen |
year_of_construction_lt / _gt / _lte / _gte | DateTime | Baujahr vor / nach (oder gleich) |
year_of_construction_exists | Boolean | Nur Inserate mit Baujahr-Angabe |
uptime_date_lt / uptime_date_gt | DateTime | Online seit vor / nach |
date_lt / date_gt | DateTime | Zuletzt aktualisiert vor / nach |
lat_gt / lat_lt / lon_gt / lon_lt | Int | Geografische Eingrenzung (Bounding Box) |
lat_exists / lon_exists | Boolean | Nur Inserate mit Koordinaten |
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).
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
}
}
}
}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 } }
}
}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 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 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 } }
}
}Gesamtanzahl der passenden Wohnungen – ideal, um vor dem Paginieren die Treffermenge zu kennen.
{
total_appartments_count(filters: { is_active: true, action: "mieten", location: "hamburg" })
}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
}
}
}
}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
}
}
}
}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
}
}
}
}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
}
}
}
}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
| Feld | Typ | Beschreibung |
|---|---|---|
typ | string | "wohnung" (Wohnung) oder "haus" (Haus) |
street | string | Straße und Hausnummer |
postcode | string | 5-stellige deutsche Postleitzahl |
city | string | Stadt |
square_meters | number | Wohnfläche in m² |
rooms | number | Anzahl der Zimmer |
year_of_construction | number | Baujahr |
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 verwenden Standard-HTTP-Statuscodes mit einem JSON-Body der Form { "detail": "…" }.
| Status | Bedeutung |
|---|---|
400 | Ungültiger Anfrage-Body oder ungültige Parameter |
402 | Abonnement inaktiv – Zahlungsdaten im Dashboard aktualisieren |
403 | Fehlender, ungültiger oder widerrufener API-Schlüssel |
429 | Monatliches Kontingent auf einer gedeckelten Stufe erreicht – zum Fortfahren upgraden |
500 | Serverfehler – bitte erneut versuchen oder den Support kontaktieren |
Bereit loszulegen?
Kostenlosen API-Schlüssel erstellen