Developer Market Report
Asking prices, how fast stock clears, and what each extra bedroom earns
Latest release and free sample
What is in the download
Each release downloads as a zip file holding the Excel workbook and a one-page Executive Summary (PDF). The workbook has 9 sheets, in tab order.
- Overview
- The release on one page: the headline figures, how much to trust them, the main findings and coverage by state.
- Market
- Every segment: price band, supply flow, how fast it clears, and its price and speed position.
- Insights
- Price and speed position (price against speed), what the marginal bedroom earns and the request mix.
- Demand
- What people ask to rent and to buy, at what budget, against what is advertised.
- Land
- Asking land rates per sqm and per plot, published rows only.
- Scheme test
- Where your price sits in a segment's asking band, and what holding the stock costs at your finance rate.
- Bulk scheme test
- The Scheme test for up to 50 schemes at once, with the same three inputs on each row.
- Changes
- What moved since Q2 2026: published segments, comparables, segments in and out.
- Guide
- Appraisal steps, column meanings, method, limits and checks.
How to use it
The appraisal, in five steps
- Find what you could build. Filter Market to your state and area, then to the types and bedroom counts your site can take. Prefer neighbourhood rows; LGA rows are a separate, wider population.
- Read the median, then the band. P25–P75 is the middle half of the market. A scheme that only works above P75 relies on being the most expensive stock in the segment.
- Days to clear and holding cost. Days to clear sets the holding cost. Use Scheme test to price the carry at your own price and finance rate, or Bulk scheme test for up to 50 schemes at once.
- Size units off the bedroom step. Insights shows what each extra bedroom earns and costs in days. Check the comparison count.
- Check what is missing. A segment absent from Market did not reach the minimum comparables. Building against it means building without price evidence.
Columns and what they mean
Headers are exactly as printed in the workbook. 50 columns across 3 grids, and 12 hidden helper columns (the workbook's lookup sheets read them; unhide them in Excel to see them).
Market: price band, supply flow and clearance speed per segment
Segment
- Grain
- Neighbourhood = that neighbourhood's own comparables. LGA = the whole LGA's comparables. Separate populations, not a roll-up: nothing has been substituted for anything.
- State
- Where the segment is, from broad to narrow. Area is the local district people use; All neighbourhoods means the row pools every neighbourhood of the area.
- Area
- Where the segment is, from broad to narrow. Area is the local district people use; All neighbourhoods means the row pools every neighbourhood of the area.
- Neighbourhood
- Where the segment is, from broad to narrow. Area is the local district people use; All neighbourhoods means the row pools every neighbourhood of the area.
- Property type
- The kind of building, its bedroom count, and new-build or existing stock. Blocks of flats and self-contained rooms are not compiled on Market.
- Beds (bedrooms)
- The kind of building, its bedroom count, and new-build or existing stock. Blocks of flats and self-contained rooms are not compiled on Market.
- Vintage
- The kind of building, its bedroom count, and new-build or existing stock. Blocks of flats and self-contained rooms are not compiled on Market.
Asking price band
- Band P25 (naira)
- The middle asking price for similar properties here and the middle half of asking prices, after outliers are removed. Measured over the price quarter.
- Median asking (naira)
- The middle asking price for similar properties here and the middle half of asking prices, after outliers are removed. Measured over the price quarter.
- Band P75 (naira)
- The middle asking price for similar properties here and the middle half of asking prices, after outliers are removed. Measured over the price quarter.
- Band width (percent)
- (P75 minus P25) divided by the median. Low means the market broadly agrees on price; high means it does not.
Supply and speed
- Comparables (qtr) (listings)
- The asking comparables first advertised in the segment during the quarter: supply flow, not stock standing.
- Days to clear (median) (days)
- Typical days from a listing appearing to it leaving the portals; listings still up are counted properly (Kaplan-Meier), not dropped. Leaving the portals is not proof of a sale. Reads under 8 days or 180+ at the limits of what is measurable.
- Cleared by 180 days (percent)
- The share of the stock that had gone within the watch window: the fairest like-for-like speed comparison, because the population and the window are both fixed.
- Speed grade (grade letter)
- How much to trust the speed figures, A to D, by the tracked listings behind them (A is 100 or more).
Price and speed position
- Position
- Higher or lower price, faster or slower, against the state's own medians over the full release. Blank where no speed is measured, the type is vague, or the state has too few segments to split.
Flags and gaps
- UNIFORM
- Yes or No, each its own filter. UNIFORM: the band is narrower than 5% of the median, so the comparables ask almost the same price. WIDE: the band is wider than 150% of the median, or P75 is at least 4 times P25: prices disagree.
- WIDE
- Yes or No, each its own filter. UNIFORM: the band is narrower than 5% of the median, so the comparables ask almost the same price. WIDE: the band is wider than 150% of the median, or P75 is at least 4 times P25: prices disagree.
- VAGUE (yes or no)
- Yes where the listings did not say what kind of building it is, so the segment's slowness reflects listing quality, not liquidity. Kept on Market; left out of Position and Insights.
- CLEAN
- Yes when none of UNIFORM, WIDE or VAGUE applies. Blue is used for Yes here; orange marks the other three. The word is always in the cell.
- Why blank
- The reason for a blank speed or position: too few tracked listings, a curve that did not reach halfway, a vague listing type, or a state with too few segments to split. Empty when nothing is blank.
Helper columns (hidden)
- Segment key
- The segment's combined label (State, Area, Neighbourhood, Property type, Beds, Vintage) that the Scheme test picks by. One per row, and the key the Scheme test reads the grid with.
- LGA
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Fast quarter (days)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Slow quarter (days)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Tracked listings (listings)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
Demand: what people ask for to rent and to buy, against what is advertised
Where and what
- Grain
- How wide a net the row casts. Area + bedrooms: one property type at one bedroom count in one area, the strongest form. Area, all sizes and State, all areas: pooled rows, shown only where the finer split had too few requests to publish.
- State
- What is asked for and where. Market is Rent or Sale and sets the unit of every money figure. All sizes and All areas mark a pooled row. Self-contained rooms appear at 0 beds.
- Area
- What is asked for and where. Market is Rent or Sale and sets the unit of every money figure. All sizes and All areas mark a pooled row. Self-contained rooms appear at 0 beds.
- Market
- What is asked for and where. Market is Rent or Sale and sets the unit of every money figure. All sizes and All areas mark a pooled row. Self-contained rooms appear at 0 beds.
- Property type
- What is asked for and where. Market is Rent or Sale and sets the unit of every money figure. All sizes and All areas mark a pooled row. Self-contained rooms appear at 0 beds.
- Beds (bedrooms)
- What is asked for and where. Market is Rent or Sale and sets the unit of every money figure. All sizes and All areas mark a pooled row. Self-contained rooms appear at 0 beds.
What is wanted
- Requests (requests)
- How many requests were posted, and how many named a budget this pack can use (inside the market's own price band). A request is a stated intention posted on a portal, not a transaction.
- With a budget (requests)
- How many requests were posted, and how many named a budget this pack can use (inside the market's own price band). A request is a stated intention posted on a portal, not a transaction.
- Money basis
- The unit of the money columns on the row, in words: Annual rent on a Rent row, Purchase price on a Sale row.
- Budget P25 (naira)
- The stated budgets behind the median. The median needs 5 usable budgets and the quartiles 8; blank below that.
- Median budget (naira)
- The stated budgets behind the median. The median needs 5 usable budgets and the quartiles 8; blank below that.
- Budget P75 (naira)
- The stated budgets behind the median. The median needs 5 usable budgets and the quartiles 8; blank below that.
What is advertised
- Median asking (naira)
- The middle advertised figure for the same area, type and size, and the asking comparables behind it. Blank means no advertised segment reached the minimum comparables, not that nothing is available.
- Comparables (listings)
- The middle advertised figure for the same area, type and size, and the asking comparables behind it. Blank means no advertised segment reached the minimum comparables, not that nothing is available.
The gap
- Budget vs asking (percent)
- Median budget against median asking, within one market. A gap between two medians over two different populations, not a discount anyone was offered. Marked at -25% or worse.
Helper columns (hidden)
- Segment key
- The segment's combined label (State, Area, Neighbourhood, Property type, Beds, Vintage) that the Scheme test picks by. One per row, and the key the Scheme test reads the grid with.
Land: asking rate per square metre by area, use class and plot size
Where and what
- Grain
- Where the rate applies. Area and Neighbourhood are separate populations, not a hierarchy; commercial and mixed-use land appear at area level only.
- State
- Where the rate applies. Area and Neighbourhood are separate populations, not a hierarchy; commercial and mixed-use land appear at area level only.
- Area
- Where the rate applies. Area and Neighbourhood are separate populations, not a hierarchy; commercial and mixed-use land appear at area level only.
- Neighbourhood
- Where the rate applies. Area and Neighbourhood are separate populations, not a hierarchy; commercial and mixed-use land appear at area level only.
- Use class
- Residential, mixed use or commercial land as the source classified it. Never pooled.
- Plot size
- Standard is under 2,000 square metres; Large is 2,000 and above. Larger plots trade at a lower rate per square metre, so the two are kept apart.
Rate
- Band P25 / sqm (naira per square metre)
- The middle asking rate for land in the segment and the middle half of rates. Computed per listing and then taken as a median, so it does not move with the mix of plot sizes advertised.
- Rate per sqm (naira per square metre)
- The middle asking rate for land in the segment and the middle half of rates. Computed per listing and then taken as a median, so it does not move with the mix of plot sizes advertised.
- Band P75 / sqm (naira per square metre)
- The middle asking rate for land in the segment and the middle half of rates. Computed per listing and then taken as a median, so it does not move with the mix of plot sizes advertised.
Per plot
- Plot standard (sqm) (square metres)
- The plot size this state actually trades in: the most common area among its asking comparables that describe themselves as one plot, and how many comparables sit at exactly that area. There is no national plot size. Each state's standard this release is in the table below.
- Plot standard comparables
- The plot size this state actually trades in: the most common area among its asking comparables that describe themselves as one plot, and how many comparables sit at exactly that area. There is no national plot size. Each state's standard this release is in the table below.
- Value per plot (naira)
- The rate per square metre multiplied by that state's plot standard, because that is how the market quotes land. It carries no evidence of its own beyond the rate. Blank where the state has no measured standard — deliberately, rather than assuming a national figure.
Trust
- Grade (grade letter)
- Graded on the comparables count and band width, then capped at B because title is unobserved. Land comparables is how many asking land comparables the rate rests on.
- Land comparables (listings)
- Graded on the comparables count and band width, then capped at B because title is unobserved. Land comparables is how many asking land comparables the rate rests on.
Helper columns (hidden)
- Segment key
- The segment's combined label (State, Area, Neighbourhood, Property type, Beds, Vintage) that the Scheme test picks by. One per row, and the key the Scheme test reads the grid with.
- Band P10 / sqm (naira per square metre)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Band P90 / sqm (naira per square metre)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Band width (percent)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Meets evidence rule (yes or no)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
- Withheld because (Land)
- A helper kept out of the grid to keep it readable. The Scheme test reads it.
Frequently asked questions
The questions asked most
How do I use this for a residual land valuation?
The product supplies the revenue side: what similar stock is asking, how tightly priced the segment is and how long it takes to clear, plus what a site costs on Land. Build cost, finance, professional fees and your required profit are yours; the residual falls out of the combination. We do not compile construction costs.
Does "Days to clear" mean the property sold?
No. It measures how long the listing was visible, from the first time we saw it on a portal to the point it was no longer there. A listing leaving the portals is not a sale. The source records no sold status, so a departure is indistinguishable from a sale, a withdrawal, an expiry or a re-post, and every figure here is an UPPER BOUND on how fast stock actually sells.
What does the bedroom step tell me?
What one extra bedroom earns, and what it costs in extra days to clear, measured like for like: same neighbourhood, same property type, same vintage.
What does Position mean, and why is price not enough?
Position places a segment as higher or lower priced and faster or slower clearing against its own state's medians.
Is "Budget vs asking" a discount I can negotiate?
No. It compares two medians over two different populations: the people asking and the properties advertised are not the same set, and nobody was ever offered the gap. It is read within one market, a rent budget against an advertised rent and a purchase budget against an advertised price.
Why does Land list so few rows?
Because a rate needs 20 comparables and a normal band, and title is unobserved, which caps every grade.
What we do not answer
Certain questions are outside what a data supplier should answer. The consistent response is: here is what the data shows and why — what you do with it is your policy decision. This applies to:
- Which valuation to accept
- What LTV or tolerance to set
- Whether to lend, build, or buy
- Whether a specific scheme is viable
- Which segment to invest in
- Whether a particular valuer is right
Declining these is not unhelpfulness. It is the correct scope for a data provider, it avoids straying into advice we are not licensed to give, and it protects the client's own accountability for their decision.
Methodology
- Source
Residential sale listings from Nigerian property portals, de-duplicated within each portal (a property on two portals can appear twice). Asking prices: Nigeria has no transaction register, so achieved prices are not observable. The Demand sheet adds a second feed, requirements posted by people looking to rent or buy, set against the rent or sale index.
- Price
Tukey fence at 1.5 x IQR within each segment and period, bands computed after fencing. Minimum comparables: 20 in the quarter. The index itself publishes a stratum from 5 comparables; this product lists a segment from 20.
- Speed
Kaplan-Meier survival over tracked listings entering in the 12 months to 2026-04-01, each watched 180 days; at least 20 tracked listings and a curve that reached halfway are needed.
- Rank correlation
Spearman, computed at build time from the published rows that carry a measured speed and a specific property type, for LGA and neighbourhood rows separately. It is not a typed constant.
- Scheme test and Bulk scheme test
Carry is your price x units x your finance rate x days / 365, worked for the fast quarter, the median clearance and the slow quarter of the segment. It is simple interest, a floor on the true holding cost; where a quarter reads 180+ days the true time is longer, so that carry is a floor too. Nothing is assumed: a result waits for the inputs it needs. The answer comes from the neighbourhood, then the LGA of the same area, never the state.
- Land
A rate needs 20 comparables; grades are capped at B because title is unobserved. Only published rows are listed.
Limitations
- Comparables are asking prices (or rents, or land rates) for the same segment, first advertised in the quarter, at their latest asking price, de-duplicated within each portal and with outliers removed. A property advertised on more than one portal can therefore appear more than once. They are not sales.
- A listing leaving the portals is not a sale. The source records no sold status, so a departure is indistinguishable from a sale, a withdrawal, an expiry or a re-post, and every speed figure is an UPPER BOUND on how fast stock actually sells.
- Price is Q3 2026; speed uses tracked listings entering up to 2026-04-01. The two periods on a row are not the same, and speed necessarily lags price.
- Position and the bedroom step are presentation aggregations over the published rows of the full release, reproducible from Market. Position splits each state at its own medians over segments with a measured speed and a specific property type; a state with fewer than 4 such segments is not split.
- Not here: build cost, absorption or months of supply (no sold status exists), planning or title risk. Not a valuation.
- Percentages are stored as fractions (0.0698 = 6.98%) in the workbook.
Glossary
- Band P25 / Median asking / Band P75
- The middle asking price for similar properties here and the middle half of asking prices, after outliers are removed. Measured over the price quarter.
- Band P25 / Rate per sqm / Band P75 (per sqm)
- The middle asking rate for land in the segment and the middle half of rates. Computed per listing and then taken as a median, so it does not move with the mix of plot sizes advertised.
- Band width
- (P75 minus P25) divided by the median. Low means the market broadly agrees on price; high means it does not.
- Budget P25 / Median budget / Budget P75
- The stated budgets behind the median. The median needs 5 usable budgets and the quartiles 8; blank below that.
- Budget vs asking
- Median budget against median asking, within one market. A gap between two medians over two different populations, not a discount anyone was offered. Marked at -25% or worse.
- CLEAN
- Yes when none of UNIFORM, WIDE or VAGUE applies. Blue is used for Yes here; orange marks the other three. The word is always in the cell.
- Cleared by 180 days
- The share of the stock that had gone within the watch window: the fairest like-for-like speed comparison, because the population and the window are both fixed.
- Comparables (qtr)
- The asking comparables first advertised in the segment during the quarter: supply flow, not stock standing.
- Days to clear (median)
- Typical days from a listing appearing to it leaving the portals; listings still up are counted properly (Kaplan-Meier), not dropped. Leaving the portals is not proof of a sale. Reads under 8 days or 180+ at the limits of what is measurable.
- Grade / Land comparables
- Graded on the comparables count and band width, then capped at B because title is unobserved. Land comparables is how many asking land comparables the rate rests on.
- Grain
- Neighbourhood = that neighbourhood's own comparables. LGA = the whole LGA's comparables. Separate populations, not a roll-up: nothing has been substituted for anything.
- Grain
- How wide a net the row casts. Area + bedrooms: one property type at one bedroom count in one area, the strongest form. Area, all sizes and State, all areas: pooled rows, shown only where the finer split had too few requests to publish.
- Grain / State / Area / Neighbourhood
- Where the rate applies. Area and Neighbourhood are separate populations, not a hierarchy; commercial and mixed-use land appear at area level only.
- Median asking / Comparables
- The middle advertised figure for the same area, type and size, and the asking comparables behind it. Blank means no advertised segment reached the minimum comparables, not that nothing is available.
- Money basis
- The unit of the money columns on the row, in words: Annual rent on a Rent row, Purchase price on a Sale row.
- Plot size
- Standard is under 2,000 square metres; Large is 2,000 and above. Larger plots trade at a lower rate per square metre, so the two are kept apart.
- Plot standard (sqm) / Plot standard comparables
- The plot size this state actually trades in: the most common area among its asking comparables that describe themselves as one plot, and how many comparables sit at exactly that area. There is no national plot size. Each state's standard this release is in the table below.
- Position
- Higher or lower price, faster or slower, against the state's own medians over the full release. Blank where no speed is measured, the type is vague, or the state has too few segments to split.
- Property type / Beds / Vintage
- The kind of building, its bedroom count, and new-build or existing stock. Blocks of flats and self-contained rooms are not compiled on Market.
- Requests / With a budget
- How many requests were posted, and how many named a budget this pack can use (inside the market's own price band). A request is a stated intention posted on a portal, not a transaction.
- Speed grade
- How much to trust the speed figures, A to D, by the tracked listings behind them (A is 100 or more).
- State / Area / Market / Property type / Beds
- What is asked for and where. Market is Rent or Sale and sets the unit of every money figure. All sizes and All areas mark a pooled row. Self-contained rooms appear at 0 beds.
- State / Area / Neighbourhood
- Where the segment is, from broad to narrow. Area is the local district people use; All neighbourhoods means the row pools every neighbourhood of the area.
- UNIFORM / WIDE
- Yes or No, each its own filter. UNIFORM: the band is narrower than 5% of the median, so the comparables ask almost the same price. WIDE: the band is wider than 150% of the median, or P75 is at least 4 times P25: prices disagree.
- Use class
- Residential, mixed use or commercial land as the source classified it. Never pooled.
- VAGUE
- Yes where the listings did not say what kind of building it is, so the segment's slowness reflects listing quality, not liquidity. Kept on Market; left out of Position and Insights.
- Value per plot
- The rate per square metre multiplied by that state's plot standard, because that is how the market quotes land. It carries no evidence of its own beyond the rate. Blank where the state has no measured standard — deliberately, rather than assuming a national figure.
- Why blank
- The reason for a blank speed or position: too few tracked listings, a curve that did not reach halfway, a vague listing type, or a state with too few segments to split. Empty when nothing is blank.