Somantic API-Dokumentation
GraphQL- und REST-Endpunkte für deutsche Immobilien und sofortige Immobilienbewertungen – und ein MCP-Endpunkt, über den KI-Agenten direkt suchen. 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.
| Produkt | Methode | Endpunkt |
|---|---|---|
| Immobilien-API | POST | /graphql |
| Immobilienbewertungs-API | POST | /estimate |
| MCP für KI-Agenten | POST | /mcp/ |
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_SCHLUESSELKontingente & 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 FREE-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. Alle Preise inkl. 19 % MwSt.
| Stufe | Immobilien-API / Mon. | Bewertungs-API / Mon. | Mehrverbrauch | Anf. / Sek. |
|---|---|---|---|---|
| FREE (kostenlos) | 50 | 25 | — | 2 |
| STARTER | 400 | 400 | 0,0101 € / Anf. | 5 |
| GROWTH | 2.500 | 2.000 | 0,006 € / 0,0083 € / Anf. | 15 |
| SCALE | 10.000 | 8.000 | 0,0048 € / Anf. | 40 |
| BUSINESS | 30.000 | 25.000 | 0,0036 € / Anf. | 80 |
Immobilien-API (GraphQL)
Eine Meta-Suchmaschine als flexibler GraphQL-Endpunkt: Sie durchsucht die aktiven Inserate für Häuser und Wohnungen aus zahlreichen deutschen Portalen, damit Entwickler und Nutzer gezielt die passenden Objekte finden und zum Original-Inserat beim Anbieter gelangen. Jedes Inserat wird mit dem fairen Schätzwert unseres Bewertungsmodells (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.
Dasselbe Objekt wird häufig auf mehreren Portalen gleichzeitig inseriert. Die Suche zeigt jedes dieser Inserate als eigenen Treffer – mit eigener immo_id und dem Quellportal im Feld source –, damit du siehst, wo ein Objekt überall angeboten wird und zu welchem Preis. Willst du je Objekt nur einen Treffer, gruppiere nach dem Titel (kleingeschrieben, Leerzeichen zusammengefasst), square_meter, rooms und action und behalte das jüngste Inserat: Nach dieser Signatur fasst auch unsere Bewertung Mehrfach-Inserate zusammen. Der Preis gehört bewusst nicht dazu, weil Portale nach einer Preissenkung oft noch den alten zeigen.
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 (derzeit nur "-uptime_date", der Standard: zuletzt erfasste Inserate zuerst) sowie equity_percentage, interest und repayment zur Anpassung der Cashflow- und ROI-Berechnung. Die API liefert immer nur aktive Inserate: is_active ist stets true, auch wenn du etwas anderes angibst.
Aktualität. date (im MCP-Server last_seen) nennt, wann Somantic das Inserat zuletzt als online bestätigt hat. Nicht mehr bestätigte Inserate werden in der Regel nach 3 Tagen aus den Ergebnissen entfernt.
Keine Straße, keine Koordinaten. Die genaue Adresse eines angebotenen Objekts ist ein personenbezogenes Datum: Über sie lassen sich Eigentümer, Verkäufer oder Mieter identifizieren, und viele Inserenten veröffentlichen sie deshalb bewusst nicht. Die Lage eines Inserats geben Immobilien-API und MCP-Server daher nur über Postleitzahl und Ort an. Geografisch eingrenzen lässt sich die Suche trotzdem, mit zipcode_in, city oder lat_gt/lat_lt. Die genaue Lage steht, soweit der Inserent sie freigibt, im Original-Inserat.
Inserate sind Angebote Dritter. Jede Antwort trägt deshalb unter extensions.attribution die Nutzungsregel: Wer ein Inserat anzeigt, nennt das Quellportal (source) und verlinkt das Original (url).
Beispielabfrage
{
all_appartments(
filters: { city: "München", price_lt: 600000, square_meter_gt: 50 }
per_page: 5
order_by: "-uptime_date"
) {
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
| Feld | Typ | Beschreibung |
|---|---|---|
immo_id | String | Eindeutige ID des Inserats auf der Quellplattform |
title | String | Titel des Inserats |
url | String | Link zum Original-Inserat; dort stehen Beschreibung und Fotos |
source | String | Kennung des Quellportals |
typ | String | Objektart: "wohnung" oder "haus" |
action | String | Vermarktungsart: "kaufen" oder "mieten" |
currency | String | Währung (i. d. R. EUR) |
date | DateTime | Zeitpunkt, zu dem Somantic das Inserat zuletzt erfasst oder aktualisiert hat |
uptime_date | DateTime | Zeitpunkt der Ersterfassung durch Somantic; bei einigen Quellen das Online-Datum laut Portal, sofern angegeben |
Standort
| Feld | Typ | Beschreibung |
|---|---|---|
city | String | Stadt |
zipcode | Int | Postleitzahl |
state | String | Bundesland |
location | String | Normalisierter Standort-Slug (z. B. bl-bayern) |
Preis & Finanzen
| 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 (€) |
current_rent | Float | Nur Kaufangebote: aktuelle monatliche Kaltmiete des Mieters (€), aus dem Inseratstext gelesen (Jahresangaben ÷ 12). null, wenn das Inserat keine nennt; befüllt für neu erfasste und geänderte Inserate |
parking_lot_price | Float | Stellplatzpreis (€) |
maintenance_price | Float | Hausgeld / Instandhaltung (€); derzeit nicht befüllt |
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 geändert hat, seit das Inserat erstmals gefunden wurde |
price_has_increased | Boolean | Ob der Preis zuletzt gestiegen ist |
price_below_market_value | Boolean | Liegt der Angebotspreis unter dem Modellwert |
Modellwerte
| Feld | Typ | Beschreibung |
|---|---|---|
som_model_price | Float | Fairer Kaufpreis-Schätzwert des Bewertungsmodells (€) |
som_model_rent | Float | Fairer Miet-Schätzwert des Bewertungsmodells (€) |
som_model_percentage | Float | Abweichung des Angebotspreises vom Modellwert (%); negativ = unter Markt |
renovation_estimate | RenovationEstimate | KI-Renovierungsschätzung: { items { item, cost, description }, total_cost, summary }; nur vorhanden, wenn auf somantic.net eine Schätzung für das Inserat angefordert wurde |
Objekt & Größe
| 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 |
Ausstattung & Zustand
| 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 | Nicht als bezugsfrei inseriert – das Gegenstück zu vacant, kein eigener Nachweis einer Vermietung. Für vermietete Objekte ist vacant = false das verlässlichere Signal |
is_foreclosure | Boolean | Zwangsversteigerung |
is_erbbaurecht | Boolean | Erbbaurecht |
vacant | Boolean | Leerstehend / bezugsfrei |
renovation_needed | Boolean | Renovierungsbedarf; abgeleitet aus Titel, Beschreibung und Zustandsangabe ("renovierungs-/sanierungs-/modernisierungsbedürftig", "-bedarf", "-stau", "-objekt", "Handwerkerobjekt", "Bastlerobjekt", "abbruchreif"; Verneinungen wie "kein Sanierungsstau" zählen nicht) |
is_active | Boolean | Immer true: die API liefert nur aktive Inserate |
Energie & Heizung
| 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 |
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
| 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 |
source | String | Kennung des Quellportals, wie im Feld source geliefert |
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 |
Preis, Größe & Finanzen
| 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 |
Bewertung & Modellwerte
| 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 |
Zustand, Energie, Datum & Geo
| Filter | Typ | Beschreibung |
|---|---|---|
is_active | Boolean | Ohne Wirkung: die API liefert immer nur aktive Inserate, auch bei immo_id_in |
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 | Erstmals erfasst vor / nach – für den täglichen Abruf neu eingegangener Inserate |
date_lt / date_gt | DateTime | Zuletzt erfasst oder aktualisiert vor / nach – liefert auch bereits bekannte Inserate erneut |
lat_gt / lat_lt / lon_gt / lon_lt | Float | Geografische Eingrenzung (Bounding Box); die Grenzen werden auf ein Raster von 0,01° (ca. 1 km) gelegt |
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
Die 10 zuletzt erfassten aktiven Eigentumswohnungen in Bayern.
{
all_appartments(
order_by: "-uptime_date"
per_page: 10
page: 1
filters: { is_active: true, action: "kaufen", location: "bl-bayern" }
) {
edges {
node {
uptime_date
url
square_meter
price
}
}
}
}Nächste Seite (Pagination)
Zum Blättern page erhöhen; per_page ist auf maximal 100 begrenzt. Neu erfasste Inserate schieben die Liste während des Blätterns weiter – für einen täglichen Abruf besser uptime_date_gt auf den Zeitpunkt des letzten Laufs setzen und nach immo_id zusammenführen.
{
all_appartments(
order_by: "-uptime_date"
per_page: 10
page: 2
filters: { is_active: true, action: "kaufen", location: "bl-bayern" }
) {
edges { node { uptime_date url square_meter price } }
}
}Häuser zum Kauf in Baden-Württemberg
Die 20 zuletzt erfassten aktiven Häuser zum Kauf in Baden-Württemberg.
{
all_houses(
order_by: "-uptime_date"
per_page: 20
page: 1
filters: { is_active: true, action: "kaufen", location: "bl-baden-wuerttemberg" }
) {
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
source
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
source
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 Bewertungsmodell mindestens 10 % unter dem fairen Marktwert liegt.
{
all_appartments(
order_by: "-uptime_date"
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. equity_percentage, interest und repayment passen die Finanzierungsannahmen an.
{
all_appartments(
order_by: "-uptime_date"
per_page: 25
equity_percentage: 0.2
interest: 0.042
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
}
}
}
}MCP für KI-Agenten
Über das Model Context Protocol (MCP) sucht ein KI-Agent – etwa in Claude, ChatGPT, Codex oder einer eigenen Anwendung – direkt über die Somantic-Suche, ohne dass du Abfragen selbst baust. Der Endpunkt ist https://www.somantic.net/api/mcp/ (Streamable HTTP, zustandslos; mit Schrägstrich am Ende). Die Liste der Tools ist ohne Anmeldung abrufbar. Jeder Tool-Aufruf braucht entweder die Anmeldung mit deinem Somantic-Konto (OAuth) oder einen API-Schlüssel und zählt als eine Anfrage in deinem API-Kontingent – die kostenlose Stufe reicht zum Ausprobieren (Preise).
| Tool | Liefert |
|---|---|
search_listings | Suche nach aktuellen Inseraten: Ort (q), Kauf oder Miete, Wohnung oder Haus, Preis, Preis pro m², Preisänderung, Fläche, Zimmer, Baujahr, Rendite, Ausstattung, Renovierungsbedarf. Liefert Fakten, Somantic-Bewertung, source_url und last_seen, höchstens 50 je Seite. |
get_listing | Ein einzelnes Inserat mit allen Fakten, der Somantic-Bewertung und dem Link zum Original. |
estimate_value | Kauf- und Mietwert einer beliebigen deutschen Adresse – auch ohne Inserat. Erwartet Straße, PLZ, Ort und Wohnfläche, optional Zimmer, Baujahr, Objektart, Ausstattung und ob das Objekt vermietet ist. Liefert Schätzwerte, Spannen, €/m² und eine Konfidenz; bei zu wenigen Vergleichsobjekten nur €/m² und Konfidenz. Wird gegen das Kontingent der Bewertungs-API gezählt, nicht gegen das der Immobilien-API. |
Die Tools liefern Fakten, die Bewertung von Somantic (somantic_valuation_eur, price_vs_valuation_pct) und den Weg zum Angebot (source_portal, source_url) sowie mit last_seen, wann Somantic das Inserat zuletzt als online bestätigt hat. Keine Straße und keine Koordinaten (zum Schutz der Eigentümer und Bewohner, siehe Immobilien-API), keinen Text des Inserenten und keine Bilder. Zeigt dein Agent ein Inserat an, nennt er das Quellportal und verlinkt source_url; es gelten die API-Bedingungen in Ziffer 15 der AGB, für KI-Assistenten insbesondere Ziffer 15.5a.
Einrichtung
Mit der Anmeldung legt Somantic in deinem Entwickler-Dashboard den Schlüssel „KI-Assistent: …“ an, über den die Aufrufe laufen. Widerrufst du ihn dort, ist die Verbindung getrennt.
- claude.ai (gilt auch für Claude Desktop und die Claude-App): am einfachsten über den Eintrag im Claude-Verzeichnis („Connect“), sonst Settings → Connectors → „Add custom connector“ mit der URL. Beim ersten Aufruf meldest du dich mit deinem Somantic-Konto an. Alternativ mit API-Schlüssel: „No sign-in“ wählen und unter „Request headers“
X-API-Keymit deinem Schlüssel eintragen – sofern dein Konto diesen Abschnitt anzeigt. - ChatGPT: am einfachsten über den Eintrag im ChatGPT-Verzeichnis („Install plugin“), sonst unter chatgpt.com/plugins über „+“ → „Add custom MCP server“ die URL eintragen, als Authentifizierung OAuth wählen und als Plugin anlegen. Im Chat dann mit „@“ auswählen; beim ersten Aufruf meldest du dich mit deinem Somantic-Konto an.
Claude Code
# Mit Anmeldung: danach in Claude Code /mcp → somantic → Authenticate
claude mcp add --transport http somantic https://www.somantic.net/api/mcp/
# Oder mit API-Schlüssel
claude mcp add --transport http somantic https://www.somantic.net/api/mcp/ \
--header "X-API-Key: som_live_DEIN_SCHLUESSEL"Claude Code (.mcp.json)
{
"mcpServers": {
"somantic": {
"type": "http",
"url": "https://www.somantic.net/api/mcp/",
"headers": { "X-API-Key": "som_live_DEIN_SCHLUESSEL" }
}
}
}Claude Desktop mit API-Schlüssel (claude_desktop_config.json, braucht Node.js)
{
"mcpServers": {
"somantic": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://www.somantic.net/api/mcp/",
"--header", "X-API-Key:${SOMANTIC_API_KEY}"],
"env": { "SOMANTIC_API_KEY": "som_live_DEIN_SCHLUESSEL" }
}
}
}Codex CLI
# ~/.codex/config.toml
[mcp_servers.somantic]
url = "https://www.somantic.net/api/mcp/"
# Schlüssel aus der Umgebungsvariable SOMANTIC_API_KEY. Ohne diese Zeile
# meldest du dich mit `codex mcp login somantic` an.
bearer_token_env_var = "SOMANTIC_API_KEY"Cursor und VS Code
// Cursor: ~/.cursor/mcp.json
{
"mcpServers": {
"somantic": {
"url": "https://www.somantic.net/api/mcp/",
"headers": { "X-API-Key": "som_live_DEIN_SCHLUESSEL" }
}
}
}
// VS Code: .vscode/mcp.json
{
"servers": {
"somantic": {
"type": "http",
"url": "https://www.somantic.net/api/mcp/",
"headers": { "X-API-Key": "som_live_DEIN_SCHLUESSEL" }
}
}
}
// Ohne "headers" melden sich beide mit dem Somantic-Konto an.Direkter Aufruf
curl https://www.somantic.net/api/mcp/ \
-H "X-API-Key: som_live_DEIN_SCHLUESSEL" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {"name": "search_listings",
"arguments": {"q": "Leipzig", "transaction": "kaufen",
"price_max": 300000, "price_below_market": true}}}'Immobilienbewertungs-API
Liefert eine sofortige Miet- und Kaufpreisschätzung für jede deutsche Adresse – auf Basis echter Vergleichsangebote aus derselben Lage. Sende ein POST an /estimate mit den Objektdaten.
Mehrfach-Inserate zählen nur einmal. Dieselbe Wohnung steht oft gleichzeitig auf mehreren Portalen. Vor der Berechnung werden Vergleichsobjekte portalübergreifend zusammengefasst, sodass ein dreifach inseriertes Objekt den Schätzwert nicht dreifach beeinflusst. sample_size nennt die Zahl der tatsächlich verwendeten – also bereits bereinigten – Vergleichsobjekte.
Anfrage-Body
| Feld | Typ | Beschreibung |
|---|---|---|
typ | string | Pflicht. "wohnung" (Wohnung) oder "haus" (Haus) |
street | string | Pflicht, mindestens 3 Zeichen. Ohne Straße wäre die Bewertung die des PLZ-Mittelpunkts, nicht die der Adresse; für eine Einschätzung ohne Adresse nutzen Sie /estimate/quick |
postcode | string | Pflicht. 5-stellige deutsche Postleitzahl |
city | string | Pflicht. Stadt |
square_meters | number | Pflicht. Wohnfläche in m² |
rooms | number | Optional. Anzahl der Zimmer – erhöht die Genauigkeit |
year_of_construction | number | Optional. Baujahr – erhöht die Genauigkeit |
property_type | string | Optional. Objektart, z. B. "reihenhaus", "doppelhaushaelfte", "etagenwohnung". Filtert die Vergleichsobjekte. Liste unter GET /estimate/property-types |
features | object | Optional. Ausstattung: balcony, terrace, basement, elevator, garden, kitchen, parking, new_building. Nur true grenzt die Vergleichsobjekte ein – false wird ignoriert, da ein fehlendes Merkmal im Inserat meist nur bedeutet, dass es nicht erwähnt wurde. Ausnahme Neubau: Ein Neubau wird nur mit Neubauten verglichen, jedes andere Objekt ohne sie (filters_applied: new_building=false). Als Neubau gilt new_building: true oder ein Baujahr aus den letzten 3 Jahren |
rented | boolean | Optional. true bewertet das Objekt als vermietet und lässt bezugsfrei inserierte Kaufangebote aus dem Vergleich; false vergleicht nur mit ihnen. Mit Mieter erzielt dieselbe Wohnung meist deutlich weniger. Wirkt nur auf die Kaufseite. Ohne Angabe wird nicht gefiltert |
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, // geschätzte monatliche Kaltmiete (€)
"price": 712500, // geschätzter Kaufpreis (€)
"price_range": { // Quartilsband über die Vergleichsobjekte
"low": 664000,
"high": 758000
},
"rent_range": { "low": 1540, "high": 1760 },
"price_per_square_meter": {
"count": 46, "mean": 9500.0, "median": 9420.0,
"p25": 8850.0, "p75": 10110.0, "min": 7200.0, "max": 12400.0
},
"rent_per_square_meter": { "count": 31, "mean": 22.0, "median": 21.8, ... },
"similar_properties": [ ... ] // Vergleichsobjekte; lat/lon auf ca. 1 km gerundet
},
"confidence": {
"price": "high", // high | medium | low | none
"rent": "medium",
"sample_size": 46, // Vergleichsobjekte nach Filterung
"cluster_size": 118, // Vergleichsobjekte vor Filterung
"recency_window_months": 12, // verwendetes Aktualitätsfenster
"date_span": { "oldest": "2025-08-23", "newest": "2026-08-04" },
"filters_applied": ["recency=12m", "property_type=etagenwohnung", "elevator"],
"filters_skipped": ["garden"] // hätte zu wenige Vergleichsobjekte übrig gelassen
},
"location": { "lat": 48.1374, "lon": 11.5755 },
"typ": "wohnung",
"property_type": "etagenwohnung"
}Die Punktschätzungen price und rent sind der Mittelwert über die Vergleichsobjekte, price_range und rent_range das Quartilsband (25.–75. Perzentil). confidence macht transparent, worauf das Ergebnis beruht: wie viele Vergleichsobjekte übrig blieben, welche Filter angewendet wurden und welche übersprungen wurden, weil sonst zu wenige Vergleichsobjekte verblieben wären.
similar_properties listet die Vergleichsobjekte. Ihre Koordinaten (lat, lon) sind auf zwei Nachkommastellen gerundet, also auf ein Raster von etwa 1 km, und geben nur die ungefähre Lage an; eine Straße enthalten sie nicht. Die genaue Lage eines Inserats gibt Somantic zum Schutz der Eigentümer und Bewohner nirgends heraus, siehe Immobilien-API. location ist dagegen der genaue Punkt der angefragten Adresse.
Zu dünne Datenlage liefert keine Zahl. Stützt sich eine Seite auf weniger als 5 Vergleichsobjekte, sind price und price_range bzw. rent und rent_range null. Die Statistik unter price_per_square_meter bzw. rent_per_square_meter und die confidence werden trotzdem geliefert, damit sichtbar bleibt, was gefunden wurde. Behandle beide Felder daher als optional.
Vergleichsobjekte werden zusätzlich nach Aktualität eingegrenzt. Wir versuchen zuerst ein Fenster von 12 Monaten und weiten auf 24 bzw. 36 Monate aus, wenn sonst zu wenige Objekte übrig blieben. recency_window_months nennt das tatsächlich verwendete Fenster, date_span den Zeitraum der einbezogenen Inserate. Ist auch das weiteste Fenster zu dünn besetzt, rechnen wir ohne Zeitfenster und weisen das unter filters_skipped aus.
Grobe Ersteinschätzung
POST /estimate/quick liefert eine Quadratmeterpreis-Spanne für die Mikrolage – ohne Wohnfläche und ohne weitere Objektangaben. Gedacht für den ersten Schritt eines zweistufigen Bewertungsprozesses: Der Nutzer bestätigt seine Adresse und sieht sofort eine Einordnung, bevor er ein längeres Formular ausfüllt.
Statt des Bewertungsmodells aggregiert dieser Endpunkt die aktiven Inserate des PLZ-Gebiets. Reichen diese nicht aus, weitet er automatisch auf die Gemeinde aus – confidence.basis gibt an, welche Ebene verwendet wurde. Optional übergebene square_meters rechnen die Spanne zusätzlich in absolute Euro um.
| Feld | Typ | Beschreibung |
|---|---|---|
typ | string | Pflicht. "wohnung" oder "haus" |
postcode | string | Pflicht. 5-stellige deutsche Postleitzahl |
city | string | Optional, aber empfohlen – ermöglicht die Ausweitung auf die Gemeinde |
property_type | string | Optional. Objektart wie bei /estimate |
square_meters | number | Optional. Rechnet die €/m²-Spanne in absolute Euro um |
Anfrage senden
curl https://www.somantic.net/api/estimate/quick \
-H "X-API-Key: som_live_DEIN_SCHLUESSEL" \
-H "Content-Type: application/json" \
-d '{
"typ": "wohnung",
"postcode": "80331",
"city": "München"
}'Beispielantwort
{
"estimates": {
"price_per_square_meter": {
"count": 214, "mean": 9640.0, "median": 9500.0,
"p25": 8400.0, "p75": 10800.0, "min": 5900.0, "max": 16200.0
},
"rent_per_square_meter": { "count": 96, "mean": 23.1, "median": 22.6, ... },
"price_range": null, // nur gesetzt, wenn square_meters übergeben wurde
"rent_range": null
},
"confidence": {
"price": "high",
"rent": "medium",
"sample_size": 310, // ausgewertete Inserate
"area_size": 310,
"basis": "plz", // "plz" oder "stadt" (automatisch ausgeweitet)
"recency_window_months": 12,
"date_span": { "oldest": "2025-09-02", "newest": "2026-08-11" },
"filters_applied": ["recency=12m"],
"filters_skipped": []
},
"area": { "postcode": "80331", "city": "München" },
"typ": "wohnung",
"property_type": null
}Unterstützte Objektarten liefert GET /estimate/property-types, optional eingeschränkt über ?typ=haus bzw. ?typ=wohnung.
{
"property_types": [
{ "id": "einfamilienhaus", "label": "Einfamilienhaus", "typ": "haus" },
{ "id": "doppelhaushaelfte", "label": "Doppelhaushälfte", "typ": "haus" },
{ "id": "reihenhaus", "label": "Reihenhaus", "typ": "haus" },
{ "id": "zweifamilienhaus", "label": "Zweifamilienhaus", "typ": "haus" },
{ "id": "mehrfamilienhaus", "label": "Mehrfamilienhaus", "typ": "haus" },
{ "id": "etagenwohnung", "label": "Etagenwohnung", "typ": "wohnung" },
{ "id": "maisonette", "label": "Maisonette", "typ": "wohnung" },
{ "id": "penthouse", "label": "Penthouse", "typ": "wohnung" }
// …
]
}Fehler
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