Data & API
Everything this site computes, as machine-readable datasets — 9 datasets, 22 exports, every column and caveat documented below. Delivered as bulk Parquet snapshots with a signed manifest, not a per-request API.
SEC-registered wrappers only: BDCs, interval funds, tender-offer funds, non-traded REITs and closed-end funds. Never hedge funds or private-equity partnerships — the SEC does not disclose their holdings or returns, and neither can we.
Updated weekly by the pipeline run. The underlying motion is the SEC filing calendar: 10-Q ~45 days after quarter end, N-PORT ~60 days, BDC Schedules of Investments off annual and quarterly filings.
Why this exists
The filings are free — what you are buying is the discipline on top of them. Every weekly publish must pass the warehouse’s full automated test suite (200 data tests as of July 2026) before anything goes live: plausibility bands on every metric, share arithmetic proven against its denominators, every dataset key verified unique against the live warehouse. Normalization is deterministic — the same filings produce byte-identical snapshots, so two deliveries can be diffed and trusted — and every filed figure carries the EDGAR accession of the document it came from. The one exception is the proprietary metric history (D9), which accumulates a row per publication date rather than describing the current filings: it grows between deliveries by design, and the rows already in it never change.
Datasets
Grain is each export’s tested key. Expand a dataset for its caveats and full column contracts.
Coverage figures quoted in caveats were measured on 2026-07-28 and move with every weekly run; the data_quality dataset carries the live values.
Metrics1 dataset · 2 exports
Canonical metrics — filed and derivedD1 · metrics2One metric vocabulary across four SEC feeds (XBRL companyfacts, XBRL frames, N-PORT, BDC Data Sets) plus the computed keys that exist on no EDGAR filing — leverage, distribution coverage, PIK share, fee rates and loads, portfolio yield, cost of debt, spreads, expense ratio, ROE, FFO, flows, redemption rate, and a NAV-per-share fallback — as one full-history table and one latest-value view.(entity_id, metric_key, period_end, period_start, period_type)
Every filed value carries a cross-check status and the EDGAR accession behind it; values that fail plausibility screens are quarantined before they publish.
Weekly pipeline run; a fund's figures move when it files, and derived keys are recomputed from the canonical facts on every run.
- 90,457 published filed facts as of 2026-07-28: 23,219 (25.7%) are cross-checked across two SEC endpoints, 67,238 (74.3%) are single-source — not wrong, unchecked — and 0 conflict. The status column carries that label on every row.
- Cross-checking measures agreement between SEC's own views of the same filing, not independent confirmation of what the fund filed.
- 631 of 645 published funds carry at least one figure as of 2026-07-28; 14 carry none.
- 47 of 113,723 raw facts were quarantined by plausibility screens as of 2026-07-28 and never published; quarantine counts appear in the data_quality dataset.
- Derived keys are computed, not filed: every derived row carries primary_source = DERIVED, no accession and no filing date — its provenance is the published derivation formula, not a filing. Derived keys exist only where their filed inputs do, so coverage inherits every gap in the canonical facts.
- A ratio whose denominator makes it meaningless — leverage against negative ramp-up equity, a fee rate against a sliver of reported net assets — is suppressed, never published as a number that merely looks like one.
- Filed always wins the one key both layers can emit: the derived nav_per_share is a fallback present only where no filed value exists for the exact grain, so metric_history never carries a filed and a derived value for the same key (0 collisions measured 2026-07-28).
- canonical_value is an exact decimal, not a float: numeric(38,12) in the warehouse, Decimal128(38,12) in the Parquet exports, and a quoted decimal string in JSON. A filed 0.145 is 0.145 — never the nearest double to it — and it stays that way through every hop of the delivery.
metric_history24 columns · grain (entity_id, metric_key, period_end, period_start, period_type)
Full history of canonical values — filed rows chosen across all sources with cross-check status and provenance, derived rows computed at the same grain — one metric surface on the filed 24-column contract.
| Column | Type | Meaning |
|---|---|---|
| entity_id | string | Opaque entity identifier, consistent across every export in a snapshot; for joins outside the snapshot prefer cik or slug. |
| cik | string | Zero-padded 10-digit SEC EDGAR CIK, joined from the entity registry on filed and derived rows alike. |
| ticker | string | Exchange ticker where one exists; null for most non-traded funds. |
| entity_name | string | Entity name as registered. |
| entity_type | string | Registry entity type: FUND or MANAGER. Derived rows are FUND-only by construction. |
| asset_class | string | Classified asset class (e.g. PRIVATE_CREDIT, REAL_ESTATE, MULTI_ASSET); null while unclassified. |
| structure | string | Vehicle structure as classified (e.g. BDC, REIT, interval fund); null while unclassified. |
| manager_id | string | Opaque identifier of the linked manager row, where a manager link exists. |
| metric_key | string | Canonical metric key — one vocabulary across all four SEC feeds and the derived keys. |
| metric_label | string | Human-readable metric label. |
| unit | string | Unit of the value (USD, USD/share, shares, ratio, percent). |
| category | string | Metric category grouping (e.g. INCOME, LEVERAGE, DISTRIBUTIONS). |
| applies_to | string | Asset class the metric is meaningful for, or ALL. |
| period_end | date | End of the fiscal period the value describes — not the filing date. |
| period_start | date | Start of the fiscal period; equals period_end for instant metrics. Derived flow ratios join their inputs on the exact period window, so a 3-month figure is never divided by a year-to-date one. |
| period_type | string | instant (balance-sheet point) or duration (flow over the period). |
| fiscal_year | integer | Filer's fiscal year label, where the source carries one; null on derived rows — computed values carry no filing metadata. |
| slug | string | Fund slug — ticker where one exists, else zero-padded CIK. The join key used across the holdings and analytics exports. |
| canonical_value | decimal | The picked value for this grain across all reporting sources; the computed value on derived rows. |
| primary_source | string | Which SEC feed supplied the picked value; DERIVED for computed metrics. |
| source_ref | string | EDGAR accession number of the filing the value came from — the provenance stamp; resolves to the source document. Null on derived rows: a computed value has no single accession. |
| filed_at | date | Date the source filing was filed with the SEC; null on derived rows. |
| source_count | integer | How many distinct SEC sources reported this grain; always 1 on derived rows. |
| status | string | CROSS_CHECKED (2+ SEC sources agree within tolerance), CONFLICT (2+ sources disagree), SINGLE_SOURCE (only one source reported it). Derived rows are always SINGLE_SOURCE — a computation has nothing to cross-check against. |
fund_metrics_latest19 columns · grain (entity_id, metric_key)
Latest-value convenience view over the same filed + derived union — one row per fund per metric; for flow metrics with several durations ending on the same date, the shortest (most recent quarter) wins.
| Column | Type | Meaning |
|---|---|---|
| entity_id | string | Opaque entity identifier; same values as metric_history. |
| cik | string | Zero-padded EDGAR CIK; null on derived rows in this view (metric_history carries the registry cik on both). |
| ticker | string | Exchange ticker where one exists. |
| slug | string | Fund slug — ticker, else zero-padded CIK. |
| entity_name | string | Fund name. |
| asset_class | string | Classified asset class; null while unclassified. |
| structure | string | Vehicle structure; null while unclassified. |
| manager_id | string | Opaque identifier of the linked manager row, where one exists. |
| metric_key | string | Canonical metric key, filed or derived. |
| metric_label | string | Human-readable metric label. |
| unit | string | Unit of the value. |
| category | string | Metric category grouping. |
| applies_to | string | Asset class the metric is meaningful for, or ALL. |
| period_end | date | Fiscal period end of the latest value. |
| canonical_value | decimal | The latest value. |
| status | string | CROSS_CHECKED / CONFLICT / SINGLE_SOURCE, carried from the fact. |
| primary_source | string | Which SEC feed supplied the value; DERIVED for computed metrics. |
| source_ref | string | EDGAR accession of the source filing; null on derived rows — the honest null, computed values have no accession. |
| filed_at | date | Filing date of the source; null on derived rows. |
Holdings & companies2 datasets · 5 exports
Holdings and positions, identity-resolvedD2 · holdings3Position-level portfolios from N-PORT and the BDC Schedules of Investments — the private-credit books nobody else canonicalizes — reconciled against each fund's own reported total, with truncation-honest weights and issuer identity resolved across every filer's spelling.(slug, period_end, source, position_seq)
Weekly run; N-PORT contributes monthly period grain, BDC Schedules of Investments follow annual and quarterly filings.
- 516 of 645 published funds have a book loaded as of 2026-07-28 — loaded is not complete.
- 192 of 516 loaded books do not tie to the fund's own reported total in both directions, and 8 of 516 report no total to check against. The verdict ships on every row as recon_status / recon_ratio.
- N-PORT books are stored top-100 truncated (is_partial); weights on truncated books use the filer's own reported percentage and are never normalised against a total we do not hold.
- 81.3% of positions (53,797 of 66,142 as of 2026-07-28) resolve to an issuer by normalised name only — the weakest join and the majority one, with measured two-way error of ~10.8% over-merge / ~9.9% under-merge against CUSIP-keyed ground truth. match_method ships per row so name-grade joins can be filtered out.
- position_seq is a deterministic construction, not a filed identifier: filers repeat position rows verbatim, so the position exports number each book's rows by a total order of every column. Fully-identical rows may swap seq between rebuilds — they are identical, so nothing about them changes.
holdings_positions23 columns · grain (slug, period_end, source, position_seq)
The position record as filed: instruments, identifiers, values, rates, rank, and the reconciliation verdict of the book it belongs to — one row per position of each (fund, period, source) book.
| Column | Type | Meaning |
|---|---|---|
| ticker | string | Fund ticker where one exists. |
| slug | string | Fund slug — the join key to the metric exports. |
| fund_name | string | Fund name. |
| period_end | date | Period the book describes. |
| source | string | Which disclosure supplied the book (N-PORT or BDC Schedule of Investments). |
| portfolio_co | string | Portfolio company / borrower name as extracted from the filing. |
| identifier_raw | string | The as-filed identifier string portfolio_co was resolved from, verbatim — pipes, tranche wording and per-row counters intact. BDC Schedule-of-Investments rows only; null on N-PORT. The raw provenance of the extracted name, and the text the seniority fallback in the position_marks dataset classifies from. |
| issuer | string | Issuer text as filed, where the source carries one; portfolio_co is the name to use. |
| instrument | string | Tranche or instrument where the filer stated one (e.g. first lien senior secured loan); null where unstated. |
| industry | string | Filed industry label; null where the filer did not state one — see the issuer_registry caveats for how thin filed coverage is. |
| cusip | string | Position CUSIP where filed (N-PORT); null on most BDC schedule rows. |
| lei | string | Issuer LEI where filed. |
| principal | decimal | Principal / par amount where filed. |
| cost | decimal | Amortized cost where filed. |
| fair_value | decimal | Fair value of the position. |
| rate | number | Stated interest rate where filed. |
| recon_status | string | RECONCILED or UNRECONCILED — whether the full position set ties to the fund's own reported total within tolerance, measured before any truncation. |
| recon_ratio | number | Loaded fair value over the fund's reported total; null when the filing reports no total to check against — that is 'could not check', never 'missed by 100%'. |
| rank | integer | Position rank by fair value within the (fund, period, source) book. Not a key — equal fair values tie. |
| period_holding_count | integer | How many positions the filing reports for the period — the denominator behind is_partial. |
| is_partial | boolean | True when the stored book is a top-N truncation of a larger filed book. |
| weight | number | Position share of the fund: computed exactly for complete books, the filer's own reported percentage for truncated ones, and null when neither exists — never inflated against a truncated denominator. |
| position_seq | integer | Deterministic position number within the (slug, period_end, source) book: row_number over a total order of every other column, reproducible by construction. The last grain column — filed books carry repeated identical rows, so no natural column set keys a position. |
holdings_positions_resolved16 columns · grain (slug, period_end, position_seq)
Positions of each fund's latest book resolved to issuers: the identity key, how the match was made, and whether the position is genuinely private-book exposure.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Fund slug. |
| fund_name | string | Fund name. |
| ticker | string | Fund ticker where one exists. |
| period_end | date | Period the book describes — each fund's latest loaded book only. |
| portfolio_co | string | Borrower name as extracted from this filing. |
| industry | string | Filed industry label, where stated. |
| instrument | string | Tranche where the filer stated one — seniority is the first question asked of a credit book. |
| fair_value | decimal | Fair value of the position. |
| weight | number | Truncation-honest position share (see holdings_positions.weight). |
| is_partial | boolean | True when the book is a top-N truncation. |
| recon_status | string | Reconciliation verdict of the book this position belongs to. |
| name_key | string | Normalised borrower-name key this row resolved through — recorded so the join is auditable. |
| issuer_key | string | The resolved issuer identity: the issuer's CUSIP6 where known, else the name key. |
| match_method | string | CUSIP (the position's own CUSIP), CUSIP_VIA_NAME (name key mapped to a CUSIP6 seen elsewhere), or NAME (normalised name only — the weakest and most common basis). |
| is_private_position | boolean | True for genuinely private-book exposure (BDC schedules by construction; N-PORT by filed asset category). Two funds both holding a listed mega-cap is index exposure, not co-investment. |
| position_seq | integer | Deterministic position number within the (slug, period_end) book: row_number over a total order of every other column, reproducible by construction. The last grain column — filed books carry repeated identical rows, so no natural column set keys a position. |
issuer_fund_exposure17 columns · grain (issuer_key, slug)
The issuer-level serving grain: each fund's total exposure to each borrower (tranches summed to one stake), with holder census figures windowed onto every row.
| Column | Type | Meaning |
|---|---|---|
| issuer_key | string | Resolved issuer identity key. |
| slug | string | Holding fund slug. |
| fund_name | string | Holding fund name. |
| ticker | string | Holding fund ticker where one exists. |
| period_end | date | Latest period of the fund's book. |
| portfolio_co | string | Borrower name, taken from this fund's largest position (trailing tranche counters stripped). |
| industry | string | Canonical industry, filed-only, by ladder: the holder vote over this fund's own position labels first, else the filed name→industry feed matched on the issuer name key; null when neither basis speaks — never inferred. |
| industry_source | string | Which filed basis named the industry: POSITION (the holder stated it on the position itself) or NAME_FEED (another filer stated it against the borrower's name; the match carries the identity ladder's name-match error). Null exactly when industry is null. |
| fair_value | decimal | The fund's total exposure to the borrower, summed across tranches. |
| weight | number | Summed truncation-honest share; null only if every tranche is null — a truncated book with no filed percentage stays honest instead of inventing a share. |
| is_partial | boolean | True when any tranche came from a truncated book. |
| is_unreconciled | boolean | True when any tranche came from an unreconciled book — the caveat travels with the number. |
| is_private_position | boolean | True when any tranche is private-book exposure. |
| match_method | string | Weakest match basis across the fund's tranches for this borrower (NAME over CUSIP_VIA_NAME over CUSIP). |
| fund_count | integer | How many published funds hold this issuer — windowed onto every row. |
| combined_fv | decimal | Combined fair value across all holders of this issuer. |
| display_name | string | The borrower's display name agreed across every holder — the largest holder's spelling. |
Issuer registryD3 · issuer_registry2The identity-resolution layer itself: one key per borrower across every holder's spelling, with an agreed display name and holder census, plus the canonical industry dimension derived from what filers actually wrote.(issuer_key)
Rebuilt weekly from the loaded books.
- Issuer identity inherits the holdings dataset's name-match error; every issuer-level figure carries it.
- Filed industry exists on 3,886 of 63,363 BDC Schedule-of-Investments positions (6.1%) and 0 of 20,466 N-PORT positions (0.0%) as of 2026-07-28 — the N-PORT form has no industry field. Dollar-weighted it is thinner still: $27B of $594B (4.5%). At the issuer grain the two filed bases together label 6,176 of 44,100 rows (position-carried 2,307, name-feed 3,869) and 3,349 of 25,673 issuers, holding 20.5% of aggregate fair value — measured 2026-07-28.
- Industry coverage can never approach 100%: private borrowers inside a BDC book do not file on their own, so there is no SIC/NAICS fallback. The column ships where filed — position-carried, or matched from the filed name→industry feed with industry_source saying which — and is otherwise null: never inferred, never rendered as zero.
issuer_overlap11 columns · grain (issuer_key)
The co-held slice of the registry: which borrowers appear in 2 or more books, who holds them, and on what match basis.
| Column | Type | Meaning |
|---|---|---|
| issuer_key | string | Resolved issuer identity key. |
| display_name | string | Display name from the most valuable holder's spelling. |
| industry | string | Canonical filed industry for the issuer, basis-first then holder vote: a position-carried label from any holder beats a name-feed label from every holder. Null when no filed basis speaks — never inferred. |
| industry_source | string | Which filed basis named the industry: POSITION (stated on a holder's position) or NAME_FEED (stated against the borrower's name elsewhere and matched by name key). Null exactly when industry is null. |
| industry_bucket | string | The ~23-bucket taxonomy rollup of the industry label (config_industry_taxonomy via industry_labels). Null when the label is deliberately unclassified — sector-level catch-alls stay visible rather than guessed. |
| fund_count | integer | How many funds hold the issuer (always 2 or more in this export). |
| tickers | string[] | Holding fund names, ordered (the column name is legacy — it carries fund names, not tickers). |
| slugs | string[] | Holding fund slugs, in the same order. |
| combined_fv | decimal | Combined fair value across all holders. |
| match_method | string | CUSIP when any holder matched by CUSIP, else NAME. |
| linked_by_name | boolean | True when any holder matched via a name-to-CUSIP bridge (CUSIP_VIA_NAME). |
industry_labels5 columns · grain (canon_key)
The canonical industry dimension, derived entirely from filed spellings across both filed vocabularies (position-carried labels and the name→industry feed): the display label is the most common raw spelling, with deterministic tie-breaks, plus the taxonomy-bucket rollup.
| Column | Type | Meaning |
|---|---|---|
| canon_key | string | Canonical industry key. |
| canonical_label | string | Display label — the most common raw spelling among the merged group. |
| bucket | string | The ~23-bucket industry-group-style rollup from the config_industry_taxonomy seed. Null means the label is deliberately unclassified (sector-level catch-alls, composite tags) — never guessed. |
| n_rows | integer | How many observation rows across both filed vocabularies carry a spelling in this group. |
| n_spellings | integer | How many distinct raw spellings merged into this label; values above 1 mark the merged groups. |
Managers1 dataset · 2 exports
Manager and brand registryD4 · manager_registry2Fund-to-platform attribution — the judgement layer that cannot be derived from any single filing — maintained against adviser filings with change detection.(slug)
Every fund-to-manager link names the evidence that produced it, so a filed link and a guess never ship under the same label.
Rebuilt weekly; adviser filings move on annual cycles, so most weeks are no-ops.
- Brand curation is a maintained mapping, not a filed fact; manager_link_source and name_source are the honesty mechanism and are part of the schema, not an apology.
- BDCs file no N-CEN adviser section, so their adviser fields come from each BDC's own 10-K matched exactly against SEC's IAPD registry, and are null where no exact match exists.
manager_brands8 columns · grain (slug)
The platform registry — one row per manager platform (brand): pinned slug, display name with its derivation label, and corporate-parent facts rolled up from member advisers' filings.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Pinned addressable key of the platform — stable once assigned, never recomputed. |
| name | string | Platform display name. |
| name_source | string | Which rule produced the name: FUND_NAMES (derived from the platform's own funds), ADVISER_NAME (stripped adviser legal name), or ALIAS (curated). |
| lei | string | Platform Legal Entity Identifier, rolled up from member advisers; null when no member reports one. |
| parent_lei | string | Ultimate corporate parent LEI per GLEIF Level 2, where reported. |
| parent_name | string | Ultimate corporate parent name per GLEIF Level 2, where reported. |
| parent_source | string | GLEIF_ULTIMATE_PARENT when a parent is reported; otherwise the filed exception reason (NON_CONSOLIDATING, NATURAL_PERSONS, NO_KNOWN_PERSON) — always either a parent or a stated reason, never silence. |
| note | string | Free-text about the platform, where one exists. |
fund_manager_links12 columns · grain (fund_cik)
The fund-to-platform edge list — every active fund with a manager attribution, one row per fund: the fund's filed adviser facts as filed, the platform it rolls up to, and the evidence grade of the link.
| Column | Type | Meaning |
|---|---|---|
| fund_cik | string | Zero-padded EDGAR CIK of the fund. |
| fund_ticker | string | Fund ticker where one exists. |
| fund_name | string | Fund name. |
| asset_class | string | Classified asset class of the fund. |
| structure | string | Vehicle structure of the fund. |
| adviser_name | string | The fund's primary adviser legal name as filed in N-CEN — recorded as filed so the brand rollup can never overwrite the fact it derives from; null for BDCs, which file no N-CEN adviser section. |
| adviser_crd | string | The filed adviser's CRD number. |
| adviser_lei | string | The filed adviser's LEI, where filed. |
| manager_crd | string | CRD of the linked manager row — the adviser's own regulatory identifier. |
| brand_slug | string | The platform's pinned key — join to the brands export. |
| brand_name | string | The platform's display name. |
| manager_link_source | string | Evidence behind the link: NCEN_ADVISER (the fund's own N-CEN names the adviser), TENK_ADVISER (a BDC's 10-K names an adviser exactly matching SEC's IAPD registry), NAME_INFERRED (guessed from the fund's own name — the one non-filed grade, and it says so), MANUAL (hand-set, never overwritten). |
Analytics & reports4 datasets · 10 exports
Derived analyticsD5 · derived_analytics5Crowding, fund overlap, similarity, peer percentiles and manager complexes — computed over the whole universe's current state plus the identity mappings at compute time, which is why they cannot be reconstructed later even from EDGAR.(slug)
Recomputed weekly over the whole universe's current state.
- Crowding is key-sensitive: the index moves 46.9% to 79.6% purely on how issuer identity is resolved. Read crowded_share as a band anchor, not a point fact.
- denominator_is_truncated_holdings flags funds graded against a truncated book (no reported total_assets to use as the denominator).
- Percentiles exist only where the peer set clears the configured minimum; peer_count ships on every row so the denominator is never implied.
- Latest views only: these tables are rebuilt in place each week and carry no history. A weekly snapshot replaces the last, and deltas between snapshots are not meaningful row-for-row because rebuilt tables have no stable row identity.
- The relationship-graph edge list (mart_graph_edges) was removed from the exports 2026-07-28: it is a presentation artifact — its weight floors and caps are display judgement, not data — and everything it encodes derives from the holdings and manager_registry datasets.
fund_crowding11 columns · grain (slug)
How much of each fund's book sits in issuers held by many peers versus issuers held by this fund alone — one row per fund with a loaded book.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Fund slug. |
| fund_name | string | Fund name. |
| asset_class | string | Classified asset class. |
| crowded_share | number | Share of the book (by fair value) in issuers held by min_funds or more funds; denominator is the fund's reported total assets, or the loaded book total when no reported total exists (flagged). |
| unique_share | number | Share of the book in issuers held by this fund alone. |
| crowded_count | integer | How many crowded issuers the fund holds. |
| unique_count | integer | How many sole-holder issuers the fund holds. |
| total_issuers | integer | Distinct issuers in the loaded book. |
| total_fv | decimal | Summed loaded fair value of the book. |
| denominator_is_truncated_holdings | boolean | True when the share denominator fell back to the loaded (possibly truncated) book because the fund reports no total assets — the shares are then upper-bound estimates. |
| min_funds | integer | The configured crowding threshold, on every row, so 'crowded = held by N+ funds' always quotes the real configured value. |
fund_overlap12 columns · grain (slug_a, slug_b)
Fund-to-fund co-investment over private positions only — one row per unordered fund pair sharing 2 or more private issuers (slug_a < slug_b, each pair counted once). Two funds both holding a listed mega-cap is index exposure and is screened out.
| Column | Type | Meaning |
|---|---|---|
| slug_a | string | First fund of the pair (lexicographic order; each pair counted once). |
| slug_b | string | Second fund of the pair. |
| fund_a | string | First fund's name. |
| fund_b | string | Second fund's name. |
| ticker_a | string | First fund's ticker where one exists. |
| ticker_b | string | Second fund's ticker where one exists. |
| shared_holdings | integer | Distinct private issuers both funds hold. |
| combined_fv | decimal | Both funds' combined fair value across the shared issuers. |
| top_names | string[] | Up to five shared borrower names, largest combined stake first. |
| holdings_a | integer | First fund's private-issuer count — one of the two denominators behind shared_pct. |
| holdings_b | integer | Second fund's private-issuer count. |
| shared_pct | number | Shared issuers as a percent of the smaller book — what makes a 20-name fund sitting inside a 100-name fund visible as the strong relationship it is. |
fund_similarity10 columns · grain (slug_a, slug_b)
Nearest-neighbour funds by a blend of portfolio overlap and profile distance over headline metrics — top 5 neighbours per fund, ranked.
| Column | Type | Meaning |
|---|---|---|
| slug_a | string | The fund. |
| name_a | string | The fund's name. |
| slug_b | string | The neighbour fund. |
| name_b | string | The neighbour's name. |
| asset_class | string | Asset class of the pair. |
| similarity | number | Blended similarity score. |
| overlap_component | number | Portfolio-overlap component, where the pair shares positions; null otherwise. |
| profile_component | number | Profile-distance component over headline metrics, where both funds carry them; null otherwise. |
| component_used | string | blend, overlap or profile — which inputs actually existed for the pair, so a one-legged score is never mistaken for a blended one. |
| rank | integer | Neighbour rank 1-5 within the fund. |
fund_metric_percentiles13 columns · grain (entity_id, metric_key)
Where each fund sits in its peer set (same asset class, same metric, latest values) — one row per (fund, metric) where the peer set clears the configured minimum.
| Column | Type | Meaning |
|---|---|---|
| entity_id | string | Opaque entity identifier; same values as metric_history. |
| slug | string | Fund slug. |
| ticker | string | Fund ticker where one exists. |
| entity_name | string | Fund name. |
| asset_class | string | Peer-set asset class. |
| metric_key | string | Metric the rank is computed for. |
| metric_label | string | Human-readable metric label. |
| unit | string | Unit of the underlying value. |
| canonical_value | number | The fund's own latest value. |
| percentile | integer | 0-100 rank within (asset_class, metric_key), ascending by value — direction is not good/bad; low expense ratio is good, low NAV is not. |
| peer_median | number | Median of the peer set. |
| peer_count | integer | Size of the peer set the rank was computed over — the denominator, on every row. |
| period_end | date | Period of the fund's own value. |
manager_complex_holdings10 columns · grain (brand_slug, issuer_key)
Each manager platform's combined book by borrower — one row per (platform, issuer) held by any of the platform's vehicles: which issuers its vehicles hold, how many of them, and how much of the complex's book is shared across its own vehicles.
| Column | Type | Meaning |
|---|---|---|
| brand_slug | string | Platform key — join to the brands export. |
| brand_name | string | Platform display name. |
| issuer_key | string | Resolved issuer identity key. |
| issuer_name | string | Borrower display name. |
| funds_holding | integer | How many of the platform's vehicles hold this issuer. |
| complex_fv | decimal | The platform's combined fair value in this issuer. |
| fund_slugs | string[] | Which vehicles hold it (slugs, ordered). |
| vehicle_count | integer | How many of the platform's vehicles have a loaded book — the denominator behind funds_holding. |
| complex_total_fv | decimal | The platform's total combined book, windowed onto every row. |
| complex_shared_share | number | Share of the platform's combined book sitting in issuers held by 2 or more of its own vehicles. |
Position marks & dispersionD7 · position_marks3Credit marks computed directly from BDC Schedule-of-Investments cost and fair value — position-level marks, a fund-period credit-quality roll-up, and cross-fund dispersion on where the same borrower is marked differently by the funds that hold it.(slug, period_end, position_seq)
Weekly pipeline run, alongside the holdings the marks are computed from.
- mark_cost = fair value / amortized cost AS FILED, which includes OID/PIK accretion.
- is_debt_proxy is a principal-present proxy, not a filed flag: 82% precision on the labeled subset as of 2026-07-28 — a boolean, never a credit opinion.
- Fund aggregates in fund_marks are computed over debt-proxy marks inside the trim window [0.01, 2] only; positions_counted, positions_trimmed and positions_excluded partition the fund-period's whole book, so a position dropped from an aggregate is never dropped from the count.
- Seniority is classified label-first with a raw-identifier-text fallback, both routes through the same strict pattern seed; seniority_basis / fv_seniority_from_text record which route classified each row / dollar. Filed labels alone cover 17.7% of fair value and the fallback lifts classification to 64.9% (2026-07-28); the four seniority shares remain of STATED fair value (fv_seniority_stated / seniority_stated_share on every fund_marks row), and FIRST_LIEN still requires explicit lien wording from either route, so the published shares remain floors, not full counts.
- mark_spread in issuer_mark_dispersion is a range across reported debt positions in the same borrower — same borrower is not same loan. Instrument labels exist on ~17% of positions as of 2026-07-28, so tranche matching is not possible at that coverage; instrument_labeled_count / instrument_mix_known ship on every row so a reader can see how much of the range could even in principle be explained by tranche.
- position_seq is a deterministic construction, not a filed identifier (see the holdings dataset caveat): filers repeat position rows verbatim, so the position export numbers each book's rows by a total order of every column.
- nonAccrual is NOT included in this dataset because it is not genuinely extracted from the source filings.
position_marks19 columns · grain (slug, period_end, position_seq)
Position-level credit marks — one row per BDC Schedule-of-Investments position with a computable mark: fair value against amortized cost and against principal, the debt-proxy flag and its stress band, and the reconciliation verdict of the book the position belongs to.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Fund slug — the join key to the metric exports. |
| fund_name | string | Fund name. |
| period_end | date | Period the position was filed for. |
| portfolio_co | string | Portfolio company / borrower name as filed. |
| issuer_key | string | Resolved issuer identity key; null when the borrower name resolves to no issuer (subtotals, cash sweeps, placeholders are not borrowers). |
| match_method | string | CUSIP_VIA_NAME (name key mapped to a CUSIP6 issuer seen elsewhere) or NAME (bare name key); null with issuer_key. BDC Schedule-of-Investments rows carry no CUSIP of their own, so a direct CUSIP match never occurs here. |
| instrument | string | Tranche or instrument as filed; null where unstated. |
| seniority | string | FIRST_LIEN, SECOND_LIEN, OTHER_DEBT or EQUITY_WARRANTS — the filed instrument label classified first, and where no label classified, the as-filed identifier text through the same strict pattern seed (FIRST_LIEN still requires explicit lien wording from either route). Null where neither route matched — never guessed. |
| seniority_basis | string | Which route classified the row: LABEL (the filed instrument label) or IDENTIFIER_TEXT (the filer's own identifier prose, e.g. 'Acme | First lien senior secured loan'); null exactly when seniority is null. The provenance column — text-derived classification is real filed wording, but a reader must always be able to split it from labeled rows. |
| fair_value | decimal | Fair value of the position. |
| cost | decimal | Amortized cost as filed, including OID/PIK accretion. |
| principal | decimal | Principal / par amount as filed; null where the filer stated none — the discriminator behind is_debt_proxy. |
| mark_cost | number | fair_value / cost; null when cost is absent or zero — never coalesced to a fabricated 0 or 1.0. |
| mark_par | number | fair_value / principal; null when principal is absent or zero. |
| is_debt_proxy | boolean | True when principal is filed — a proxy for 'this is a debt position' (see dataset caveats for its measured precision). |
| mark_band | string | DEEP_STRESS / STRESS / WATCH / UNSTRESSED, banded on mark_cost against the configured thresholds; null when mark_cost is null — an unmarkable row has no band, never a fabricated healthy one. |
| is_partial | boolean | True when the book this position belongs to is a top-N truncation of a larger filed book. |
| recon_status | string | RECONCILED or UNRECONCILED — the reconciliation verdict of the book this position belongs to. |
| position_seq | integer | Deterministic position number within the (slug, period_end) book: row_number over a total order of every other column, reproducible by construction. The last grain column — filed books carry repeated identical rows, so no natural column set keys a position. |
fund_marks34 columns · grain (slug, period_end)
Fund-period credit-quality roll-up — one row per BDC fund-period, whether or not it has computable marks: fair-value-weighted and median marks, share of the book below the watch/stress/deep-stress bands, and the filed seniority mix, each with its own numerator and denominator on the row.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Fund slug. |
| fund_name | string | Fund name. |
| period_end | date | Period the fund-period book describes. |
| positions_counted | integer | Debt-proxy positions with a computable mark_cost inside the trim window [trim_lo, trim_hi] — the rows every aggregate on this row is computed over; a measured 0, never null, when none qualified. |
| positions_trimmed | integer | Debt-proxy computable marks outside the trim window — held out of the aggregates, counted rather than silently dropped. |
| positions_excluded | integer | Everything else in the fund-period's BDC book (equity rows, rows filing no principal, rows with no usable cost). positions_counted + positions_trimmed + positions_excluded partitions the fund-period's whole book. |
| weighted_mark_cost | number | Fair-value-weighted mean mark_cost over the counted positions; null when none qualified. |
| median_mark_cost | number | Position-count-weighted median mark_cost over the counted positions; null when none qualified. |
| marked_fv | decimal | Summed fair value of the counted positions — the denominator behind fv_below_95 / fv_below_90 / fv_below_85 and their shares. |
| fv_below_95 | decimal | Fair value of counted positions marked below the watch band. |
| fv_below_90 | decimal | Fair value of counted positions marked below the stress band. |
| fv_below_85 | decimal | Fair value of counted positions marked below the deep-stress band. |
| share_below_95 | number | fv_below_95 / marked_fv. |
| share_below_90 | number | fv_below_90 / marked_fv. |
| share_below_85 | number | fv_below_85 / marked_fv. |
| book_fv | decimal | Summed fair value of the fund-period's whole BDC book — the denominator behind seniority_stated_share, distinct from marked_fv. |
| fv_seniority_stated | decimal | Fair value of positions with a classified seniority — filed label first, as-filed identifier text as fallback (see the seniority caveat) — the denominator behind the four seniority shares; a measured 0, never null, when nothing classified. |
| fv_seniority_from_text | decimal | Of fv_seniority_stated, the dollars the IDENTIFIER_TEXT route classified (never more than fv_seniority_stated; a measured 0 when every classified dollar came from a filed label). The provenance split of the mix as a column: stated minus this is label-backed. |
| seniority_stated_share | number | fv_seniority_stated / book_fv — how much of the whole book the seniority shares actually describe. |
| fv_first_lien | decimal | Fair value classified FIRST_LIEN. |
| fv_second_lien | decimal | Fair value classified SECOND_LIEN. |
| fv_other_debt | decimal | Fair value classified OTHER_DEBT. |
| fv_equity_warrants | decimal | Fair value classified EQUITY_WARRANTS. |
| share_first_lien | number | fv_first_lien / fv_seniority_stated — of STATED fair value, not the whole book; FIRST_LIEN requires explicit lien wording, so the published share is a floor. |
| share_second_lien | number | fv_second_lien / fv_seniority_stated. |
| share_other_debt | number | fv_other_debt / fv_seniority_stated. |
| share_equity_warrants | number | fv_equity_warrants / fv_seniority_stated. |
| is_partial | boolean | True when any position in the fund-period's book came from a truncated filing. |
| recon_status | string | RECONCILED, or UNRECONCILED when any position in the book came from an unreconciled filing. |
| watch_band | number | The configured mark_cost threshold behind fv_below_95 / share_below_95, carried on every row so a consumer never hardcodes a copy. |
| stress_band | number | The configured mark_cost threshold behind fv_below_90 / share_below_90. |
| deep_stress_band | number | The configured mark_cost threshold behind fv_below_85 / share_below_85. |
| trim_lo | number | Lower edge of the trim window positions_counted is filtered to. |
| trim_hi | number | Upper edge of the trim window positions_counted is filtered to. |
issuer_mark_dispersion11 columns · grain (issuer_key, quarter_start)
Cross-fund dispersion of debt-proxy marks on the same borrower within a calendar quarter — one row per (issuer, quarter) held by 2 or more funds: the range, which funds contribute it, and how much of it instrument labels could even in principle explain.
| Column | Type | Meaning |
|---|---|---|
| issuer_key | string | Resolved issuer identity key. |
| quarter_start | date | Calendar quarter the marks are compared within (not raw period_end) — the coarsest bucket that keeps different filers' fiscal period ends comparable. |
| display_name | string | Borrower display name, reused from the issuer pages' agreed spelling. |
| fund_count | integer | Distinct funds holding a debt-proxy mark on this issuer in this quarter (always 2 or more — dispersion is a property of at least two books). |
| position_count | integer | Debt-proxy positions behind the range — the denominator behind instrument_mix_known. |
| mark_lo | number | Lowest debt-proxy mark_cost across the holding funds in the quarter, inside the trim window. |
| mark_hi | number | Highest debt-proxy mark_cost across the holding funds in the quarter, inside the trim window. |
| mark_spread | number | mark_hi - mark_lo — a range across reported debt positions in the same borrower, not the same loan; capital-structure differences (a wiped 2nd lien beside a whole 1st lien) can produce it as much as judgement can. |
| fund_slugs | string[] | Holding fund slugs, deterministically ordered. |
| instrument_labeled_count | integer | Of position_count, how many positions carry a filed instrument label — the tranche-trap gauge's numerator. |
| instrument_mix_known | number | instrument_labeled_count / position_count — how much of the range could even in principle be explained by tranche; instrument labels cover only ~17% of positions, so tranche matching is not possible at this coverage. |
Redemption pressureD8 · redemption_pressure1Monthly investor-flow pressure at fund grain, from N-PORT's monthly subscriptions, redemptions and reinvestments: is money leaving, how fast against the NAV it actually left from, and for how long.(slug)
Non-traded funds have no exchange quote, so flows are the demand signal a quoted share would otherwise give.
Weekly pipeline run; N-PORT flows arrive on the monthly filing grain, ~60 days after period end.
- REGISTERED funds only (interval funds, tender-offer funds, listed closed-ends): BDCs do not file N-PORT, so a BDC's tender-offer repurchases are absent — a filing-regime boundary, not evidence that nobody redeemed.
- redemption_rate_1m divides by the most recent net_assets strictly BEFORE the flow period — the balance investors actually redeemed out of, not the end-of-period remainder — and is deliberately not annualised: flows are lumpy and tranche-based, and a one-off liquidation month multiplied by twelve implies a recurrence that isn't there.
- A measured zero-redemption month is a 0% rate, not a gap; the rate is null only where the derived layer could not rate the month (no prior net_assets on file). 101 of 344 flow-filing funds have a rated latest month as of 2026-07-28; all 344 keep their row — flows render even where the rate is unmeasurable.
- The 3-month figure is a SUM of monthly rates, each already measured against its own prior NAV — no new denominator is chosen; months_in_3m / months_rated_3m state how much of the window is observed and how much is rated, so a 1-of-3-rated sum can't pose as three months of measurement.
- The band edges (elevated_band / high_band) ride along as columns so the stated meaning is always the real configured value.
redemption_pressure20 columns · grain (slug)
One row per fund with at least one monthly N-PORT redemptions fact: the latest flow month, a trailing 3-month window with its coverage stated, the outflow streak, and the live band edges.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Fund slug — the join key to the metric exports. |
| fund_name | string | Fund name. |
| asset_class | string | Classified asset class. |
| structure | string | Vehicle structure — registered structures only in practice (the N-PORT scope caveat as data). |
| latest_month | date | period_end of the fund's most recent redemptions fact — the month every _1m figure describes. |
| months_observed | integer | Distinct flow months in the fund's redemptions series — the denominator of 'how much history is this streak over'. |
| first_month | date | period_end of the fund's earliest redemptions fact. |
| redemptions_1m | decimal | Dollars redeemed in the latest flow month. Never null — the row exists because this fact does; a filed 0 stays a measured 0. |
| subscriptions_1m | decimal | Dollars subscribed in the same month; null when no subscriptions fact was filed for the month — unmeasurable, never coalesced to 0. |
| net_flows_1m | decimal | subscriptions + reinvestments - redemptions for the month, read from the derived metrics rather than recomputed; null when the derived layer has no row for the month. |
| redemption_rate_1m | number | The latest month's redemption rate, percent-form (1.68 = 1.68%/month): redemptions / most recent net_assets strictly BEFORE the flow period, not annualised. Null when that month has no rate (no prior NAV on file). |
| nav_basis_1m | decimal | The dollar denominator behind redemption_rate_1m — the prior NAV the money left from — backed out exactly as redemptions / (rate / 100). Null exactly when the rate is null or a measured 0 (0 x 100 / 0 has no answer). |
| months_in_3m | integer | Observed months in the trailing window (the fund's 3 most recent distinct flow months — fewer for a young fund). Always includes latest_month by construction. |
| redemptions_3m | decimal | Dollars redeemed over the window; never less than redemptions_1m (the window contains the latest month). |
| net_flows_3m | decimal | Sum of the window months' derived net flows; null when no month in the window has one. |
| redemption_rate_3m_sum | number | Sum of the window months' percent-form monthly rates, each against its own prior NAV — the honest aggregate that needs no new denominator. Null when no window month has a rate. |
| months_rated_3m | integer | Window months with a rate — the coverage caveat beside redemption_rate_3m_sum. |
| consecutive_outflow_months | integer | Streak of net-outflow months in consecutive OBSERVED months ending at latest_month — 0 when the latest month is an inflow or its flows are unmeasurable. Filings can skip a month; the streak counts across the gap rather than inventing the missing month either way. |
| elevated_band | number | The configured elevated-pressure threshold (percent-form monthly rate), on every row so no consumer hardcodes a copy. |
| high_band | number | The configured high-pressure threshold, same reason. |
Proprietary metric history — as published, by dateD9 · metric_snapshots1The headline figures AltsVault computes about the tracked universe, recorded on the date they were published and never rewritten: the private-credit crowding index, universe totals per asset class, complex-shared share across manager platforms, credit-mark and seniority-coverage aggregates, and redemption-pressure counts.(metric_key, as_of_date)
Every other dataset here is rebuilt from the current filings each week, so it always describes today; this one is the only record of what any of these numbers WERE. Each row carries its own numerator, denominator, fund count, the configured band edges in force, and the methodology marker under which it was computed.
One row per metric per build. The weekly pipeline run appends a new date; a same-day rebuild replaces that date's rows rather than adding a second reading.
- AS COMPUTED AT THE TIME, not a current best estimate of a past date. A row states what was published on as_of_date under the methodology then in force. Rows are never revised: nothing in this dataset is ever updated in place.
- A METHODOLOGY CHANGE APPEARS AS A NEW ROW, NOT A RESTATED ONE. These aggregates move when our methods improve — better issuer identity resolution shifts the crowding index with no filing having changed — so a series can step for reasons that are ours rather than the market's. methodology_version is bumped by hand when a definition changes and code_rev records the git revision that built the row, so a data change and a method change are distinguishable; comparing two rows with different methodology_version values compares two definitions.
- HISTORY STARTS ON THE FIRST BUILD (2026-07-29) AND NOTHING BEFORE IT WAS SYNTHESISED. No mart stored these figures previously, so no earlier point is recoverable; the series is short by construction and will only lengthen forward.
- A same-day rebuild REPLACES that date's rows — the last build of a date is what stands for it, the way an index publishes one value per date. Intra-day drafts are not retained; computed_at says which build survived.
- Shares ship with their denominators because a share whose denominator moved is a different measurement — a crowding index that fell because two funds stopped filing is not the same event as one that fell because books diverged. numerator, denominator and funds_counted are on every row that has them.
- Band edges ride on the row in config_edges, read from the serving relations' own stamped values rather than restated. A band change moves the number, and two adjacent rows differing only in an edge explain themselves.
- Every issuer-level measure inherits the identity-resolution error the data_quality dataset measures: the normalised-name join both over-merges (inflating crowding and overlap) and under-merges (deflating them). Dollar figures are footprints of what is filed and visible, summed across funds whose fiscal periods are different dates — never AUM totals and never same-date aggregates.
- numerator and denominator are exact decimals wherever their inputs are, with one stated exception: the crowding index numerator weights a presentation-grade share by exact dollars and therefore carries that share's precision. Each row's own caveat column names the limits that apply to it.
- The largest-platform row identifies its platform in scope, and the largest platform on one date need not be the largest on the next: that series is only one platform's history where scope is equal across the dates compared.
metric_snapshots15 columns · grain (metric_key, as_of_date)
One row per metric per publication date — the published value, the inputs behind it, the configured edges in force and the methodology marker it was computed under.
| Column | Type | Meaning |
|---|---|---|
| as_of_date | date | The date the figure was published — when we looked, not a filing date and not a fiscal period. The measures aggregate funds whose own periods are different dates; this is the only date the whole row shares. Half the grain. |
| metric_key | string | Stable measure identifier and the other half of the grain. Fully qualified: the asset class is part of the key on the universe rows, so the grain never needs a third column a consumer could forget to join on. |
| metric_label | string | Human-readable measure name. |
| section | string | Measure family: crowding, universe, manager_complex, marks or flows. |
| scope | string | What the row is measured over — 'all', an asset class, or a manager brand identifier on the largest-platform row. Derived from the same expression that builds metric_key. |
| unit | string | What metric_value is expressed in: share (a proportion of the denominator), usd, funds (a count) or ratio. |
| metric_value | number | The published headline, in unit. A double: a proportion on share rows, and on dollar rows the plottable rendering of a figure whose exact value is in numerator on the same row. Null where a measure was not computable — never a fabricated zero. |
| numerator | decimal | What was counted or summed. Exact where the input is exact; the crowding row's numerator weights a presentation-grade share by exact dollars and carries that share's precision instead (its caveat says so). Null where the measure is not a ratio of two quantities, such as a median. |
| denominator | decimal | What the numerator was measured against — always present on a share row. Null where the measure is a level rather than a proportion. |
| funds_counted | integer | How many funds (or, on manager rows, vehicles) the figure was computed over. Distinct from denominator: on the marks and flows counts the denominator is the measurable subset and this is the full covered population. |
| config_edges | string | The configured band edges in force when the row was computed, as key=value pairs separated by semicolons. Null where the measure is gated by no configured edge — a definitional threshold such as 'held by two vehicles of the same platform' is not one. |
| methodology_version | string | The declared methodology in force, bumped by hand when a definition behind a measure changes. Two rows with different values here are two definitions, not two observations of one. |
| code_rev | string | Git revision that built the row. Exact but uncurated — it moves on every commit, most of which change nothing here — and honestly null where the build environment did not expose one. |
| computed_at | timestamp | When the build that produced this row ran. Because a same-day rebuild replaces the date's rows, this says which build's numbers these are. |
| caveat | string | What this specific measure does not prove — scope bounds, the population behind the denominator, and the error it inherits. Travels in the row so a consumer that only wanted the number cannot drop it. |
Data quality1 dataset · 3 exports
Data-quality metadataD6 · data_quality3The grading layer, shipped with everything else: coverage measures with their own numerators and denominators, per-source freshness with the unwatched sources surfaced, and a per-fund completeness score.(measure_key, scope)
The same tables we grade ourselves with.
Recomputed weekly alongside everything it grades.
- Every measure carries its own numerator, denominator and a caveat sentence stating what it cannot prove. A coverage figure quoted without its denominator is misquoted.
- is_asserted marks sources with no configured freshness band — an invisible exemption reads as a passing check, so it is surfaced as data rather than hidden.
quality_coverage10 columns · grain (measure_key, scope)
What we hold, against what there was to hold — one row per (measure, scope slice), each with its numerator, denominator and mandatory caveat. A per-source measure emits one row per source, which is why scope is part of the key.
| Column | Type | Meaning |
|---|---|---|
| section | string | Measure grouping (coverage, verification, identity, timeliness). |
| measure | string | Human-readable measure name. |
| measure_key | string | Stable key of the measure. |
| scope | string | Which slice of the universe the measure is computed over; 'all' is a real value, never null. |
| numerator | integer | The counted quantity. |
| denominator | integer | What it is counted against — published beside the numerator so the figure cannot travel without its base. |
| share | number | numerator / denominator; null (not 0) when the denominator is 0 — 0/0 must never read as perfect coverage of nothing. |
| unit | string | What is being counted (funds, positions, facts, dollars). |
| caveat | string | The sentence stating what this measure does not prove; it travels in the row so it cannot be dropped by a consumer that only wanted the percentage. |
| sort_order | integer | Stable presentation order. |
quality_freshness9 columns · grain (source)
Per-source freshness against configured bands, including sources no band watches — the failure mode that once left holdings 15 months stale under green checks. One row per SEC source feeding the published universe.
| Column | Type | Meaning |
|---|---|---|
| source | string | The SEC source. |
| latest_period_end | date | Newest fiscal period the source contributes. |
| latest_filed_at | date | Newest filing date seen from the source. |
| days_since_period | integer | Age of the newest period, in days. |
| max_age_days | integer | The configured freshness band; null when no band is configured. |
| is_asserted | boolean | False when no freshness band exists for this source — no check can fail on it, which is a finding, not a pass. |
| status | string | OK, STALE, or UNASSERTED (unwatched or contributing no rows). |
| row_count | integer | Published rows contributed by the source. |
| note | string | What the status means for this source, including why an unwatched source is a decision waiting rather than a pass. |
quality_fund_completeness20 columns · grain (slug)
Per-fund thinness — one row per published fund: metric coverage against what a fund of its class is expected to report, staleness, and the state of its loaded book.
| Column | Type | Meaning |
|---|---|---|
| slug | string | Fund slug. |
| fund_name | string | Fund name. |
| ticker | string | Fund ticker where one exists. |
| asset_class | string | Classified asset class. |
| structure | string | Vehicle structure. |
| expected_from_class | string | Asset class used to size the expected metric set. |
| metrics_present | integer | Distinct metrics the fund carries. |
| expected_present | integer | How many of the class-expected metrics the fund carries. |
| metrics_expected | integer | Size of the class-expected metric set — the denominator behind metric_share. |
| metric_share | number | expected_present / metrics_expected. |
| latest_period_end | date | Fund's newest reported fiscal period. |
| months_stale | number | Months since that period — includes the reporting lag a filer is entitled to. |
| is_stale | boolean | Whether the fund is outside the configured staleness band; null when there is no period to judge — 'we have nothing' and 'what we have is old' are different findings. |
| holdings_loaded | boolean | Whether any book is loaded for the fund. |
| holdings_source | string | Which disclosure supplied the book. |
| holdings_period_end | date | Period of the loaded book — routinely a different date from the fund's newest metric. |
| position_count | integer | Positions in the loaded book. |
| is_partial | boolean | True when the loaded book is truncated; null when no book is loaded — never 'the whole portfolio'. |
| recon_status | string | Reconciliation verdict of the loaded book. |
| recon_ratio | number | Loaded fair value over the fund's reported total; null when the filing carries no total to check against — a third state distinct from a bad ratio. |
Delivery
Snapshots are Parquet files, one per export, dated per run, with a manifest.json carrying row counts, per-column schema, a SHA-256 per file and the exact code revision that produced them — so a delivered snapshot is verifiable after the fact. The machine-readable column contract is also published as an OpenAPI 3.1 document generated from the same spec this page renders.
The derived-analytics tables are rebuilt in place weekly and ship as snapshot-replace, not deltas — rebuilt tables have no stable row identity, and we would rather say so than fake incrementals.
Every export carries outcome labels — status, recon_status, recon_ratio, match_method, is_partial, is_private_position, evidence-of-link labels, and every data-quality measure with its denominator and caveat. The rules that produce those outcomes — source-priority ladders, plausibility bands, identity-resolution vocabularies, screening lists, blend weights — are not part of any export. One deliberate exception: a threshold a reader needs to interpret a published number rides along on the row (crowding's min_funds), so the stated meaning is always the real configured value.
Enquiries
Bulk access is arranged directly. Leave an email and we will get back to you — or reach us through any channel on the about page.