Immoprobe for your assistant

Immoprobe (https://immoprobe.de) is a calculator and a system of record for German residential investment properties (Kapitalanlage-Immobilien): cashflow before and after tax, yields, AfA, a 30-year projection, the land value (Bodenrichtwert) the valuation board publishes for the address, saved objects with notes. It runs no language model. You read the listing; Immoprobe does the maths.

If you have the Immoprobe tools (MCP connector)

Call get_guide once, then lookup_address, calculate_property and save_object. How to connect: https://immoprobe.de/ai.

If you have no tools: hand the user a link

  1. Read the listing — its URL, or the text or PDF the user pasted. If you cannot open the URL, say so and ask for the text; do not answer with a template of placeholders. If the page opens but does not show the unit the URL names (a project page with many units), say so and ask for its text — never take another unit of the project in its place.
  2. Build a link to the calculator with what the listing states: https://immoprobe.de/calculator?purchasePrice=…&livingArea=…&stateCode=…&coldRent=… with the parameters below. Fill every field the listing states — the Baujahr or, for a new build, the Fertigstellung as handover and yearBuilt, the Hausgeld, the Provision as hasBroker, the address as address — and always listingUrl, title, your note, model and assumed. Leave out only what the listing does not say. URL-encode the values; numbers with a decimal point and without thousands separators; money in EUR; rates in percent. When the listing names no rent, estimate a realistic Kaltmiete for the place and put coldRent into assumed.
  3. If your web tool can open a URL you composed yourself, open the same query at https://api.immoprobe.de/v1/calculations?… (the link with https://immoprobe.de/calculator replaced): it answers the calculation as text — cashflow, yields, tax effect, the verdict, the assumptions it used — and you quote it. Never compute cashflow or yields yourself. The chat apps of ChatGPT, Claude and Gemini open only URLs the user gave or that a page they read contained, never one you composed — there, and when your tool opens no pages at all, skip this step and leave the numbers to the page; say so in one line.
  4. With the property's point — lat and lng from the page, or the ones you determined for a full address, an assumption then — open https://api.immoprobe.de/geo/brw/at?lng=<lng>&lat=<lat>: zones[0].brw is the land value (Bodenrichtwert) the valuation board published, in EUR per m² of plot as of stichtag, gfz the GFZ of the zone; put them into the link as landValuePerSqm and floorAreaRatio and name the Stichtag and the source (src) to the user. Empty zones means no data there — say so, never guess a land value. The same path answers flood (hazard zones), designations (Milieuschutz, Sanierungsgebiet, Denkmal), noise, transit (stations within 3 km), location (Mietspiegel Wohnlage) and census.
  5. Answer with the link as plain text in a code block — not as a hyperlink, so the user can copy it as it is — and, in the user's language, what you read, what you guessed, and what to ask the agent. Write the link in one piece and finish it before anything else; check that every value in it is URL-encoded. After sign-in the page also looks up the land value at the point.

The user opens the link, sees the calculation and saves the property with one click; your note becomes its first note, your assumed fields are marked as assumptions.

The listing

Parameter Meaning
listingUrl the listing's page; Immoprobe reads the portal and the listing id from it
title a title for the saved object, up to 120 characters
address the address as the listing writes it, a label only
lat, lng the point of the property when the page shows it (ImmoScout24 does on the exposé map); with it the land value follows
note your assessment: what the numbers do not show — Erbbaurecht, Instandhaltungsrücklage, Sanierungsstau, Denkmalschutz, Energieausweis, the rent against the Mietspiegel, WEG-Protokolle, Sonderumlagen — and a block „Fragen an den Makler“; markdown, in the user's language, short — a few lines, under 600 characters; a longer explanation goes into your answer, not into the link
model your name (ChatGPT, Gemini, Claude …), shown with the note
assumed the calculator fields you guessed rather than read, comma-separated

The calculator's fields

Required: purchasePrice, livingArea, stateCode, coldRent. Every other field is optional and takes a default when left out; the page lists the defaults it used as assumptions.

Field Meaning
purchasePrice Kaufpreis, EUR
livingArea Wohnfläche, m²
yearBuilt Baujahr; decides the AfA rate
stateCode Bundesland, two-letter code (BE, NW, BY …); sets the Grunderwerbsteuer
notaryPercent Notar, % of the purchase price
landRegistryPercent Grundbuch, % of the purchase price
brokerPercent Käuferprovision, % of the purchase price; counts only with hasBroker
hasBroker Whether a Provision is due; "provisionsfrei" is false
movablesInPrice Inventar (Einbauküche, furniture) inside the purchase price, EUR; outside the Grunderwerbsteuer base
movablesExtra Inventar bought on top of the purchase price (Ablöse), EUR
movablesUsefulLife Useful life of the Inventar, years: 10 for a kitchen, 13 for furniture
renovationCost Renovierung right after the purchase, EUR incl. VAT; the 15 % rule decides AfA or deduction in year one
coldRent Kaltmiete per month, EUR
parkingRent Stellplatz or garage rent, EUR per month, apart from coldRent
serviceCharge Hausgeld, the whole monthly charge, EUR
serviceChargeRecoverable Umlagefähiger Teil of the Hausgeld the tenant reimburses, per month, EUR
otherCosts Running costs outside the Hausgeld (Sondereigentumsverwaltung, insurance, upkeep), EUR per month
serviceChargeReserve Erhaltungsrücklage part of the Hausgeld, EUR per month; not deducted from tax until the WEG spends it
equity Eigenkapital, EUR; when given, ltv is ignored
ltv Beleihungsauslauf: loan on the object in % of the purchase price, as a bank quotes it; side costs come from equity. Used when equity is left out
interestRate Sollzins, % per year
repaymentRate Anfängliche Tilgung, % of the loan per year
fixedRateYears Sollzinsbindung of the bank loan, years (1–40); afterwards the loan continues at interestRate plus followUpRateDelta
followUpRateDelta Rate change after the Sollzinsbindung, percentage points; 0 continues the Sollzins. A scenario, never a listing figure
specialRepayment Sondertilgung on the bank loan, EUR per year, during the Sollzinsbindung; a plan, never a listing figure
kfwAmount KfW-Darlehen, EUR: a tranche of the loan, never on top of it; 0 or left out means none. Send only what the user names
kfwInterestRate Sollzins of the KfW tranche, % per year, for its ten-year Zinsbindung
kfwTermYears Laufzeit of the KfW tranche, years (4–35)
kfwGraceYears Tilgungsfreie Anlaufjahre of the KfW tranche: 1–2 on a term to 10 years, up to 3 to 25, up to 5 to 35
kfwRepaymentMode annuity (default) or bullet, an endfälliges Darlehen of up to 10 years
handover Übergabe/Fertigstellung month of a new build bought before completion, YYYY-MM (a quarter as its last month); the months from the contract to it are the Bauphase. Left out, the property is ready
contractMonth Month of the Kaufvertrag, YYYY-MM, once it is signed; left out, this month. Anchors the Bauphase and the building age
commitmentFreeMonths Bereitstellungszinsfreie Zeit of the bank loan, months (0–36); counts only with a Bauphase
commitmentFeeRate Bereitstellungszins of the bank loan, % per month on the undrawn part once the bereitstellungszinsfreie Zeit is over (0–1; 3 % p. a. is 0.25); counts only with a Bauphase
landShare Bodenwertanteil, % of the price that is land (not depreciable). Send it when the Kaufvertrag or Bauträger states the split; left out, derived from landValuePerSqm and the plot share, else 20 assumed
landValuePerSqm Bodenrichtwert, EUR per m² of plot, as lookup_address answers it
plotArea Grundstücksfläche: the whole plot, m²
coOwnershipShare Miteigentumsanteil numerator: 56 of "56/10.000"; 1 for a house bought whole
coOwnershipTotal Miteigentumsanteil denominator: 10000 of "56/10.000"; 1 for a house bought whole
floorAreaRatio GFZ of the Bodenrichtwert zone from lookup_address; estimates the plot share when plotArea and Miteigentumsanteil are unknown
taxRate Grenzsteuersatz incl. Soli, %
depreciationVariant AfA route: linear2, linear25, linear3, declining5, declining7b, monument, remainingLife; left out, the Baujahr decides
renovationShare Sanierungsanteil under § 7i, % of the building value; monument route only
remainingUsefulLife Restnutzungsdauer from an appraisal, years; remainingLife route only
rentGrowth Mietsteigerung, % per year
costGrowth Kostensteigerung, % per year
valueGrowth Wertsteigerung, % per year
vacancyMonths Mietausfallwagnis, vacancy months per year

Where a German listing says it

Example

https://immoprobe.de/calculator?purchasePrice=395000&livingArea=74&stateCode=BE&coldRent=1250&yearBuilt=1910&serviceCharge=310&hasBroker=true&lat=52.548&lng=13.36&address=Malplaquetstra%C3%9Fe%2027%2C%2013347%20Berlin&listingUrl=https%3A%2F%2Fwww.immobilienscout24.de%2Fexpose%2F123456789&title=Altbau%20Wedding&note=Erbbaurecht%20nicht%20erw%C3%A4hnt%20%E2%80%93%20nachfragen.&model=ChatGPT&assumed=serviceCharge

Conduct

Read only listings the user opened or asked you to open, at a human pace. Never bypass a captcha or a login wall — stop and ask. Do not contact sellers or agents. Do not put the agent's contact details into the note unless the user asks.