Query real-time UAE property data from your terminal. Listings, recorded transactions, and rental yields, as tables or JSON.
npx happyendpoint-cli yields jvc "dubai marina" "palm jumeirah"Gross and net rental yield, 1 bed apartments
Area Gross Net Median sale Median rent Sample
----------------------------- ----- ----- ------------- ----------- ------
Jumeirah Village Circle (JVC) 7.87% 4.64% AED 890,000 AED 69,999 50
Dubai Marina 6% 3.49% AED 1,500,000 AED 90,000 50
Palm Jumeirah 3.78% 1.97% AED 3,700,000 AED 140,000 50
Asking prices, not transactions. Net uses default holding costs.
Built by Happy Endpoint on the happyendpoint client.
export RAPIDAPI_KEY=your_keyGet a key at rapidapi.com/user/happyendpoint. There is a free tier.
Run without installing:
npx happyendpoint-cli search "dubai marina" --beds 1Or install globally:
npm install -g happyendpoint-cli
happyendpoint search "dubai marina" --beds 1Node 18 or newer.
happyendpoint search "dubai marina" --beds 1 --max 1500000Dubai Marina (id 5003)
365 matching, showing 25, median AED 1,249,000
Title Price Bed Area Per sqm Verified
------------------------------------------ ------------- --- ------- ---------- --------
Incredible Value | Unfurnished | Vacant No AED 1,230,000 1 55sqm AED 22,364 yes
EMAAR | High ROI | Partially Upgraded AED 1,500,000 1 78.2sqm AED 19,176 yes
Rentals with --rent. Prices are annual.
happyendpoint search jvc --rent --beds 2Gross and net rental yield, ranked. Defaults to the main Dubai investment areas if you name none.
happyendpoint yields
happyendpoint yields jvc "business bay" --beds 2What property actually sold for, unlike search which shows asking prices.
happyendpoint transactions jvc --period 12m20 transactions over 12m
Date Amount Area Bed Per sqm Type
---------- ------------- ------ --- ---------- ----------
2026-08-11 AED 623,618 45sqm 0 AED 13,724 First Sale
2026-08-11 AED 1,050,000 68sqm 1 AED 15,360 First Sale
2026-08-11 AED 620,000 60sqm 1 AED 10,411 Resale
"First Sale" is a developer selling new stock. "Resale" is an owner selling on.
happyendpoint locations "business bay"Name ID Listings
-------------------------------------------- ----- --------
Business Bay 5093 23,949
Peninsula 19212 1,142
Aykon City 8692 1,018
You rarely need this. Every other command takes an area name and resolves it.
happyendpoint agents "dubai marina"Lists the available APIs and where to subscribe. The only command that needs no key.
happyendpoint apis| Flag | Meaning |
|---|---|
--beds N |
Bedrooms. 0 is a studio |
--min / --max |
Price range in AED. Underscores and commas allowed |
--type |
apartments, villas, townhouses |
--rent |
Rentals instead of sales |
--period |
3m, 6m, 12m, 24m. Transactions only |
--page N |
Result page |
--limit N |
Max results, locations only |
--json |
Machine-readable output |
Every command takes --json, so it composes with jq and friends:
happyendpoint yields jvc --json[
{
"area": "Jumeirah Village Circle (JVC)",
"locationId": "5416",
"medianSalePrice": 890000,
"medianAnnualRent": 69999,
"grossYieldPct": 7.87,
"sampleSize": 50,
"netYieldPct": 4.64
}
]# Highest-yielding area, name only
happyendpoint yields --json | jq -r '.[0].area'
# Everything under AED 1M with a verified listing
happyendpoint search jvc --json | jq '.properties[] | select(.price < 1000000 and .verified)'
# Price per sqm, as CSV
happyendpoint transactions jvc --json | jq -r '.[] | [.date, .pricePerSqm] | @csv'The underlying API takes numeric location ids, and a wrong one returns a different area rather than an error. Every command here takes a name, resolves it, and prints what it matched:
Dubai Marina (id 5003)
If the name is ambiguous it picks the busiest match, which is almost always the
community rather than a building sharing the name. Use locations to see the
alternatives.
No. The free RapidAPI tier covers normal use. A full yields run makes two
requests per area.
Because gross ignores service charges, management, maintenance, and vacancy. In Dubai those typically remove 2 to 3 percentage points. The defaults here are realistic rather than flattering.
transactions. search shows asking prices, which run higher than what
property actually sells for.
No, annual. These portals quote yearly rent.
Yes, that is what --json is for. Exit code is non-zero on failure.
- happyendpoint-js - the TypeScript client this is built on
- happyendpoint-python - Python client
- happyendpoint-mcp - MCP server for Claude and Cursor
- bayut-api - endpoint documentation
- dubai-rental-yield-calculator - a standalone Python version of the yield tool
Happy Endpoint is an independent provider. This project is not affiliated with, endorsed by, sponsored by, or connected to any of the websites, platforms, retailers, or marketplaces referenced here or reachable through the underlying APIs.
All product names, brands, trademarks, and registered trademarks are the property of their respective owners. Any reference to them is descriptive only, to identify the subject matter of the data, and does not imply any association or endorsement.
Users are responsible for ensuring their use of any data complies with applicable laws and the terms of service of the relevant source.
Happy Endpoint builds and maintains real-time data APIs for property portals, retailers, and marketplaces. All APIs are available on RapidAPI with a free tier.
- Catalogue: happyendpoint.com/library
- Datasets: happyendpoint.com/datasets
- Documentation: docs.happyendpoint.com
- Contact: happyendpointhq@gmail.com
MIT. See LICENSE.