purposeinvest APIpurposeinvest.com ↗
Retrieve Purpose Investments fund and ETF data including AUM, NAV, yields, management fees, and series details via 2 structured endpoints.
What is the purposeinvest API?
The Purpose Investments API provides structured access to fund and ETF product data from purposeinvest.com across 2 endpoints. Use list_funds to retrieve all available products with ticker codes, management fees, yield percentages, and asset categories, or call get_fund_details with a fund slug to pull AUM, NAV, manager names, and per-series breakdowns for any individual fund.
curl -X GET 'https://api.parse.bot/scraper/5f1d7993-91fe-4388-98b2-718918032819/list_funds?category=Active+Fixed+Income' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace purposeinvest-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Purpose Investments SDK — list funds, filter by category, get details."""
from parse_apis.purposeinvest_com_api import PurposeInvest, Category, FundNotFound
client = PurposeInvest()
# List all funds, capped at 5 for demonstration
for fund in client.funds.list(limit=5):
print(fund.name, fund.etf_ticker, fund.management_fee)
# Filter funds by category using the enum
cash_fund = client.funds.list(category=Category.CASH, limit=1).first()
if cash_fund:
print(cash_fund.name, cash_fund.url_name, cash_fund.categories)
# Drill into a fund's full details (AUM, series, managers)
if cash_fund:
detail = cash_fund.details()
print(detail.name, detail.aum)
for series_name, series in detail.series.items():
print(f" {series_name}: NAV={series.nav}, Yield={series.current_yield}")
# Typed error handling for a non-existent fund
try:
client.funds.list(category=Category.ALTERNATIVES, limit=1).first().details()
except FundNotFound as exc:
print(f"Fund not found: {exc.fund_slug}")
print("exercised: funds.list / funds.list(category) / fund.details / FundNotFound")
Lists all Purpose Investments funds and ETFs with basic product information including ticker codes, management fees, yield, categories, and direct links to product pages. Optionally filter by asset category. Results are returned as a single page containing all products.
| Param | Type | Description |
|---|---|---|
| category | string | Filter by asset category. |
{
"type": "object",
"fields": {
"funds": "array of fund summaries with name, code, url_name, etf_ticker, class_f_code, url, categories, management_fee, yield_percent, tickers",
"total": "integer"
},
"sample": {
"data": {
"funds": [
{
"url": "https://www.purposeinvest.com/funds/purpose-bitcoin-etf",
"code": "BTCC",
"name": "Purpose Bitcoin ETF",
"tickers": [
"PFC6700",
"PFC6701",
"PFC6702"
],
"url_name": "purpose-bitcoin-etf",
"categories": [
"Alternatives",
"Cryptocurrencies"
],
"etf_ticker": "BTCC",
"class_f_code": "PFC6701",
"yield_percent": null,
"management_fee": "1.00%"
}
],
"total": 95
},
"status": "success"
}
}About the purposeinvest API
Endpoints Overview
The API exposes two endpoints covering Purpose Investments' full product lineup. list_funds returns an array of fund summaries — each entry includes the fund name, etf_ticker, class_f_code, management_fee, yield_percent, categories, and a url_name that serves as the slug for deeper queries. An optional category parameter filters the result set to a specific asset class, and all matching products are returned in a single response with a total count.
Fund Detail Data
get_fund_details accepts a fund_slug (the url_name field from list_funds, e.g. purpose-bitcoin-etf or purpose-credit-opportunities-fund) and returns a richer payload. The response includes aum (assets under management as a string), code, name, url, url_name, asset_classes, and an overview description. The series object keys each available share class — ETF, F, A, and others — to its own detail block, allowing direct comparison across distribution channels. A managers array lists each portfolio manager by name.
Data Coverage
All products listed on the Purpose Investments product catalog are accessible, spanning equity, fixed income, alternative, and crypto-related funds. The categories field on each fund record maps products into asset classes, which aligns with the optional filter available on list_funds. Ticker codes for both ETF and Class F series are exposed at the list level, reducing the need for a detail call when only identifiers and headline metrics are required.
The purposeinvest API is a managed, monitored endpoint for purposeinvest.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when purposeinvest.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official purposeinvest.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a fund screener filtered by asset category using the
categoryparam andmanagement_feeandyield_percentfields. - Track AUM changes over time for Purpose ETFs by periodically calling
get_fund_detailsand storing theaumfield. - Compare management expense ratios across all available share series (ETF, F, A) using the
seriesobject fromget_fund_details. - Populate an investment research tool with fund manager attribution using the
managersarray. - Map ETF ticker codes to fund detail pages using
etf_tickerandurlfields fromlist_funds. - Monitor yield percentages across the full Purpose fund lineup by querying
list_fundsand aggregatingyield_percentvalues. - Identify all funds within a specific asset class (e.g. crypto, fixed income) using the
categoriesfilter onlist_funds.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Purpose Investments have an official developer API?+
What does `get_fund_details` return beyond what `list_funds` already provides?+
list_funds gives headline fields: ticker codes, management fee, yield, and categories. get_fund_details adds AUM, NAV, a fund overview text, a managers array with portfolio manager names, and a series object that breaks down details for each available share class (ETF, Class F, Class A, etc.) individually.Can I filter `list_funds` by management fee range or yield threshold?+
list_funds endpoint only supports filtering by the category string parameter. It does not offer numeric range filters for management_fee or yield_percent. Both fields are returned in the response, so client-side filtering on those values is straightforward after fetching all records.Does the API cover historical NAV or performance data for funds?+
How do I find the correct `fund_slug` value to use with `get_fund_details`?+
url_name field returned in each item from list_funds is exactly the slug to pass as fund_slug. Examples include purpose-bitcoin-etf and purpose-credit-opportunities-fund.