v1 STABLE — ALL SYSTEMS OPERATIONAL

PROPMETRIK API

Programmatic access to PROPMETRIK's real estate intelligence platform for Ghana. Market data, valuations, ML predictions, and construction analytics — all via REST.

Base URL

api.propmetrik.com/api/v1

Auth

Bearer Token

Endpoints

70+

Format

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_key

Rate 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
curl -s \
  -H "Authorization: Bearer pmk_your_key" \
  https://api.propmetrik.com/api/v1/analytics/market/price-index \
  | jq .
Python
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']}")
JavaScript / Node.js
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);
Go
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/platform

Macro, demand, infrastructure, composites, alerts, affordability

Market analytics

api.propmetrik.com/api/v1/analytics/market

Price index, investment scoring, rentals, valuations

Short-stay analytics

api.propmetrik.com/api/v1/short-stay

RevPAR/ADR/occupancy, tourism demand context

MARKET INTELLIGENCE

2

CONSTRUCTION COST

2

AFFORDABILITY & MORTGAGE

3

HOUSING DEMAND

3

INFRASTRUCTURE & DIGITAL

2

INVESTMENT ANALYTICS

4

VALUATION METHODS

2

SHORT-STAY & TOURISM

3

MACRO SERIES & ALERTS

3

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/analytics

Channels

market.price-index[.<region>]Property price index — all regions or a single region; pushed on each analytics refresh.market_intelligence
macro.miegMonthly Indicator of Economic Growth (Total) — index + YoY.analytics
macro.alertsMacro alert triggers (NPL / PPI / lending-rate breaches) as they fire.analytics
JavaScript (browser)
// 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 frames
Python (websockets)
import 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 endpoints

Loading 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.