---
title: "Residual land values"
description: "Land value by initial yield on cost, by the residual method's DCF application and by its basic (static) application, with the development costs they share."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.aireon.ch/llms.txt
> Use this file to discover all available pages before exploring further.

Path: revenoo API › Valuation

`GET /api/valuation/{egrid}/land-value`

Land value by initial yield on cost, by the residual method's DCF application and by its basic (static) application, with the development costs they share.

## Path parameters

- `egrid` (`getRevenooLandValue.path.egrid`; string, required): Swiss parcel identifier: "CH" followed by 12 characters. Spaces are ignored, letters may be lower case.
  - pattern `^[Cc][Hh][0-9A-Za-z]{12}$`

## Code samples

### cURL

```bash
curl --request GET \
  --url https://revenoo.aireon.ch/api/valuation/CH427777450687/land-value
```

### TypeScript

```typescript
const url = 'https://revenoo.aireon.ch/api/valuation/CH427777450687/land-value';
const options = {method: 'GET'};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://revenoo.aireon.ch/api/valuation/CH427777450687/land-value"

response = requests.get(url)

print(response.text)
```

## Responses

### 200

Residual land values

#### Example

```json
{
  "api_version": "2.0.0",
  "valuation_date": "2026-11-03",
  "parcel": {
    "egrid": "CH427777450687",
    "address": "Hausmattweg 1",
    "zip": "4663",
    "municipality": "Aarburg",
    "bfs_number": 4271,
    "canton": "AG",
    "zone": "Wohnzone W3",
    "lat": 47.322534,
    "lng": 7.898823,
    "land_area_m2": 2276,
    "buildable_gfa_m2": 1707,
    "rentable_area_m2": 1366
  },
  "data": {
    "market_data": "missing",
    "market_data_date": null,
    "municipality_rent_per_m2_year": null,
    "zurich_reference_rent_per_m2_year": null
  },
  "links": {
    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
    "docs": "https://revenoo.aireon.ch/api/openapi.json"
  },
  "land_value": {
    "gross_development_value": 16464966,
    "yield_on_cost": {
      "land_value": 2431836,
      "per_m2_land": 1068,
      "per_m2_nia": 1780,
      "target_initial_yield_on_cost_pct": 5,
      "income_basis": "gross_rent",
      "annual_income": 462554,
      "max_total_development_cost": 9251071,
      "method": "Land value at which the initial yield on cost (annual income on completion ÷ total development cost incl. finance) meets the target.",
      "sources": [
        {
          "source": "rics_development",
          "title": "RICS, Valuation of development property (1st ed., 2019)",
          "paragraphs": "B2.2.3.4, B2.2.2"
        }
      ]
    },
    "dcf": {
      "land_value": 6462216,
      "per_m2_land": 2839,
      "per_m2_nia": 4731,
      "target_rate_of_return_pct": 15,
      "pv_ndv": 12200882,
      "pv_development_costs": 5577110,
      "method": "Residual land value, discounted cash flow application: the land price at which the monthly development cash flow has an NPV of zero at the target rate of return (a project IRR before finance).",
      "sources": [
        {
          "source": "rics_development",
          "title": "RICS, Valuation of development property (1st ed., 2019)",
          "paragraphs": "§6.2, Appendix B1, §7.2.4"
        }
      ]
    },
    "static": {
      "land_value": 7269027,
      "per_m2_land": 3194,
      "per_m2_nia": 5321,
      "developers_profit_pct": 10,
      "finance_rate_pct": 3,
      "implied_irr_pct": 10.3364,
      "method": "Residual land value, basic application: NDV less development costs, finance and developer's profit, discounted for the development period.",
      "sources": [
        {
          "source": "rics_development",
          "title": "RICS, Valuation of development property (1st ed., 2019)",
          "paragraphs": "§6.3, Appendix B2"
        }
      ]
    },
    "development_costs": {
      "net_development_value": 16135666,
      "construction_costs": 5464000,
      "professional_fees": 655680,
      "contingency": 273200,
      "development_costs": 6392880,
      "development_period_months": 24
    }
  },
  "assumptions": {
    "asking_land_price": null,
    "rentable_area_m2": 1366,
    "residential_rent_per_m2_year": 281.52,
    "vacancy_pct": 3,
    "discount_rate_real_pct": 2.1,
    "macro_premium_pct": 0,
    "micro_rating": "average",
    "micro_premium_bp": null,
    "usage_rating": "residential",
    "condition_rating": "new",
    "special_premium_pct": 0,
    "inflation_pct": 1,
    "forecast_years": 10,
    "rent_growth_real_pct": 0,
    "discount_timing": "mid_year",
    "exit_cap_rate_pct": null,
    "exit_sale_costs_pct": 2,
    "lease_up": true,
    "initial_occupancy_pct": 75,
    "lease_up_months": 12,
    "cap_rate_pct": 2.95,
    "noi_convention": "after_capex",
    "gdv_source": "dcf",
    "gdv_manual": 0,
    "construction_cost_per_m2_nia": 4000,
    "professional_fees_pct": 12,
    "contingency_pct": 5,
    "sale_costs_pct": 2,
    "site_acquisition_costs_pct": 2.5,
    "development_period_months": 24,
    "target_irr_pct": 15,
    "finance_rate_pct": 3,
    "developers_profit_pct": 10,
    "target_yield_on_cost_pct": 5,
    "yield_on_cost_basis": "gross_rent"
  }
}
```

- `api_version` (`getRevenooLandValue.response.200.api_version`; string, required)
- `valuation_date` (`getRevenooLandValue.response.200.valuation_date`; string, required)
  - format `date`
- `parcel` (`getRevenooLandValue.response.200.parcel`; object, required): The parcel: EGRID, address, municipality, BFS number, canton, zone, coordinates and areas.
- `data` (`getRevenooLandValue.response.200.data`; object, required): Provenance: market data status and date, municipal and Zürich reference rents.
- `links` (`getRevenooLandValue.response.200.links`; object, required): `app` opens this valuation in revenoo; `docs` is this document.
- `assumptions` (`getRevenooLandValue.response.200.assumptions`; object, required): Assumptions you can change. Omitted keys keep the defaults the response reports.
  - `asking_land_price` (`getRevenooLandValue.response.200.assumptions.asking_land_price`; number | null, optional): Asking price of the land. When set, the response appraises it: project IRR, profit on cost and on value, initial yield on cost.
    - min 0; max 100000000000
  - `rentable_area_m2` (`getRevenooLandValue.response.200.assumptions.rentable_area_m2`; number, optional): Rentable area (NIA) in m². The unit mix is rescaled to it.
    - min 1; max 10000000
  - `residential_rent_per_m2_year` (`getRevenooLandValue.response.200.assumptions.residential_rent_per_m2_year`; number, optional): Rent per m² NIA and year for every apartment row of the unit mix (parking keeps its own rent).
    - min 0; max 5000
  - `vacancy_pct` (`getRevenooLandValue.response.200.assumptions.vacancy_pct`; number, optional): Stabilized vacancy, in percent of GPR, applied to every row of the unit mix.
    - min 0; max 100
  - `discount_rate_real_pct` (`getRevenooLandValue.response.200.assumptions.discount_rate_real_pct`; number, optional): Real discount rate in percent. Setting it enters the macro rate at this value and resets the premiums to zero; premium assumptions sent with it add to it.
    - min 0; max 30
  - `macro_premium_pct` (`getRevenooLandValue.response.200.assumptions.macro_premium_pct`; number, optional): Macro premium added to the macro rate, in percent.
    - min -10; max 10
  - `micro_rating` (`getRevenooLandValue.response.200.assumptions.micro_rating`; string, optional): Micro location grade, which sets the micro premium.
    - one of `"good"`, `"average"`, `"weak"`
  - `micro_premium_bp` (`getRevenooLandValue.response.200.assumptions.micro_premium_bp`; number | null, optional): Micro premium in basis points; replaces the micro rating while set (e.g. from proove). null returns to the rating.
    - min -500; max 500
  - `usage_rating` (`getRevenooLandValue.response.200.assumptions.usage_rating`; string, optional): Use of the property, which sets the usage premium.
    - one of `"residential"`, `"office"`, `"retail"`, `"commercial"`
  - `condition_rating` (`getRevenooLandValue.response.200.assumptions.condition_rating`; string, optional): Condition of the building, which sets the condition premium.
    - one of `"new"`, `"like_new"`, `"normal_condition"`, `"minor_renovation_needed"`, `"major_renovation_needed"`
  - `special_premium_pct` (`getRevenooLandValue.response.200.assumptions.special_premium_pct`; number, optional): Special premium for risks no other factor covers, in percent.
    - min -10; max 10
  - `inflation_pct` (`getRevenooLandValue.response.200.assumptions.inflation_pct`; number, optional): Expected inflation in percent; real rate plus inflation gives the nominal rate, shown for reference (the cash flows are real).
    - min -5; max 20
  - `forecast_years` (`getRevenooLandValue.response.200.assumptions.forecast_years`; integer, optional): Explicit forecast period in years (RICS §4.65: markets often default to about ten).
    - min 1; max 50
  - `rent_growth_real_pct` (`getRevenooLandValue.response.200.assumptions.rent_growth_real_pct`; number, optional): Real rent growth per year, in percent. Must stay below the real discount rate.
    - min -10; max 10
  - `discount_timing` (`getRevenooLandValue.response.200.assumptions.discount_timing`; string, optional): Discount each year from its middle or its end.
    - one of `"mid_year"`, `"end_year"`
  - `exit_cap_rate_pct` (`getRevenooLandValue.response.200.assumptions.exit_cap_rate_pct`; number | null, optional): Exit capitalization rate in percent. null lets it follow the discount rate (RICS §4.59 with no real growth).
    - min 0.1; max 30
  - `exit_sale_costs_pct` (`getRevenooLandValue.response.200.assumptions.exit_sale_costs_pct`; number, optional): Sale costs deducted from the terminal value, in percent (RICS §4.63).
    - min 0; max 20
  - `lease_up` (`getRevenooLandValue.response.200.assumptions.lease_up`; boolean, optional): Model a lease-up: occupancy rises from the initial level to stabilized over the lease-up months.
  - `initial_occupancy_pct` (`getRevenooLandValue.response.200.assumptions.initial_occupancy_pct`; number, optional): Occupancy at the start of the lease-up, in percent.
    - min 0; max 100
  - `lease_up_months` (`getRevenooLandValue.response.200.assumptions.lease_up_months`; integer, optional): Months until stabilized occupancy.
    - min 0; max 60
  - `cap_rate_pct` (`getRevenooLandValue.response.200.assumptions.cap_rate_pct`; number, optional): Capitalization rate in percent: direct cap value = stabilized NOI ÷ cap rate.
    - min 0.1; max 30
  - `noi_convention` (`getRevenooLandValue.response.200.assumptions.noi_convention`; string, optional): Which NOI is capitalized.
    - one of `"after_capex"`, `"before_capex"`, `"custom_factor"`
  - `gdv_source` (`getRevenooLandValue.response.200.assumptions.gdv_source`; string, optional): Where the gross development value (GDV) comes from.
    - one of `"dcf"`, `"direct_cap"`, `"manual"`
  - `gdv_manual` (`getRevenooLandValue.response.200.assumptions.gdv_manual`; number, optional): GDV amount when gdv_source is manual.
    - min 0; max 100000000000
  - `construction_cost_per_m2_nia` (`getRevenooLandValue.response.200.assumptions.construction_cost_per_m2_nia`; number, optional): Construction costs per m² NIA.
    - min 0; max 50000
  - `professional_fees_pct` (`getRevenooLandValue.response.200.assumptions.professional_fees_pct`; number, optional): Professional fees, in percent of construction costs (RICS B1.2.6).
    - min 0; max 50
  - `contingency_pct` (`getRevenooLandValue.response.200.assumptions.contingency_pct`; number, optional): Contingency, in percent of construction costs (RICS B1.2.5).
    - min 0; max 50
  - `sale_costs_pct` (`getRevenooLandValue.response.200.assumptions.sale_costs_pct`; number, optional): Sale costs, in percent of GDV (GDV less sale costs is the NDV).
    - min 0; max 20
  - `site_acquisition_costs_pct` (`getRevenooLandValue.response.200.assumptions.site_acquisition_costs_pct`; number, optional): Site acquisition costs, in percent of the land price (RICS B1.2.2).
    - min 0; max 20
  - `development_period_months` (`getRevenooLandValue.response.200.assumptions.development_period_months`; integer, optional): Development period from land purchase to completion, in months.
    - min 1; max 240
  - `target_irr_pct` (`getRevenooLandValue.response.200.assumptions.target_irr_pct`; number, optional): Target rate of return of the DCF application: a project IRR before finance, real (RICS §6.2.4, §7.2.4).
    - min 0; max 100
  - `finance_rate_pct` (`getRevenooLandValue.response.200.assumptions.finance_rate_pct`; number, optional): Cost of finance per year, on 100% of land and building costs (RICS B2.2.2).
    - min 0; max 30
  - `developers_profit_pct` (`getRevenooLandValue.response.200.assumptions.developers_profit_pct`; number, optional): Developer's profit, in percent of GDV (RICS B2.2.3).
    - min 0; max 100
  - `target_yield_on_cost_pct` (`getRevenooLandValue.response.200.assumptions.target_yield_on_cost_pct`; number, optional): Target initial yield on cost: annual income over total development cost, in percent (RICS B2.2.3.4).
    - min 0.1; max 50
  - `yield_on_cost_basis` (`getRevenooLandValue.response.200.assumptions.yield_on_cost_basis`; string, optional): The annual income the yield on cost is read on: GPR, or NOI before or after the capex reserve.
    - one of `"gross_rent"`, `"noi_before_capex"`, `"noi_after_capex"`

### 400

Invalid EGRID or assumptions. `details` lists each invalid assumption.

#### Example

```json
{
  "error": "string",
  "details": null
}
```

- `error` (`getRevenooLandValue.response.400.error`; string, required)
- `details` (`getRevenooLandValue.response.400.details`; unknown, optional): For invalid assumptions: one { key, message } per problem.

### 404

No parcel with this EGRID, or an unknown part.

#### Example

```json
{
  "error": "string",
  "details": null
}
```

- `error` (`getRevenooLandValue.response.404.error`; string, required)
- `details` (`getRevenooLandValue.response.404.details`; unknown, optional): For invalid assumptions: one { key, message } per problem.

### 429

Too many uncached requests from this client; retry after the Retry-After seconds.

#### Example

```json
{
  "error": "string",
  "details": null
}
```

- `error` (`getRevenooLandValue.response.429.error`; string, required)
- `details` (`getRevenooLandValue.response.429.details`; unknown, optional): For invalid assumptions: one { key, message } per problem.

### 502

The data service (RES) failed.

#### Example

```json
{
  "error": "string",
  "details": null
}
```

- `error` (`getRevenooLandValue.response.502.error`; string, required)
- `details` (`getRevenooLandValue.response.502.details`; unknown, optional): For invalid assumptions: one { key, message } per problem.

### 503

The data service is not configured.

#### Example

```json
{
  "error": "string",
  "details": null
}
```

- `error` (`getRevenooLandValue.response.503.error`; string, required)
- `details` (`getRevenooLandValue.response.503.details`; unknown, optional): For invalid assumptions: one { key, message } per problem.


Source: https://docs.aireon.ch/revenoo/get-revenoo-land-value/index.md
