The median asking rent for a 1-bedroom apartment in Dubai Marina on Property Finder this week is AED 100,000 a year. The newest new leases on 1-bedrooms in Dubai Marina, registered in early August, were signed at a median AED 80,000 a year. That is a gap of 25.0%, and it is the kind of number you only see when you put listings and contracts side by side.
So I did that for ten of Dubai's busiest rental areas, for 1- and 2-bedroom apartments, with Python. The question was simple: how far above the market do Dubai landlords list, and is it the same everywhere? The short answer is that the median asking rent was higher than the median signed rent in every one of the 20 cases, by a median of 14.0% for 1-bedrooms and 20.5% for 2-bedrooms, and the areas where the gap is widest are not the ones I expected.
The data
Everything comes from the Property Finder API, which returns Property Finder search results and Dubai lease records as JSON. On 3 and 4 November 2026 I made three kinds of calls per area:
-
/autocomplete-locationto turn "Dubai Marina" into Property Finder's location ID (50). -
/search-rentfor the newest yearly rental listings, apartments only, one call per bedroom count and page. Two pages gave me 66 usable listings per area and bedroom count, 1,320 in total. -
/get-transactionswithtransaction_type=rentedandsort=newestfor registered lease contracts. Each row has astatus(New or Renewed), the contract dates,price,price_per_sqftandproperty_size. I took the first three pages, the 45 newest contracts per area and bedroom count: 899 contracts, 513 new leases and 386 renewals, out of 19,243 registered in the six-month window.
The ten areas are Dubai Marina, Downtown Dubai, Palm Jumeirah, Business Bay, Jumeirah Village Circle (JVC), Dubai Hills Estate, Emaar Beachfront, Dubai Silicon Oasis, Al Barsha and Jumeirah Lake Towers (JLT). That was 111 calls in all (one extra to test a shorter period), each one cached to disk so the analysis can be re-run for free.
The code
This is the core of it. It needs requests and a RapidAPI key in RAPIDAPI_KEY, and it prints one row per area and bedroom count.
import os import statistics import requests HOST = "uae-real-estate-property.p.rapidapi.com" HEADERS = {"x-rapidapi-host": HOST, "x-rapidapi-key": os.environ["RAPIDAPI_KEY"]} def get(path, **params): r = requests.get("https://" + HOST + path, params=params, headers=HEADERS, timeout=120) r.raise_for_status() return r.json() def location_id(name): found = get("/autocomplete-location", query=name)["data"] exact = [x for x in found if x["name"].lower() == name.lower()] return (exact or found)[0]["id"] def yearly_rent(lease): # "price" is the whole contract, which can run 13 months or two years. # price_per_sqft is per month, so this is the rent for one year. return lease["price_per_sqft"] * 12 * lease["property_size"] def asking_vs_signed(name, bedrooms, pages=2, lease_pages=3): loc = location_id(name) asking = [] for page in range(1, pages + 1): listings = get("/search-rent", location_id=loc, property_type="apartment", bedrooms=bedrooms, rent_frequency="yearly", sort="newest", page=page)["data"] # New-project cards come back too, with a sale price and no "value": skip them. asking += [x["price"]["value"] for x in listings if (x["price"] or {}).get("value") and x["price"].get("period") == "yearly"] new, renewed = [], [] for page in range(1, lease_pages + 1): leases = get("/get-transactions", location_id=loc, transaction_type="rented", property_type="apartment", bedrooms=bedrooms, period="6m", sort="newest", page=page)["data"]["data"]["attributes"]["transactions"] new += [yearly_rent(t) for t in leases if t["status"] == "New"] renewed += [yearly_rent(t) for t in leases if t["status"] == "Renewed"] asking_median, new_median = statistics.median(asking), statistics.median(new) return { "area": name, "bedrooms": bedrooms, "listings": len(asking), "new_leases": len(new), "asking_median": asking_median, "signed_new_median": round(new_median), "signed_renewal_median": round(statistics.median(renewed)), "gap_pct": round((asking_median / new_median - 1) * 100, 1), } for area in ["Dubai Marina", "Downtown Dubai", "Jumeirah Village Circle"]: for beds in (1, 2): print(asking_vs_signed(area, beds)) The full version, with caching, the duplicate check and the chart output, is a longer copy of the same idea. Two choices in it matter more than the rest: yearly_rent() instead of the raw price, and period="6m", not "3m". The pitfalls section explains both.
Asking rent is higher everywhere, by about a seventh
I compare medians with medians, so that a few very expensive flats on either side do not set the result. Across the ten areas, the median gap for 1-bedroom flats is 14.0%. For 2-bedroom flats it is 20.5%. The median asking rent was above the median signed new-lease rent in all 20 area and bedroom pairs.
For 1-bedroom flats, the widest gaps are on the waterfront: Dubai Marina at 25.0%, Palm Jumeirah at 23.1% and Emaar Beachfront at 21.7%. The narrowest are Downtown Dubai (4.5%) and Dubai Silicon Oasis (10.2%). Downtown surprised me. Its 1-bedroom landlords list closest to what tenants pay, AED 115,000 asked against AED 110,000 signed, yet its 2-bedroom gap is one of the widest.
Two-bedroom flats spread out more. JLT lists 42.8% above signed rents, Emaar Beachfront 37.7% and Downtown Dubai 36.7%. At the other end, Al Barsha lists only 2.0% above: AED 100,000 asked against AED 98,000 signed, although that signed figure rests on only 12 new leases. If you rent a 2-bedroom in Al Barsha, the listing price looks close to the market price. In JLT, it is a starting point for negotiation.
| Area | 1-bed asking (AED) | 1-bed signed (AED) | 1-bed gap | 2-bed gap |
|---|---|---|---|---|
| Dubai Marina | 100,000 | 80,000 | +25.0% | +15.4% |
| Downtown Dubai | 115,000 | 110,000 | +4.5% | +36.7% |
| Palm Jumeirah | 159,995 | 130,000 | +23.1% | +17.9% |
| Business Bay | 90,000 | 81,000 | +11.1% | +16.9% |
| JVC | 75,000 | 62,500 | +20.0% | +26.8% |
| Dubai Hills Estate | 97,500 | 85,000 | +14.7% | +23.1% |
| Emaar Beachfront | 140,000 | 115,000 | +21.7% | +37.7% |
| Dubai Silicon Oasis | 65,000 | 59,000 | +10.2% | +11.2% |
| Al Barsha | 69,500 | 62,000 | +12.1% | +2.0% |
| JLT | 85,000 | 75,000 | +13.3% | +42.8% |
Asking is the median yearly rent of the 66 newest listings per area and bedroom count, collected on 3 November 2026. Signed is the median yearly rent of the new leases among the 45 newest registered contracts (12 to 40 new leases per pair), mostly from late July and early August 2026.
My first guess was supply: more listings per lease should mean landlords who wait longer and list higher. I checked it by dividing each area's listing count by its lease count and comparing that with the gap. The correlation is -0.02, which is nothing. Dubai Silicon Oasis has 641 1-bedroom listings for 2,244 leases in the window, the tightest market in the sample, and still has one of the smallest gaps. Whatever drives the gap, it is not simply how many flats are on the market.
Renewals follow no single rule
The same rows carry renewals, which makes a second comparison possible: do sitting tenants pay more or less than new ones?
It depends on the area. For 1-bedroom flats, the median renewal is 21.2% above the median new lease in Palm Jumeirah and 4.4% above in Dubai Marina. It is 17.8% below in Dubai Silicon Oasis and 7.4% below in Business Bay. Across all 20 pairs, renewals were above new leases in 9, below in 10 and level in one. The biggest renewal premium is a 1-bedroom on Palm Jumeirah, where renewals have a median of AED 157,500 against AED 130,000 for new leases. The biggest discount is a 2-bedroom in Al Barsha, 18.5% below.
Dubai ties renewal increases to the official rental index, so a tenant who moved in years ago often pays less than a newcomer. That fits the cheaper renewals in Dubai Silicon Oasis and Al Barsha, where renewals make up most of the newest contracts. Keep in mind that these are different flats, not the same flat before and after: a higher renewal median can simply mean that the renewing flats are bigger or in better buildings, and some pairs have only 5 to 9 renewals. For a monthly view of new leases against renewals across all of Dubai, see the October 2026 Dubai rent report. It shows the median new-lease rent down 8.6% on a year earlier.
What surprised me, and the pitfalls in this data
The lease summary averages whole contracts. /get-transactions also returns a summary block with rent_new_avg_price and rent_renew_avg_price. They look like a ready answer, but they average price, and price is the value of the whole contract: a two-year lease counts at twice its yearly rent, a 13-month lease at 13 months. In my 899 rows, 28 contracts were not 12 months long, 4 of them two years. So I ignored the summary and turned each row into a yearly rent with price_per_sqft * 12 * property_size (price_per_sqft is per month).
period=3m gives you about two days. The lease records in /get-transactions run roughly three months behind: on 3 November the newest contract in my sample was dated 4 August 2026. Ask for the last three months and you get only the contracts from the first days of August: 48 for a 1-bedroom in Dubai Marina, against 1,578 for six months. Always check the newest transaction_date before you choose a period.
Asking and signed rents come from different months. The listings are from November and the newest leases mostly from late July and early August, so part of the gap could be the market moving. It probably isn't much: new-lease rents in Dubai fell over the past year rather than rose. Still, read the gaps as "asking now against signed recently", not as a same-day comparison.
Rent searches return sale prices. 100 of the 1,420 rows that /search-rent returned were new-project cards, with a price like {"down_payment_percentage": 20, "from": 1450000} instead of a yearly rent. Average them in and Al Barsha looks very expensive. Keep only rows where price.value exists and price.period is yearly, as the code does.
Means and medians tell different stories. Listings have a long tail: a 2-bedroom on Palm Jumeirah asks AED 284,757 on average and AED 229,999 at the median. Leases have outliers too: one 1-bedroom in JVC is registered at AED 600,000 a year, almost ten times the median. Compare means instead of medians and the gaps become 12.0% for 1-bedrooms and 24.8% for 2-bedrooms, and JVC 1-bedrooms flip to -7.0%. Use medians, or look at the rows before you average them.
The same flat appears more than once. 89 of the 1,320 listings shared a building, a size and a price with another listing, usually the same flat listed by two agents. Dubai Silicon Oasis had the most: 18 among its 66 2-bedroom listings. That moves an average a little; it matters more if you count supply.
Some areas have few contracts. Al Barsha had only 44 1-bedroom and 52 2-bedroom leases (new and renewed) in the whole window, against thousands in JVC, so its newest contracts reach back to May. In Al Barsha and Dubai Silicon Oasis, renewals also outnumber new leases, which leaves only 12 to 15 new leases per pair. A gap measured on 12 leases is a hint, not a finding.
What I would do next
The next step is to match listings to contracts building by building: each listing's location_tree ends with the building, and each lease row carries a location_name for the building. That would compare a flat with its neighbours instead of with the whole area. I would also pull more lease pages per area, and re-run this in February, when the lease records reach November, to compare asking and signed rents for the same months.
If you only need the area figures, the Dubai Marina rent page and the other area pages on UAEPropertyAPI update them every month. Every endpoint used here is documented in the Happy Endpoint reference for this API, the GitHub repo has more examples, and there is a product overview on LinkedIn. Keys come from the RapidAPI listing. If you would rather have the full lease history as a file, there is a Dubai transactions dataset, or get in touch.





