Back
Self-Updating Excel

Living Excel: Data That Updates Itself

Ready-made Excel template with Power Query. Set it up once, get current data forever. No VBA, no macros, no manual work.

Why Living Excel?

🔄

Automatic Updates

Data updates when you open the file or with a click. Always the latest market data without manual import.

No VBA Required

Based on Power Query (integrated in Excel 2016+). No macros, no security warnings, works everywhere.

🛡️

Offline Capable

Once loaded, data can be analyzed offline. Updates only when needed and with internet connection.

How It Works

1

Download Excel Template

Download the pre-configured GBM Excel template

📊
MILAN_Living_Excel_Template.xlsx
Contains pre-configured Power Query connections
2

Enter API Key

One-time configuration of your GBM API key

  1. Open the downloaded Excel file
  2. Go to Data → Queries & Connections
  3. Right-click on "MILAN_Data" → Edit
  4. In Power Query Editor: Replace your_api_key_here with your actual API key
  5. Click Close & Load
Note: The API key is stored locally in the Excel file. Do not share the file with third parties.
3

Select Country and Metric

Customize the data source to your needs

In Power Query Editor, you can adjust the following parameters:

  • Country: Country code (e.g. "DE", "FR", "PL")
  • Metric: Metric ID (e.g. "dwelling_permits", "construction_volume_res")
  • Period: "monthly", "quarterly" or "annual"
  • StartDate: Start date in format "YYYY-MM-DD"
4

Update Data

Automatic or manual — you decide

Automatic on Open

Data is updated every time you open the file

Setting: Data → Queries & Connections → Properties → "Refresh data when opening the file"

Manual on Demand

Update data only when you want

Shortcut: Data → Refresh All or Ctrl+Alt+F5

Power Query M-Code

The Excel template contains the following Power Query code. You can customize it or use it as a basis for your own queries.

MILAN_Data Query
let
    // Configuration
    ApiKey = "your_api_key_here",
    Country = "DE",
    Metric = "dwelling_permits",
    Period = "monthly",
    StartDate = "2023-01-01",

    // API Call
    BaseUrl = "https://gbmapi.bl2020.com",

    Response = Web.Contents(
        BaseUrl & "/dataseries",
        [
            Headers = [
                #"X-API-Key" = ApiKey,
                #"Content-Type" = "application/json"
            ],
            Query = [
                seriesid = Metric,
                country = Country,
                period = Period,
                startyear = Text.Start(StartDate, 4)
            ]
        ]
    ),

    JsonResponse = Json.Document(Response),
    DataList = JsonResponse[data],

    TableFromList = Table.FromList(
        DataList,
        Splitter.SplitByNothing(),
        null, null, ExtraValues.Error
    ),

    ExpandedTable = Table.ExpandRecordColumn(
        TableFromList, "Column1",
        {"date", "value", "yoy_change", "mom_change", "ma_3m", "ma_12m"},
        {"Date", "Value", "YoY %", "MoM %", "MA 3M", "MA 12M"}
    ),

    TypedTable = Table.TransformColumnTypes(
        ExpandedTable,
        {
            {"Date", type date},
            {"Value", Int64.Type},
            {"YoY %", type number},
            {"MoM %", type number},
            {"MA 3M", type number},
            {"MA 12M", type number}
        }
    )
in
    TypedTable
MILAN_Forecast Query
let
    // Configuration
    ApiKey = "your_api_key_here",
    Country = "PL",
    Sector = "residential",

    // API Call
    BaseUrl = "https://gbmapi.bl2020.com",

    Response = Web.Contents(
        BaseUrl & "/forecast?country=" & Country & "&sector=" & Sector,
        [
            Headers = [#"X-API-Key" = ApiKey]
        ]
    ),

    JsonResponse = Json.Document(Response),
    ForecastRecord = JsonResponse[forecast],

    ForecastTable = Record.ToTable(ForecastRecord),

    RenamedColumns = Table.RenameColumns(
        ForecastTable,
        {{"Name", "Year"}, {"Value", "Volume (Billion EUR)"}}
    ),

    TypedTable = Table.TransformColumnTypes(
        RenamedColumns,
        {
            {"Year", Int64.Type},
            {"Volume (Billion EUR)", type number}
        }
    )
in
    TypedTable

What's Included in the Template?

Pre-configured Queries

  • Time series data (Permits, Starts, Completions)
  • Construction volume forecasts
  • Nowcast data (current quarter)
  • Country metadata

Ready-made Visualizations

  • Line charts for time series
  • Bar charts for forecasts
  • Pivot tables for analysis
  • Formatted dashboards

Calculated Fields

  • Year-over-Year change (%)
  • Month-over-Month change (%)
  • 3-month moving average
  • 12-month moving average

Customizable Parameters

  • Easy change of country and metric
  • Flexible time period (start/end date)
  • Selectable data frequency
  • Multiple countries in parallel possible

System Requirements

Microsoft Excel 2016 or newer (Windows or Mac)
Power Query (integrated in Excel 2016+)
GBM API Key (Professional Tier or higher)
Internet connection for data updates
Note: Excel Online (browser version) only supports Power Query to a limited extent. For full functionality, please use Excel Desktop.

Ready for Self-Updating Data?

Get started with the Living Excel template in minutes.

Your contact
Jens Wehenkel
Jens Wehenkel
GBM & Data Connectivity
+49 228 62987-33
Show email
Patrick Nonnen
Patrick Nonnen
APIs, Power BI & SDKs
Show email