?>
ESC to close

ETF & Mutual Fund Screener API

Maintained by Piyush Arora

Last updated:

Filter, sort and paginate 59,349 ETF and mutual-fund share classes across 141 metrics — fees, assets, returns, flows, portfolio concentration, sector and country exposure, look-through valuation, bond risk, and six risk ratios (standard deviation, max drawdown, Sharpe, Sortino, alpha and beta) across six windows — in a single call. Filters are a structured JSON body rather than a SQL fragment, so every field name is validated against the metric contract before the query runs and every value is bound. The response tells you not only what matched but how many funds were excluded for having no value on file, which is the difference between a screen you can trust and one that quietly drops half the universe.

Use this endpoint to:

Screen ETFs By Expense Ratio Rank Funds By AUM Or Flows Build A Fund Discovery Table
POST https://data.businessquant.com/funds/screener?api_key={api_key}

This endpoint takes a POST body. A screen is a structured object — a list of filters, each with a field, an operator and a typed value — and a query string could only carry it flattened into one long field:op:value;field:op:value string. That form could not express a category containing a comma, turned every number into a string, and made a serious screen a 2 kB URL that proxies truncate and access logs keep. Everything except api_key goes in the body.

Related endpoints: Take any two to six tickers from a screen to the ETF & Mutual Fund Comparison API for a side-by-side that says which metrics actually differ. For one fund in depth, see the Fund Overview, Fund Holdings, Portfolio Exposure and Fund Flows APIs. For equities rather than funds, use the Stock Screener API. New here? Start at the API Overview.

1. Request Body

api_key is a query parameter, because it authenticates the caller rather than describing the query. Everything else is a key in the JSON body, and every one of them is optional — POST with {} returns the whole universe ranked by assets, which is a reasonable default landing page for a fund browser.

ParameterDescription
api_key
Required
Your unique API key for authentication.
filters
Optional
An array of {field, op, value} objects, combined with AND. op defaults to eq, so a plain equality filter is just {"field": "vehicle", "value": "ETF"}. Values keep their JSON type — a number stays a number. Full grammar in section 2.
Example: "filters": [{"field": "vehicle", "value": "ETF"}, {"field": "net_expense_ratio_pct", "op": "lte", "value": 0.10}]
fields
Optional
An array of column names to return. Omit for the default eight. The five identity fields ride on every row regardless of what you ask for, so a row is always addressable.
Example: "fields": ["category", "net_expense_ratio_pct", "net_assets_usd"]
preset
Optional
A named column set, so a table built around cost or around holdings is one word rather than six field names. Valid keys: overview, costs, performance, total_return, calendar, flows, portfolio, asset_mix, sectors, market_cap, valuation, bonds, risk, risk_ratios, geography. An explicit fields wins over a preset.
Example: "preset": "costs"
sort
Optional
An array of {field, dir} objects, applied in order. dir is asc or desc and defaults to desc; anything else is a 400 rather than a silent fallback. Defaults to net_assets_usd descending. Nulls sort last in both directions — a fund that does not disclose its fee is not the cheapest fund.
Example: "sort": [{"field": "net_expense_ratio_pct", "dir": "asc"}]
search
Optional
Free text across ticker, fund name, fund family, share class and top holding. Ticker matches from the start — typing VO wants VOO, not every fund with "vo" inside a word — while the other four match anywhere.
Example: "search": "vanguard"
limit
Optional
Rows per page, 1–500. Default 50.
offset
Optional
Rows to skip. Default 0. Results carry a ticker tie-break, so page 2 is the rows page 1 did not show rather than an arbitrary re-slice of the ties.
page
Optional
A 1-based page number, as an alternative to computing offset yourself — page: 3 at limit: 50 is offset: 100. Send one or the other; an explicit offset wins if you send both.
include_metrics
Optional
true (a JSON boolean) embeds the full metric contract in metadata — all 141 fields with datatype, unit, description, filter shape, enum values and p05/p50/p95 distribution. This is what you build a filter rail from. Fetch it once and cache it; it changes at most once per pipeline run.
Example cURL Request
curl -X POST "https://data.businessquant.com/funds/screener?api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": [
      {"field": "vehicle",               "op": "eq",  "value": "ETF"},
      {"field": "net_expense_ratio_pct", "op": "lte", "value": 0.10},
      {"field": "net_assets_usd",        "op": "gte", "value": 10000000000}
    ],
    "fields": [
      "className", "category", "net_expense_ratio_pct",
      "net_assets_usd", "return_1y_pct", "net_flow_12m_pct", "holdings_count"
    ],
    "sort":  [{"field": "net_assets_usd", "dir": "desc"}],
    "limit": 8
  }'
Sample Response
{
    "metadata": {
        "endpoint": "/funds/screener",
        "grain": "share class ticker",
        "total_matched": 114,
        "universe_total": 59349,
        "returned": 8,
        "offset": 0,
        "limit": 8,
        "page": 1,
        "pages": 15,
        "fields": [
            "ticker",
            "fund_name",
            "className",
            "category",
            "net_expense_ratio_pct",
            "net_assets_usd",
            "return_1y_pct",
            "net_flow_12m_pct",
            "holdings_count"
        ],
        "sort": [
            {
                "field": "net_assets_usd",
                "dir": "desc"
            }
        ],
        "filters_applied": [
            {
                "field": "vehicle",
                "op": "eq",
                "value": "ETF"
            },
            {
                "field": "net_expense_ratio_pct",
                "op": "lte",
                "value": 0.1
            },
            {
                "field": "net_assets_usd",
                "op": "gte",
                "value": 10000000000
            }
        ],
        "nulls_excluded": {
            "net_expense_ratio_pct": 3,
            "net_assets_usd": 4
        },
        "data_asof": {
            "portfolio": "2026-09-08",
            "aum": "2026-08-31",
            "flows": "2026-08-31",
            "price": "2026-09-10",
            "total_return": "2026-07-31",
            "prospectus": "2026-09-08"
        }
    },
    "data": [
        {
            "ticker": "VTI",
            "fund_name": "Vanguard Total Stock Market Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000002848",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 2297839156547.89,
            "return_1y_pct": 15.98,
            "net_flow_12m_pct": -0.9063,
            "holdings_count": 3487
        },
        {
            "ticker": "VOO",
            "fund_name": "Vanguard 500 Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000002839",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 1671231561960.14,
            "return_1y_pct": 16.18,
            "net_flow_12m_pct": -5.8139,
            "holdings_count": 506
        },
        {
            "ticker": "IVV",
            "fund_name": "iShares Core S&P 500 ETF",
            "className": "iShares Core S&P 500 ETF",
            "vehicle": "ETF",
            "series_id": "S000004310",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 888128937468.17,
            "return_1y_pct": 16.18,
            "net_flow_12m_pct": 14.0797,
            "holdings_count": 509
        },
        {
            "ticker": "VXUS",
            "fund_name": "Vanguard Total International Stock Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000002932",
            "category": "Equity",
            "net_expense_ratio_pct": 0.05,
            "net_assets_usd": 629120124704.15,
            "return_1y_pct": 18.99,
            "net_flow_12m_pct": 3.121,
            "holdings_count": 8841
        },
        {
            "ticker": "BND",
            "fund_name": "Vanguard Total Bond Market Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000002564",
            "category": "Fixed Income",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 397107296566.89,
            "return_1y_pct": -4.34,
            "net_flow_12m_pct": 9.883,
            "holdings_count": 10042
        },
        {
            "ticker": "VUG",
            "fund_name": "Vanguard Growth Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000002842",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 379290306499.55,
            "return_1y_pct": 12.02,
            "net_flow_12m_pct": 2.7101,
            "holdings_count": 150
        },
        {
            "ticker": "VEA",
            "fund_name": "Vanguard Developed Markets Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000004386",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 316418467056.66,
            "return_1y_pct": 21.07,
            "net_flow_12m_pct": 7.2136,
            "holdings_count": 3934
        },
        {
            "ticker": "VTV",
            "fund_name": "Vanguard Value Index Fund",
            "className": "ETF Shares",
            "vehicle": "ETF",
            "series_id": "S000002840",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 254480620206.9,
            "return_1y_pct": 20.95,
            "net_flow_12m_pct": 5.0178,
            "holdings_count": 311
        }
    ]
}

The grain is the share class, not the fund. Each row is one ticker. VTSAX and VTI are two rows of one portfolio, and Class A, C and I are three more — they share holdings and an objective but not an expense ratio or a minimum. That is why className is in the default column set: without it, a screen for the cheapest large-cap fund looks like five duplicates of the same name. series_id is what tells you two rows are the same fund.

2. Filter Grammar

A filter is an object with a field, an op and a value. Filters are combined with AND. op may be omitted and means eq; value is a JSON scalar for most operators and an array for in, between and has_any.

Grammar by example
"filters": [
  {"field": "net_expense_ratio_pct", "op": "lte",      "value": 0.10},
  {"field": "net_assets_usd",        "op": "between",  "value": [1e9, 1e12]},
  {"field": "category",              "op": "in",       "value": ["Equity", "Fixed Income"]},
  {"field": "fund_tags",             "op": "has",      "value": "Index Fund"},
  {"field": "fund_name",             "op": "contains", "value": "Vanguard"},
  {"field": "tracking_error_pct",    "op": "not_null"},
  {"field": "vehicle",                                 "value": "ETF"}
]

// fee at or under 10 basis points
// AUM inside a range -- or {"field": "net_assets_usd", "min": 1e9, "max": 1e12}
// any one of these categories
// list column contains this tag
// substring match on text
// has a value on file at all -- no value key needed
// op omitted means eq

Operators

OperatorApplies toMeaning
eq, neqanyEqual / not equal. neq is null-safe, so it returns rows where the field is null rather than silently dropping them.
lt, lte, gt, gtenumber, dateMagnitude comparisons. These are the operators that exclude funds for having no value on file — see nulls_excluded.
betweennumber, dateInclusive range. Takes a two-element array, "value": [min, max], or the equivalent "min" / "max" keys. Either bound may be null for an open-ended range.
inanyMatches any value in the array. On an enum column this is the natural filter. Up to 200 values per clause.
containstextCase-insensitive substring. Rejected on non-text fields rather than silently coerced.
has, has_anylistList membership, and the only meaningful operators on the three list columns. has with several values means all of them; has_any means any.
is_null, not_nullanyPresence tests. Take no value: {"field": "tracking_error_pct", "op": "not_null"}.

The body is parsed, never interpolated. There is no way to send SQL to this endpoint. Field names are looked up in the metric contract and rejected if absent, then quoted; operators are matched against a fixed set of thirteen; sort directions must be asc or desc; and every value you send becomes a bound parameter, transmitted to Postgres separately from the statement. A field that does not exist, an operator that does not apply to its datatype, a value that will not coerce, or a key the schema does not define all return a 400 or 422 naming the problem — never a 500, and never a wider result set than you asked for.

A body also has no natural size limit the way a URL does, so the request itself is bounded: at most 25 filters, 200 values in one in or has_any, 500 characters in a single value, 200 characters of search, and 8 sort terms. Control characters are rejected outright — no fund name contains one.

3. Response Fields

The usual metadata / data envelope. data carries only the projected columns, because 141 columns across 50 rows is a 400 kB response to draw an eight-column table.

metadata

FieldTypeDescription
total_matchedintegerFunds matching the filters, before pagination.
universe_totalintegerShare classes in the screener universe — the denominator your match count is a fraction of.
returned, offset, limit, page, pagesintegerPagination state for this response.
fieldsarrayThe columns a caller is actually looking at — the two pinned fields plus whatever was requested. Distinct from the columns present on each row, which always include the five identity fields.
sortarrayThe sort actually applied, echoed back including the default when none was sent.
filters_appliedarrayThe filters that produced a predicate. An empty clause is dropped here rather than silently ignored, so you can tell what the server actually ran.
nulls_excludedobjectPer field, how many funds a magnitude filter dropped for having no value on file rather than for failing the test. See the note below.
data_asofobjectSix as-of dates — portfolio, aum, flows, price, total_return, prospectus. They legitimately disagree, so each belongs beside its own column group rather than being flattened into one page-level date.

data — one row per share class

FieldTypeDescription
tickerstringThe share-class ticker. Unique, and the key to every other /funds endpoint.
fund_namestringRegistered fund name. Shared by every class of one fund.
classNamestringThe share class — "ETF Shares", "Admiral Shares", "Class I". The column that explains why two rows with the same name have different fees.
vehiclestringETF or MF.
series_idstringSEC Series ID. Two rows sharing one are two wrappers on the same portfolio.
topholding_ticker, topholding_kindstringAdded when you request topholding_name, and only when the resolved security's name matches the one on the row. Absent for bonds, GNMA pools, repos and cash, which is the normal case rather than a gap — BND's largest position is a Fannie Mae pool with no ticker at all.
…requested fieldsmixedWhatever fields or preset asked for. Send "include_metrics": true for the full catalogue with types and descriptions, or see section 6.

A null is never a zero. A fund that does not disclose an expense ratio is not a free fund, so nulls sort last in both directions and are returned as null rather than 0. And when a magnitude filter drops a fund for having nothing on file, the response says so: in the sample above, nulls_excluded reports 3 funds excluded on net_expense_ratio_pct and 4 on net_assets_usd. A screen that narrows to 200 funds should be able to tell you how many more were excluded for not reporting, rather than presenting the survivors as the whole population.

4. Response Viewer

A real response for vehicle:ETF with a fee ceiling of 10 bp and an AUM floor of $10 B, ranked by assets — 114 share classes matched out of 59,349.

Live Endpoint https://data.businessquant.com/funds/screener

API Response — Fund Screener

Cheap, large ETFs by assets under management

Ticker Fund Share Class Net Expense AUM 1Y Return Flow 12M Holdings
VTI Vanguard Total Stock Market Index Fund ETF Shares 0.03% $2.30T 15.98% -0.91% 3,487
VOO Vanguard 500 Index Fund ETF Shares 0.03% $1.67T 16.18% -5.81% 506
IVV iShares Core S&P 500 ETF iShares Core S&P 500 ETF 0.03% $888.13B 16.18% 14.08% 509
VXUS Vanguard Total International Stock Index Fund ETF Shares 0.05% $629.12B 18.99% 3.12% 8,841
BND Vanguard Total Bond Market Index Fund ETF Shares 0.03% $397.11B -4.34% 9.88% 10,042
VUG Vanguard Growth Index Fund ETF Shares 0.03% $379.29B 12.02% 2.71% 150
VEA Vanguard Developed Markets Index Fund ETF Shares 0.03% $316.42B 21.07% 7.21% 3,934
VTV Vanguard Value Index Fund ETF Shares 0.03% $254.48B 20.95% 5.02% 311

5. The Metric Contract

Send "include_metrics": true in the body and metadata gains the full catalogue — every filterable field with the information needed to render a control for it without hard-coding anything. Section 6 prints that catalogue in full; this section describes what each entry carries.

Contract fieldTypeWhat it is for
field, label, shortstringThe name you filter on, and the human labels to print.
datatype, unitstringdatatype is the storage type; unit is what the number isusd, percent, count, years, id. The estate types both a dollar figure and a P/E as int, which is why the two are separate.
filter_shapestringWhat kind of control the field wants — a range slider, an enum picker, a text box.
filterable, sortable, is_listbooleanWhether to offer the field as a filter at all. A column under the discriminating threshold is not a filter, it is a slider with nothing to travel over.
p05, p50, p95, min, maxfloatDistribution, so a range slider can open on a sensible span instead of on the outliers.
enum_valuesarrayThe values an enum column actually takes, for a picker.
fill_pct, discriminating_pctfloatHow much of the universe has this field, and how much of it the field actually separates.
descriptionstringWhat the metric means, for a tooltip.
statement, statement_orderstring, intThe group a field belongs to — Fees, Returns, Flows, Portfolio, Sectors, Identity — and its position, for arranging a rail.
Sample Contract Response (abridged)
{
    "metadata": {
        "endpoint": "/funds/screener",
        "grain": "share class ticker",
        "total_matched": 59349,
        "universe_total": 59349,
        "returned": 1,
        "offset": 0,
        "limit": 1,
        "page": 1,
        "pages": 59349,
        "fields": [
            "ticker",
            "fund_name",
            "className",
            "category",
            "net_expense_ratio_pct",
            "net_assets_usd",
            "return_1y_pct",
            "net_flow_12m_pct",
            "holdings_count"
        ],
        "sort": [
            {
                "field": "net_assets_usd",
                "dir": "desc"
            }
        ],
        "filters_applied": [],
        "nulls_excluded": [],
        "data_asof": {
            "portfolio": "2026-09-08",
            "aum": "2026-08-31",
            "flows": "2026-08-31",
            "price": "2026-09-10",
            "total_return": "2026-07-31",
            "prospectus": "2026-09-08"
        },
        "metrics": [
            {
                "field": "benchmark_ticker",
                "label": "Benchmark",
                "short": "Benchmark",
                "datatype": "text",
                "unit": "text",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Index that alpha and beta on this row were measured against, as the internal id the quote estate mints for it (I:SP500 is the S&P 500). One benchmark for every fund: nothing upstream carries a per-fund benchmark assignment, and guessing one from a fund's name would put an unauditable choice inside a number that reads as objective.",
                "fill_pct": 57.36,
                "discriminating_pct": 0,
                "n_distinct": 1,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "cik",
                "label": "CIK",
                "short": "cik",
                "datatype": "int",
                "unit": "id",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "SEC Central Index Key of the registrant (the trust), not the fund. Never format with thousands separators.",
                "fill_pct": 99.62,
                "discriminating_pct": 99.62,
                "n_distinct": null,
                "p05": "75176.0",
                "p50": "916053.0",
                "p95": "1691167.0",
                "min": "2110",
                "max": "2096904",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "className",
                "label": "Share Class",
                "short": "Class",
                "datatype": "text",
                "unit": "text",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Share class name, e.g. Admiral Shares, ETF Shares.",
                "fill_pct": 99.02,
                "discriminating_pct": 92.41,
                "n_distinct": 18913,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "class_id",
                "label": "Class ID",
                "short": "class_id",
                "datatype": "text",
                "unit": "text",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "SEC share-class identifier (C000nnnnnn). Null for a UIT, which has no share classes.",
                "fill_pct": 98.89,
                "discriminating_pct": 98.89,
                "n_distinct": 58372,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "data_available",
                "label": "Data",
                "short": "Data",
                "datatype": "list",
                "unit": "list",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Which data families exist for this fund: Holdings, Flows, AUM, Returns, Profile, Prices. Use it to decide which page blocks to render.",
                "fill_pct": 100,
                "discriminating_pct": 99.99,
                "n_distinct": 7,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Profile",
                    "Holdings",
                    "AUM",
                    "Flows",
                    "Prices",
                    "Ratios",
                    "Returns"
                ],
                "filterable": false,
                "sortable": true,
                "is_list": true
            },
            {
                "field": "flows_asof",
                "label": "Flows Date",
                "short": "Flows Date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Latest month with a usable flow figure FOR THIS FUND. Trailing flow windows are measured back from here, not from today.",
                "fill_pct": 70.38,
                "discriminating_pct": 70.38,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2019-08-31",
                "max": "2026-08-31",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "fund_name",
                "label": "Fund Name",
                "short": "fund_name",
                "datatype": "text",
                "unit": "text",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "text",
                "description": "Registered fund name, shared across every share class.",
                "fill_pct": 99.76,
                "discriminating_pct": 99.68,
                "n_distinct": 22708,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "lastreportperiod",
                "label": "Portfolio Date",
                "short": "Portfolio Date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Report date of the holdings snapshot. Quarterly for N-PORT funds, fresher where a fund-house feed exists. Every weight on this row is as of this date.",
                "fill_pct": 70.76,
                "discriminating_pct": 70.76,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2019-09-30",
                "max": "2026-09-08",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_assets_asof",
                "label": "AUM Date",
                "short": "AUM Date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Report date the net assets figure is as of. Can legitimately differ from the portfolio date.",
                "fill_pct": 70.39,
                "discriminating_pct": 70.39,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2019-09-30",
                "max": "2026-08-31",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "price_asof",
                "label": "Price Date",
                "short": "Price Date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Latest trading day priced for this ticker. Price returns are measured back from here.",
                "fill_pct": 58.37,
                "discriminating_pct": 58.37,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2019-08-27",
                "max": "2026-09-10",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "pro_returns_asof",
                "label": "Returns Date",
                "short": "Returns Date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Filing date of the prospectus the long-horizon returns were printed in. They are NOT current and can be a year stale.",
                "fill_pct": 54.01,
                "discriminating_pct": 54.01,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2020-08-26",
                "max": "2026-09-08",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "prospectus_date",
                "label": "Prospectus Date",
                "short": "prospectus_date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Date printed on the prospectus the profile was extracted from.",
                "fill_pct": 66.32,
                "discriminating_pct": 66.32,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2019-12-31",
                "max": "2026-09-09",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "series_id",
                "label": "Series ID",
                "short": "series_id",
                "datatype": "text",
                "unit": "text",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "SEC fund identifier (S000nnnnnn), shared by every class of the fund. UIT+CIK for a unit investment trust such as SPY.",
                "fill_pct": 99.62,
                "discriminating_pct": 99.58,
                "n_distinct": 23020,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "ticker",
                "label": "Ticker",
                "short": "ticker",
                "datatype": "text",
                "unit": "text",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "text",
                "description": "Exchange ticker of this share class. Unique, upper-cased, and the key every fund page is addressed by.",
                "fill_pct": 100,
                "discriminating_pct": 100,
                "n_distinct": 59349,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "total_return_asof",
                "label": "Total Ret. Date",
                "short": "Total Ret. Date",
                "datatype": "date",
                "unit": "date",
                "statement": "Identity",
                "statement_order": 0,
                "filter_shape": "none",
                "description": "Latest month with an N-PORT total return for this share class. The Total Return windows are measured back from here, not from today.",
                "fill_pct": 60.76,
                "discriminating_pct": 60.76,
                "n_distinct": null,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": "2019-07-31",
                "max": "2026-07-31",
                "enum_values": null,
                "filterable": false,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "category",
                "label": "Category",
                "short": "category",
                "datatype": "text",
                "unit": "text",
                "statement": "Profile",
                "statement_order": 1,
                "filter_shape": "enum",
                "description": "Coarse bucket derived from what the fund HOLDS, not from its name, measured on classified exposure only. Other when under half the portfolio is classified.",
                "fill_pct": 71.25,
                "discriminating_pct": 32.37,
                "n_distinct": 8,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Equity",
                    "Fixed Income",
                    "Target Date",
                    "Other",
                    "Money Market",
                    "Allocation",
                    "Fund of Funds / Cash",
                    "Derivative / Alternative"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "fund_tags",
                "label": "Tags",
                "short": "Tags",
                "datatype": "list",
                "unit": "list",
                "statement": "Profile",
                "statement_order": 1,
                "filter_shape": "list",
                "description": "Fund types as filed in N-CEN: Index Fund, Fund of Funds, Target Date, Money Market, Inverse, Underlying Fund, Interval Fund, Exchange-Traded Managed. A fund can carry several.",
                "fill_pct": 100,
                "discriminating_pct": 21.93,
                "n_distinct": 8,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Fund of Funds",
                    "Index Fund",
                    "Target Date",
                    "Underlying Fund",
                    "Money Market",
                    "Inverse",
                    "Exchange-Traded Managed",
                    "Interval Fund"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": true
            },
            {
                "field": "geography_focus",
                "label": "Geography",
                "short": "Geography",
                "datatype": "text",
                "unit": "text",
                "statement": "Profile",
                "statement_order": 1,
                "filter_shape": "enum",
                "description": "US (80%+ US assets), International (20% or less) or Global. Derived from holdings.",
                "fill_pct": 70.27,
                "discriminating_pct": 20.73,
                "n_distinct": 3,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "US",
                    "Global",
                    "International"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "registrantFullName",
                "label": "Family",
                "short": "Family",
                "datatype": "text",
                "unit": "text",
                "statement": "Profile",
                "statement_order": 1,
                "filter_shape": "text",
                "description": "Registrant / trust name. The issuer filter: Vanguard, iShares, SPDR.",
                "fill_pct": 68.51,
                "discriminating_pct": 67.67,
                "n_distinct": 2020,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "structure_tags",
                "label": "Structure",
                "short": "Structure",
                "datatype": "list",
                "unit": "list",
                "statement": "Profile",
                "statement_order": 1,
                "filter_shape": "list",
                "description": "Structural facts from N-CEN: Non-Diversified (may concentrate), Lends Securities, Foreign Subsidiary.",
                "fill_pct": 100,
                "discriminating_pct": 37.19,
                "n_distinct": 3,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Lends Securities",
                    "Non-Diversified",
                    "Foreign Subsidiary"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": true
            },
            {
                "field": "vehicle",
                "label": "Vehicle",
                "short": "vehicle",
                "datatype": "text",
                "unit": "text",
                "statement": "Profile",
                "statement_order": 1,
                "filter_shape": "enum",
                "description": "ETF, Mutual Fund, UIT (unit investment trust, e.g. SPY) or Closed-End.",
                "fill_pct": 66.83,
                "discriminating_pct": 9.99,
                "n_distinct": 4,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Mutual Fund",
                    "ETF",
                    "Closed-End",
                    "UIT"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "acquired_fund_fees_pct",
                "label": "AFFE",
                "short": "AFFE",
                "datatype": "%",
                "unit": "percent",
                "statement": "Fees",
                "statement_order": 2,
                "filter_shape": "range",
                "description": "Fees charged by the underlying funds a fund holds. Material for funds of funds and usually excluded from the waiver.",
                "fill_pct": 21.47,
                "discriminating_pct": 20.56,
                "n_distinct": null,
                "p05": "0.01",
                "p50": "0.03",
                "p95": "0.64",
                "min": "0.0",
                "max": "43.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "gross_expense_ratio_pct",
                "label": "Gross Expense",
                "short": "Gross Expense",
                "datatype": "%",
                "unit": "percent",
                "statement": "Fees",
                "statement_order": 2,
                "filter_shape": "range",
                "description": "Total annual operating expenses before any waiver. Above the net ratio when a waiver is in force, which may expire.",
                "fill_pct": 66.46,
                "discriminating_pct": 66.28,
                "n_distinct": null,
                "p05": "0.22",
                "p50": "1.02",
                "p95": "3.33",
                "min": "0.0",
                "max": "14.92",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "min_initial_investment_usd",
                "label": "Min. Investment",
                "short": "Min. Investment",
                "datatype": "int",
                "unit": "usd",
                "statement": "Fees",
                "statement_order": 2,
                "filter_shape": "range",
                "description": "Smallest initial purchase the prospectus accepts. Absent for most ETFs, which have none.",
                "fill_pct": 35.55,
                "discriminating_pct": 35.47,
                "n_distinct": null,
                "p05": "1.0",
                "p50": "1000.0",
                "p95": "500000.0",
                "min": "0.0",
                "max": "5000000000.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_expense_ratio_pct",
                "label": "Net Expense",
                "short": "Net Expense",
                "datatype": "%",
                "unit": "percent",
                "statement": "Fees",
                "statement_order": 2,
                "filter_shape": "range",
                "description": "What the investor actually pays after fee waivers. THE expense ratio. 0.03 means three basis points, not 3%.",
                "fill_pct": 66.02,
                "discriminating_pct": 65.5,
                "n_distinct": null,
                "p05": "0.18",
                "p50": "0.9",
                "p95": "2.23",
                "min": "0.0",
                "max": "14.21",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_assets_usd",
                "label": "AUM",
                "short": "AUM",
                "datatype": "int",
                "unit": "usd",
                "statement": "Size",
                "statement_order": 3,
                "filter_shape": "range",
                "description": "Fund-level assets under management from the latest N-PORT. Fund grain, so every share class of a fund shows the same figure.",
                "fill_pct": 70.39,
                "discriminating_pct": 70.1,
                "n_distinct": null,
                "p05": "4851065.11",
                "p50": "364282363.88",
                "p95": "21486190617.935486",
                "min": "0.0",
                "max": "2297839156547.89",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "cal_return_2021_pct",
                "label": "2021",
                "short": "2021",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Calendar-year 2021 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.",
                "fill_pct": 20.5,
                "discriminating_pct": 20.32,
                "n_distinct": null,
                "p05": "-4.55",
                "p50": "10.44",
                "p95": "32.014",
                "min": "-80.9",
                "max": "167.64",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "cal_return_2022_pct",
                "label": "2022",
                "short": "2022",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Calendar-year 2022 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.",
                "fill_pct": 20.6,
                "discriminating_pct": 20.56,
                "n_distinct": null,
                "p05": "-34.478",
                "p50": "-13.47",
                "p95": "1.67",
                "min": "-3240.0",
                "max": "152.33",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "cal_return_2023_pct",
                "label": "2023",
                "short": "2023",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Calendar-year 2023 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.",
                "fill_pct": 20.17,
                "discriminating_pct": 20.14,
                "n_distinct": null,
                "p05": "0.639",
                "p50": "12.24",
                "p95": "35.8285",
                "min": "-84.59",
                "max": "1018.38",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "cal_return_2024_pct",
                "label": "2024",
                "short": "2024",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Calendar-year 2024 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.",
                "fill_pct": 19.78,
                "discriminating_pct": 19.75,
                "n_distinct": null,
                "p05": "-1.6",
                "p50": "7.9",
                "p95": "29.216",
                "min": "-93.74",
                "max": "1090.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "cal_return_2025_pct",
                "label": "2025",
                "short": "2025",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Calendar-year 2025 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.",
                "fill_pct": 14,
                "discriminating_pct": 13.99,
                "n_distinct": null,
                "p05": "1.31",
                "p50": "11.03",
                "p95": "35.95",
                "min": "-94.0",
                "max": "1817.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "pro_return_10y_pct",
                "label": "10Y Ann. (Prospectus)",
                "short": "10Y (Pro.)",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Average annual total return over ten years, before taxes, as printed in the prospectus.",
                "fill_pct": 37.04,
                "discriminating_pct": 36.97,
                "n_distinct": null,
                "p05": "0.93",
                "p50": "6.53",
                "p95": "14.27",
                "min": "-91.53",
                "max": "546.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "pro_return_5y_pct",
                "label": "5Y Ann. (Prospectus)",
                "short": "5Y (Pro.)",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Average annual total return over five years, before taxes, as printed in the prospectus. Stale by up to a year — see Returns As Of.",
                "fill_pct": 46.31,
                "discriminating_pct": 46.24,
                "n_distinct": null,
                "p05": "-0.93",
                "p50": "5.16",
                "p95": "14.46",
                "min": "-100.0",
                "max": "699.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "pro_return_incep_pct",
                "label": "Since Inception (Prospectus)",
                "short": "Since Inception",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Average annual total return since inception, before taxes, as printed in the prospectus.",
                "fill_pct": 27.61,
                "discriminating_pct": 27.54,
                "n_distinct": null,
                "p05": "-0.72",
                "p50": "6.19",
                "p95": "16.01",
                "min": "-100.0",
                "max": "2012.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "pro_worst_quarter_pct",
                "label": "Worst Quarter (Prospectus)",
                "short": "pro_worst_quarter_pct",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Worst calendar quarter in the prospectus bar chart. The drawdown proxy.",
                "fill_pct": 20.8,
                "discriminating_pct": 19.71,
                "n_distinct": null,
                "p05": "-35.3095",
                "p50": "-16.295",
                "p95": "0.0",
                "min": "-2142.0",
                "max": "93.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_1m_pct",
                "label": "1M",
                "short": "1M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Trailing one-month PRICE return. Excludes distributions, so it understates total return by roughly the yield.",
                "fill_pct": 57.26,
                "discriminating_pct": 52.29,
                "n_distinct": null,
                "p05": "-6.7",
                "p50": "-0.78",
                "p95": "4.16",
                "min": "-67.6500015258789",
                "max": "86.68000030517578",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_1y_pct",
                "label": "1Y",
                "short": "1Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Trailing one-year PRICE return, measured back from Price As Of (the latest trading day). The primary performance filter — current, daily, ~77% of the universe. NOT comparable with Total Return 12M, whose window ends at the last N-PORT filing up to five months earlier.",
                "fill_pct": 53.31,
                "discriminating_pct": 51.93,
                "n_distinct": null,
                "p05": "-19.469999",
                "p50": "1.95",
                "p95": "28.02",
                "min": "-99.8499984741211",
                "max": "2025.9599609375",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_3m_pct",
                "label": "3M",
                "short": "3M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Trailing three-month price return.",
                "fill_pct": 56.89,
                "discriminating_pct": 53.48,
                "n_distinct": null,
                "p05": "-8.83",
                "p50": "0.64",
                "p95": "8.7775",
                "min": "-94.26000213623047",
                "max": "129.3000030517578",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_3y_ann_pct",
                "label": "3Y Ann.",
                "short": "3Y Ann.",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Annualised three-year price return. Null unless three years of history exist.",
                "fill_pct": 44.24,
                "discriminating_pct": 43.11,
                "n_distinct": null,
                "p05": "-5.9525",
                "p50": "5.16",
                "p95": "20.12",
                "min": "-82.93",
                "max": "101.06",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_5y_ann_pct",
                "label": "5Y Ann.",
                "short": "5Y Ann.",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Annualised five-year price return. Null unless five years of history exist.",
                "fill_pct": 37.74,
                "discriminating_pct": 37.69,
                "n_distinct": null,
                "p05": "-7.3",
                "p50": "-0.73",
                "p95": "9.58",
                "min": "-66.48",
                "max": "55.21",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_6m_pct",
                "label": "6M",
                "short": "6M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Trailing six-month price return.",
                "fill_pct": 56.02,
                "discriminating_pct": 53.72,
                "n_distinct": null,
                "p05": "-13.66",
                "p50": "3.35",
                "p95": "18.4",
                "min": "-98.9000015258789",
                "max": "345.9200134277344",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "return_ytd_pct",
                "label": "YTD",
                "short": "YTD",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Year-to-date price return, measured from the last close of the prior year.",
                "fill_pct": 54.95,
                "discriminating_pct": 52.75,
                "n_distinct": null,
                "p05": "-14.4735",
                "p50": "3.86",
                "p95": "22.863501",
                "min": "-99.68000030517578",
                "max": "515.8800048828125",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "total_return_12m_pct",
                "label": "Total 12M",
                "short": "Total 12M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Twelve N-PORT monthly total returns chained. NULL unless all twelve months are present, so a partial chain cannot rank funds by how completely they file. Its window ends at Total Return As Of — the last N-PORT filing, typically one to five months stale — NOT at today. DO NOT difference it against Return 1Y: over an identical window it runs ~1.25pp above the price return (that gap is the distribution: ETFs 2.5pp, mutual funds 5.3pp), but the raw difference between the two columns is mostly the market move in the months their windows do not share.",
                "fill_pct": 55.55,
                "discriminating_pct": 55.48,
                "n_distinct": null,
                "p05": "-8.79403",
                "p50": "13.20705",
                "p95": "45.4082",
                "min": "-98.7609",
                "max": "650.6379",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "total_return_1m_pct",
                "label": "Total 1M",
                "short": "Total 1M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "The filer's own monthly TOTAL return from N-PORT Item B.5 — distributions INCLUDED, unlike the price returns above. Share-class grain: two classes of one fund differ by their fee.",
                "fill_pct": 60.76,
                "discriminating_pct": 60.1,
                "n_distinct": null,
                "p05": "-4.5551",
                "p50": "1.0304",
                "p95": "10.94",
                "min": "-95.12",
                "max": "95.14",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "total_return_3m_pct",
                "label": "Total 3M",
                "short": "Total 3M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Three N-PORT monthly total returns chained geometrically. NULL unless all three months are on file.",
                "fill_pct": 60.32,
                "discriminating_pct": 60.2,
                "n_distinct": null,
                "p05": "-6.4822",
                "p50": "2.7409",
                "p95": "19.308",
                "min": "-96.3245",
                "max": "259.214",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "total_return_6m_pct",
                "label": "Total 6M",
                "short": "Total 6M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Returns",
                "statement_order": 4,
                "filter_shape": "range",
                "description": "Six N-PORT monthly total returns chained geometrically. NULL unless all six months are on file.",
                "fill_pct": 58.83,
                "discriminating_pct": 58.74,
                "n_distinct": null,
                "p05": "-9.25042",
                "p50": "5.2188",
                "p95": "23.63046",
                "min": "-97.304",
                "max": "396.4383",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "large_cap_pct",
                "label": "Large Cap",
                "short": "Large Cap",
                "datatype": "%",
                "unit": "percent",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Share of covered equity in companies of $10B to $200B.",
                "fill_pct": 23.83,
                "discriminating_pct": 23.31,
                "n_distinct": null,
                "p05": "6.56",
                "p50": "45.32",
                "p95": "86.51",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "market_cap_coverage_pct",
                "label": "Cap Coverage",
                "short": "Cap Coverage",
                "datatype": "%",
                "unit": "percent",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Share of equity exposure that resolved to a market cap. US-only source, so international funds run low: VOO 96%, VWO 3%. BELOW 70 THE CAP AND VALUATION COLUMNS ARE BLANKED — do not render them.",
                "fill_pct": 57,
                "discriminating_pct": 38.31,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "44.53",
                "p95": "99.71",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "mega_cap_pct",
                "label": "Mega Cap",
                "short": "Mega Cap",
                "datatype": "%",
                "unit": "percent",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Share of covered equity in companies above $200B.",
                "fill_pct": 23.83,
                "discriminating_pct": 16.64,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "27.09",
                "p95": "74.7685",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "micro_cap_pct",
                "label": "Micro Cap",
                "short": "Micro Cap",
                "datatype": "%",
                "unit": "percent",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Share of covered equity in companies below $300M.",
                "fill_pct": 23.83,
                "discriminating_pct": 6.95,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "2.619",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "mid_cap_pct",
                "label": "Mid Cap",
                "short": "Mid Cap",
                "datatype": "%",
                "unit": "percent",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Share of covered equity in companies of $2B to $10B.",
                "fill_pct": 23.83,
                "discriminating_pct": 20.58,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "7.11",
                "p95": "69.3475",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "size_style",
                "label": "Size Style",
                "short": "size_style",
                "datatype": "text",
                "unit": "text",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "enum",
                "description": "Large Cap, Mid Cap, Small Cap or Multi Cap, from the cap ladder. Null below 70% coverage.",
                "fill_pct": 23.83,
                "discriminating_pct": 6.4,
                "n_distinct": 4,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Large Cap",
                    "Mid Cap",
                    "Multi Cap",
                    "Small Cap"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "small_cap_pct",
                "label": "Small Cap",
                "short": "Small Cap",
                "datatype": "%",
                "unit": "percent",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Share of covered equity in companies of $300M to $2B.",
                "fill_pct": 23.83,
                "discriminating_pct": 12.59,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.14",
                "p95": "24.3985",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "wavg_market_cap_usd",
                "label": "Avg Mkt Cap",
                "short": "Avg Mkt Cap",
                "datatype": "int",
                "unit": "usd",
                "statement": "Market Cap",
                "statement_order": 5,
                "filter_shape": "range",
                "description": "Value-weighted average market capitalisation of the equity holdings. Null below 70% coverage.",
                "fill_pct": 23.83,
                "discriminating_pct": 23.83,
                "n_distinct": null,
                "p05": "4911275739.0",
                "p50": "283460107507.0",
                "p95": "1980172619318.1492",
                "min": "2786441.0",
                "max": "5551676014709.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "lookthrough_dividend_yield_pct",
                "label": "Look-Through Yield",
                "short": "Look-Through Yield",
                "datatype": "%",
                "unit": "percent",
                "statement": "Valuation",
                "statement_order": 6,
                "filter_shape": "range",
                "description": "Value-weighted dividend yield of the equity holdings. Arithmetic, because yields are additive. NOT the fund's own distribution yield, which we cannot yet serve.",
                "fill_pct": 23.16,
                "discriminating_pct": 21.13,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "3.951",
                "p95": "10.643",
                "min": "0.0",
                "max": "29.172",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "lookthrough_ev_ebitda",
                "label": "EV/EBITDA",
                "short": "EV/EBITDA",
                "datatype": "int",
                "unit": "number",
                "statement": "Valuation",
                "statement_order": 6,
                "filter_shape": "range",
                "description": "Harmonic weighted enterprise value to EBITDA of the equity holdings.",
                "fill_pct": 23.73,
                "discriminating_pct": 23.73,
                "n_distinct": null,
                "p05": "5.6",
                "p50": "12.95",
                "p95": "27.23",
                "min": "0.7",
                "max": "262.6",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "lookthrough_pe",
                "label": "P/E",
                "short": "P/E",
                "datatype": "int",
                "unit": "number",
                "statement": "Valuation",
                "statement_order": 6,
                "filter_shape": "range",
                "description": "Harmonic weighted price/earnings of the equity holdings — the index-provider standard. Loss-makers are excluded rather than dragging the ratio negative. VUG 29.9 vs VTV 20.9 is the growth/value spread.",
                "fill_pct": 23.71,
                "discriminating_pct": 23.71,
                "n_distinct": null,
                "p05": "13.47",
                "p50": "22.33",
                "p95": "34.63",
                "min": "2.62",
                "max": "316.69",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "lookthrough_ps",
                "label": "P/S",
                "short": "P/S",
                "datatype": "int",
                "unit": "number",
                "statement": "Valuation",
                "statement_order": 6,
                "filter_shape": "range",
                "description": "Harmonic weighted price/sales of the equity holdings.",
                "fill_pct": 23.78,
                "discriminating_pct": 23.78,
                "n_distinct": null,
                "p05": "0.87",
                "p50": "2.36",
                "p95": "6.62",
                "min": "0.02",
                "max": "100.85",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "derivative_pct",
                "label": "Derivatives",
                "short": "Derivatives",
                "datatype": "%",
                "unit": "percent",
                "statement": "Asset Mix",
                "statement_order": 7,
                "filter_shape": "range",
                "description": "Share of gross exposure in derivatives. Large for inverse and leveraged funds.",
                "fill_pct": 70.27,
                "discriminating_pct": 24.92,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "7.0425",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "equity_pct",
                "label": "Equity",
                "short": "Equity",
                "datatype": "%",
                "unit": "percent",
                "statement": "Asset Mix",
                "statement_order": 7,
                "filter_shape": "range",
                "description": "Share of gross exposure in equities.",
                "fill_pct": 70.27,
                "discriminating_pct": 56.86,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "96.0174",
                "p95": "100.0",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "fixed_income_pct",
                "label": "Fixed Income",
                "short": "Fixed Income",
                "datatype": "%",
                "unit": "percent",
                "statement": "Asset Mix",
                "statement_order": 7,
                "filter_shape": "range",
                "description": "Share of gross exposure in bonds and other debt.",
                "fill_pct": 70.27,
                "discriminating_pct": 28,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "99.4421",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "fund_cash_pct",
                "label": "Fund & Cash",
                "short": "Fund & Cash",
                "datatype": "%",
                "unit": "percent",
                "statement": "Asset Mix",
                "statement_order": 7,
                "filter_shape": "range",
                "description": "Share of gross exposure in other funds and cash equivalents.",
                "fill_pct": 70.27,
                "discriminating_pct": 50.62,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.88685",
                "p95": "23.5821",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "other_asset_pct",
                "label": "Other Assets",
                "short": "Other Assets",
                "datatype": "%",
                "unit": "percent",
                "statement": "Asset Mix",
                "statement_order": 7,
                "filter_shape": "range",
                "description": "Share of gross exposure the classifier had no opinion on. Not an asset class — a coverage gap, and excluded from the Category denominator for that reason.",
                "fill_pct": 70.27,
                "discriminating_pct": 8.31,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "21.0331",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_basic_materials_pct",
                "label": "Basic Materials",
                "short": "Basic Materials",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Basic Materials. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 36.28,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.1107",
                "p95": "5.824",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_communication_services_pct",
                "label": "Communication Services",
                "short": "Communication Services",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Communication Services. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 29.06,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "4.1631",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_consumer_discretionary_pct",
                "label": "Consumer Discretionary",
                "short": "Consumer Discretionary",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Consumer Discretionary. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 40.09,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.8947",
                "p95": "11.1852",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_consumer_staples_pct",
                "label": "Consumer Staples",
                "short": "Consumer Staples",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Consumer Staples. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 36.02,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.1278",
                "p95": "6.621",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_energy_pct",
                "label": "Energy",
                "short": "Energy",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Energy. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 35.54,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0549",
                "p95": "7.9097",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_financial_services_pct",
                "label": "Financial Services",
                "short": "Financial Services",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Financial Services. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 44.83,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "3.3263",
                "p95": "20.806085",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_healthcare_pct",
                "label": "Healthcare",
                "short": "Healthcare",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Healthcare. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 39.66,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.9087",
                "p95": "15.408905",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_industrials_pct",
                "label": "Industrials",
                "short": "Industrials",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Industrials. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 42.41,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "1.6794",
                "p95": "23.96048",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_other_pct",
                "label": "Other / Unclass.",
                "short": "Other / Unclass.",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure with no equity sector: every bond, plus foreign listings absent from the industry classification. Median 60%. LARGE IS NORMAL — VOO 6%, AGG 36%, VWO 91%. Do not hide, merge or rename it.",
                "fill_pct": 70.27,
                "discriminating_pct": 69.76,
                "n_distinct": null,
                "p05": "1.915805",
                "p50": "70.8227",
                "p95": "100.0",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_real_estate_pct",
                "label": "Real Estate",
                "short": "Real Estate",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Real Estate. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 31.36,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "6.05427",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_technology_pct",
                "label": "Technology",
                "short": "Technology",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Technology. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 44.34,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "2.76465",
                "p95": "48.8275",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sector_utilities_pct",
                "label": "Utilities",
                "short": "Utilities",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Share of gross exposure in Utilities. Percent of absolute market value, renormalised to 100.",
                "fill_pct": 70.27,
                "discriminating_pct": 30.64,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "4.5551",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "top_sector",
                "label": "Top Sector",
                "short": "top_sector",
                "datatype": "text",
                "unit": "text",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "enum",
                "description": "Largest classified sector, excluding the unclassified bucket.",
                "fill_pct": 50.52,
                "discriminating_pct": 30.9,
                "n_distinct": 11,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Technology",
                    "Financial Services",
                    "Industrials",
                    "Healthcare",
                    "Consumer Discretionary",
                    "Energy",
                    "Real Estate",
                    "Basic Materials",
                    "Utilities",
                    "Communication Services",
                    "Consumer Staples"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "top_sector_pct",
                "label": "Top Sector %",
                "short": "Top Sector %",
                "datatype": "%",
                "unit": "percent",
                "statement": "Sector",
                "statement_order": 8,
                "filter_shape": "range",
                "description": "Weight of the largest classified sector.",
                "fill_pct": 50.35,
                "discriminating_pct": 50.35,
                "n_distinct": null,
                "p05": "19.4003",
                "p50": "37.5037",
                "p95": "100.0",
                "min": "12.0456",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "average_coupon_pct",
                "label": "Avg Coupon",
                "short": "Avg Coupon",
                "datatype": "%",
                "unit": "percent",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Market-value-weighted average annual coupon of the fund's debt holdings, as filed. Not a yield: it ignores the price paid, so it says what the bonds pay, not what the investor earns.",
                "fill_pct": 28.63,
                "discriminating_pct": 23.62,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "4.1422",
                "p95": "6.9652",
                "min": "0.0",
                "max": "809.6128",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "corporate_pct",
                "label": "Corporate",
                "short": "Corporate",
                "datatype": "%",
                "unit": "percent",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Share of gross exposure in corporate issuers.",
                "fill_pct": 70.27,
                "discriminating_pct": 56.69,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "88.0586",
                "p95": "100.0",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "dated_holdings_count",
                "label": "Dated Holdings",
                "short": "Dated Holdings",
                "datatype": "int",
                "unit": "number",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "How many positions carried a maturity date. The denominator behind Effective Maturity, and the gate for whether to show it at all: zero means the fund filed no dated instrument.",
                "fill_pct": 70.76,
                "discriminating_pct": 28.85,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "829.0",
                "min": "0",
                "max": "169111",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "duration_band",
                "label": "Rate Sensitivity",
                "short": "Rate Sensitivity",
                "datatype": "str",
                "unit": "number",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "enum",
                "description": "Which interest-rate sensitivity band the fund falls in, from its own effective duration: Limited under 3.5 years, Moderate 3.5 to 6, Extensive above 6. The axis bond funds are actually compared on, and the peer group the maturity schedule is measured against. Null wherever effective duration is.",
                "fill_pct": 19.98,
                "discriminating_pct": 10.56,
                "n_distinct": 3,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "Limited",
                    "Extensive",
                    "Moderate"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "effective_duration_years",
                "label": "Effective Duration",
                "short": "Effective Duration",
                "datatype": "float",
                "unit": "number",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "How much the fund moves when rates move: the percentage change in value for a one-percentage-point shift in rates. Taken from the fund's own DV01 as filed under N-PORT Item B.3, so it carries the manager's own prepayment and call assumptions, and it reproduces published factsheets to within about 2%. This, not maturity, is the number to compare bond funds on for rate risk -- under 3 is short, 3-7 intermediate, over 7 long. Null for a fund with no rate exposure or an implausible filing; do not render it as zero.",
                "fill_pct": 19.98,
                "discriminating_pct": 19.7,
                "n_distinct": null,
                "p05": "0.1",
                "p50": "3.92",
                "p95": "8.4",
                "min": "0.0",
                "max": "27.17",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "effective_maturity_years",
                "label": "Effective Maturity",
                "short": "Effective Maturity",
                "datatype": "float",
                "unit": "number",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "When the fund's principal is actually expected back, which is what a factsheet means by average effective maturity and the figure to compare a bond fund on. Modelled from the filing's own terms -- amortisation for mortgage and asset-backed paper, the call for perpetual preferreds -- and calibrated so the projection reproduces the duration the fund itself filed, so the prepayment speed is the manager's rather than ours. It matches published figures to about 2%. Null where the filed rate-risk data was not good enough to calibrate against.",
                "fill_pct": 19.96,
                "discriminating_pct": 19.86,
                "n_distinct": null,
                "p05": "0.158795",
                "p50": "6.64",
                "p95": "20.69",
                "min": "0.0",
                "max": "30.5",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "municipal_pct",
                "label": "Municipal",
                "short": "Municipal",
                "datatype": "%",
                "unit": "percent",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Share of gross exposure in municipal issues. The tax-exempt income screen.",
                "fill_pct": 70.27,
                "discriminating_pct": 9.61,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "95.6769",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "non_us_sovereign_pct",
                "label": "Non-US Sovereign",
                "short": "Non-US Sovereign",
                "datatype": "%",
                "unit": "percent",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Share of gross exposure in non-US sovereign and state issuers.",
                "fill_pct": 70.27,
                "discriminating_pct": 10.6,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "3.766",
                "min": "0.0",
                "max": "99.6192",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "us_agency_gse_pct",
                "label": "Agency & GSE",
                "short": "Agency & GSE",
                "datatype": "%",
                "unit": "percent",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Share of gross exposure in US government agency and government-sponsored entity issues.",
                "fill_pct": 70.27,
                "discriminating_pct": 12.84,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "21.7569",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "us_treasury_pct",
                "label": "Treasury",
                "short": "Treasury",
                "datatype": "%",
                "unit": "percent",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Share of gross exposure in US Treasury issues.",
                "fill_pct": 70.27,
                "discriminating_pct": 17.06,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "36.584585",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "weighted_average_maturity_years",
                "label": "Avg Legal Maturity",
                "short": "Avg Legal Maturity",
                "datatype": "float",
                "unit": "number",
                "statement": "Bond Character",
                "statement_order": 9,
                "filter_shape": "range",
                "description": "Market-value-weighted average years to maturity across the fund's dated holdings, measured from the portfolio date. This is when the paper legally comes due, not how it behaves: on a mortgage book it runs 40-54% above the fund's own Effective Duration, because a 30-year pool prepays. Screen rate risk on Effective Duration and use this for the legal profile. Null for a fund holding nothing dated, which is every equity fund -- do not render it as zero. Perpetual issues are excluded from the average and counted separately.",
                "fill_pct": 28.88,
                "discriminating_pct": 27.57,
                "n_distinct": null,
                "p05": "0.002738",
                "p50": "7.485",
                "p95": "22.3895",
                "min": "-12.91",
                "max": "98.52",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "country_us_pct",
                "label": "US Weight",
                "short": "US Weight",
                "datatype": "%",
                "unit": "percent",
                "statement": "Geography",
                "statement_order": 10,
                "filter_shape": "range",
                "description": "Share of gross exposure in US-domiciled issuers. Region rollups are NOT shipped: N-PORT reports country of incorporation, so offshore-incorporated issuers land in the wrong region.",
                "fill_pct": 70.27,
                "discriminating_pct": 69.53,
                "n_distinct": null,
                "p05": "2.4891",
                "p50": "93.0108",
                "p95": "100.0",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "top_country",
                "label": "Top Country",
                "short": "top_country",
                "datatype": "text",
                "unit": "text",
                "statement": "Geography",
                "statement_order": 10,
                "filter_shape": "enum",
                "description": "Largest issuer country by gross exposure.",
                "fill_pct": 70.28,
                "discriminating_pct": 8.45,
                "n_distinct": 62,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": [
                    "United States",
                    "Japan",
                    "United Kingdom",
                    "Taiwan",
                    "South Korea",
                    "Cayman Islands",
                    "China",
                    "Mexico",
                    "Canada",
                    "France",
                    "India",
                    "Netherlands",
                    "Brazil",
                    "Hong Kong",
                    "Australia",
                    "Germany",
                    "Indonesia",
                    "Singapore",
                    "Switzerland",
                    "Vietnam",
                    "South Africa",
                    "Venezuela",
                    "N/A",
                    "Bermuda",
                    "Malaysia",
                    "Saudi Arabia",
                    "Turkey",
                    "Russia",
                    "Israel",
                    "Peru",
                    "Sweden",
                    "Unknown",
                    "Hungary",
                    "Ireland",
                    "Italy",
                    "Philippines",
                    "Argentina",
                    "Greece",
                    "Kuwait",
                    "New Zealand",
                    "Norway",
                    "Poland",
                    "Spain",
                    "Uruguay",
                    "Colombia",
                    "Luxembourg",
                    "Nigeria",
                    "Austria",
                    "Denmark",
                    "Qatar",
                    "Thailand",
                    "Belgium",
                    "Chile",
                    "Egypt",
                    "El Salvador",
                    "Finland",
                    "Iceland",
                    "Jersey",
                    "Pakistan",
                    "Portugal",
                    "Puerto Rico",
                    "United Arab Emirates"
                ],
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "holdings_count",
                "label": "Holdings",
                "short": "holdings_count",
                "datatype": "int",
                "unit": "count",
                "statement": "Portfolio",
                "statement_order": 11,
                "filter_shape": "range",
                "description": "Number of positions in the latest snapshot. Median 87, maximum 18,136.",
                "fill_pct": 70.76,
                "discriminating_pct": 70.76,
                "n_distinct": null,
                "p05": "5.0",
                "p50": "83.0",
                "p95": "1279.0",
                "min": "1",
                "max": "169111",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "short_pct",
                "label": "Short",
                "short": "Short",
                "datatype": "%",
                "unit": "percent",
                "statement": "Portfolio",
                "statement_order": 11,
                "filter_shape": "range",
                "description": "Share of gross exposure in short positions. Zero for a long-only fund, which is most of them.",
                "fill_pct": 70.27,
                "discriminating_pct": 20.81,
                "n_distinct": null,
                "p05": "0.0",
                "p50": "0.0",
                "p95": "6.14409",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "effective_holdings",
                "label": "Effective Holdings",
                "short": "effective_holdings",
                "datatype": "int",
                "unit": "count",
                "statement": "Concentration",
                "statement_order": 12,
                "filter_shape": "range",
                "description": "1 divided by the sum of squared weights: the number of EQUAL-weighted positions carrying the same concentration. VOO holds 506 securities and has an effective 48.",
                "fill_pct": 70.27,
                "discriminating_pct": 70.27,
                "n_distinct": null,
                "p05": "1.85",
                "p50": "38.855",
                "p95": "251.53",
                "min": "1.0",
                "max": "23955.4",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "top10_weight_pct",
                "label": "Top 10",
                "short": "Top 10",
                "datatype": "%",
                "unit": "percent",
                "statement": "Concentration",
                "statement_order": 12,
                "filter_shape": "range",
                "description": "Combined weight of the ten largest positions, computed on gross exposure.",
                "fill_pct": 70.39,
                "discriminating_pct": 70.27,
                "n_distinct": null,
                "p05": "10.25006",
                "p50": "37.6562",
                "p95": "100.0",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "top1_weight_pct",
                "label": "Largest Position",
                "short": "top1_weight_pct",
                "datatype": "%",
                "unit": "percent",
                "statement": "Concentration",
                "statement_order": 12,
                "filter_shape": "range",
                "description": "Weight of the single largest position.",
                "fill_pct": 70.27,
                "discriminating_pct": 70.27,
                "n_distinct": null,
                "p05": "1.76954",
                "p50": "7.1284",
                "p95": "68.84204",
                "min": "0.0506",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "topholding_cusip",
                "label": "topholding_cusip",
                "short": "topholding_cusip",
                "datatype": "text",
                "unit": "text",
                "statement": "Concentration",
                "statement_order": 12,
                "filter_shape": "text",
                "description": "CUSIP of the largest position's issuer.",
                "fill_pct": 63.75,
                "discriminating_pct": 59.17,
                "n_distinct": 4163,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "topholding_name",
                "label": "Top Holding",
                "short": "topholding_name",
                "datatype": "text",
                "unit": "text",
                "statement": "Concentration",
                "statement_order": 12,
                "filter_shape": "text",
                "description": "Name of the largest position, as the holding was filed. Group or filter on topholding_ticker instead: the same issuer is filed under many spellings.",
                "fill_pct": 69.64,
                "discriminating_pct": 67.79,
                "n_distinct": 5102,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "topholding_ticker",
                "label": "topholding_ticker",
                "short": "topholding_ticker",
                "datatype": "text",
                "unit": "text",
                "statement": "Concentration",
                "statement_order": 12,
                "filter_shape": "text",
                "description": "Ticker of the largest position's issuer. The groupable form of topholding_name; null where the holding has no listed issuer -- cash sweeps, money-market funds, Treasuries, munis -- which is roughly a fifth of funds.",
                "fill_pct": 47.41,
                "discriminating_pct": 42.83,
                "n_distinct": 2399,
                "p05": null,
                "p50": null,
                "p95": null,
                "min": null,
                "max": null,
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "flow_positive_months_pct",
                "label": "Positive Months",
                "short": "Positive Months",
                "datatype": "%",
                "unit": "percent",
                "statement": "Flows",
                "statement_order": 13,
                "filter_shape": "range",
                "description": "Share of observed months with net inflows. A persistence measure, not a magnitude.",
                "fill_pct": 70.38,
                "discriminating_pct": 69.23,
                "n_distinct": null,
                "p05": "8.64",
                "p50": "55.56",
                "p95": "98.81",
                "min": "0.0",
                "max": "100.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_flow_12m_pct",
                "label": "Flow 12M %",
                "short": "Flow 12M %",
                "datatype": "%",
                "unit": "percent",
                "statement": "Flows",
                "statement_order": 13,
                "filter_shape": "range",
                "description": "Trailing twelve-month net flow as a percent of net assets.",
                "fill_pct": 68.14,
                "discriminating_pct": 67.51,
                "n_distinct": null,
                "p05": "-55.7315",
                "p50": "0.7447",
                "p95": "92.26653",
                "min": "-4024.6383",
                "max": "39429.0407",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_flow_12m_usd",
                "label": "Flow 12M",
                "short": "Flow 12M",
                "datatype": "int",
                "unit": "usd",
                "statement": "Flows",
                "statement_order": 13,
                "filter_shape": "range",
                "description": "Trailing twelve-month net flow in dollars. Negative means redemptions exceeded sales. Sorting on this re-sorts by fund size; use the percent version.",
                "fill_pct": 70.38,
                "discriminating_pct": 69.74,
                "n_distinct": null,
                "p05": "-492293201.49",
                "p50": "520096.43",
                "p95": "1426500649.69",
                "min": "-97164387947.86003",
                "max": "125045813402.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_flow_1m_pct",
                "label": "Flow 1M %",
                "short": "Flow 1M %",
                "datatype": "%",
                "unit": "percent",
                "statement": "Flows",
                "statement_order": 13,
                "filter_shape": "range",
                "description": "Trailing one-month net flow as a percent of net assets. Size-neutral — rank on this, not the dollar figure.",
                "fill_pct": 68.14,
                "discriminating_pct": 64.4,
                "n_distinct": null,
                "p05": "-9.12845",
                "p50": "-0.1771",
                "p95": "8.6102",
                "min": "-195.8528",
                "max": "198.521",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "net_flow_3m_pct",
                "label": "Flow 3M %",
                "short": "Flow 3M %",
                "datatype": "%",
                "unit": "percent",
                "statement": "Flows",
                "statement_order": 13,
                "filter_shape": "range",
                "description": "Trailing three-month net flow as a percent of net assets.",
                "fill_pct": 68.14,
                "discriminating_pct": 66.16,
                "n_distinct": null,
                "p05": "-23.226555",
                "p50": "-0.6905",
                "p95": "26.305685",
                "min": "-879.1015",
                "max": "1338.1502",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "fund_age_years",
                "label": "Fund Age",
                "short": "Age",
                "datatype": "int",
                "unit": "years",
                "statement": "Cost of Ownership",
                "statement_order": 14,
                "filter_shape": "range",
                "description": "Years since the fund began operations. Fund-level, not share-class.",
                "fill_pct": 40.67,
                "discriminating_pct": 40.67,
                "n_distinct": null,
                "p05": "3.4",
                "p50": "12.22",
                "p95": "34.68",
                "min": "0.15",
                "max": "98.58",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "portfolio_turnover_pct",
                "label": "Turnover",
                "short": "portfolio_turnover_pct",
                "datatype": "%",
                "unit": "percent",
                "statement": "Cost of Ownership",
                "statement_order": 14,
                "filter_shape": "range",
                "description": "Percent of holdings replaced during the last fiscal year. High turnover implies trading cost and tax drag. Figures beyond 1500% are filer errors and are nulled.",
                "fill_pct": 75.52,
                "discriminating_pct": 72.68,
                "n_distinct": null,
                "p05": "3.0",
                "p50": "44.0",
                "p95": "241.02",
                "min": "0.0",
                "max": "1495.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "credit_spread_hy_10y_usd",
                "label": "Spread HY",
                "short": "Spread HY",
                "datatype": "int",
                "unit": "usd",
                "statement": "Risk",
                "statement_order": 15,
                "filter_shape": "range",
                "description": "Non-investment-grade spread duration risk at the 10-year tenor, in dollars per basis point.",
                "fill_pct": 24.39,
                "discriminating_pct": 15.89,
                "n_distinct": null,
                "p05": "-139110.41",
                "p50": "0.0",
                "p95": "29058.175277",
                "min": "-7268864.69",
                "max": "1724451.26",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "credit_spread_ig_10y_usd",
                "label": "Spread IG",
                "short": "Spread IG",
                "datatype": "int",
                "unit": "usd",
                "statement": "Risk",
                "statement_order": 15,
                "filter_shape": "range",
                "description": "Investment-grade spread duration risk at the 10-year tenor, in dollars per basis point.",
                "fill_pct": 24.39,
                "discriminating_pct": 17.73,
                "n_distinct": null,
                "p05": "-787747.55",
                "p50": "0.0",
                "p95": "220792.8",
                "min": "-110503078.16",
                "max": "22106182.58",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "dv01_10y_bp_per_10k",
                "label": "DV01 10Y",
                "short": "DV01 10Y",
                "datatype": "int",
                "unit": "usd",
                "statement": "Risk",
                "statement_order": 15,
                "filter_shape": "range",
                "description": "Dollar change per basis point at the 10-year tenor, scaled to a $10,000 holding. THE size-neutral duration proxy. Bond funds only — roughly 30% coverage is the bond share of the universe, not a gap.",
                "fill_pct": 24.3,
                "discriminating_pct": 17.79,
                "n_distinct": null,
                "p05": "-3.3762",
                "p50": "0.0",
                "p95": "2.73257",
                "min": "-18.7024",
                "max": "1643.0036",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "liabilities_pct_net_assets",
                "label": "Liabilities %",
                "short": "Liabilities %",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk",
                "statement_order": 15,
                "filter_shape": "range",
                "description": "Total liabilities as a percent of net assets. The broadest leverage read.",
                "fill_pct": 67.99,
                "discriminating_pct": 67.71,
                "n_distinct": null,
                "p05": "0.0231",
                "p50": "0.6193",
                "p95": "30.320035",
                "min": "0.0",
                "max": "675655.4899",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "tracking_difference_pct",
                "label": "Tracking Diff.",
                "short": "Tracking Diff.",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk",
                "statement_order": 15,
                "filter_shape": "range",
                "description": "Index fund return minus its index, after expenses, as filed in N-CEN. Negative is normal and roughly equals the fee — IVV -0.02, VOO -0.169, median -0.185. THE measure of whether an index fund does its job.",
                "fill_pct": 6.33,
                "discriminating_pct": 6.23,
                "n_distinct": null,
                "p05": "-1.6725",
                "p50": "-0.16",
                "p95": "1.4825",
                "min": "-24.542982011238",
                "max": "24.34",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "tracking_error_pct",
                "label": "Tracking Error",
                "short": "tracking_error_pct",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk",
                "statement_order": 15,
                "filter_shape": "range",
                "description": "Daily standard deviation of that return difference, after expenses. Near zero for a domestic index fund (IVV 0.03); large for international funds, where fair-value pricing makes daily NAV and index diverge.",
                "fill_pct": 6.27,
                "discriminating_pct": 6.09,
                "n_distinct": null,
                "p05": "0.001099",
                "p50": "0.32",
                "p95": "13.941933",
                "min": "0.0",
                "max": "24.5395976",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "std_dev_6m_pct",
                "label": "Std Dev 6M",
                "short": "Std Dev 6M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised standard deviation of daily price returns over the trailing 6M window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.",
                "fill_pct": 53.76,
                "discriminating_pct": 51.88,
                "n_distinct": null,
                "p05": "1.1925",
                "p50": "12.73",
                "p95": "32.8775",
                "min": "0.0",
                "max": "196.16",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "std_dev_ytd_pct",
                "label": "Std Dev YTD",
                "short": "Std Dev YTD",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised standard deviation of daily price returns over the trailing YTD window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.",
                "fill_pct": 49.63,
                "discriminating_pct": 48.45,
                "n_distinct": null,
                "p05": "1.51",
                "p50": "12.78",
                "p95": "30.84",
                "min": "0.0",
                "max": "206.02",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "std_dev_1y_pct",
                "label": "Std Dev 1Y",
                "short": "Std Dev 1Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised standard deviation of daily price returns over the trailing 1Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.",
                "fill_pct": 50.51,
                "discriminating_pct": 49.4,
                "n_distinct": null,
                "p05": "1.5",
                "p50": "13.1",
                "p95": "30.06",
                "min": "0.0",
                "max": "181.76",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "std_dev_2y_pct",
                "label": "Std Dev 2Y",
                "short": "Std Dev 2Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised standard deviation of daily price returns over the trailing 2Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.",
                "fill_pct": 45.44,
                "discriminating_pct": 45.43,
                "n_distinct": null,
                "p05": "2.38",
                "p50": "14.7",
                "p95": "28.23",
                "min": "0.0",
                "max": "139.88",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "std_dev_3y_pct",
                "label": "Std Dev 3Y",
                "short": "Std Dev 3Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised standard deviation of daily price returns over the trailing 3Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.",
                "fill_pct": 42.76,
                "discriminating_pct": 42.02,
                "n_distinct": null,
                "p05": "1.92",
                "p50": "13.99",
                "p95": "26.061",
                "min": "0.0",
                "max": "114.33",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "std_dev_5y_pct",
                "label": "Std Dev 5Y",
                "short": "Std Dev 5Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised standard deviation of daily price returns over the trailing 5Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.",
                "fill_pct": 36.24,
                "discriminating_pct": 36.24,
                "n_distinct": null,
                "p05": "2.7",
                "p50": "15.72",
                "p95": "27.677",
                "min": "0.11",
                "max": "96.92",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "max_drawdown_6m_pct",
                "label": "Max Drawdown 6M",
                "short": "Max Drawdown 6M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Worst peak-to-trough decline inside the trailing 6M window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.",
                "fill_pct": 53.76,
                "discriminating_pct": 51.85,
                "n_distinct": null,
                "p05": "-23.06",
                "p50": "-5.65",
                "p95": "-0.6",
                "min": "-98.95",
                "max": "0.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "max_drawdown_ytd_pct",
                "label": "Max Drawdown YTD",
                "short": "Max Drawdown YTD",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Worst peak-to-trough decline inside the trailing YTD window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.",
                "fill_pct": 49.63,
                "discriminating_pct": 48.44,
                "n_distinct": null,
                "p05": "-23.882",
                "p50": "-8.46",
                "p95": "-1.47",
                "min": "-99.7",
                "max": "0.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "max_drawdown_1y_pct",
                "label": "Max Drawdown 1Y",
                "short": "Max Drawdown 1Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Worst peak-to-trough decline inside the trailing 1Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.",
                "fill_pct": 50.51,
                "discriminating_pct": 49.39,
                "n_distinct": null,
                "p05": "-31.11",
                "p50": "-9.82",
                "p95": "-1.8",
                "min": "-99.92",
                "max": "0.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "max_drawdown_2y_pct",
                "label": "Max Drawdown 2Y",
                "short": "Max Drawdown 2Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Worst peak-to-trough decline inside the trailing 2Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.",
                "fill_pct": 45.44,
                "discriminating_pct": 45.42,
                "n_distinct": null,
                "p05": "-36.955",
                "p50": "-16.63",
                "p95": "-3.4225",
                "min": "-97.18",
                "max": "0.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "max_drawdown_3y_pct",
                "label": "Max Drawdown 3Y",
                "short": "Max Drawdown 3Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Worst peak-to-trough decline inside the trailing 3Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.",
                "fill_pct": 42.76,
                "discriminating_pct": 42.01,
                "n_distinct": null,
                "p05": "-38.691",
                "p50": "-16.99",
                "p95": "-2.46",
                "min": "-99.58",
                "max": "0.0",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "max_drawdown_5y_pct",
                "label": "Max Drawdown 5Y",
                "short": "Max Drawdown 5Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Worst peak-to-trough decline inside the trailing 5Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.",
                "fill_pct": 36.24,
                "discriminating_pct": 36.24,
                "n_distinct": null,
                "p05": "-54.65",
                "p50": "-29.09",
                "p95": "-10.13",
                "min": "-99.71",
                "max": "-0.04",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sharpe_6m",
                "label": "Sharpe 6M",
                "short": "Sharpe 6M",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 6M window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.",
                "fill_pct": 51.31,
                "discriminating_pct": 51.29,
                "n_distinct": null,
                "p05": "-3.31455",
                "p50": "0.461",
                "p95": "1.82155",
                "min": "-7.42",
                "max": "6.274",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sharpe_ytd",
                "label": "Sharpe YTD",
                "short": "Sharpe YTD",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing YTD window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.",
                "fill_pct": 47.97,
                "discriminating_pct": 47.96,
                "n_distinct": null,
                "p05": "-3.118",
                "p50": "0.449",
                "p95": "1.704",
                "min": "-9.408",
                "max": "5.405",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sharpe_1y",
                "label": "Sharpe 1Y",
                "short": "Sharpe 1Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 1Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.",
                "fill_pct": 48.93,
                "discriminating_pct": 48.91,
                "n_distinct": null,
                "p05": "-2.673",
                "p50": "0.008",
                "p95": "1.305",
                "min": "-6.914",
                "max": "4.44",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sharpe_2y",
                "label": "Sharpe 2Y",
                "short": "Sharpe 2Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 2Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.",
                "fill_pct": 45.09,
                "discriminating_pct": 45.07,
                "n_distinct": null,
                "p05": "-2.013",
                "p50": "0.058",
                "p95": "0.975",
                "min": "-4.708",
                "max": "1.955",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sharpe_3y",
                "label": "Sharpe 3Y",
                "short": "Sharpe 3Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 3Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.",
                "fill_pct": 41.71,
                "discriminating_pct": 41.7,
                "n_distinct": null,
                "p05": "-1.61305",
                "p50": "0.1765",
                "p95": "0.914",
                "min": "-4.788",
                "max": "1.51",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sharpe_5y",
                "label": "Sharpe 5Y",
                "short": "Sharpe 5Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 5Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.",
                "fill_pct": 36.01,
                "discriminating_pct": 35.98,
                "n_distinct": null,
                "p05": "-1.9995",
                "p50": "-0.197",
                "p95": "0.409",
                "min": "-4.284",
                "max": "1.178",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sortino_6m",
                "label": "Sortino 6M",
                "short": "Sortino 6M",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 6M window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.",
                "fill_pct": 51.31,
                "discriminating_pct": 51.3,
                "n_distinct": null,
                "p05": "-3.807",
                "p50": "0.667",
                "p95": "2.875",
                "min": "-9.024",
                "max": "2323.108",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sortino_ytd",
                "label": "Sortino YTD",
                "short": "Sortino YTD",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Like Sharpe but penalising only DOWNSIDE deviation, over the trailing YTD window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.",
                "fill_pct": 47.97,
                "discriminating_pct": 47.97,
                "n_distinct": null,
                "p05": "-3.5846",
                "p50": "0.645",
                "p95": "2.5946",
                "min": "-8.609",
                "max": "43.857",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sortino_1y",
                "label": "Sortino 1Y",
                "short": "Sortino 1Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 1Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.",
                "fill_pct": 48.93,
                "discriminating_pct": 48.91,
                "n_distinct": null,
                "p05": "-3.165",
                "p50": "0.009",
                "p95": "1.899",
                "min": "-6.906",
                "max": "24.551",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sortino_2y",
                "label": "Sortino 2Y",
                "short": "Sortino 2Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 2Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.",
                "fill_pct": 45.09,
                "discriminating_pct": 45.07,
                "n_distinct": null,
                "p05": "-2.453",
                "p50": "0.075",
                "p95": "1.405",
                "min": "-5.464",
                "max": "3.082",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sortino_3y",
                "label": "Sortino 3Y",
                "short": "Sortino 3Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 3Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.",
                "fill_pct": 41.71,
                "discriminating_pct": 41.7,
                "n_distinct": null,
                "p05": "-2.0407",
                "p50": "0.232",
                "p95": "1.312",
                "min": "-5.295",
                "max": "2.307",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "sortino_5y",
                "label": "Sortino 5Y",
                "short": "Sortino 5Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 5Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.",
                "fill_pct": 36.01,
                "discriminating_pct": 35.99,
                "n_distinct": null,
                "p05": "-2.4745",
                "p50": "-0.258",
                "p95": "0.579",
                "min": "-4.958",
                "max": "1.586",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "alpha_6m_pct",
                "label": "Alpha 6M",
                "short": "Alpha 6M",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised Jensen's alpha against Benchmark over the trailing 6M window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.",
                "fill_pct": 51.31,
                "discriminating_pct": 51.29,
                "n_distinct": null,
                "p05": "-32.05",
                "p50": "-6.715",
                "p95": "13.65",
                "min": "-847.21",
                "max": "282.56",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "alpha_ytd_pct",
                "label": "Alpha YTD",
                "short": "Alpha YTD",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised Jensen's alpha against Benchmark over the trailing YTD window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.",
                "fill_pct": 47.97,
                "discriminating_pct": 47.95,
                "n_distinct": null,
                "p05": "-23.37",
                "p50": "-3.42",
                "p95": "17.046",
                "min": "-778.88",
                "max": "334.95",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "alpha_1y_pct",
                "label": "Alpha 1Y",
                "short": "Alpha 1Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised Jensen's alpha against Benchmark over the trailing 1Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.",
                "fill_pct": 48.93,
                "discriminating_pct": 48.92,
                "n_distinct": null,
                "p05": "-28.04",
                "p50": "-6.23",
                "p95": "11.37",
                "min": "-588.3",
                "max": "354.17",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "alpha_2y_pct",
                "label": "Alpha 2Y",
                "short": "Alpha 2Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised Jensen's alpha against Benchmark over the trailing 2Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.",
                "fill_pct": 45.09,
                "discriminating_pct": 45.09,
                "n_distinct": null,
                "p05": "-18.838",
                "p50": "-5.69",
                "p95": "8.14",
                "min": "-140.68",
                "max": "92.22",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "alpha_3y_pct",
                "label": "Alpha 3Y",
                "short": "Alpha 3Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised Jensen's alpha against Benchmark over the trailing 3Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.",
                "fill_pct": 41.71,
                "discriminating_pct": 41.7,
                "n_distinct": null,
                "p05": "-15.78",
                "p50": "-4.67",
                "p95": "3.6435",
                "min": "-102.68",
                "max": "65.91",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "alpha_5y_pct",
                "label": "Alpha 5Y",
                "short": "Alpha 5Y",
                "datatype": "%",
                "unit": "percent",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Annualised Jensen's alpha against Benchmark over the trailing 5Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.",
                "fill_pct": 36.01,
                "discriminating_pct": 36,
                "n_distinct": null,
                "p05": "-15.92",
                "p50": "-7.16",
                "p95": "0.15",
                "min": "-49.72",
                "max": "40.72",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "beta_6m",
                "label": "Beta 6M",
                "short": "Beta 6M",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Slope of excess fund return regressed on excess benchmark return over the trailing 6M window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.",
                "fill_pct": 51.31,
                "discriminating_pct": 51.29,
                "n_distinct": null,
                "p05": "0.018",
                "p50": "0.626",
                "p95": "1.601",
                "min": "-8.163",
                "max": "8.868",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "beta_ytd",
                "label": "Beta YTD",
                "short": "Beta YTD",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Slope of excess fund return regressed on excess benchmark return over the trailing YTD window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.",
                "fill_pct": 47.97,
                "discriminating_pct": 47.95,
                "n_distinct": null,
                "p05": "0.022",
                "p50": "0.641",
                "p95": "1.562",
                "min": "-8.072",
                "max": "8.01",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "beta_1y",
                "label": "Beta 1Y",
                "short": "Beta 1Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Slope of excess fund return regressed on excess benchmark return over the trailing 1Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.",
                "fill_pct": 48.93,
                "discriminating_pct": 48.9,
                "n_distinct": null,
                "p05": "0.023",
                "p50": "0.632",
                "p95": "1.472",
                "min": "-5.504",
                "max": "7.935",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "beta_2y",
                "label": "Beta 2Y",
                "short": "Beta 2Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Slope of excess fund return regressed on excess benchmark return over the trailing 2Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.",
                "fill_pct": 45.09,
                "discriminating_pct": 44.99,
                "n_distinct": null,
                "p05": "-0.016",
                "p50": "0.615",
                "p95": "1.26",
                "min": "-4.421",
                "max": "4.398",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "beta_3y",
                "label": "Beta 3Y",
                "short": "Beta 3Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Slope of excess fund return regressed on excess benchmark return over the trailing 3Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.",
                "fill_pct": 41.71,
                "discriminating_pct": 41.53,
                "n_distinct": null,
                "p05": "-0.003",
                "p50": "0.632",
                "p95": "1.257",
                "min": "-4.426",
                "max": "4.405",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            },
            {
                "field": "beta_5y",
                "label": "Beta 5Y",
                "short": "Beta 5Y",
                "datatype": "float",
                "unit": "number",
                "statement": "Risk Ratios",
                "statement_order": 16,
                "filter_shape": "range",
                "description": "Slope of excess fund return regressed on excess benchmark return over the trailing 5Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.",
                "fill_pct": 36.01,
                "discriminating_pct": 35.97,
                "n_distinct": null,
                "p05": "0.013",
                "p50": "0.664",
                "p95": "1.248",
                "min": "-4.154",
                "max": "4.14",
                "enum_values": null,
                "filterable": true,
                "sortable": true,
                "is_list": false
            }
        ],
        "statements": [
            "Identity",
            "Profile",
            "Fees",
            "Size",
            "Returns",
            "Market Cap",
            "Valuation",
            "Asset Mix",
            "Sector",
            "Bond Character",
            "Geography",
            "Portfolio",
            "Concentration",
            "Flows",
            "Cost of Ownership",
            "Risk",
            "Risk Ratios"
        ],
        "defaults": {
            "fields": [
                "ticker",
                "fund_name",
                "className",
                "category",
                "net_expense_ratio_pct",
                "net_assets_usd",
                "return_1y_pct",
                "net_flow_12m_pct",
                "holdings_count"
            ],
            "rail": [
                "category",
                "vehicle",
                "net_expense_ratio_pct",
                "net_assets_usd",
                "return_1y_pct",
                "fund_tags",
                "geography_focus",
                "top_sector"
            ],
            "sort": [
                {
                    "field": "net_assets_usd",
                    "dir": "desc"
                }
            ],
            "limit": 50
        },
        "column_presets": [
            {
                "key": "overview",
                "label": "Overview",
                "fields": [
                    "className",
                    "category",
                    "net_expense_ratio_pct",
                    "net_assets_usd",
                    "return_1y_pct",
                    "net_flow_12m_pct",
                    "holdings_count"
                ]
            },
            {
                "key": "costs",
                "label": "Costs",
                "fields": [
                    "net_expense_ratio_pct",
                    "gross_expense_ratio_pct",
                    "acquired_fund_fees_pct",
                    "portfolio_turnover_pct",
                    "min_initial_investment_usd",
                    "fund_age_years"
                ]
            },
            {
                "key": "performance",
                "label": "Performance",
                "fields": [
                    "return_3m_pct",
                    "return_ytd_pct",
                    "return_1y_pct",
                    "return_3y_ann_pct",
                    "return_5y_ann_pct",
                    "pro_return_10y_pct"
                ]
            },
            {
                "key": "total_return",
                "label": "Total Return",
                "fields": [
                    "total_return_1m_pct",
                    "total_return_3m_pct",
                    "total_return_6m_pct",
                    "total_return_12m_pct",
                    "pro_return_incep_pct",
                    "total_return_asof"
                ]
            },
            {
                "key": "calendar",
                "label": "By Year",
                "fields": [
                    "cal_return_2021_pct",
                    "cal_return_2022_pct",
                    "cal_return_2023_pct",
                    "cal_return_2024_pct",
                    "cal_return_2025_pct",
                    "pro_worst_quarter_pct"
                ]
            },
            {
                "key": "flows",
                "label": "Flows",
                "fields": [
                    "net_flow_1m_pct",
                    "net_flow_3m_pct",
                    "net_flow_12m_pct",
                    "net_flow_12m_usd",
                    "flow_positive_months_pct",
                    "net_assets_usd"
                ]
            },
            {
                "key": "portfolio",
                "label": "Portfolio",
                "fields": [
                    "holdings_count",
                    "effective_holdings",
                    "top10_weight_pct",
                    "top1_weight_pct",
                    "topholding_name",
                    "short_pct"
                ]
            },
            {
                "key": "asset_mix",
                "label": "Asset Mix",
                "fields": [
                    "equity_pct",
                    "fixed_income_pct",
                    "fund_cash_pct",
                    "derivative_pct",
                    "other_asset_pct",
                    "liabilities_pct_net_assets"
                ]
            },
            {
                "key": "sectors",
                "label": "Sectors",
                "fields": [
                    "top_sector",
                    "top_sector_pct",
                    "sector_technology_pct",
                    "sector_financial_services_pct",
                    "sector_healthcare_pct",
                    "sector_industrials_pct"
                ]
            },
            {
                "key": "market_cap",
                "label": "Market Cap",
                "fields": [
                    "size_style",
                    "wavg_market_cap_usd",
                    "mega_cap_pct",
                    "large_cap_pct",
                    "mid_cap_pct",
                    "small_cap_pct"
                ]
            },
            {
                "key": "valuation",
                "label": "Valuation",
                "fields": [
                    "lookthrough_pe",
                    "lookthrough_ps",
                    "lookthrough_ev_ebitda",
                    "lookthrough_dividend_yield_pct",
                    "wavg_market_cap_usd",
                    "market_cap_coverage_pct"
                ]
            },
            {
                "key": "bonds",
                "label": "Bonds",
                "fields": [
                    "us_treasury_pct",
                    "corporate_pct",
                    "municipal_pct",
                    "us_agency_gse_pct",
                    "non_us_sovereign_pct",
                    "dv01_10y_bp_per_10k"
                ]
            },
            {
                "key": "risk",
                "label": "Risk",
                "fields": [
                    "tracking_error_pct",
                    "tracking_difference_pct",
                    "pro_worst_quarter_pct",
                    "liabilities_pct_net_assets",
                    "short_pct",
                    "portfolio_turnover_pct"
                ]
            },
            {
                "key": "risk_ratios",
                "label": "Risk Ratios",
                "fields": [
                    "sharpe_1y",
                    "sortino_1y",
                    "alpha_1y_pct",
                    "beta_1y",
                    "std_dev_1y_pct",
                    "max_drawdown_1y_pct"
                ]
            },
            {
                "key": "geography",
                "label": "Geography",
                "fields": [
                    "geography_focus",
                    "top_country",
                    "country_us_pct",
                    "category",
                    "net_assets_usd",
                    "net_expense_ratio_pct"
                ]
            }
        ],
        "ops": [
            "between",
            "contains",
            "eq",
            "gt",
            "gte",
            "has",
            "has_any",
            "in",
            "is_null",
            "lt",
            "lte",
            "neq",
            "not_null"
        ],
        "identity_fields": [
            "ticker",
            "fund_name",
            "className",
            "vehicle",
            "series_id"
        ],
        "pinned_fields": [
            "ticker",
            "fund_name"
        ],
        "list_fields": [
            "data_available",
            "fund_tags",
            "structure_tags"
        ],
        "min_discriminating_pct": 5
    },
    "data": [
        {
            "ticker": "VITSX",
            "fund_name": "Vanguard Total Stock Market Index Fund",
            "className": "Institutional Shares",
            "vehicle": "Mutual Fund",
            "series_id": "S000002848",
            "category": "Equity",
            "net_expense_ratio_pct": 0.03,
            "net_assets_usd": 2297839156547.89,
            "return_1y_pct": 16.98,
            "net_flow_12m_pct": -0.9063,
            "holdings_count": 3487
        }
    ]
}

6. Screenable Metrics

Every field you can put in a filters clause, a sort term or a fields list, grouped the way the contract groups them. This is the same catalogue "include_metrics": true returns — printed here so you can build a screen without calling the API first, but fetch it from the endpoint if you are generating a UI, because that copy is never stale.

147 metrics 134 filterable 147 sortable 3 list columns

Sortable is not the same as filterable. Every one of these can be sorted on and returned in fields. The 13 marked sort only are not offered as filters because they do not discriminate — an identifier every row has a distinct value for, or a column under the 5% threshold, is a slider with nothing to travel over. You can still filter them with eq or in when you know the value you want; what the flag means is that a generated filter rail should not show one.

Field Type Filter What it is
Identity · 15
benchmark_ticker
Benchmark
text sort only Index that alpha and beta on this row were measured against, as the internal id the quote estate mints for it (I:SP500 is the S&P 500). One benchmark for every fund: nothing upstream carries a per-fund benchmark assignment, and guessing one from a fund's name would put an unauditable choice inside a number that reads as objective.
cik
CIK
int
id
sort only SEC Central Index Key of the registrant (the trust), not the fund. Never format with thousands separators.
className
Share Class
text sort only Share class name, e.g. Admiral Shares, ETF Shares.
class_id
Class ID
text sort only SEC share-class identifier (C000nnnnnn). Null for a UIT, which has no share classes.
data_available
Data
list has Which data families exist for this fund: Holdings, Flows, AUM, Returns, Profile, Prices. Use it to decide which page blocks to render.
Profile Holdings AUM Flows Prices Ratios Returns
flows_asof
Flows Date
date sort only Latest month with a usable flow figure FOR THIS FUND. Trailing flow windows are measured back from here, not from today.
fund_name
Fund Name
text text Registered fund name, shared across every share class.
lastreportperiod
Portfolio Date
date sort only Report date of the holdings snapshot. Quarterly for N-PORT funds, fresher where a fund-house feed exists. Every weight on this row is as of this date.
net_assets_asof
AUM Date
date sort only Report date the net assets figure is as of. Can legitimately differ from the portfolio date.
price_asof
Price Date
date sort only Latest trading day priced for this ticker. Price returns are measured back from here.
pro_returns_asof
Returns Date
date sort only Filing date of the prospectus the long-horizon returns were printed in. They are NOT current and can be a year stale.
prospectus_date
Prospectus Date
date sort only Date printed on the prospectus the profile was extracted from.
series_id
Series ID
text sort only SEC fund identifier (S000nnnnnn), shared by every class of the fund. UIT+CIK for a unit investment trust such as SPY.
ticker
Ticker
text text Exchange ticker of this share class. Unique, upper-cased, and the key every fund page is addressed by.
total_return_asof
Total Ret. Date
date sort only Latest month with an N-PORT total return for this share class. The Total Return windows are measured back from here, not from today.
Profile · 6
category
Category
text enum Coarse bucket derived from what the fund HOLDS, not from its name, measured on classified exposure only. Other when under half the portfolio is classified.
Equity Fixed Income Target Date Other Money Market Allocation Fund of Funds / Cash Derivative / Alternative
fund_tags
Tags
list has Fund types as filed in N-CEN: Index Fund, Fund of Funds, Target Date, Money Market, Inverse, Underlying Fund, Interval Fund, Exchange-Traded Managed. A fund can carry several.
Fund of Funds Index Fund Target Date Underlying Fund Money Market Inverse Exchange-Traded Managed Interval Fund
geography_focus
Geography
text enum US (80%+ US assets), International (20% or less) or Global. Derived from holdings.
US Global International
registrantFullName
Family
text text Registrant / trust name. The issuer filter: Vanguard, iShares, SPDR.
structure_tags
Structure
list has Structural facts from N-CEN: Non-Diversified (may concentrate), Lends Securities, Foreign Subsidiary.
Lends Securities Non-Diversified Foreign Subsidiary
vehicle
Vehicle
text enum ETF, Mutual Fund, UIT (unit investment trust, e.g. SPY) or Closed-End.
Mutual Fund ETF Closed-End UIT
Fees · 4
acquired_fund_fees_pct
AFFE
%
percent
range Fees charged by the underlying funds a fund holds. Material for funds of funds and usually excluded from the waiver.
gross_expense_ratio_pct
Gross Expense
%
percent
range Total annual operating expenses before any waiver. Above the net ratio when a waiver is in force, which may expire.
min_initial_investment_usd
Min. Investment
int
usd
range Smallest initial purchase the prospectus accepts. Absent for most ETFs, which have none.
net_expense_ratio_pct
Net Expense
%
percent
range What the investor actually pays after fee waivers. THE expense ratio. 0.03 means three basis points, not 3%.
Size · 1
net_assets_usd
AUM
int
usd
range Fund-level assets under management from the latest N-PORT. Fund grain, so every share class of a fund shows the same figure.
Returns · 20
cal_return_2021_pct
2021
%
percent
range Calendar-year 2021 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.
cal_return_2022_pct
2022
%
percent
range Calendar-year 2022 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.
cal_return_2023_pct
2023
%
percent
range Calendar-year 2023 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.
cal_return_2024_pct
2024
%
percent
range Calendar-year 2024 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.
cal_return_2025_pct
2025
%
percent
range Calendar-year 2025 total return before taxes, as printed in the prospectus. Answers 'how did it do in a down year', which an average hides.
pro_return_10y_pct
10Y Ann. (Prospectus)
%
percent
range Average annual total return over ten years, before taxes, as printed in the prospectus.
pro_return_5y_pct
5Y Ann. (Prospectus)
%
percent
range Average annual total return over five years, before taxes, as printed in the prospectus. Stale by up to a year — see Returns As Of.
pro_return_incep_pct
Since Inception (Prospectus)
%
percent
range Average annual total return since inception, before taxes, as printed in the prospectus.
pro_worst_quarter_pct
Worst Quarter (Prospectus)
%
percent
range Worst calendar quarter in the prospectus bar chart. The drawdown proxy.
return_1m_pct
1M
%
percent
range Trailing one-month PRICE return. Excludes distributions, so it understates total return by roughly the yield.
return_1y_pct
1Y
%
percent
range Trailing one-year PRICE return, measured back from Price As Of (the latest trading day). The primary performance filter — current, daily, ~77% of the universe. NOT comparable with Total Return 12M, whose window ends at the last N-PORT filing up to five months earlier.
return_3m_pct
3M
%
percent
range Trailing three-month price return.
return_3y_ann_pct
3Y Ann.
%
percent
range Annualised three-year price return. Null unless three years of history exist.
return_5y_ann_pct
5Y Ann.
%
percent
range Annualised five-year price return. Null unless five years of history exist.
return_6m_pct
6M
%
percent
range Trailing six-month price return.
return_ytd_pct
YTD
%
percent
range Year-to-date price return, measured from the last close of the prior year.
total_return_12m_pct
Total 12M
%
percent
range Twelve N-PORT monthly total returns chained. NULL unless all twelve months are present, so a partial chain cannot rank funds by how completely they file. Its window ends at Total Return As Of — the last N-PORT filing, typically one to five months stale — NOT at today. DO NOT difference it against Return 1Y: over an identical window it runs ~1.25pp above the price return (that gap is the distribution: ETFs 2.5pp, mutual funds 5.3pp), but the raw difference between the two columns is mostly the market move in the months their windows do not share.
total_return_1m_pct
Total 1M
%
percent
range The filer's own monthly TOTAL return from N-PORT Item B.5 — distributions INCLUDED, unlike the price returns above. Share-class grain: two classes of one fund differ by their fee.
total_return_3m_pct
Total 3M
%
percent
range Three N-PORT monthly total returns chained geometrically. NULL unless all three months are on file.
total_return_6m_pct
Total 6M
%
percent
range Six N-PORT monthly total returns chained geometrically. NULL unless all six months are on file.
Market Cap · 8
large_cap_pct
Large Cap
%
percent
range Share of covered equity in companies of $10B to $200B.
market_cap_coverage_pct
Cap Coverage
%
percent
range Share of equity exposure that resolved to a market cap. US-only source, so international funds run low: VOO 96%, VWO 3%. BELOW 70 THE CAP AND VALUATION COLUMNS ARE BLANKED — do not render them.
mega_cap_pct
Mega Cap
%
percent
range Share of covered equity in companies above $200B.
micro_cap_pct
Micro Cap
%
percent
range Share of covered equity in companies below $300M.
mid_cap_pct
Mid Cap
%
percent
range Share of covered equity in companies of $2B to $10B.
size_style
Size Style
text enum Large Cap, Mid Cap, Small Cap or Multi Cap, from the cap ladder. Null below 70% coverage.
Large Cap Mid Cap Multi Cap Small Cap
small_cap_pct
Small Cap
%
percent
range Share of covered equity in companies of $300M to $2B.
wavg_market_cap_usd
Avg Mkt Cap
int
usd
range Value-weighted average market capitalisation of the equity holdings. Null below 70% coverage.
Valuation · 4
lookthrough_dividend_yield_pct
Look-Through Yield
%
percent
range Value-weighted dividend yield of the equity holdings. Arithmetic, because yields are additive. NOT the fund's own distribution yield, which we cannot yet serve.
lookthrough_ev_ebitda
EV/EBITDA
int
number
range Harmonic weighted enterprise value to EBITDA of the equity holdings.
lookthrough_pe
P/E
int
number
range Harmonic weighted price/earnings of the equity holdings — the index-provider standard. Loss-makers are excluded rather than dragging the ratio negative. VUG 29.9 vs VTV 20.9 is the growth/value spread.
lookthrough_ps
P/S
int
number
range Harmonic weighted price/sales of the equity holdings.
Asset Mix · 5
derivative_pct
Derivatives
%
percent
range Share of gross exposure in derivatives. Large for inverse and leveraged funds.
equity_pct
Equity
%
percent
range Share of gross exposure in equities.
fixed_income_pct
Fixed Income
%
percent
range Share of gross exposure in bonds and other debt.
fund_cash_pct
Fund & Cash
%
percent
range Share of gross exposure in other funds and cash equivalents.
other_asset_pct
Other Assets
%
percent
range Share of gross exposure the classifier had no opinion on. Not an asset class — a coverage gap, and excluded from the Category denominator for that reason.
Sector · 14
sector_basic_materials_pct
Basic Materials
%
percent
range Share of gross exposure in Basic Materials. Percent of absolute market value, renormalised to 100.
sector_communication_services_pct
Communication Services
%
percent
range Share of gross exposure in Communication Services. Percent of absolute market value, renormalised to 100.
sector_consumer_discretionary_pct
Consumer Discretionary
%
percent
range Share of gross exposure in Consumer Discretionary. Percent of absolute market value, renormalised to 100.
sector_consumer_staples_pct
Consumer Staples
%
percent
range Share of gross exposure in Consumer Staples. Percent of absolute market value, renormalised to 100.
sector_energy_pct
Energy
%
percent
range Share of gross exposure in Energy. Percent of absolute market value, renormalised to 100.
sector_financial_services_pct
Financial Services
%
percent
range Share of gross exposure in Financial Services. Percent of absolute market value, renormalised to 100.
sector_healthcare_pct
Healthcare
%
percent
range Share of gross exposure in Healthcare. Percent of absolute market value, renormalised to 100.
sector_industrials_pct
Industrials
%
percent
range Share of gross exposure in Industrials. Percent of absolute market value, renormalised to 100.
sector_other_pct
Other / Unclass.
%
percent
range Share of gross exposure with no equity sector: every bond, plus foreign listings absent from the industry classification. Median 60%. LARGE IS NORMAL — VOO 6%, AGG 36%, VWO 91%. Do not hide, merge or rename it.
sector_real_estate_pct
Real Estate
%
percent
range Share of gross exposure in Real Estate. Percent of absolute market value, renormalised to 100.
sector_technology_pct
Technology
%
percent
range Share of gross exposure in Technology. Percent of absolute market value, renormalised to 100.
sector_utilities_pct
Utilities
%
percent
range Share of gross exposure in Utilities. Percent of absolute market value, renormalised to 100.
top_sector
Top Sector
text enum Largest classified sector, excluding the unclassified bucket.
Technology Financial Services Industrials Healthcare Consumer Discretionary Energy Real Estate Basic Materials Utilities Communication Services Consumer Staples
top_sector_pct
Top Sector %
%
percent
range Weight of the largest classified sector.
Bond Character · 11
average_coupon_pct
Avg Coupon
%
percent
range Market-value-weighted average annual coupon of the fund's debt holdings, as filed. Not a yield: it ignores the price paid, so it says what the bonds pay, not what the investor earns.
corporate_pct
Corporate
%
percent
range Share of gross exposure in corporate issuers.
dated_holdings_count
Dated Holdings
int
number
range How many positions carried a maturity date. The denominator behind Effective Maturity, and the gate for whether to show it at all: zero means the fund filed no dated instrument.
duration_band
Rate Sensitivity
str
number
enum Which interest-rate sensitivity band the fund falls in, from its own effective duration: Limited under 3.5 years, Moderate 3.5 to 6, Extensive above 6. The axis bond funds are actually compared on, and the peer group the maturity schedule is measured against. Null wherever effective duration is.
Limited Extensive Moderate
effective_duration_years
Effective Duration
float
number
range How much the fund moves when rates move: the percentage change in value for a one-percentage-point shift in rates. Taken from the fund's own DV01 as filed under N-PORT Item B.3, so it carries the manager's own prepayment and call assumptions, and it reproduces published factsheets to within about 2%. This, not maturity, is the number to compare bond funds on for rate risk -- under 3 is short, 3-7 intermediate, over 7 long. Null for a fund with no rate exposure or an implausible filing; do not render it as zero.
effective_maturity_years
Effective Maturity
float
number
range When the fund's principal is actually expected back, which is what a factsheet means by average effective maturity and the figure to compare a bond fund on. Modelled from the filing's own terms -- amortisation for mortgage and asset-backed paper, the call for perpetual preferreds -- and calibrated so the projection reproduces the duration the fund itself filed, so the prepayment speed is the manager's rather than ours. It matches published figures to about 2%. Null where the filed rate-risk data was not good enough to calibrate against.
municipal_pct
Municipal
%
percent
range Share of gross exposure in municipal issues. The tax-exempt income screen.
non_us_sovereign_pct
Non-US Sovereign
%
percent
range Share of gross exposure in non-US sovereign and state issuers.
us_agency_gse_pct
Agency & GSE
%
percent
range Share of gross exposure in US government agency and government-sponsored entity issues.
us_treasury_pct
Treasury
%
percent
range Share of gross exposure in US Treasury issues.
weighted_average_maturity_years
Avg Legal Maturity
float
number
range Market-value-weighted average years to maturity across the fund's dated holdings, measured from the portfolio date. This is when the paper legally comes due, not how it behaves: on a mortgage book it runs 40-54% above the fund's own Effective Duration, because a 30-year pool prepays. Screen rate risk on Effective Duration and use this for the legal profile. Null for a fund holding nothing dated, which is every equity fund -- do not render it as zero. Perpetual issues are excluded from the average and counted separately.
Geography · 2
country_us_pct
US Weight
%
percent
range Share of gross exposure in US-domiciled issuers. Region rollups are NOT shipped: N-PORT reports country of incorporation, so offshore-incorporated issuers land in the wrong region.
top_country
Top Country
text enum Largest issuer country by gross exposure.
United States Japan United Kingdom Taiwan South Korea Cayman Islands China Mexico Canada France India Netherlands Brazil Hong Kong Australia Germany Indonesia Singapore Switzerland Vietnam South Africa Venezuela N/A Bermuda Malaysia Saudi Arabia Turkey Russia Israel Peru Sweden Unknown Hungary Ireland Italy Philippines Argentina Greece Kuwait New Zealand Norway Poland Spain Uruguay Colombia Luxembourg Nigeria Austria Denmark Qatar Thailand Belgium Chile Egypt El Salvador Finland Iceland Jersey Pakistan Portugal Puerto Rico United Arab Emirates
Portfolio · 2
holdings_count
Holdings
int
count
range Number of positions in the latest snapshot. Median 87, maximum 18,136.
short_pct
Short
%
percent
range Share of gross exposure in short positions. Zero for a long-only fund, which is most of them.
Concentration · 6
effective_holdings
Effective Holdings
int
count
range 1 divided by the sum of squared weights: the number of EQUAL-weighted positions carrying the same concentration. VOO holds 506 securities and has an effective 48.
top10_weight_pct
Top 10
%
percent
range Combined weight of the ten largest positions, computed on gross exposure.
top1_weight_pct
Largest Position
%
percent
range Weight of the single largest position.
topholding_cusip
topholding_cusip
text text CUSIP of the largest position's issuer.
topholding_name
Top Holding
text text Name of the largest position, as the holding was filed. Group or filter on topholding_ticker instead: the same issuer is filed under many spellings.
topholding_ticker
topholding_ticker
text text Ticker of the largest position's issuer. The groupable form of topholding_name; null where the holding has no listed issuer -- cash sweeps, money-market funds, Treasuries, munis -- which is roughly a fifth of funds.
Flows · 5
flow_positive_months_pct
Positive Months
%
percent
range Share of observed months with net inflows. A persistence measure, not a magnitude.
net_flow_12m_pct
Flow 12M %
%
percent
range Trailing twelve-month net flow as a percent of net assets.
net_flow_12m_usd
Flow 12M
int
usd
range Trailing twelve-month net flow in dollars. Negative means redemptions exceeded sales. Sorting on this re-sorts by fund size; use the percent version.
net_flow_1m_pct
Flow 1M %
%
percent
range Trailing one-month net flow as a percent of net assets. Size-neutral — rank on this, not the dollar figure.
net_flow_3m_pct
Flow 3M %
%
percent
range Trailing three-month net flow as a percent of net assets.
Cost of Ownership · 2
fund_age_years
Fund Age
int
years
range Years since the fund began operations. Fund-level, not share-class.
portfolio_turnover_pct
Turnover
%
percent
range Percent of holdings replaced during the last fiscal year. High turnover implies trading cost and tax drag. Figures beyond 1500% are filer errors and are nulled.
Risk · 6
credit_spread_hy_10y_usd
Spread HY
int
usd
range Non-investment-grade spread duration risk at the 10-year tenor, in dollars per basis point.
credit_spread_ig_10y_usd
Spread IG
int
usd
range Investment-grade spread duration risk at the 10-year tenor, in dollars per basis point.
dv01_10y_bp_per_10k
DV01 10Y
int
usd
range Dollar change per basis point at the 10-year tenor, scaled to a $10,000 holding. THE size-neutral duration proxy. Bond funds only — roughly 30% coverage is the bond share of the universe, not a gap.
liabilities_pct_net_assets
Liabilities %
%
percent
range Total liabilities as a percent of net assets. The broadest leverage read.
tracking_difference_pct
Tracking Diff.
%
percent
range Index fund return minus its index, after expenses, as filed in N-CEN. Negative is normal and roughly equals the fee — IVV -0.02, VOO -0.169, median -0.185. THE measure of whether an index fund does its job.
tracking_error_pct
Tracking Error
%
percent
range Daily standard deviation of that return difference, after expenses. Near zero for a domestic index fund (IVV 0.03); large for international funds, where fair-value pricing makes daily NAV and index diverge.
Risk Ratios · 36
std_dev_6m_pct
Std Dev 6M
%
percent
range Annualised standard deviation of daily price returns over the trailing 6M window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.
std_dev_ytd_pct
Std Dev YTD
%
percent
range Annualised standard deviation of daily price returns over the trailing YTD window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.
std_dev_1y_pct
Std Dev 1Y
%
percent
range Annualised standard deviation of daily price returns over the trailing 1Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.
std_dev_2y_pct
Std Dev 2Y
%
percent
range Annualised standard deviation of daily price returns over the trailing 2Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.
std_dev_3y_pct
Std Dev 3Y
%
percent
range Annualised standard deviation of daily price returns over the trailing 3Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.
std_dev_5y_pct
Std Dev 5Y
%
percent
range Annualised standard deviation of daily price returns over the trailing 5Y window, in percent. THE volatility measure. Barely affected by the price-not-total-return basis, so it is directly comparable across funds.
max_drawdown_6m_pct
Max Drawdown 6M
%
percent
range Worst peak-to-trough decline inside the trailing 6M window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.
max_drawdown_ytd_pct
Max Drawdown YTD
%
percent
range Worst peak-to-trough decline inside the trailing YTD window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.
max_drawdown_1y_pct
Max Drawdown 1Y
%
percent
range Worst peak-to-trough decline inside the trailing 1Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.
max_drawdown_2y_pct
Max Drawdown 2Y
%
percent
range Worst peak-to-trough decline inside the trailing 2Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.
max_drawdown_3y_pct
Max Drawdown 3Y
%
percent
range Worst peak-to-trough decline inside the trailing 3Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.
max_drawdown_5y_pct
Max Drawdown 5Y
%
percent
range Worst peak-to-trough decline inside the trailing 5Y window, in percent and NEGATIVE. Measured on daily closes, so it is the loss an investor who bought the peak actually lived through — not a month-end approximation.
sharpe_6m
Sharpe 6M
float
number
range Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 6M window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.
sharpe_ytd
Sharpe YTD
float
number
range Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing YTD window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.
sharpe_1y
Sharpe 1Y
float
number
range Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 1Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.
sharpe_2y
Sharpe 2Y
float
number
range Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 2Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.
sharpe_3y
Sharpe 3Y
float
number
range Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 3Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.
sharpe_5y
Sharpe 5Y
float
number
range Annualised excess return divided by the annualised standard deviation of that excess return, over the trailing 5Y window. Excess is over the 3-month Treasury yield. BIASED LOW by roughly yield/volatility because the return series excludes distributions — ranking within a peer group is sound, an absolute reading is not.
sortino_6m
Sortino 6M
float
number
range Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 6M window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.
sortino_ytd
Sortino YTD
float
number
range Like Sharpe but penalising only DOWNSIDE deviation, over the trailing YTD window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.
sortino_1y
Sortino 1Y
float
number
range Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 1Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.
sortino_2y
Sortino 2Y
float
number
range Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 2Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.
sortino_3y
Sortino 3Y
float
number
range Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 3Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.
sortino_5y
Sortino 5Y
float
number
range Like Sharpe but penalising only DOWNSIDE deviation, over the trailing 5Y window. Downside deviation is the root-mean-square of negative excess returns divided by the full observation count, the standard definition. Carries the same low bias as Sharpe.
alpha_6m_pct
Alpha 6M
%
percent
range Annualised Jensen's alpha against Benchmark over the trailing 6M window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.
alpha_ytd_pct
Alpha YTD
%
percent
range Annualised Jensen's alpha against Benchmark over the trailing YTD window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.
alpha_1y_pct
Alpha 1Y
%
percent
range Annualised Jensen's alpha against Benchmark over the trailing 1Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.
alpha_2y_pct
Alpha 2Y
%
percent
range Annualised Jensen's alpha against Benchmark over the trailing 2Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.
alpha_3y_pct
Alpha 3Y
%
percent
range Annualised Jensen's alpha against Benchmark over the trailing 3Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.
alpha_5y_pct
Alpha 5Y
%
percent
range Annualised Jensen's alpha against Benchmark over the trailing 5Y window, in percent — the intercept of excess fund return regressed on excess benchmark return. BIASED LOW by roughly the fund's yield. Read it against peers, never as an absolute skill figure.
beta_6m
Beta 6M
float
number
range Slope of excess fund return regressed on excess benchmark return over the trailing 6M window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.
beta_ytd
Beta YTD
float
number
range Slope of excess fund return regressed on excess benchmark return over the trailing YTD window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.
beta_1y
Beta 1Y
float
number
range Slope of excess fund return regressed on excess benchmark return over the trailing 1Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.
beta_2y
Beta 2Y
float
number
range Slope of excess fund return regressed on excess benchmark return over the trailing 2Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.
beta_3y
Beta 3Y
float
number
range Slope of excess fund return regressed on excess benchmark return over the trailing 3Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.
beta_5y
Beta 5Y
float
number
range Slope of excess fund return regressed on excess benchmark return over the trailing 5Y window. 1.0 moves with Benchmark, 0 is uncorrelated, above 1 amplifies. Near zero for a bond fund, which is the correct answer rather than a missing one.

A fund missing a value has not failed your test. A magnitude filter (lt, lte, gt, gte, between) drops a fund for non-disclosure rather than for failing the comparison, and metadata.nulls_excluded reports that count per field so a narrow result set doesn't read as a complete one.

7. Metric Glossary

Every field in section 6, by full name and in one sentence — for a reader who wants to know what a metric means without the datatype/filter/range detail. Where the same measure repeats across trailing windows (Sharpe at 6M, YTD, 1Y, 2Y, 3Y and 5Y, say), each window is still its own row and its own field name, but the description is written once per measure and reused, rather than restated six times with only the window changed.

147 metrics across 17 groups.
Full Form Code Description
Identity · 15
Ticker ticker The share-class ticker — unique, and the key to every other /funds endpoint.
Benchmark benchmark_ticker Index that alpha and beta on this row are measured against.
Fund Name fund_name Registered fund name, shared by every share class of the fund.
Share Class className The share class itself, e.g. Admiral Shares, ETF Shares, Class I.
Class ID class_id SEC share-class identifier (C000nnnnnn); null for a UIT, which has no share classes.
Series ID series_id SEC Series ID; two rows sharing one are two wrappers on the same portfolio.
CIK cik SEC Central Index Key of the registrant trust, not the fund.
Data Available data_available Which data families exist for this fund — Holdings, Flows, AUM, Returns, Profile, Prices.
Portfolio Date lastreportperiod Report date of the fund’s most recent holdings snapshot.
AUM Date net_assets_asof Date the net-assets figure was last refreshed.
Price Date price_asof Date the net-assets figure was last refreshed.
Flows Date flows_asof Date the net-assets figure was last refreshed.
Returns Date pro_returns_asof Date the net-assets figure was last refreshed.
Total Return Date total_return_asof Date the net-assets figure was last refreshed.
Prospectus Date prospectus_date Date of the prospectus the fund’s fee and return figures were filed in.
Profile · 6
Vehicle vehicle ETF or mutual fund (MF).
Category category Asset category, e.g. Large Growth, Intermediate Core Bond.
Family registrantFullName The fund’s issuing family or sponsor, e.g. Vanguard, iShares.
Geography geography_focus Primary geographic focus of the portfolio.
Tags fund_tags Descriptive tags such as Index Fund, Actively Managed, ESG.
Structure structure_tags Legal wrapper tags, e.g. Unit Investment Trust, Fund of Funds.
Fees · 4
Net Expense Ratio net_expense_ratio_pct Annual fund expenses after waivers, as a percent of assets.
Gross Expense Ratio gross_expense_ratio_pct Annual fund expenses before waivers, as a percent of assets.
Acquired Fund Fees & Expenses (AFFE) acquired_fund_fees_pct Fees of any funds this fund itself invests in.
Minimum Initial Investment min_initial_investment_usd Minimum initial purchase amount, in dollars.
Size · 1
Assets Under Management (AUM) net_assets_usd Net assets under management, in dollars.
Returns · 20
Calendar-Year Return (2021) cal_return_2021_pct Total return for the stated calendar year, before taxes, as printed in the prospectus.
Calendar-Year Return (2022) cal_return_2022_pct Total return for the stated calendar year, before taxes, as printed in the prospectus.
Calendar-Year Return (2023) cal_return_2023_pct Total return for the stated calendar year, before taxes, as printed in the prospectus.
Calendar-Year Return (2024) cal_return_2024_pct Total return for the stated calendar year, before taxes, as printed in the prospectus.
Calendar-Year Return (2025) cal_return_2025_pct Total return for the stated calendar year, before taxes, as printed in the prospectus.
Annualised Return, Prospectus (5Y) pro_return_5y_pct Average annual total return over the stated horizon, before taxes, as printed in the prospectus.
Annualised Return, Prospectus (10Y) pro_return_10y_pct Average annual total return over the stated horizon, before taxes, as printed in the prospectus.
Annualised Return, Prospectus (Since Inception) pro_return_incep_pct Average annual total return over the stated horizon, before taxes, as printed in the prospectus.
Worst Quarter (Prospectus) pro_worst_quarter_pct Worst calendar quarter’s total return since inception, as printed in the prospectus — the drawdown proxy.
Price Return (1M) return_1m_pct Trailing price return over the stated window; excludes distributions.
Price Return (3M) return_3m_pct Trailing price return over the stated window; excludes distributions.
Price Return (6M) return_6m_pct Trailing price return over the stated window; excludes distributions.
Price Return (YTD) return_ytd_pct Trailing price return over the stated window; excludes distributions.
Price Return (1Y) return_1y_pct Trailing price return over the stated window; excludes distributions.
Price Return, Annualised (3Y) return_3y_ann_pct Annualised trailing price return over the stated window; excludes distributions.
Price Return, Annualised (5Y) return_5y_ann_pct Annualised trailing price return over the stated window; excludes distributions.
Total Return (1M) total_return_1m_pct Trailing total return over the stated window, chained from N-PORT monthly returns; includes distributions.
Total Return (3M) total_return_3m_pct Trailing total return over the stated window, chained from N-PORT monthly returns; includes distributions.
Total Return (6M) total_return_6m_pct Trailing total return over the stated window, chained from N-PORT monthly returns; includes distributions.
Total Return (12M) total_return_12m_pct Trailing total return over the stated window, chained from N-PORT monthly returns; includes distributions.
Market Cap · 8
Mega-Cap Weight mega_cap_pct Share of the portfolio in mega-cap stocks, by look-through exposure.
Large-Cap Weight large_cap_pct Share of the portfolio in large-cap stocks, by look-through exposure.
Mid-Cap Weight mid_cap_pct Share of the portfolio in mid-cap stocks, by look-through exposure.
Small-Cap Weight small_cap_pct Share of the portfolio in small-cap stocks, by look-through exposure.
Micro-Cap Weight micro_cap_pct Share of the portfolio in micro-cap stocks, by look-through exposure.
Market-Cap Coverage market_cap_coverage_pct Share of the portfolio with a resolvable market-cap bucket.
Size / Style size_style Size and style box classification, e.g. Large Blend.
Weighted-Average Market Cap wavg_market_cap_usd Portfolio weighted-average market capitalization.
Valuation · 4
Price / Earnings (Look-Through) lookthrough_pe Look-through weighted-average price-to-earnings ratio of the portfolio.
Price / Sales (Look-Through) lookthrough_ps Look-through weighted-average price-to-sales ratio of the portfolio.
EV / EBITDA (Look-Through) lookthrough_ev_ebitda Look-through weighted-average enterprise-value-to-EBITDA ratio of the portfolio.
Dividend Yield (Look-Through) lookthrough_dividend_yield_pct Look-through weighted-average dividend yield of the portfolio’s holdings.
Asset Mix · 5
Equity Weight equity_pct Share of net assets held in equities.
Fixed Income Weight fixed_income_pct Share of net assets held in fixed income.
Derivatives Weight derivative_pct Share of net assets held in derivatives.
Fund & Cash Weight fund_cash_pct Share of net assets held in cash or other funds.
Other Assets Weight other_asset_pct Share of net assets held in assets outside the standard buckets.
Sector · 14
Basic Materials Weight sector_basic_materials_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Communication Services Weight sector_communication_services_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Consumer Discretionary Weight sector_consumer_discretionary_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Consumer Staples Weight sector_consumer_staples_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Energy Weight sector_energy_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Financial Services Weight sector_financial_services_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Healthcare Weight sector_healthcare_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Industrials Weight sector_industrials_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Real Estate Weight sector_real_estate_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Technology Weight sector_technology_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Utilities Weight sector_utilities_pct Share of the equity portfolio allocated to the stated sector, by look-through exposure.
Other / Unclassified Weight sector_other_pct Share of the equity portfolio that does not resolve to a standard sector.
Top Sector top_sector The single largest sector by portfolio weight.
Top Sector Weight top_sector_pct Portfolio weight of the largest sector.
Bond Character · 11
Effective Duration effective_duration_years How much the fund’s price moves for a one-percentage-point change in interest rates.
Effective Maturity effective_maturity_years Time until the portfolio’s principal is expected back, allowing for prepayment and call risk.
Average Legal Maturity weighted_average_maturity_years Weighted-average time to the stated (legal) maturity of the fund’s bond holdings.
Rate Sensitivity Band duration_band Interest-rate sensitivity band derived from the fund’s own effective duration (Limited, Moderate, Extensive).
Average Coupon average_coupon_pct Weighted-average coupon rate of the fund’s bond holdings.
Treasury Weight us_treasury_pct Share of fixed-income assets issued by the stated issuer type.
Agency & GSE Weight us_agency_gse_pct Share of fixed-income assets issued by the stated issuer type.
Municipal Weight municipal_pct Share of fixed-income assets issued by the stated issuer type.
Corporate Weight corporate_pct Share of fixed-income assets issued by the stated issuer type.
Non-US Sovereign Weight non_us_sovereign_pct Share of fixed-income assets issued by the stated issuer type.
Dated Holdings dated_holdings_count Number of bond holdings with a stated maturity date.
Geography · 2
US Weight country_us_pct Share of the portfolio invested in US issuers.
Top Country top_country The single largest country by portfolio weight.
Portfolio · 2
Holdings Count holdings_count Number of positions in the fund’s most recent portfolio snapshot.
Short Weight short_pct Share of the portfolio held in short positions.
Concentration · 6
Effective Holdings effective_holdings Diversification-adjusted holdings count — the number of equal-weighted positions carrying the same concentration.
Top 10 Weight top10_weight_pct Combined portfolio weight of the ten largest holdings.
Largest Position Weight top1_weight_pct Portfolio weight of the single largest holding.
Top Holding topholding_name Name of the fund’s single largest holding.
Top Holding Ticker topholding_ticker Ticker of the fund’s largest holding’s issuer, where one exists.
Top Holding CUSIP topholding_cusip CUSIP of the fund’s largest holding’s issuer, where available.
Flows · 5
Net Flow (12M) net_flow_12m_usd Net dollar flow into or out of the fund over the trailing twelve months.
Net Flow % of Assets (12M) net_flow_12m_pct Net flow over the stated trailing window, as a percent of assets.
Net Flow % of Assets (1M) net_flow_1m_pct Net flow over the stated trailing window, as a percent of assets.
Net Flow % of Assets (3M) net_flow_3m_pct Net flow over the stated trailing window, as a percent of assets.
Positive Months flow_positive_months_pct Share of observed months with net inflows rather than outflows — a persistence measure, not a magnitude.
Cost of Ownership · 2
Portfolio Turnover portfolio_turnover_pct Portfolio turnover rate — the share of holdings replaced over the past year.
Fund Age fund_age_years Years since the fund’s inception.
Risk · 6
Tracking Error tracking_error_pct Standard deviation of the fund’s return relative to its benchmark.
Tracking Difference tracking_difference_pct Average difference between the fund’s return and its benchmark’s return.
Credit Spread Exposure, Investment Grade (10Y) credit_spread_ig_10y_usd Credit-spread risk at the 10-year tenor from investment-grade holdings, in dollars per basis point.
Credit Spread Exposure, High Yield (10Y) credit_spread_hy_10y_usd Credit-spread risk at the 10-year tenor from non-investment-grade holdings, in dollars per basis point.
DV01 (10Y) dv01_10y_bp_per_10k Dollar change in a $10,000 holding for a one-basis-point move at the 10-year tenor — a size-neutral duration proxy.
Liabilities % of Net Assets liabilities_pct_net_assets Total liabilities as a percent of net assets — the broadest leverage measure.
Risk Ratios · 36
Standard Deviation (6M) std_dev_6m_pct Annualised standard deviation of daily price returns over the stated window.
Standard Deviation (YTD) std_dev_ytd_pct Annualised standard deviation of daily price returns over the stated window.
Standard Deviation (1Y) std_dev_1y_pct Annualised standard deviation of daily price returns over the stated window.
Standard Deviation (2Y) std_dev_2y_pct Annualised standard deviation of daily price returns over the stated window.
Standard Deviation (3Y) std_dev_3y_pct Annualised standard deviation of daily price returns over the stated window.
Standard Deviation (5Y) std_dev_5y_pct Annualised standard deviation of daily price returns over the stated window.
Max Drawdown (6M) max_drawdown_6m_pct Largest peak-to-trough price decline over the stated window.
Max Drawdown (YTD) max_drawdown_ytd_pct Largest peak-to-trough price decline over the stated window.
Max Drawdown (1Y) max_drawdown_1y_pct Largest peak-to-trough price decline over the stated window.
Max Drawdown (2Y) max_drawdown_2y_pct Largest peak-to-trough price decline over the stated window.
Max Drawdown (3Y) max_drawdown_3y_pct Largest peak-to-trough price decline over the stated window.
Max Drawdown (5Y) max_drawdown_5y_pct Largest peak-to-trough price decline over the stated window.
Sharpe Ratio (6M) sharpe_6m Annualised excess return over the stated window, divided by its standard deviation.
Sharpe Ratio (YTD) sharpe_ytd Annualised excess return over the stated window, divided by its standard deviation.
Sharpe Ratio (1Y) sharpe_1y Annualised excess return over the stated window, divided by its standard deviation.
Sharpe Ratio (2Y) sharpe_2y Annualised excess return over the stated window, divided by its standard deviation.
Sharpe Ratio (3Y) sharpe_3y Annualised excess return over the stated window, divided by its standard deviation.
Sharpe Ratio (5Y) sharpe_5y Annualised excess return over the stated window, divided by its standard deviation.
Sortino Ratio (6M) sortino_6m Annualised excess return over the stated window, divided by downside deviation only.
Sortino Ratio (YTD) sortino_ytd Annualised excess return over the stated window, divided by downside deviation only.
Sortino Ratio (1Y) sortino_1y Annualised excess return over the stated window, divided by downside deviation only.
Sortino Ratio (2Y) sortino_2y Annualised excess return over the stated window, divided by downside deviation only.
Sortino Ratio (3Y) sortino_3y Annualised excess return over the stated window, divided by downside deviation only.
Sortino Ratio (5Y) sortino_5y Annualised excess return over the stated window, divided by downside deviation only.
Alpha (6M) alpha_6m_pct Annualised return over the stated window in excess of what the fund’s beta to its benchmark would predict.
Alpha (YTD) alpha_ytd_pct Annualised return over the stated window in excess of what the fund’s beta to its benchmark would predict.
Alpha (1Y) alpha_1y_pct Annualised return over the stated window in excess of what the fund’s beta to its benchmark would predict.
Alpha (2Y) alpha_2y_pct Annualised return over the stated window in excess of what the fund’s beta to its benchmark would predict.
Alpha (3Y) alpha_3y_pct Annualised return over the stated window in excess of what the fund’s beta to its benchmark would predict.
Alpha (5Y) alpha_5y_pct Annualised return over the stated window in excess of what the fund’s beta to its benchmark would predict.
Beta (6M) beta_6m Sensitivity of the fund’s returns to its benchmark’s returns over the stated window.
Beta (YTD) beta_ytd Sensitivity of the fund’s returns to its benchmark’s returns over the stated window.
Beta (1Y) beta_1y Sensitivity of the fund’s returns to its benchmark’s returns over the stated window.
Beta (2Y) beta_2y Sensitivity of the fund’s returns to its benchmark’s returns over the stated window.
Beta (3Y) beta_3y Sensitivity of the fund’s returns to its benchmark’s returns over the stated window.
Beta (5Y) beta_5y Sensitivity of the fund’s returns to its benchmark’s returns over the stated window.

8. More Request Examples

Screens that answer a real question rather than demonstrating a parameter.

The cheapest index funds in a category
POST /funds/screener?api_key=YOUR_API_KEY
{
  "filters": [
    {"field": "category",       "op": "in",  "value": ["Equity"]},
    {"field": "fund_tags",      "op": "has", "value": "Index Fund"},
    {"field": "net_assets_usd", "op": "gte", "value": 1e9}
  ],
  "preset": "costs",
  "sort":   [{"field": "net_expense_ratio_pct", "dir": "asc"}]
}
Where money went this year
POST /funds/screener?api_key=YOUR_API_KEY
{
  "filters": [{"field": "net_assets_usd", "op": "gte", "value": 5e8}],
  "preset":  "flows",
  "sort":    [{"field": "net_flow_12m_usd", "dir": "desc"}],
  "limit":   25
}
Concentrated equity funds — few holdings, heavy top ten
POST /funds/screener?api_key=YOUR_API_KEY
{
  "filters": [
    {"field": "category",         "op": "in",  "value": ["Equity"]},
    {"field": "holdings_count",   "op": "lte", "value": 40},
    {"field": "top10_weight_pct", "op": "gte", "value": 50}
  ],
  "preset": "portfolio",
  "sort":   [{"field": "top10_weight_pct", "dir": "desc"}]
}
Index trackers by how closely they actually track
POST /funds/screener?api_key=YOUR_API_KEY
{
  "filters": [
    {"field": "tracking_error_pct", "op": "not_null"},
    {"field": "vehicle",                              "value": "ETF"}
  ],
  "preset": "risk",
  "sort":   [{"field": "tracking_error_pct", "dir": "asc"}]
}
Python — page through a whole screen
import requests

BASE = "https://data.businessquant.com/funds/screener"

payload = {
    "filters": [
        {"field": "vehicle",               "op": "eq",  "value": "ETF"},
        {"field": "net_expense_ratio_pct", "op": "lte", "value": 0.10},
    ],
    "fields": ["className", "net_expense_ratio_pct", "net_assets_usd", "return_1y_pct"],
    "sort":   [{"field": "net_assets_usd", "dir": "desc"}],
    "limit":  500,
}

rows, offset = [], 0
while True:
    payload["offset"] = offset
    body = requests.post(
        BASE, params={"api_key": "YOUR_API_KEY"}, json=payload, timeout=60
    ).json()
    rows += body["data"]
    md = body["metadata"]
    # nulls_excluded is the disclosure that makes the count honest --
    # log it rather than presenting the survivors as the whole universe.
    if offset == 0 and md["nulls_excluded"]:
        print("excluded for no value on file:", md["nulls_excluded"])
    offset += md["limit"]
    if offset >= md["total_matched"]:
        break

print(f"{len(rows)} of {md['universe_total']} share classes")

9. Use Cases

What this endpoint is actually built for.

Fund Discovery Tables

Back a sortable, filterable fund browser with one call per page. preset gives a reader a cost view or a portfolio view in one tap without a 141-row column chooser.

Lowest-Cost Share Class

Filter to a series_id and sort by net_expense_ratio_pct ascending to find the cheapest wrapper on a portfolio a client already owns. The share-class grain is what makes this answerable at all.

Flow-Led Research

Rank by net_flow_12m_usd or net_flow_1m_pct to see where money is actually going. Pair with the Fund Flows API for the month-by-month series behind a name that stands out.

Filter Rail Generation

"include_metrics": true returns datatype, filter shape, enum values and p05/p50/p95 for every field, so a filter UI can be generated rather than hand-maintained against a moving schema.

Look-Through Screening

Screen on what a fund holds, not just what it charges — lookthrough_pe, wavg_market_cap_usd, sector_technology_pct. These are derived from filed N-PORT portfolios, not from a fund's own marketing category.

Comparison Shortlists

Take the top rows of a screen straight to the ETF & Mutual Fund Comparison API, which will tell you which of the 138 comparable metrics actually differ between them.

Frequently Asked Questions

The questions developers ask most often about this endpoint.

Why do I get several rows with the same fund name?

Because the grain is the share class, not the fund. VTSAX, VTI, VITSX and VSMPX are four wrappers on one Vanguard portfolio — they hold identical securities and charge different fees. They are separate rows because a buyer picks between them on price and minimum. Read className to see which class each row is, and series_id to see that they are the same fund. If you want one row per fund, group your results by series_id and keep the class you care about.

What is nulls_excluded and why does it matter?

When you filter on a magnitude — lt, lte, gt, gte, between — a fund with no value on file cannot satisfy the test and drops out. That is correct, but it is not the same as failing the test, and a screen that does not distinguish the two overstates how complete it is. nulls_excluded reports the count per field so you can say "412 funds matched, and 1,204 more were excluded because they do not disclose an expense ratio". Equality and enum filters do not report this: nobody expects "category is Equity" to also return the funds with no category.

How do I get the list of valid field names?

Section 6 on this page lists all 141, or send "include_metrics": true in the body and metadata.metrics carries all 141 entries with datatype, unit, description, filter shape, enum values and distribution percentiles. Fetch it once and cache it — it changes at most once per pipeline run. A field name that is not in that list returns a 400 naming it rather than being silently ignored.

Why is the filter a grammar rather than a SQL fragment?

Because a SQL fragment sent by a caller has to be either trusted or parsed, and trusting it is not an option on a public endpoint. The grammar here is small enough to validate completely: field names are checked against the contract, operators against the field's datatype, and every value is bound as a parameter rather than concatenated. You lose the ability to write arbitrary expressions and gain a filter that fails with a useful 400 instead of a 500 — or worse, a query that runs when it should not have.

Why do the as-of dates disagree with each other?

Because the things they date are filed on different schedules. A portfolio comes from a quarterly N-PORT, a price is daily, net assets are month-end, and a prospectus figure can be up to a year old. Flattening them into one page-level "as of" would make five of the six wrong. data_asof returns all six so each can be shown beside the column group it actually describes.