Market Intelligence
Dubai real estate — live signals & alpha scoring
DLD Transactions
—
Loading...
Avg Yield (JVC)
—
↑ Best in Dubai
UAE Pop Growth
—
World Bank
SOFR Rate
—
FRED API
Price Trend — Dubai vs Key Districts
Top Alpha Opportunities
Silicon Oasis — Tower A
CO-LIVING · 45 SQM
AED 680K
BUY
JVC — The Pulse
1BR · 68 SQM
AED 850K
BUY
Expo City — Park Lane
STUDIO · 42 SQM
AED 590K
HOLD
Meydan Horizon — H1
2BR · 112 SQM
AED 1.4M
ROTATE
Dubai Marina — Wave
1BR · 78 SQM
AED 1.2M
SELL
Yield by District
Market Sentiment (NLP)
📊
Loading...
— / 100
SIGNALS DETECTED
—
Data Sources Active
DLD Transactions
● LIVE
World Bank API
● LIVE
FRED (SOFR)
● LIVE
OpenStreetMap
● LIVE
NewsAPI
◐ KEY NEEDED
REIDIN
○ PAID TIER
Valuation Engine
Scientific Alpha Score — multi-factor property analysis
Property Parameters
Alpha Score
—
ALPHA
● AWAITING INPUT
FAIR VALUE
—
NET YIELD
—
5Y IRR EST.
—
CONFIDENCE
—
Factor Breakdown
Location—
Property—
Market—
Macro—
Sentiment—
5-Year Forecast
LSTM-powered time series projection — select district to model
Metro Blue Line premium: 60%
Price Projection (AED/sqft)
Year-by-Year Model Output
YEAR
GROWTH FACTOR
PRICE
IRR
Scenario Analysis — Monte Carlo Variables
OIL PRICE IMPACT
0% price sensitivity
GOLDEN VISA VOLUME
0% demand shift
INTEREST RATE SHIFT
0bps rate change
Data Sources
Live API connections powering the valuation engine
Dubai Land Department
LIVE
api.dubairest.com/v1/transactions
FREE TIER
REGISTRATION REQ.
World Bank API
LIVE
api.worldbank.org/v2/country/AE/indicator
FREE · NO KEY
FRED — Federal Reserve
LIVE
api.stlouisfed.org/fred/series/observations
FREE API KEY
OpenStreetMap (Overpass)
LIVE
overpass-api.de/api/interpreter
FREE · NO KEY
RERA Rental Index
LIVE
dubailand.gov.ae/en/open-data
FREE DOWNLOAD
NewsAPI.org
KEY NEEDED
newsapi.org/v2/everything?q=Dubai+real+estate
FREE 100 REQ/DAY
REIDIN
PAID TIER
api.reidin.com/v3/ae/transactions
~$500/MONTH
Ejari (Rental Registry)
REGISTRATION
dubairest.com/ejari/v1/registrations
BUSINESS ACCOUNT
Data Validation
Anomaly detection, cross-source verification, confidence scoring
Records Ingested
24,891
Today
Anomalies Flagged
47
0.19% flag rate
Quarantined
12
Excluded from model
Recent Anomaly Flags
⚠
PRICE OUTLIER — 3.2σ
Transaction in Dubai Marina recorded at AED 28,400/sqft vs area avg AED 2,100/sqft. Quarantined — likely related-party transfer or data entry error.
⚠
TEMPORAL SPIKE — 38% MoM
JVC Area B showed 38% price jump in 30 days. Cross-checking with Ejari occupancy data — possible bulk transaction not retail.
⚠
SOURCE CONFLICT
RERA rental index shows AED 65K/yr for Silicon Oasis 1BR. Ejari records show median AED 52K. 20% discrepancy — using Ejari (actual contracts) as primary.
ℹ
47 transactions tagged as "gift" or "mortgage settlement" — excluded from market rate baseline. These distort the fair value calculation.
Confidence Score Logic
Sources Agreeing
HIGH
HIGH
5+ sources
50+ comps
5+ sources
50+ comps
MED
2-3 sources
10-50 comps
2-3 sources
10-50 comps
LOW
1 source
<10 comps
1 source
<10 comps
Validation Layers Active
✓Statistical anomaly detection (2σ threshold)
✓Cross-source verification (DLD × Ejari × RERA)
✓Temporal consistency check (MoM spike >25%)
✓Transaction type filtering (gifts, distressed sales)
✓Winsorization at 95th percentile
◐ML-based fraud pattern detection (beta)
API Setup Guide
Step-by-step integration for every data source
DLD / Dubai REST
World Bank
FRED / SOFR
OpenStreetMap
NewsAPI
Full Stack
Step 1 — Register at Dubai REST
ℹ
Go to dubairest.com → Register as developer → Submit your trade license or personal ID. Approval takes 1-3 business days. This gives access to DLD transactions, Ejari, and RERA rental index APIs.
Step 2 — Fetch DLD Transactions (Python)
# Install: pip install requests pandas python-dotenv
import requests, os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("DLD_API_KEY")
# Fetch recent sales transactions
response = requests.get(
"https://api.dubairest.com/v1/transactions",
headers={"Authorization": f"Bearer {API_KEY}"},
params={
"type": "sales",
"from_date": "2024-01-01",
"area": "JVC",
"page_size": 100
}
)
data = response.json()
# data["transactions"] → list of {price, sqft, beds, floor, date, ...}
Step 3 — Anomaly Detection on Ingestion
import pandas as pd
import numpy as np
df = pd.DataFrame(data["transactions"])
df["price_per_sqft"] = df["price"] / df["sqft"]
# Flag 2-sigma outliers
mean = df["price_per_sqft"].mean()
std = df["price_per_sqft"].std()
df["anomaly"] = (df["price_per_sqft"] - mean).abs() > 2 * std
# Winsorize at 95th percentile
cap = df["price_per_sqft"].quantile(0.95)
df["price_per_sqft_clean"] = df["price_per_sqft"].clip(upper=cap)
# Exclude gifts/related-party
df = df[df["transaction_type"] == "sale"]
clean = df[~df["anomaly"]]
World Bank API — No Key Required
ℹ
The World Bank API is completely open. No registration needed. Call directly and parse JSON.
import requests
# UAE Population Growth Rate (SP.POP.GROW)
url = "https://api.worldbank.org/v2/country/AE/indicator/SP.POP.GROW"
r = requests.get(url, params={"format": "json", "mrv": 5})
pop_data = r.json()[1] # Last 5 years
# UAE GDP Growth (NY.GDP.MKTP.KD.ZG)
url2 = "https://api.worldbank.org/v2/country/AE/indicator/NY.GDP.MKTP.KD.ZG"
r2 = requests.get(url2, params={"format": "json", "mrv": 1})
gdp = r2.json()[1][0]["value"]
# Useful indicators for Dubai RE:
# SP.POP.TOTL → Total population
# NY.GDP.PCAP.CD → GDP per capita
# FP.CPI.TOTL.ZG → Inflation rate
# BX.KLT.DINV.CD.WD→ FDI inflows
FRED API — SOFR & Interest Rates
ℹ
Register free at fred.stlouisfed.org/docs/api → Get API key instantly → Store in .env file.
import requests, os
FRED_KEY = os.getenv("FRED_API_KEY")
# SOFR (Secured Overnight Financing Rate)
r = requests.get(
"https://api.stlouisfed.org/fred/series/observations",
params={
"series_id": "SOFR",
"api_key": FRED_KEY,
"file_type": "json",
"limit": 1,
"sort_order": "desc"
}
)
sofr = float(r.json()["observations"][0]["value"])
# Other useful series:
# FEDFUNDS → US Fed Funds Rate
# DCOILWTICO → WTI Crude Oil Price
# DTWEXBGS → USD Trade-Weighted Index
OpenStreetMap — Metro Proximity
import requests, math
# Query all Dubai Metro stations
overpass_query = """
[out:json];
node["railway"="station"]["network"="Dubai Metro"]
(24.7,54.9,25.4,55.6);
out body;
"""
r = requests.post(
"https://overpass-api.de/api/interpreter",
data=overpass_query
)
stations = r.json()["elements"]
# → [{lat, lon, tags.name}, ...]
def nearest_metro_km(prop_lat, prop_lon, stations):
def haversine(lat1, lon1, lat2, lon2):
R = 6371
dlat = math.radians(lat2-lat1)
dlon = math.radians(lon2-lon1)
a = math.sin(dlat/2)**2 + math.cos(math.radians(lat1)) * \
math.cos(math.radians(lat2)) * math.sin(dlon/2)**2
return R * 2 * math.asin(math.sqrt(a))
dists = [haversine(prop_lat, prop_lon, s["lat"], s["lon"])
for s in stations]
return min(dists)
NewsAPI — Sentiment Analysis
# pip install newsapi-python textblob
from newsapi import NewsApiClient
from textblob import TextBlob
NEWS_KEY = os.getenv("NEWS_API_KEY")
api = NewsApiClient(api_key=NEWS_KEY)
# Search Dubai real estate news
articles = api.get_everything(
q="Dubai real estate property",
language="en",
sort_by="publishedAt",
page_size=50
)
# NLP Sentiment Scoring
scores = []
for article in articles["articles"]:
blob = TextBlob(article["title"] + " " + (article["description"] or ""))
scores.append(blob.sentiment.polarity) # -1 to +1
sentiment_score = sum(scores) / len(scores)
# > 0.2 → Bullish market sentiment
# -0.2 to 0.2 → Neutral
# < -0.2 → Bearish / negative news cycle
Full System Architecture
ℹ
Recommended stack: Python (FastAPI) backend → Supabase PostgreSQL → Scheduled cron jobs for data ingestion → This HTML dashboard as frontend.
# .env file — never commit this to git
DLD_API_KEY=your_dubai_rest_key_here
FRED_API_KEY=your_fred_key_here
NEWS_API_KEY=your_newsapi_key_here
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_KEY=your_supabase_anon_key
──────────────────────────────────────────
# Supabase Tables Needed:
-- transactions (from DLD)
CREATE TABLE transactions (
id UUID PRIMARY KEY,
area TEXT, price NUMERIC, sqft NUMERIC,
price_per_sqft NUMERIC, beds INT,
transaction_date DATE, is_anomaly BOOLEAN,
source TEXT DEFAULT 'DLD'
);
-- macro_indicators (World Bank + FRED)
CREATE TABLE macro_indicators (
id UUID PRIMARY KEY,
indicator TEXT, value NUMERIC,
date DATE, source TEXT
);
-- sentiment_scores (NewsAPI + TextBlob)
CREATE TABLE sentiment_scores (
id UUID PRIMARY KEY,
score NUMERIC, label TEXT,
article_count INT, fetched_at TIMESTAMPTZ
);
──────────────────────────────────────────
# Cron schedule (run on server):
# DLD transactions → every 6 hours
# World Bank → daily
# FRED SOFR → daily
# NewsAPI sentiment → every 3 hours
# OSM Metro data → weekly
Portfolio View
Aggregate IRR, combined yield, rotation signals
Portfolio AUM
AED 8.2M
↑ 12.4% YTD
Avg Net Yield
6.8%
4 assets
5Y IRR Proj.
19.2%
Blended
Rotate Signal
1
Marina unit
Holdings
| PROPERTY | DISTRICT | VALUE (AED) | YIELD | ALPHA | SIGNAL | CONF. |
|---|---|---|---|---|---|---|
| Silicon Oasis Tower A · 3F | Silicon Oasis | 680,000 | 7.2% | 78 | BUY | HIGH |
| JVC The Pulse · 8F | JVC | 850,000 | 6.9% | 74 | BUY | HIGH |
| Expo City Park Lane · 2F | Expo City | 590,000 | 6.1% | 61 | HOLD | MED |
| Dubai Marina Wave · 18F | Marina | 1,200,000 | 4.8% | 38 | ROTATE | HIGH |
District Intelligence
Market positioning by micro-neighborhood
● JVC
● Dubai Marina
● Silicon Oasis
● Expo City
● Academic City
● Meydan Horizon
● Downtown
● Arjan
District Yield Comparison