Model scenario: fictional brokerage
This module is part of a six-part model calculation about a fictional mid-sized brokerage (32 sales agents, 450 transactions per year). All figures, datasets, model metrics and euro amounts are entirely fictional. They illustrate the methodology and the kind of effect achievable. They are not results of real clients and not a performance promise. What values are achievable on your real data is established only in a pilot project.
01 The dilemma: too high loses time, too low loses money
Why every market valuation is only half the answer
Any agent can estimate a market value. But the owner's question is a different one: "At which price should I list?" The market value is the likely sale price, whereas the listing price is a strategic decision. Too high → the property sits, becomes shopworn, the price gets cut. Too low → sold quickly, but commission given away.
The optimal listing price depends on: How urgently does the owner want to sell? What is current demand? How many comparable properties are on the market? No human can keep optimising that across the whole portfolio, on average 3 to 4 properties per agent across 32 agents. A model can.
+3% listing price above the optimum = depending on location +7 to +20 days of marketing
And in the end it is usually cut to the optimal price anyway, just with the stigma of a price reduction.
Market-value base
→
Demand context
→
Price-duration curve
→
Optimal price
→
Owner advisory
02 The model: a price-duration curve per micro-location
An individual elasticity curve for every district × property type
import numpy as np
import xgboost as xgb
from scipy.optimize import minimize_scalar
# For each property: simulate time-on-market at different prices
# and find the price that maximises the commission rate
def provision_rate(preis_faktor, model, objekt_features, provision_satz=0.036):
"""
Computes: commission / marketing time = €/day
Goal: maximise €/day → optimal price
"""
features = objekt_features.copy()
features['preis_abweichung_%'] = (preis_faktor - 1.0) * 100
features['preis_ueber_10pct'] = int(preis_faktor > 1.10)
# Predicted time-on-market
tage = model.predict(features.values.reshape(1,-1))[0]
tage = max(14, tage)
# Expected sale price (negotiation discount)
verhandlung = 0.97 if preis_faktor <= 1.05 else 0.94
verkaufspreis = objekt_features['marktwert'] * preis_faktor * verhandlung
provision = verkaufspreis * provision_satz
return provision / tage # €/day as the optimisation target
# Find the optimal price factor for each property
for obj in objekte:
result = minimize_scalar(
lambda f: -provision_rate(f, model, obj),
bounds=(0.92, 1.20), method='bounded'
)
obj['optimaler_faktor'] = result.x
obj['optimaler_preis'] = obj['marktwert'] * result.x
print(f"Avg. optimal premium: {np.mean(opt_faktoren)*100-100:+.1f}%")
print(f"Range: {np.min(opt_faktoren)*100-100:+.1f}% to {np.max(opt_faktoren)*100-100:+.1f}%")
▸ Output
Avg. optimal premium: +3.2%
Range: -2.1% to +8.4%
(Varies strongly by location and demand)
Price-duration curve: university quarter flat vs. western suburbs house
↳ Two completely different markets
In the university quarter (high demand) the optimal premium is +5.8%: here you can price more aggressively, because demand carries the higher price. In the western suburbs (weak demand) the optimum is -1.2% below market value, because a fast sale is worth more here than the last euro. Same model, opposite recommendation.
Commission per day (€/day): optimum vs. typical practice
↳ The price-cut paradox
12% of all properties experience a price cut (ImmoScout24, 2023), which for our model brokerage with 450 transactions means 54 price cuts per year. The damage is not just the lost time: the property is perceived as "shopworn", buyers suspect defects, and the final sale price ends up below the price a correct initial listing would have achieved. The model avoids half of these cuts, 27 per year.
03 Business impact: more commission in less time
The double effect: faster sales + higher net proceeds
Additional revenue from optimal pricing advice
€89,200
Additional revenue / year
-50%
Fewer price reductions
| Category | Amount/year | Mechanism |
| Avoided price reductions | €75,600 | 27 avoided reductions at €2,800 each (assumption: price + time costs) |
| Final-price effect | €13,600 | Correctly priced properties sell closer to market value (KSK Köln: 99-100% instead of 97%; premium for the negotiating position: assumption) |
↳ The advisory effect
The model turns the agent into a data-backed adviser: "I understand you would like €380,000. Our analysis shows: at €380,000 we expect 176 days. At €365,000 it is 54 days, and the net proceeds after negotiation are almost identical, because you avoid the shopworn discount." That is a conversation that builds trust.