Data AnalyticsIndustry analytics playbooks

Real-estate absorption rate and months of inventory by micro-market

PK
Pankit Kumar
Sr. Data Scientist at Parexel (a Goldman Sachs–backed company) · 27 September 2026 · 5 min read
In this article (7 sections)

Related programme: the Data Analytics with Generative AI course (3–4 months; ₹90,000 (inclusive of GST) · EMI from ₹4,000/month).

The short answer

Absorption rate is net units sold in a period divided by units available to sell in that period (opening unsold inventory plus new launches). Months of inventory is closing unsold inventory divided by average monthly net sales. Both must use sales net of cancellations, and both need a note when a large launch lands late in the period, because that single event can make a healthy micro-market look weak on one ratio and strong on the other.

The land-acquisition question behind the ratio

A developer deciding whether to launch a new tower, or to buy a land parcel in a particular micro-market, needs to know how quickly stock there actually sells. So does a lender assessing a construction-finance proposal. Neither is served by city-wide numbers: two sectors a few kilometres apart can have very different unsold stock. The business question is:

In which micro-markets would new supply sell within our planning horizon, and where is stock piling up?

Where the rows come from

A developer's own CRM gives booking-level data. Market-wide work usually combines the developer's data with purchased research data or a project-level tracker the analyst maintains.

TableKey columnsNotes
projectsproject_id, tower_id, micro_market, launch_date, total_units, unit_type, carpet_area_sqftphased towers launch separately; treat each tower as its own supply event
bookingsbooking_id, tower_id, unit_no, booking_date, agreement_date, statusstatus: booked, agreement signed, cancelled
cancellationsbooking_id, cancel_date, reason, refund_amountmay sit in finance, not sales
unsold_snapshotmicro_market, as_of_date, unsold_unitsreconcile to launches minus net sales

The snapshot and the flows should tie out: opening unsold + launches − net sales = closing unsold. If they do not, units were re-released after cancellation, or a tower was withdrawn, and the reconciliation gap needs explaining before any ratio is shown.

Formulas for a quarter

  • Net sales = gross bookings − cancellations in the quarter
  • Available supply = unsold units at quarter start + units launched in the quarter
  • Absorption % = net sales ÷ available supply × 100
  • Closing unsold = available supply − net sales
  • Months of inventory (MOI) = closing unsold ÷ (net sales ÷ 3)
  • Cancellation % = cancellations ÷ gross bookings × 100

Keep the month count explicit in MOI. Using the quarter's average is one choice; using the latest month's pace is another, and they can diverge sharply.

Three micro-markets, one quarter, synthetic

Monthly data for July–September 2026, fabricated for illustration. A is a steady market. B had a 900-unit launch in September. C has large unsold stock and heavy cancellations.

sql
-- Synthetic monthly data for three micro-markets (units = apartments)
CREATE TABLE mm_monthly (
  micro_market TEXT, month TEXT,
  launched_units INTEGER, gross_bookings INTEGER, cancellations INTEGER
);
CREATE TABLE mm_opening (micro_market TEXT, unsold_on_2026_07_01 INTEGER);
INSERT INTO mm_opening VALUES ('A',1200),('B',400),('C',2600);
INSERT INTO mm_monthly VALUES
 ('A','2026-07',0,110,6),('A','2026-08',0,95,5),('A','2026-09',0,120,9),
 ('B','2026-07',0,20,2),('B','2026-08',0,25,1),('B','2026-09',900,140,3),
 ('C','2026-07',300,70,15),('C','2026-08',0,60,22),('C','2026-09',0,65,18);

WITH q AS (
  SELECT m.micro_market, o.unsold_on_2026_07_01 AS opening,
         SUM(launched_units) AS launched,
         SUM(gross_bookings) AS gross,
         SUM(cancellations) AS cancelled,
         SUM(gross_bookings - cancellations) AS net_sales
  FROM mm_monthly m JOIN mm_opening o USING (micro_market)
  GROUP BY m.micro_market, o.unsold_on_2026_07_01
)
SELECT micro_market, opening, launched, gross, cancelled, net_sales,
       ROUND(100.0 * net_sales / (opening + launched), 1) AS absorption_pct,
       opening + launched - net_sales AS closing_unsold,
       ROUND((opening + launched - net_sales) / (net_sales / 3.0), 1) AS months_of_inventory,
       ROUND(100.0 * cancelled / gross, 1) AS cancel_pct
FROM q ORDER BY micro_market;
Micro-marketNet salesAbsorption %Closing unsoldMOI (quarter pace)Cancel %
A30525.48958.86.2
B17913.81,12118.83.2
C1404.82,76059.128.2

B is not the weak market it appears to be

B's absorption of 13.8% puts it far below A. But 900 of B's 1,300 available units were launched in September, so they sat in the denominator of a three-month ratio after being on sale for only one month. Two of the three months of sales were pre-launch months with just 18 and 24 net bookings. MOI at the quarter's average pace says 18.8 months; recompute at the latest month's pace and the picture flips:

sql
SELECT m.micro_market,
       gross_bookings - cancellations AS sept_net_sales,
       o.unsold_on_2026_07_01 + t.launched - t.net AS closing_unsold,
       ROUND((o.unsold_on_2026_07_01 + t.launched - t.net) * 1.0
             / (gross_bookings - cancellations), 1) AS moi_at_sept_pace
FROM mm_monthly m
JOIN mm_opening o USING (micro_market)
JOIN (SELECT micro_market, SUM(launched_units) AS launched,
             SUM(gross_bookings - cancellations) AS net
      FROM mm_monthly GROUP BY micro_market) t USING (micro_market)
WHERE m.month = '2026-09'
ORDER BY m.micro_market;

At September's pace, B's MOI is 8.2 months, about the same as A's 8.1. Neither figure is the truth. Launch months attract a burst of bookings from pre-launch enquiries, so September's 137 net sales in B probably overstates the ongoing pace, and the quarterly average understates it. Report both as a range, and revisit after two post-launch months.

C is different: at 58.7 to 59.1 months either way, the stock would take around five years to clear at current pace, and more than a quarter of bookings were cancelled.

Where property numbers mislead

  • Gross bookings reported as sales. A token booking that is cancelled within weeks is not absorption. In C, cancellations were 28.2% of bookings; gross numbers would overstate its net sales by 55 units.
  • Cancelled units re-entering inventory silently. When a cancelled flat goes back on sale, closing unsold should rise. If the snapshot does not show it, the flow reconciliation will break, which is how you catch it.
  • Phased launches counted at project level. A 2,000-unit project launched tower by tower over three years is not 2,000 units of supply on day one. Count each tower at its own launch date.
  • Mixing unit types. A micro-market with a sold-out 2BHK segment and unsold 4BHK stock needs the split, because a developer planning 2BHK towers cares about 2BHK absorption.
  • Stalled projects in "unsold". Units in a project that has stopped construction may not be realistically sellable. Show them as a separate line rather than letting them dominate MOI.

What the land committee sees

One slide per candidate micro-market: available supply, net absorption, MOI as a range with the pace assumption written under it, cancellation rate, and unsold stock by unit type. Put the sentence first: "B absorbs at roughly the same rate as A once the September launch is accounted for; C would take about five years to clear and a quarter of its bookings cancel." Committees commit large capital on these slides, so show the reconciliation check in an appendix.

The ratio work here is ordinary SQL aggregation, the sort practised throughout the Data Analyst programme. For another denominator-sensitive metric, see retail sales per square foot and like-for-like growth.

Frequently asked questions

How is absorption rate calculated in real estate?

A common definition is net units sold in a period divided by the units available to sell in that period, meaning unsold inventory at the start plus new launches. State whether sales are gross bookings or net of cancellations, because the two can differ a lot in a stressed market.

What does months of inventory mean?

It is unsold inventory at the end of a period divided by the average monthly net sales. It estimates how many months the existing stock would take to sell at the current pace, assuming no new launches, so the pace you choose changes the answer.

PK
Pankit Kumar
Lead Instructor, NeuraPath Academy

Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.

This article is part of our Data Analytics with Generative AI programme — 3–4 months. The full analyst stack — Excel, SQL, Power BI and Python pipelines — then a generative-AI layer you can prove is right.

Explore Data Analytics with Generative AI
Counselling is free · no obligation

Not sure which programme fits?

Tell us your background and we will map it to the right entry point — including saying so when a cheaper programme is the better fit. A counsellor replies within one working day.