Benchmark data licence
The derived tables, in your own systems
Eight tables, joinable on stable ids, delivered as CSV and JSON after every build. 231 communities and 681 developers with medians and the full quartile columns. The 2,962 project index with exact coordinates, which we publish nowhere else. 3,315 payment plans decomposed stage by stage. The handover pipeline by quarter.
Built for CRMs that need a benchmark badge on every listing, and for analysts who need the base counts as columns rather than as footnotes. If you need a live endpoint instead of files, say so at checkout or by email and we switch you to it at no extra cost.
What is in the bundle
| Table | What it holds | Grain |
|---|---|---|
| communities.csv / .json | Median, p25, p75 AED per sqft, median price, project and unit counts, payment plan medians, pipeline by year, per bedroom breakdown | one row per community, 231 rows |
| developers.csv / .json | Same measures per developer plus the communities they build in and their share of the Dubai pipeline | one row per developer, 681 rows |
| projects.csv / .json | Project index with developer, community, city, exact coordinates (published nowhere else, the free pages carry none), delivery quarter, sale and construction status, starting price, price range, median AED per sqft, unit and plan counts | one row per project, 4,070 rows: 2,962 off-plan plus 1,083 delivered comparables |
| payment-plans.csv | Every published plan decomposed into booking, construction, handover and post-handover shares, with pre-handover total and step count | one row per qualifying payment plan, Dubai projects only, 3,315 rows |
| effective-price.csv | The headline price restated in today's money given the payment schedule, with the plan priced, the present value multiplier at three rates, the effective AED per sqft and a confidence grade | one row per priced project, the payment-plan-adjusted price with its confidence grade, 2,859 rows |
| plan-structures.csv | The plan shapes (80/20, 60/40, post-handover and the rest) with plan, project, developer, community and unit counts per shape | one row per plan structure bucket, 12 rows |
| pipeline.csv | Projects and priced units by delivery quarter and community, 2020 through 2032 | one row per delivery quarter by community, 1,009 rows |
| bedroom-benchmarks.csv | Median AED per sqft, price and size per bedroom count, per community and per developer | one row per community or developer by bedroom count, 1,012 rows |
Sources read to 30 July 2026, corpus merged 18 August 2026, tables built 2 October 2026. Every figure traces to a query over developer-published inventory; the method is public at /methodology, what we will never ship is at /data-policy, and what you may do with the tables is at /licence.
How often it moves. Builds are dated, not scheduled. This one was assembled from sources read to 30 July 2026 and computed on 2 October 2026. A listings watcher reads new launches continuously and the newest of them was read on 30 September 2026, but a handful of fresh records is not allowed to move the “as of” date of everything around them. We do not promise a fixed refresh interval, because the build is run by a person and a promise nobody schedules is not a promise. Instead the licence carries the term below: a calendar month with no newly dated bundle is credited on request.
The actual columns
slug,name,city,n_projects,n_units,psf_median,psf_p25,psf_p75,price_median,pre_handover_median
jumeirah,Jumeirah,Dubai,16,57,6951,6152,7391,36557000,60.0
fahid-island,Fahid Island,Abu Dhabi,15,66,3984,3652,4243,7610800,65.0
business-bay,Business Bay,Dubai,68,1458,3188,2650,3664,3612017,60.0
sobha-siniya-island,Sobha Siniya Island,Umm Al Quwain,3,291,2799,2749,2800,1831845,60.0
dubai-islands,Dubai Islands,Dubai,184,2309,2492,2139,2962,3407000,50.0The head of OffplanIndex-sample-communities.csv, printed from the same sample file linked below. The licensed table has the same columns and every community row, not a slice. An engineer can load it before anyone in your firm has to approve a card.
Sample files
Four sampled CSVs so your team can test the schema before subscribing: rows are taken evenly across each table, so they span the ranking rather than the top of it. Same columns as the licensed bundle, a fraction of the rows.
The literal contents, before you ask for a key
A new bundle is cut every time the corpus is rebuilt. Builds are dated, not scheduled: there is no cron job, so the freshness promise is the date stamped on the bundle, not a fixed interval.
| Table | Grain | Rows | Refresh |
|---|---|---|---|
| communities.csv / communities.json | one row per community | 231 | Every data build |
| developers.csv / developers.json | one row per developer | 681 | Every data build |
| projects.csv / projects.json | one row per project, off-plan plus delivered comparables | 4,070 | Every data build |
| payment-plans.csv | one row per qualifying payment plan, Dubai projects only | 3,315 | Every data build |
| effective-price.csv | one row per priced project, the payment-plan-adjusted price with its confidence grade | 2,859 | Every data build |
| plan-structures.csv | one row per plan structure bucket | 12 | Every data build |
| pipeline.csv | one row per delivery quarter by community | 1,009 | Every data build |
| bedroom-benchmarks.csv | one row per community or developer by bedroom count | 1,012 | Every data build |
communities 10 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| slug | text | stable key for the community, safe to join on |
| name | text | community name as we publish it |
| city | text | Dubai, Abu Dhabi, Sharjah, Ras Al Khaimah, Ajman, Umm Al Quwain, Fujairah |
| n_projects | integer | tracked off-plan projects in the community |
| n_units | integer | validated priced unit records behind the medians |
| psf_median | integer, AED | median asking price per sqft over unit records |
| psf_p25 | integer, AED | 25th percentile asking price per sqft |
| psf_p75 | integer, AED | 75th percentile asking price per sqft |
| price_median | integer, AED | median asking price of a unit |
| pre_handover_median | decimal, percent | median share of the price due before handover |
developers 9 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| slug | text | stable key for the developer, safe to join on |
| name | text | developer name, canonicalised across sources |
| n_projects | integer | tracked off-plan projects by this developer |
| n_units | integer | validated priced unit records behind the medians |
| psf_median | integer, AED | median asking price per sqft over unit records |
| psf_p25 | integer, AED | 25th percentile asking price per sqft |
| psf_p75 | integer, AED | 75th percentile asking price per sqft |
| price_median | integer, AED | median asking price of a unit |
| pre_handover_median | decimal, percent | median share of the price due before handover |
projects 24 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| id | text | site URL slug, can change when duplicates merge; joins payment-plans.project_id, but store opi_id |
| opi_id | text | stable OffplanIndex project id, the key to store; id is a URL slug and can change when duplicates merge |
| title | text | project name as published |
| developer | text | developer name |
| developer_slug | text | join key into developers.slug |
| community | text | community name |
| community_slug | text | join key into communities.slug |
| subcommunity | text | sub area where the source states one, often empty |
| city | text | emirate level city |
| lat | decimal | latitude, WGS84, empty when the source gives no point |
| lng | decimal | longitude, WGS84 |
| delivery_quarter | text | developer stated handover quarter, format Q3 2027 |
| delivery_year | integer | year part of delivery_quarter |
| sale_status | text | on_sale, out_of_stock, presale, announced, unknown |
| construction_status | text | under_construction, completed, unknown |
| property_types | text | comma separated, for example apartment,townhouse |
| starting_price | integer, AED | developer published from price |
| price_min | integer, AED | lowest asking price observed in our unit records |
| price_max | integer, AED | highest asking price observed in our unit records |
| psf_median | integer, AED | median asking price per sqft across the project |
| n_priced_units | integer | validated priced unit records for this project |
| n_plans | integer | published payment plans for this project |
| pre_handover_pct | decimal, percent | cheapest plan's share due before handover |
| post_handover_pct | decimal, percent | share due after handover on the same plan |
payment-plans 15 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| project_id | text | site URL slug, joins projects.id; can change, so store opi_id |
| project_title | text | project name, repeated for readability |
| developer | text | developer name |
| plan_name | text | plan label as published, for example 80/20 |
| plan_idx | integer | 0 based index of the plan within the project |
| booking_pct | decimal, percent | due at booking |
| construction_pct | decimal, percent | due during construction |
| handover_pct | decimal, percent | due on handover |
| post_handover_pct | decimal, percent | due after handover |
| pre_handover_pct | decimal, percent | booking plus construction: the share paid before the handover payment, which is handover_pct |
| total_pct | decimal, percent | sum of the steps, kept inside 90 to 110 |
| n_steps | integer | instalment steps in the published plan |
| has_post_handover | integer, 0 or 1 | 1 when any instalment falls after handover |
| structure | text | taxonomy bucket, join key into plan-structures.structure: 80-20, 60-40, post-handover, paid-before-handover |
| opi_id | text | stable OffplanIndex project id, joins projects.opi_id, the key to store |
effective-price 26 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| opi_id | text | stable OffplanIndex project id, the key to store |
| project_id | text | join key into projects.id (site slug) |
| title | text | project name |
| developer | text | developer name |
| city | text | the emirate the project sits in |
| community_slug | text | join key into communities.slug |
| confidence | text | high, medium or low; only high and medium are published in rankings |
| headline_price | integer, AED | the starting price the schedule is priced against |
| plan_name | text | the plan we priced: of the plans that sum to 100 percent, the one that defers the most money; cash-discount plans are excluded |
| plan_idx | integer | index of that plan within the project, joins payment-plans.plan_idx |
| n_priced_plans | integer | plans that qualified for pricing on this project |
| months_to_handover | decimal | months from the valuation date (the bundle build date) to the stated handover |
| handover_basis | text | date, quarter, year, past or unknown: how precise the handover date was |
| pv_multiplier | decimal | present value of the schedule as a fraction of the headline price, at 5 percent a year |
| effective_price | integer, AED | the headline price restated in today's money given the payment schedule: headline_price times pv_multiplier |
| plan_discount_pct | decimal, percent | what the schedule is worth to the buyer, as a share of the headline price: 100 times (1 minus pv_multiplier) |
| psf_median | integer, AED | median asking price per sqft over the project's validated units |
| effective_psf | integer, AED | psf_median times pv_multiplier |
| booking_pct | decimal, percent | due at booking on the priced plan |
| pre_handover_pct | decimal, percent | due before keys on the priced plan |
| post_handover_pct | decimal, percent | due after keys on the priced plan |
| tail_months | decimal | length of the post-handover tail, stated or assumed (see flags) |
| plan_spread_pct | decimal, percent | discount gap between the project's best and worst qualifying plans |
| pv_multiplier_at_3pct | decimal | the same multiplier at 3 percent a year, for sensitivity testing |
| pv_multiplier_at_8pct | decimal | the same multiplier at 8 percent a year, for sensitivity testing |
| flags | text | comma separated caveats: tail_assumed_24m, handover_quarter_only, handover_year_only, handover_past, plan_total_out_of_band |
plan-structures 10 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| structure | text | the plan shape, the join key from payment-plans.structure |
| label | text | display label, for example 80/20 |
| kind | text | how the shape is defined: split (share before and after handover), tail (a run of instalments after handover), cadence (payment frequency), or residual (everything else, counted but not broken out) |
| headline | text | one sentence definition |
| n_plans | integer | qualifying plans in the bucket |
| n_projects | integer | projects with at least one plan in the bucket |
| n_developers | integer | developers with at least one plan in the bucket |
| n_communities | integer | communities with at least one plan in the bucket |
| n_units | integer | validated priced unit records behind those projects |
| has_page | integer, 0 or 1 | 1 when the bucket has enough plans for us to publish it on offplanindex.com |
pipeline 6 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| delivery_quarter | text | developer stated handover quarter, format Q3 2027 |
| community | text | community name |
| community_slug | text | join key into communities.slug |
| city | text | emirate level city |
| n_projects | integer | off-plan projects due that quarter in that community |
| n_priced_units | integer | benchmark unit records across those projects (validated, not size-flagged) |
bedroom-benchmarks 8 fields, one-line description each
| Field | Type | What it is |
|---|---|---|
| group_kind | text | community or developer |
| group_slug | text | join key into communities.slug or developers.slug |
| group_name | text | display name of the community or developer |
| bedroom | text | Studio, 1 BR, 2 BR, 3 BR, 4 BR or 5+ BR |
| n_records | integer | benchmark unit records behind this row (validated, off-plan, not size-flagged), minimum 10 |
| psf_median | integer, AED | median asking price per sqft for this bedroom count |
| price_median | integer, AED | median asking price for this bedroom count |
| size_median | integer, sqft | median unit size for this bedroom count |
A median in any of these tables is a computed asking-price statistic, not a transaction price: see /methodology for what each figure is and is not measuring. Schema version 1 is bumped only when a field is renamed or removed, never when one is added.
A sample of every table, no key required
communities.csv 10 of 231 rows
| slug | name | city | n_projects | n_units | psf_median | psf_p25 | psf_p75 | price_median | pre_handover_median |
|---|---|---|---|---|---|---|---|---|---|
| academic-city | Academic City | Dubai | 4 | 460 | 1660 | 1578 | 1851 | 4936500 | 60.0 |
| ajmal-makan-city-sharjah-waterfront | Ajmal Makan City - Sharjah Waterfront | Sharjah | 0 | 0 | n/a | n/a | n/a | n/a | n/a |
| ajman-downtown | Ajman Downtown | Ajman | 2 | 155 | 572 | 569 | 575 | 1137174 | 41.0 |
| ajman-uptown | Ajman Uptown | Ajman | 1 | 15 | 378 | 362 | 398 | 418000 | 100.0 |
| al-alia | Al Alia | Ajman | 3 | 13 | 446 | 404 | 450 | 313245 | 60.0 |
| al-ameera-village | Al Ameera Village | Ajman | 1 | 104 | 546 | 498 | 559 | 671617 | 41.0 |
| al-amerah | Al Amerah | Ajman | 8 | 322 | 511 | 504 | 517 | 622500 | 100.0 |
| al-arqoub | Al Arqoub | Ras Al Khaimah | 0 | 0 | n/a | n/a | n/a | n/a | 100.0 |
| al-aweer | Al Aweer | Sharjah | 2 | 6 | 1006 | 967 | 1149 | 3675000 | 40.0 |
| al-bahia | Al Bahia | Abu Dhabi | 4 | 0 | n/a | n/a | n/a | n/a | n/a |
developers.csv 10 of 681 rows
| slug | name | n_projects | n_units | psf_median | psf_p25 | psf_p75 | price_median | pre_handover_median |
|---|---|---|---|---|---|---|---|---|
| 20-20 | 20/20 | 0 | 0 | n/a | n/a | n/a | n/a | 40.0 |
| 4direction | 4Direction | 0 | 0 | n/a | n/a | n/a | n/a | n/a |
| 77-shades-of-green | 77 Shades of Green | 1 | 0 | n/a | n/a | n/a | n/a | 70.0 |
| 7th-key | 7th Key | 1 | 12 | 1773 | 1708 | 1864 | 2094500 | 70.0 |
| a-j-g-jaddaf-l-l-c | A J G Jaddaf L. L. C | 1 | 0 | n/a | n/a | n/a | n/a | n/a |
| aa-hmb | AA & HMB | 1 | 0 | n/a | n/a | n/a | n/a | 60.0 |
| aaa | AAA | 1 | 44 | 2256 | 2178 | 2310 | 2892569 | 40.0 |
| aabar | Aabar | 0 | 0 | n/a | n/a | n/a | n/a | 20.0 |
| aark | AARK | 3 | 23 | 1410 | 1344 | 3194 | 1700000 | 50.0 |
| ab | AB | 3 | 5 | 2100 | 2100 | 2100 | 3108714 | 100.0 |
projects.csv 10 of 4,070 rows
| id | opi_id | title | developer | developer_slug | community | community_slug | subcommunity | city | lat | lng | delivery_quarter | delivery_year | sale_status | construction_status | property_types | starting_price | price_min | price_max | psf_median | n_priced_units | n_plans | pre_handover_pct | post_handover_pct |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4direction-haven-views-1 | opi-cfc7169604 | Haven Views 1 | 4Direction | 4direction | Dubai Land Residence Complex | dubai-land-residence-complex | Haven Views 1 | Dubai | n/a | n/a | Q1 2026 | 2026 | n/a | n/a | n/a | 686000.0 | 686000.0 | n/a | n/a | 0 | 0 | n/a | n/a |
| 7th-key-nexara-tower | opi-c6c4a81b87 | Nexara Tower | 7th Key | 7th-key | Jumeirah Village Circle | jumeirah-village-circle | Nexara Tower | Dubai | 25.05876771605937 | 55.211747690389494 | Q2 2028 | 2028 | on_sale | under_construction | apartment,duplex | 1100000.0 | 1100000.0 | 3300000.0 | 1773 | 12 | 2 | 50.0 | 0.0 |
| a-j-g-jaddaf-l-l-c-lumiere-heights | opi-663a003505 | Lumiere Heights | A J G Jaddaf L. L. C | a-j-g-jaddaf-l-l-c | Culture Village | culture-village | Lumiere Heights | Dubai | n/a | n/a | Q2 2027 | 2027 | n/a | n/a | n/a | 700000.0 | 700000.0 | n/a | n/a | 0 | 0 | n/a | n/a |
| aa-and-hmb-real-estate-development-havelock-residences | opi-b23a2deec9 | Havelock Residences | AA & HMB | aa-hmb | Al Furjan | al-furjan | n/a | Dubai | 25.0496627984 | 55.13977545661 | Q4 2026 | 2026 | sold_out | under_construction | apartment | 625000.0 | 62500000.0 | 190000000.0 | n/a | 0 | 1 | 60.0 | 0.0 |
| aaa-ocean-tower | opi-1dfe7f89ef | Ocean Tower | AAA | aaa | Dubai Islands | dubai-islands | Ocean Tower | Dubai | 25.28539290914525 | 55.296984539487255 | Q1 2027 | 2027 | on_sale | under_construction | n/a | 1847819.0 | 1847819.0 | n/a | 2256 | 44 | 1 | 40.0 | 0.0 |
| aabar-properties-lamar-residences | opi-4c26f5e64c | Lamar Residence | Aabar | aabar | Al Raha Beach | al-raha-beach | Al Seef | Abu Dhabi | 24.445522 | 54.583944 | Q3 2023 | 2023 | sold_out | completed | apartment,duplex | 1200000.0 | 1200000.0 | n/a | n/a | 0 | 1 | 20.0 | 0.0 |
| aark-developers-aark-residences | opi-bc86698899 | Aark Residences | AARK | aark | Dubai Land Residence Complex | dubai-land-residence-complex | n/a | Dubai | 25.088361144058798 | 55.38216584069708 | Q4 2024 | 2024 | out_of_stock | completed | apartment | 842856.0 | 842856.0 | 1303658.0 | 1090 | 10 | 1 | 20.0 | 0.0 |
| aark-developers-aark-terraces | opi-8f90cffaa1 | Aark Terraces | AARK | aark | Dubai Land Residence Complex | dubai-land-residence-complex | n/a | Dubai | 25.084708682494703 | 55.38319524935598 | Q4 2027 | 2027 | on_sale | under_construction | apartment | 980888.0 | 980888.0 | 1412391.0 | 1346 | 15 | 2 | 35.0 | 40.0 |
| aark-developers-karl-lagerfeld-beach-residences | opi-1ef0b01e26 | Karl Lagerfeld Beach Residences | AARK | aark | Al Marjan Island | al-marjan-island | Karl Lagerfeld Beach Residences by Aark | Ras Al Khaimah | 25.675684740929054 | 55.739658738216136 | Q2 2028 | 2028 | presale | under_construction | apartment | 2800000.0 | 2800000.0 | 4200000.0 | 3532 | 4 | 2 | 50.0 | 0.0 |
| aark-developers-sora-beach-residences | opi-fe7410ada8 | Sora Beach Residences | AARK | aark | Al Marjan Island | al-marjan-island | Sora Beach Residences | Ras Al Khaimah | 25.67599471472 | 55.74016438176 | Q4 2026 | 2026 | available | under_construction | apartment,villa | 2755000.0 | 2754888.0 | 13955888.0 | 3496 | 4 | 1 | 60.0 | 0.0 |
payment-plans.csv 10 of 3,315 rows
| project_id | project_title | developer | plan_name | plan_idx | booking_pct | construction_pct | handover_pct | post_handover_pct | pre_handover_pct | total_pct | n_steps | has_post_handover | structure | opi_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7th-key-nexara-tower | Nexara Tower | 7th Key | Payment Plan 50/50 | 0 | 20.0 | 30.0 | 50.0 | 0.0 | 50.0 | 100.0 | 3 | 0 | 50-50 | opi-c6c4a81b87 |
| 7th-key-nexara-tower | Nexara Tower | 7th Key | 30 Months Post Handover Paymen Plan | 1 | 20.0 | 70.0 | 10.0 | 0.0 | 90.0 | 100.0 | 4 | 0 | 90-10 | opi-c6c4a81b87 |
| aa-and-hmb-real-estate-development-havelock-residences | Havelock Residences | AA & HMB | Standard | 0 | 20.0 | 40.0 | 40.0 | 0.0 | 60.0 | 100.0 | 3 | 0 | 60-40 | opi-b23a2deec9 |
| aaa-ocean-tower | Ocean Tower | AAA | Payment Plan | 0 | 20.0 | 20.0 | 60.0 | 0.0 | 40.0 | 100.0 | 3 | 0 | 40-60 | opi-1dfe7f89ef |
| aark-developers-aark-residences | Aark Residences | AARK | Payment Plan | 0 | 20.0 | 0.0 | 80.0 | 0.0 | 20.0 | 100.0 | 2 | 0 | 20-80 | opi-bc86698899 |
| aark-developers-aark-terraces | Aark Terraces | AARK | Payment Plan | 0 | 10.0 | 25.0 | 65.0 | 0.0 | 35.0 | 100.0 | 3 | 0 | 40-60 | opi-8f90cffaa1 |
| aark-developers-aark-terraces | Aark Terraces | AARK | 3 Years PH Payment Plan | 1 | 10.0 | 40.0 | 10.0 | 40.0 | 50.0 | 100.0 | 4 | 1 | post-handover | opi-8f90cffaa1 |
| ab-developers-ab-cavalier | AB Cavalier | AB | Payment Plan | 0 | 100.0 | 0.0 | 0.0 | 0.0 | 100.0 | 100.0 | 1 | 0 | paid-before-handover | opi-a09e219b53 |
| ab-developers-ab-cleo | AB Cleo | AB | Payment Plan | 0 | 10.0 | 40.0 | 50.0 | 0.0 | 50.0 | 100.0 | 3 | 0 | 50-50 | opi-9070487ba6 |
| ab-developers-bayview-boulevard | Bayview Boulevard By AB | AB | Payment Plan | 0 | 10.0 | 30.0 | 60.0 | 0.0 | 40.0 | 100.0 | 3 | 0 | 40-60 | opi-3548de78c9 |
effective-price.csv 10 of 2,859 rows
| opi_id | project_id | title | developer | city | community_slug | confidence | headline_price | plan_name | plan_idx | n_priced_plans | months_to_handover | handover_basis | pv_multiplier | effective_price | plan_discount_pct | psf_median | effective_psf | booking_pct | pre_handover_pct | post_handover_pct | tail_months | plan_spread_pct | pv_multiplier_at_3pct | pv_multiplier_at_8pct | flags |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| opi-c6c4a81b87 | 7th-key-nexara-tower | Nexara Tower | 7th Key | Dubai | jumeirah-village-circle | high | 1100000 | 30 Months Post Handover Paymen Plan | 1 | 2 | 18.5 | date | 0.9283 | 1021153 | 7.2 | 1773 | 1646 | 20.0 | 50.0 | 40.0 | 30.0 | 2.3 | 0.9559 | 0.8896 | n/a |
| opi-b23a2deec9 | aa-and-hmb-real-estate-development-havelock-residences | Havelock Residences | AA & HMB | Dubai | al-furjan | high | 625000 | Standard | 0 | 1 | 3.0 | date | 0.9919 | 619913 | 0.8 | n/a | n/a | 20.0 | 60.0 | 0.0 | 0.0 | 0.0 | 0.9951 | 0.987 | n/a |
| opi-1dfe7f89ef | aaa-ocean-tower | Ocean Tower | AAA | Dubai | dubai-islands | high | 1847819 | Payment Plan | 0 | 1 | 6.0 | date | 0.9825 | 1815426 | 1.8 | 2256 | 2217 | 20.0 | 40.0 | 0.0 | 0.0 | 0.0 | 0.9894 | 0.9722 | n/a |
| opi-4c26f5e64c | aabar-properties-lamar-residences | Lamar Residence | Aabar | Abu Dhabi | al-raha-beach | low | 1200000 | Standard | 0 | 1 | 0.0 | past | 1.0 | 1200000 | 0.0 | n/a | n/a | 20.0 | 20.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | handover_past |
| opi-bc86698899 | aark-developers-aark-residences | Aark Residences | AARK | Dubai | dubai-land-residence-complex | low | 842856 | Payment Plan | 0 | 1 | 0.0 | past | 1.0 | 842856 | 0.0 | 1090 | 1090 | 20.0 | 20.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | handover_past |
| opi-8f90cffaa1 | aark-developers-aark-terraces | Aark Terraces | AARK | Dubai | dubai-land-residence-complex | high | 980888 | 3 Years PH Payment Plan | 1 | 2 | 15.0 | date | 0.9294 | 911608 | 7.1 | 1346 | 1251 | 10.0 | 50.0 | 40.0 | 36.0 | 2.3 | 0.9565 | 0.8911 | n/a |
| opi-1ef0b01e26 | aark-developers-karl-lagerfeld-beach-residences | Karl Lagerfeld Beach Residences | AARK | Ras Al Khaimah | al-marjan-island | high | 2800000 | Payment Plan | 0 | 2 | 20.9 | date | 0.9362 | 2621431 | 6.4 | 3532 | 3307 | 0.0 | 50.0 | 0.0 | 0.0 | 0.4 | 0.9611 | 0.9004 | n/a |
| opi-fe7410ada8 | aark-developers-sora-beach-residences | Sora Beach Residences | AARK | Ras Al Khaimah | al-marjan-island | high | 2755000 | Standard | 0 | 1 | 2.0 | date | 0.9931 | 2735917 | 0.7 | 3496 | 3472 | 0.0 | 60.0 | 0.0 | 0.0 | 0.0 | 0.9958 | 0.989 | n/a |
| opi-a09e219b53 | ab-developers-ab-cavalier | AB Cavalier | AB | Dubai | jumeirah-village-circle | low | 610000 | Payment Plan | 0 | 1 | 0.0 | past | 1.0 | 610000 | 0.0 | 1166 | 1166 | 100.0 | 100.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | handover_past |
| opi-9070487ba6 | ab-developers-ab-cleo | AB Cleo | AB | Dubai | jebel-ali | high | 708000 | Payment Plan | 0 | 1 | 8.9 | date | 0.9737 | 689351 | 2.6 | n/a | n/a | 10.0 | 50.0 | 0.0 | 0.0 | 0.0 | 0.9841 | 0.9583 | n/a |
plan-structures.csv 10 of 12 rows
| structure | label | kind | headline | n_plans | n_projects | n_developers | n_communities | n_units | has_page |
|---|---|---|---|---|---|---|---|---|---|
| 90-10 | 90/10 | split | nine tenths of the price is due before keys, the rest on handover | 80 | 74 | 26 | 35 | 1192 | 1 |
| 80-20 | 80/20 | split | four fifths before keys, a fifth on handover | 352 | 318 | 38 | 62 | 3747 | 1 |
| 70-30 | 70/30 | split | seventy before keys, thirty on handover | 277 | 238 | 59 | 61 | 10439 | 1 |
| 60-40 | 60/40 | split | sixty before keys, forty on handover | 614 | 580 | 171 | 100 | 17007 | 1 |
| 50-50 | 50/50 | split | half before keys, half on handover | 467 | 430 | 188 | 89 | 16764 | 1 |
| 40-60 | 40/60 | split | forty before keys, sixty on handover | 353 | 332 | 154 | 79 | 6124 | 1 |
| 30-70 | 30/70 | split | thirty before keys, seventy on handover | 197 | 177 | 101 | 62 | 8164 | 1 |
| 20-80 | 20/80 | split | a fifth before keys, four fifths on handover | 75 | 71 | 44 | 31 | 2868 | 1 |
| post-handover | Post-handover | tail | an instalment still due after the keys are handed over | 480 | 392 | 157 | 78 | 11236 | 1 |
| 1-percent-monthly | 1% monthly | cadence | the price paid down at one percent a month rather than in stage payments | 117 | 88 | 49 | 31 | 4524 | 1 |
pipeline.csv 10 of 1,009 rows
| delivery_quarter | community | community_slug | city | n_projects | n_priced_units |
|---|---|---|---|---|---|
| Q3 2025 | Al Furjan | al-furjan | Dubai | 1 | 23 |
| Q3 2025 | Al Jaddaf | al-jaddaf | Dubai | 1 | 0 |
| Q3 2025 | Al Reem Island | al-reem-island | Abu Dhabi | 1 | 0 |
| Q3 2025 | Dubai Hills Estate | dubai-hills-estate | Dubai | 1 | 0 |
| Q3 2025 | Dubai Land Residence Complex | dubai-land-residence-complex | Dubai | 1 | 11 |
| Q3 2025 | Dubai Media City | dubai-media-city | Dubai | 1 | 3 |
| Q3 2025 | Dubai Studio City | dubai-studio-city | Dubai | 1 | 11 |
| Q3 2025 | Jumeirah Golf Estates | jumeirah-golf-estates | Dubai | 1 | 3 |
| Q3 2025 | Jumeirah Park | jumeirah-park | Dubai | 1 | 0 |
| Q3 2025 | Jumeirah Village Circle | jumeirah-village-circle | Dubai | 5 | 41 |
bedroom-benchmarks.csv 10 of 1,012 rows
| group_kind | group_slug | group_name | bedroom | n_records | psf_median | price_median | size_median |
|---|---|---|---|---|---|---|---|
| community | academic-city | Academic City | 3 BR | 18 | 1541 | 3700000 | 2400 |
| community | academic-city | Academic City | 4 BR | 223 | 1589 | 4420000 | 2775 |
| community | academic-city | Academic City | 5+ BR | 219 | 1851 | 6257000 | 3700 |
| community | ajman-downtown | Ajman Downtown | 2 BR | 155 | 572 | 1137174 | 1996 |
| community | al-ameera-village | Al Ameera Village | 1 BR | 55 | 558 | 650228 | 1165 |
| community | al-ameera-village | Al Ameera Village | 2 BR | 49 | 498 | 970194 | 1948 |
| community | al-amerah | Al Amerah | 1 BR | 247 | 511 | 616000 | 1197 |
| community | al-amerah | Al Amerah | 2 BR | 72 | 504 | 663615 | 1179 |
| community | al-bahya | Al Bahya | 4 BR | 79 | 1975 | 8935466 | 4309 |
| community | al-bahya | Al Bahya | 5+ BR | 14 | 2100 | 11167384 | 5318 |
An empty cell means the value is unknown, never zero. These ten rows are the head of the same file the licensed bundle ships, in the same column order, taken in id or slug order rather than ranked, so nothing here is cherry picked toward the expensive end of the table.
The sync contract
Every call is signed HMAC-SHA256 over the method, the path, the sorted query string and the timestamp, using the secret issued with the key. The signature goes in x-opi-signature, the key id in x-opi-key-id, and the timestamp used in the signature in x-opi-timestamp.
Example request, obviously fake secret
GET https://offplanindex.com/api/v1/sync?limit=500&since=b3Q9MTAw
x-opi-key-id: opi_live_4f2a9c
x-opi-timestamp: 1788512000
x-opi-signature: b3f1c9a7d4e6082f1a5c7e9b0d2f4681c3e5a7091f2b4d6c8e0a1b3c5d7e9f01Secret shown: sk_EXAMPLE_NOT_A_REAL_SECRET_00000000, a placeholder. A real key is issued per organisation and never appears on this page.
Example response, three real projects
{
"data": {
"records": [
{
"id": "marquis-elegance-20-20",
"title": "Marquis Elegance",
"developer": "20/20",
"developer_slug": "20-20",
"community": "Arjan",
"community_slug": "arjan",
"city": "Dubai",
"starting_price": 1055634,
"delivery_quarter": "Q2 2025",
"delivery_year": 2025,
"sale_status": "sold_out",
"construction_status": "completed",
"property_types": "apartment",
"bedrooms": "1,2,3",
"n_units": 8,
"n_plans": 1,
"updated_at": "2026-09-04",
"content_hash": "7a1e9c3f5b2d8061"
},
{
"id": "wellington-ocean",
"title": "Wellington Ocean",
"developer": "Wellington",
"developer_slug": "wellington",
"community": "Dubai Islands",
"community_slug": "dubai-islands",
"city": "Dubai",
"starting_price": 2152750,
"delivery_quarter": "Q4 2026",
"delivery_year": 2026,
"sale_status": "on_sale",
"construction_status": "under_construction",
"property_types": "apartment,duplex",
"bedrooms": "1,2",
"n_units": 14,
"n_plans": 1,
"updated_at": "2026-09-04",
"content_hash": "e4b6081a2c9f7d35"
},
{
"id": "nifco-esplora",
"title": "Esplora",
"developer": "NiFCO",
"developer_slug": "nifco",
"community": "Jumeirah Village Circle",
"community_slug": "jumeirah-village-circle",
"city": "Dubai",
"starting_price": 695000,
"delivery_quarter": "Q4 2025",
"delivery_year": 2025,
"sale_status": "on_sale",
"construction_status": "completed",
"property_types": "apartment",
"bedrooms": "0,1,2",
"n_units": 20,
"n_plans": 1,
"updated_at": "2026-09-04",
"content_hash": "1f6a3e8c5d9b0247"
}
],
"tombstones": [
"al-marasi-tower-b"
],
"next_cursor": "b3Q9NjAw",
"schema_version": 1,
"build_date": "2026-10-02"
},
"meta": {
"license": "See /data-policy. Aggregate data only, no listing text or images."
}
}next_cursor is opaque and always points just past the last entry returned. The walk is finished when a page comes back with empty records and empty tombstones; keep that cursor and send it again on the next schedule, and new data lands after it. A record listed in tombstones has left the off-plan book (sold out and delisted, or merged into another id) and should be deleted from the client’s own store, not merely skipped. A record absent from both records and tombstones on a given page is simply outside that page’s cursor window, not gone. schema_version only changes when a field is renamed or removed, so a client can trust it holds across an ordinary refresh.
Try it first
- 14 days. The key stops working at the end of day 14, evaluation or not.
- Scoped to sync. The key only opens
GET /v1/sync, not the full/v1surface. - 500 records per call. Same page size cap as the paid licence, so an evaluation client is tested against the real pagination.
- A total cap for the 14 days. Enough calls to page the whole corpus more than once, not enough to run a production integration on for free.
Issued by hand, not self-serve: say what you are integrating and we send a key scoped exactly as above.
Why you can check us instead of trusting us
We have no customers to quote, and we are not going to invent one.
This is a new product. There is no logo wall here, no “trusted by” strip and no testimonial, because there is nothing true to put in one yet. What follows is the argument we would rather you judged us on anyway: you can check the numbers instead of trusting them.
Load the schema before you pay for it.
The sample files on this page carry the licensed columns, so the shape is testable in ten minutes.
Most of the corpus is already published, free, on this site.
168 community pages and 392 developer pages are built from the same tables the paid products ship. Pick a community you know well and check the median against your own comparables before you spend anything.
Every figure states the base it was computed on.
A median taken over thirty records and a median taken over three thousand are not the same claim, so the count sits next to the number rather than being left out of it. A thin sample is visible instead of hidden, and anything under the evidence floor is not ranked at all.
The method is written down, including what is wrong with it.
Methodology names the validation bands, the exclusions and the known gaps. The data policy names what we will never publish and why. Both were written to be argued with.
The corpus is countable, and its dates are on the page.
4,045 records across 231 communities and 681 developers, of which 52,882 priced unit records clear every plausibility check and are allowed inside a published benchmark. Sources read to 30 July 2026, merged 18 August 2026, built 2 October 2026.
What you are risking
- The schema is testable before the first charge. The sample files on this page are the licensed columns on a slice of the rows, taken evenly across each table rather than off the top of it.
- First month refunded in full, for 14 days. If the bundle does not match the published schema, or the tables are materially not as described here.
- A month with no new build is credited if you ask for it. The data build is run by hand, so we do not promise a fixed refresh interval. Instead: if a calendar month passes and no newly dated bundle appeared, tell us and we credit that month. Every bundle carries its three dates, so this is checkable from your side rather than ours.
- Cancel any month. Access to new bundles ends at the end of the paid month. What you may keep doing with bundles you already hold is written down on the licence page, in full, for the person in your firm who has to read it.
- Who answers. One person reads hello@offplanindex.com and answers within one business day. There is no ticket system and no queue.
The same terms in legal form are on the terms page, and the licence itself is at /licence. If the two ever disagree, the more generous one applies.
Questions
What exactly do we receive?
The eight derived tables listed on this page as CSV and JSON, delivered as a dated bundle you download the moment checkout completes, from a receipt page that serves the newest build there is. The bundle currently served is the 2026-10 build. An HTTPS endpoint returning the same JSON is available on request at no extra cost.
How often is it refreshed?
Builds are dated, not scheduled. The corpus is rebuilt by a person rather than by a cron job, so we will not claim a fixed interval we have nothing to enforce. Every bundle carries the date its sources were read, the date the corpus was merged and the date the tables were computed, so you can always see what you are holding. If a calendar month passes with no newly dated bundle, tell us and we credit that month.
Is this a copy of a portal database?
No. Every table is an aggregate or a project-level fact table computed by us. There are no listing records, no descriptions, no images and no portal URLs in the bundle. See the data policy.
Can we publish the numbers?
Use inside your organisation and inside your own products is included, with attribution. Redistributing or reselling the tables as data is not, and neither is serving them row by row through your interface until someone outside your organisation holds the table. The full terms, including what survives cancellation, are on the licence page.
What if the data is not what we need?
Check before you pay: the sample files on this page have the same columns as the licensed tables, so your engineer can load them and see the shape in ten minutes. If you subscribe and the delivered bundle does not match that schema, or the tables are materially not what this page describes, write to hello@offplanindex.com within 14 days of the first charge and we refund that month in full. After the first month, cancel any time from the billing portal: access to new bundles stops at the end of the paid month, and the licence to use bundles you already hold is set out on the licence page rather than being left to a sentence in an FAQ.
How do we cancel?
Any time from the Stripe billing portal link on your receipt. Access to new bundles ends at the end of the paid month. What you may keep doing with bundles you already hold is clause 8 of the licence.
Only need the numbers once? The Q3 2026 report ships the same tables as a one-off CSV bundle with the PDF, 79 USD. The full terms for the licence are at /licence.