PROPMETRIK API
Programmatic access to PROPMETRIK's real estate intelligence platform for Ghana. Market data, valuations, ML predictions, and construction analytics — all via REST.
api.propmetrik.com/api/v1
Bearer Token
70+
JSON (UTF-8)
AUTHENTICATION
All API requests require a valid API key passed as a Bearer token in the Authorization header. Keys are scoped to your organization and can be generated from the admin dashboard after signing up.
Authorization: Bearer pmk_your_api_keyRate Limits
1,000 req/min
Enterprise: 10,000 req/min
Response Format
JSON
All wrapped in { success, data }
Error Codes
Standard HTTP
400 / 401 / 403 / 404 / 429 / 500
QUICK START
curl -s \
-H "Authorization: Bearer pmk_your_key" \
https://api.propmetrik.com/api/v1/analytics/market/price-index \
| jq .import requests
r = requests.get(
"https://api.propmetrik.com/api/v1/analytics/market/price-index",
headers={"Authorization": "Bearer pmk_your_key"}
)
data = r.json()["data"]
print(f"Property Index: {data['overall_index']}")const res = await fetch(
"https://api.propmetrik.com/api/v1/analytics/market/price-index",
{ headers: { Authorization: "Bearer pmk_your_key" } }
);
const { data } = await res.json();
console.log("Property Index:", data.overall_index);req, _ := http.NewRequest("GET",
"https://api.propmetrik.com/api/v1/analytics/market/price-index", nil)
req.Header.Set("Authorization", "Bearer pmk_your_key")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
json.NewDecoder(resp.Body).Decode(&result)METRICS & METHODOLOGY
Canonical definitions for every analytics component — what each metric means, how it is derived, and the underlying data source. All figures are computed from real Ghana Statistical Service (GSS), Bank of Ghana (BoG) and PROPMETRIK transaction data; where a source is unavailable a documented re-normalisation is applied — nothing is seeded or fabricated.
Platform analytics
api.propmetrik.com/api/v1/analytics/platformMacro, demand, infrastructure, composites, alerts, affordability
Market analytics
api.propmetrik.com/api/v1/analytics/marketPrice index, investment scoring, rentals, valuations
Short-stay analytics
api.propmetrik.com/api/v1/short-stayRevPAR/ADR/occupancy, tourism demand context
MARKET INTELLIGENCE
CONSTRUCTION COST
AFFORDABILITY & MORTGAGE
HOUSING DEMAND
INFRASTRUCTURE & DIGITAL
INVESTMENT ANALYTICS
VALUATION METHODS
SHORT-STAY & TOURISM
MACRO SERIES & ALERTS
REAL-TIME (WEBSOCKET)
Subscribe to live channels for push updates as data refreshes. Authenticate with the same API key — via the propmetrik-api-key subprotocol (browsers) or an Authorization: Bearer header (servers). On subscribe you get a snapshot, then update frames.
api.propmetrik.com/ws/analyticsChannels
market.price-index[.<region>]Property price index — all regions or a single region; pushed on each analytics refresh.market_intelligencemacro.miegMonthly Indicator of Economic Growth (Total) — index + YoY.analyticsmacro.alertsMacro alert triggers (NPL / PPI / lending-rate breaches) as they fire.analytics// Browsers can't set headers on a WS, so the key rides the subprotocol.
const ws = new WebSocket(
"wss://api.propmetrik.com/ws/analytics",
["propmetrik-api-key", "pmk_your_key"]
);
ws.onopen = () => ws.send(JSON.stringify({
action: "subscribe",
channels: ["market.price-index.greater_accra", "macro.alerts"]
}));
ws.onmessage = (e) => console.log(JSON.parse(e.data)); // snapshot, then update framesimport asyncio, json, websockets
async def main():
async with websockets.connect(
"wss://api.propmetrik.com/ws/analytics",
additional_headers={"Authorization": "Bearer pmk_your_key"},
) as ws:
await ws.send(json.dumps({"action": "subscribe",
"channels": ["macro.mieg"]}))
async for msg in ws:
print(json.loads(msg))
asyncio.run(main())ENDPOINT REFERENCE
0 endpointsLoading API catalog...
Ready to build?
Sign up for PROPMETRIK to get your API key and start integrating real estate intelligence into your apps, models, and workflows.