Asset managers, wealth & robo-advisors
Every open-end, pension (VPS) and exchange-traded fund reported by MUFAP, 567 funds from 25 asset managers, served as clean JSON. Wealth apps, robo-advisors, distributors and AMC analysts can build on it without scraping MUFAP pages.
What to use
| Task | Endpoint |
|---|---|
| Rank or filter every fund in one call | GET /v1/funds/screener (NAV, YTD/3M/1Y returns, TER, rating) |
| Chart a fund | GET /v1/funds/{id}/nav (daily, back to inception, some to 1996) |
| Risk and return profile | GET /v1/funds/{id}/analytics (CAGR, 3y/5y annualized, volatility, max drawdown) |
| Fees | GET /v1/funds/{id}/expenses (TER, management fee, S&M) |
| What the fund holds | GET /v1/funds/{id}/portfolio (asset-class allocation) |
| Income investors | GET /v1/funds/{id}/payouts (dividend history) |
| Manager-level view | GET /v1/amcs, GET /v1/amcs/{amc} (fund count, avg TER, rating mix) |
Example: cheapest high-yield money-market funds
import httpx, pandas as pd
H = {"X-API-Key": "pk_live_xxx"}
s = pd.json_normalize(httpx.get("https://api.pakdatahub.com/v1/funds/screener", headers=H).json()["data"])
mm = s[s["category"].isin(["Money Market", "Shariah Compliant Money Market"])]
print(mm.sort_values(["returns.y1", "ter_ytd"], ascending=[False, True])
.head(10)[["name", "amc", "returns.y1", "ter_ytd"]])
Example: risk profile for a portfolio of funds
ids = [12843, 12821, 12826]
rows = [httpx.get(f"https://api.pakdatahub.com/v1/funds/{i}/analytics", headers=H).json() for i in ids]
print(pd.DataFrame([{"fund": r["fund_id"], "cagr": r["cagr_since_inception"],
"vol": r["volatility_annualized"], "mdd": r["max_drawdown"]} for r in rows]))
Pair with macro context
Fund performance makes sense against rates and inflation. Compare money-market returns with rates.kibor.3m and rates.policy, and real returns with inflation.cpi.national.yoy. Individual PSX stocks are covered by pypsx.com, not PakDataHub.
On the web: the free fund screener and the AMC directory.