Airbnb in Madrid, Revisited: What I Got Wrong in 2024

I re-ran my 2024 Airbnb Madrid study from the raw data: three calculation errors, what still holds, and what the data really shows.

11/9/20264 min read

The imputation error matters most for the analysis. Giving 5,304 dormant listings a typical price of €100 added a block of identical, fake values that flattened every relationship with price.

Two years after publishing my Airbnb Madrid study, I re-ran it from the original data and found three calculation errors that changed its headline numbers. Some conclusions still hold; others do not. The raw data also showed patterns I had missed, starting with how concentrated tourist flats are in Centro.

This article is an honest audit of my own work. I wrote the first version as a junior analyst finishing a course. Since then I have learned to distrust a number until I can trace it back to a single raw row. Every figure below can be reproduced with the code in the project repository.

Limitations and What´s next

What went wrong

The original study

The 2024 project asked what drives the price and popularity of Airbnb listings in Madrid, and where hosts have room to compete. It ended in a seven-screen Tableau storyboard: an overview, location and price, two screens of price factors, k-means clusters, a cross-check of those clusters and recommendations for hosts.

The storyboard opened with 285,352 listings; Madrid had 26,924. Seven other results needed correcting, and none of them came from a modelling choice: they came from aggregation slips, a coding error and treating a cleaning shortcut as neutral.

The extreme prices were three different stories

In 2024 I kept every price in the scatter plots, up to €20,098 a night. Only 108 listings (0.5%) asked €1,000 or more, but they stretched every chart. Looking at them one by one, they are not one group:

The core story survives: size is what sets the price, and the three listing profiles are real.

  • Capacity drives price more strongly than I reported. With real prices only, the rank correlation between guests and price is 0.67, not 0.21. Each extra guest adds about 15% to the nightly price.

  • Room type, capacity and district explain 54% of price variation. Adding amenities and rating only takes it to 60%; each extra amenity is worth about 0.2%.

  • The three clusters are robust. k-means finds the same groups with and without scaling: budget (about €80–87, 2 guests), large homes (about €190–230, 5 guests) and popular mid-range listings (about €100, around 260 reviews each).

  • Almost nine in ten listings showed no licence number (89.8%); in Centro only 14% had one.

The biggest finding was not in my original study: Centro holds 42% of Madrid's tourist listings with 4% of its residents.

Together with the 5,304 listings without a price and the 17.5% with a fully blocked calendar, they point to the same lesson: part of the supply on Airbnb exists only on paper. Separating live listings from parked ones has to come before any analysis of prices or density.

What still holds

  • Reviews exist only for listings still online in June 2024, so older years are under-counted.

  • Occupancy and income are estimated from reviews, assuming about half of stays leave one; they are indicators, not measurements.

  • Population figures are from July 2022, the latest district table used in the original project.

  • Inside Airbnb identifies the account that manages a listing, not the owner of the flat.

The next article asks what happened after June 2024, when Spain introduced a national registry for short-term rentals and Madrid approved the Plan Reside. In two years Madrid lost 14% of its listings, and the flats that remain are in fewer, larger hands.

Code and data: github.com/carolmmiron/airbnb-madrid-2024-revision

Sources

One recommendation needs rewording. I told hosts that better review scores justify higher prices. The data does not support that: scores are uniformly high (average 4.66 out of 5) and barely move with price. Ratings may help a listing get booked, but they do not let it charge more.

The original storyboard compared districts by raw listing counts, which hides this. Measured against residents, Centro is in a category of its own; the next district, Chamberí, has 13 listings per 1,000 residents.

The market is more professional than my original "agencies" claim suggested, but not in the way I described it. Most hosts have one flat, yet the large operators hold almost a third of the supply, and nearly all of it is entire homes.

Demand recovered fast after COVID. January to May 2024 was already 52% above the same months of 2023. Reviews only cover listings still online, so earlier years are under-counted.

Madrid's high season is autumn, not summer. Reviews peak in October and dip in August, the opposite of a beach destination.

What the raw data revealed

Two more findings complete the picture:

  • A rough sense of income. Using Inside Airbnb's review-based method, the median active listing is occupied about 26% of the year, and an active entire home earns around €14,000 a year.

  • Listings that are not really available. 17.5% of listings had their calendar blocked for the whole following year.

How I handle data now

The revision follows one rule: raw data stays private and untouched; only code and aggregated results are published. These are the decisions behind it, and they apply to the whole series.

Lessons learned

The errors were easy to make and easy to miss. These are the habits I now apply to every project.

  1. Sanity-check the first number. 285,352 listings in a city of 3.3 million should have stopped me. Before any chart, compare the headline figure with one outside reference.

  2. Know what a dashboard is aggregating. Tableau sums numeric fields by default. A count of listings must be a distinct count of IDs.

  3. Read the output, not just the code. A describe() with a count of 8 means the input was wrong. Odd values like a 304-night percentile are a signal, not an insight.

  4. Ask who the missing and extreme values are before filling or trimming them. The missing prices were dormant listings, and most €1,000+ prices were parked or mistyped. Filling or trimming them blindly hides the most interesting part of the data.

  5. Use methods that fit the data. Prices are heavily skewed. Rank correlations and log prices told a different and more reliable story than scatter plots.

  6. Normalise before comparing places. Raw counts said Centro was big; listings per resident said it is a different kind of place.

  7. Keep originals, and make everything reproducible. A result is only as good as my ability to regenerate it from the raw files.

  8. Separate observation from recommendation. A correlation between ratings and price became advice to raise prices. Advice needs stronger evidence than a trend line.

landscape photography of sand dunes

© 2026. All rights reserved.

Let’s Connect

Send me a message here or reach out on LinkedIn .