AltsVault

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.

Request access — bulk snapshots are delivered on request, not self-serve. Email contact@alts-vault.com.

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.

ColumnTypeMeaning
entity_idstringOpaque entity identifier, consistent across every export in a snapshot; for joins outside the snapshot prefer cik or slug.
cikstringZero-padded 10-digit SEC EDGAR CIK, joined from the entity registry on filed and derived rows alike.
tickerstringExchange ticker where one exists; null for most non-traded funds.
entity_namestringEntity name as registered.
entity_typestringRegistry entity type: FUND or MANAGER. Derived rows are FUND-only by construction.
asset_classstringClassified asset class (e.g. PRIVATE_CREDIT, REAL_ESTATE, MULTI_ASSET); null while unclassified.
structurestringVehicle structure as classified (e.g. BDC, REIT, interval fund); null while unclassified.
manager_idstringOpaque identifier of the linked manager row, where a manager link exists.
metric_keystringCanonical metric key — one vocabulary across all four SEC feeds and the derived keys.
metric_labelstringHuman-readable metric label.
unitstringUnit of the value (USD, USD/share, shares, ratio, percent).
categorystringMetric category grouping (e.g. INCOME, LEVERAGE, DISTRIBUTIONS).
applies_tostringAsset class the metric is meaningful for, or ALL.
period_enddateEnd of the fiscal period the value describes — not the filing date.
period_startdateStart 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_typestringinstant (balance-sheet point) or duration (flow over the period).
fiscal_yearintegerFiler's fiscal year label, where the source carries one; null on derived rows — computed values carry no filing metadata.
slugstringFund slug — ticker where one exists, else zero-padded CIK. The join key used across the holdings and analytics exports.
canonical_valuedecimalThe picked value for this grain across all reporting sources; the computed value on derived rows.
primary_sourcestringWhich SEC feed supplied the picked value; DERIVED for computed metrics.
source_refstringEDGAR 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_atdateDate the source filing was filed with the SEC; null on derived rows.
source_countintegerHow many distinct SEC sources reported this grain; always 1 on derived rows.
statusstringCROSS_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.

ColumnTypeMeaning
entity_idstringOpaque entity identifier; same values as metric_history.
cikstringZero-padded EDGAR CIK; null on derived rows in this view (metric_history carries the registry cik on both).
tickerstringExchange ticker where one exists.
slugstringFund slug — ticker, else zero-padded CIK.
entity_namestringFund name.
asset_classstringClassified asset class; null while unclassified.
structurestringVehicle structure; null while unclassified.
manager_idstringOpaque identifier of the linked manager row, where one exists.
metric_keystringCanonical metric key, filed or derived.
metric_labelstringHuman-readable metric label.
unitstringUnit of the value.
categorystringMetric category grouping.
applies_tostringAsset class the metric is meaningful for, or ALL.
period_enddateFiscal period end of the latest value.
canonical_valuedecimalThe latest value.
statusstringCROSS_CHECKED / CONFLICT / SINGLE_SOURCE, carried from the fact.
primary_sourcestringWhich SEC feed supplied the value; DERIVED for computed metrics.
source_refstringEDGAR accession of the source filing; null on derived rows — the honest null, computed values have no accession.
filed_atdateFiling 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.

ColumnTypeMeaning
tickerstringFund ticker where one exists.
slugstringFund slug — the join key to the metric exports.
fund_namestringFund name.
period_enddatePeriod the book describes.
sourcestringWhich disclosure supplied the book (N-PORT or BDC Schedule of Investments).
portfolio_costringPortfolio company / borrower name as extracted from the filing.
identifier_rawstringThe 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.
issuerstringIssuer text as filed, where the source carries one; portfolio_co is the name to use.
instrumentstringTranche or instrument where the filer stated one (e.g. first lien senior secured loan); null where unstated.
industrystringFiled industry label; null where the filer did not state one — see the issuer_registry caveats for how thin filed coverage is.
cusipstringPosition CUSIP where filed (N-PORT); null on most BDC schedule rows.
leistringIssuer LEI where filed.
principaldecimalPrincipal / par amount where filed.
costdecimalAmortized cost where filed.
fair_valuedecimalFair value of the position.
ratenumberStated interest rate where filed.
recon_statusstringRECONCILED or UNRECONCILED — whether the full position set ties to the fund's own reported total within tolerance, measured before any truncation.
recon_rationumberLoaded 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%'.
rankintegerPosition rank by fair value within the (fund, period, source) book. Not a key — equal fair values tie.
period_holding_countintegerHow many positions the filing reports for the period — the denominator behind is_partial.
is_partialbooleanTrue when the stored book is a top-N truncation of a larger filed book.
weightnumberPosition 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_seqintegerDeterministic 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.

ColumnTypeMeaning
slugstringFund slug.
fund_namestringFund name.
tickerstringFund ticker where one exists.
period_enddatePeriod the book describes — each fund's latest loaded book only.
portfolio_costringBorrower name as extracted from this filing.
industrystringFiled industry label, where stated.
instrumentstringTranche where the filer stated one — seniority is the first question asked of a credit book.
fair_valuedecimalFair value of the position.
weightnumberTruncation-honest position share (see holdings_positions.weight).
is_partialbooleanTrue when the book is a top-N truncation.
recon_statusstringReconciliation verdict of the book this position belongs to.
name_keystringNormalised borrower-name key this row resolved through — recorded so the join is auditable.
issuer_keystringThe resolved issuer identity: the issuer's CUSIP6 where known, else the name key.
match_methodstringCUSIP (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_positionbooleanTrue 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_seqintegerDeterministic 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.

ColumnTypeMeaning
issuer_keystringResolved issuer identity key.
slugstringHolding fund slug.
fund_namestringHolding fund name.
tickerstringHolding fund ticker where one exists.
period_enddateLatest period of the fund's book.
portfolio_costringBorrower name, taken from this fund's largest position (trailing tranche counters stripped).
industrystringCanonical 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_sourcestringWhich 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_valuedecimalThe fund's total exposure to the borrower, summed across tranches.
weightnumberSummed 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_partialbooleanTrue when any tranche came from a truncated book.
is_unreconciledbooleanTrue when any tranche came from an unreconciled book — the caveat travels with the number.
is_private_positionbooleanTrue when any tranche is private-book exposure.
match_methodstringWeakest match basis across the fund's tranches for this borrower (NAME over CUSIP_VIA_NAME over CUSIP).
fund_countintegerHow many published funds hold this issuer — windowed onto every row.
combined_fvdecimalCombined fair value across all holders of this issuer.
display_namestringThe 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.

ColumnTypeMeaning
issuer_keystringResolved issuer identity key.
display_namestringDisplay name from the most valuable holder's spelling.
industrystringCanonical 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_sourcestringWhich 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_bucketstringThe ~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_countintegerHow many funds hold the issuer (always 2 or more in this export).
tickersstring[]Holding fund names, ordered (the column name is legacy — it carries fund names, not tickers).
slugsstring[]Holding fund slugs, in the same order.
combined_fvdecimalCombined fair value across all holders.
match_methodstringCUSIP when any holder matched by CUSIP, else NAME.
linked_by_namebooleanTrue 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.

ColumnTypeMeaning
canon_keystringCanonical industry key.
canonical_labelstringDisplay label — the most common raw spelling among the merged group.
bucketstringThe ~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_rowsintegerHow many observation rows across both filed vocabularies carry a spelling in this group.
n_spellingsintegerHow 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.

ColumnTypeMeaning
slugstringPinned addressable key of the platform — stable once assigned, never recomputed.
namestringPlatform display name.
name_sourcestringWhich rule produced the name: FUND_NAMES (derived from the platform's own funds), ADVISER_NAME (stripped adviser legal name), or ALIAS (curated).
leistringPlatform Legal Entity Identifier, rolled up from member advisers; null when no member reports one.
parent_leistringUltimate corporate parent LEI per GLEIF Level 2, where reported.
parent_namestringUltimate corporate parent name per GLEIF Level 2, where reported.
parent_sourcestringGLEIF_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.
notestringFree-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.

ColumnTypeMeaning
fund_cikstringZero-padded EDGAR CIK of the fund.
fund_tickerstringFund ticker where one exists.
fund_namestringFund name.
asset_classstringClassified asset class of the fund.
structurestringVehicle structure of the fund.
adviser_namestringThe 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_crdstringThe filed adviser's CRD number.
adviser_leistringThe filed adviser's LEI, where filed.
manager_crdstringCRD of the linked manager row — the adviser's own regulatory identifier.
brand_slugstringThe platform's pinned key — join to the brands export.
brand_namestringThe platform's display name.
manager_link_sourcestringEvidence 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.

ColumnTypeMeaning
slugstringFund slug.
fund_namestringFund name.
asset_classstringClassified asset class.
crowded_sharenumberShare 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_sharenumberShare of the book in issuers held by this fund alone.
crowded_countintegerHow many crowded issuers the fund holds.
unique_countintegerHow many sole-holder issuers the fund holds.
total_issuersintegerDistinct issuers in the loaded book.
total_fvdecimalSummed loaded fair value of the book.
denominator_is_truncated_holdingsbooleanTrue 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_fundsintegerThe 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.

ColumnTypeMeaning
slug_astringFirst fund of the pair (lexicographic order; each pair counted once).
slug_bstringSecond fund of the pair.
fund_astringFirst fund's name.
fund_bstringSecond fund's name.
ticker_astringFirst fund's ticker where one exists.
ticker_bstringSecond fund's ticker where one exists.
shared_holdingsintegerDistinct private issuers both funds hold.
combined_fvdecimalBoth funds' combined fair value across the shared issuers.
top_namesstring[]Up to five shared borrower names, largest combined stake first.
holdings_aintegerFirst fund's private-issuer count — one of the two denominators behind shared_pct.
holdings_bintegerSecond fund's private-issuer count.
shared_pctnumberShared 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.

ColumnTypeMeaning
slug_astringThe fund.
name_astringThe fund's name.
slug_bstringThe neighbour fund.
name_bstringThe neighbour's name.
asset_classstringAsset class of the pair.
similaritynumberBlended similarity score.
overlap_componentnumberPortfolio-overlap component, where the pair shares positions; null otherwise.
profile_componentnumberProfile-distance component over headline metrics, where both funds carry them; null otherwise.
component_usedstringblend, overlap or profile — which inputs actually existed for the pair, so a one-legged score is never mistaken for a blended one.
rankintegerNeighbour 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.

ColumnTypeMeaning
entity_idstringOpaque entity identifier; same values as metric_history.
slugstringFund slug.
tickerstringFund ticker where one exists.
entity_namestringFund name.
asset_classstringPeer-set asset class.
metric_keystringMetric the rank is computed for.
metric_labelstringHuman-readable metric label.
unitstringUnit of the underlying value.
canonical_valuenumberThe fund's own latest value.
percentileinteger0-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_mediannumberMedian of the peer set.
peer_countintegerSize of the peer set the rank was computed over — the denominator, on every row.
period_enddatePeriod 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.

ColumnTypeMeaning
brand_slugstringPlatform key — join to the brands export.
brand_namestringPlatform display name.
issuer_keystringResolved issuer identity key.
issuer_namestringBorrower display name.
funds_holdingintegerHow many of the platform's vehicles hold this issuer.
complex_fvdecimalThe platform's combined fair value in this issuer.
fund_slugsstring[]Which vehicles hold it (slugs, ordered).
vehicle_countintegerHow many of the platform's vehicles have a loaded book — the denominator behind funds_holding.
complex_total_fvdecimalThe platform's total combined book, windowed onto every row.
complex_shared_sharenumberShare 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.

ColumnTypeMeaning
slugstringFund slug — the join key to the metric exports.
fund_namestringFund name.
period_enddatePeriod the position was filed for.
portfolio_costringPortfolio company / borrower name as filed.
issuer_keystringResolved issuer identity key; null when the borrower name resolves to no issuer (subtotals, cash sweeps, placeholders are not borrowers).
match_methodstringCUSIP_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.
instrumentstringTranche or instrument as filed; null where unstated.
senioritystringFIRST_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_basisstringWhich 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_valuedecimalFair value of the position.
costdecimalAmortized cost as filed, including OID/PIK accretion.
principaldecimalPrincipal / par amount as filed; null where the filer stated none — the discriminator behind is_debt_proxy.
mark_costnumberfair_value / cost; null when cost is absent or zero — never coalesced to a fabricated 0 or 1.0.
mark_parnumberfair_value / principal; null when principal is absent or zero.
is_debt_proxybooleanTrue when principal is filed — a proxy for 'this is a debt position' (see dataset caveats for its measured precision).
mark_bandstringDEEP_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_partialbooleanTrue when the book this position belongs to is a top-N truncation of a larger filed book.
recon_statusstringRECONCILED or UNRECONCILED — the reconciliation verdict of the book this position belongs to.
position_seqintegerDeterministic 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.

ColumnTypeMeaning
slugstringFund slug.
fund_namestringFund name.
period_enddatePeriod the fund-period book describes.
positions_countedintegerDebt-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_trimmedintegerDebt-proxy computable marks outside the trim window — held out of the aggregates, counted rather than silently dropped.
positions_excludedintegerEverything 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_costnumberFair-value-weighted mean mark_cost over the counted positions; null when none qualified.
median_mark_costnumberPosition-count-weighted median mark_cost over the counted positions; null when none qualified.
marked_fvdecimalSummed fair value of the counted positions — the denominator behind fv_below_95 / fv_below_90 / fv_below_85 and their shares.
fv_below_95decimalFair value of counted positions marked below the watch band.
fv_below_90decimalFair value of counted positions marked below the stress band.
fv_below_85decimalFair value of counted positions marked below the deep-stress band.
share_below_95numberfv_below_95 / marked_fv.
share_below_90numberfv_below_90 / marked_fv.
share_below_85numberfv_below_85 / marked_fv.
book_fvdecimalSummed fair value of the fund-period's whole BDC book — the denominator behind seniority_stated_share, distinct from marked_fv.
fv_seniority_stateddecimalFair 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_textdecimalOf 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_sharenumberfv_seniority_stated / book_fv — how much of the whole book the seniority shares actually describe.
fv_first_liendecimalFair value classified FIRST_LIEN.
fv_second_liendecimalFair value classified SECOND_LIEN.
fv_other_debtdecimalFair value classified OTHER_DEBT.
fv_equity_warrantsdecimalFair value classified EQUITY_WARRANTS.
share_first_liennumberfv_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_liennumberfv_second_lien / fv_seniority_stated.
share_other_debtnumberfv_other_debt / fv_seniority_stated.
share_equity_warrantsnumberfv_equity_warrants / fv_seniority_stated.
is_partialbooleanTrue when any position in the fund-period's book came from a truncated filing.
recon_statusstringRECONCILED, or UNRECONCILED when any position in the book came from an unreconciled filing.
watch_bandnumberThe configured mark_cost threshold behind fv_below_95 / share_below_95, carried on every row so a consumer never hardcodes a copy.
stress_bandnumberThe configured mark_cost threshold behind fv_below_90 / share_below_90.
deep_stress_bandnumberThe configured mark_cost threshold behind fv_below_85 / share_below_85.
trim_lonumberLower edge of the trim window positions_counted is filtered to.
trim_hinumberUpper 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.

ColumnTypeMeaning
issuer_keystringResolved issuer identity key.
quarter_startdateCalendar quarter the marks are compared within (not raw period_end) — the coarsest bucket that keeps different filers' fiscal period ends comparable.
display_namestringBorrower display name, reused from the issuer pages' agreed spelling.
fund_countintegerDistinct 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_countintegerDebt-proxy positions behind the range — the denominator behind instrument_mix_known.
mark_lonumberLowest debt-proxy mark_cost across the holding funds in the quarter, inside the trim window.
mark_hinumberHighest debt-proxy mark_cost across the holding funds in the quarter, inside the trim window.
mark_spreadnumbermark_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_slugsstring[]Holding fund slugs, deterministically ordered.
instrument_labeled_countintegerOf position_count, how many positions carry a filed instrument label — the tranche-trap gauge's numerator.
instrument_mix_knownnumberinstrument_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.

ColumnTypeMeaning
slugstringFund slug — the join key to the metric exports.
fund_namestringFund name.
asset_classstringClassified asset class.
structurestringVehicle structure — registered structures only in practice (the N-PORT scope caveat as data).
latest_monthdateperiod_end of the fund's most recent redemptions fact — the month every _1m figure describes.
months_observedintegerDistinct flow months in the fund's redemptions series — the denominator of 'how much history is this streak over'.
first_monthdateperiod_end of the fund's earliest redemptions fact.
redemptions_1mdecimalDollars redeemed in the latest flow month. Never null — the row exists because this fact does; a filed 0 stays a measured 0.
subscriptions_1mdecimalDollars subscribed in the same month; null when no subscriptions fact was filed for the month — unmeasurable, never coalesced to 0.
net_flows_1mdecimalsubscriptions + 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_1mnumberThe 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_1mdecimalThe 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_3mintegerObserved 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_3mdecimalDollars redeemed over the window; never less than redemptions_1m (the window contains the latest month).
net_flows_3mdecimalSum of the window months' derived net flows; null when no month in the window has one.
redemption_rate_3m_sumnumberSum 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_3mintegerWindow months with a rate — the coverage caveat beside redemption_rate_3m_sum.
consecutive_outflow_monthsintegerStreak 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_bandnumberThe configured elevated-pressure threshold (percent-form monthly rate), on every row so no consumer hardcodes a copy.
high_bandnumberThe 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.

ColumnTypeMeaning
as_of_datedateThe 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_keystringStable 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_labelstringHuman-readable measure name.
sectionstringMeasure family: crowding, universe, manager_complex, marks or flows.
scopestringWhat 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.
unitstringWhat metric_value is expressed in: share (a proportion of the denominator), usd, funds (a count) or ratio.
metric_valuenumberThe 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.
numeratordecimalWhat 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.
denominatordecimalWhat the numerator was measured against — always present on a share row. Null where the measure is a level rather than a proportion.
funds_countedintegerHow 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_edgesstringThe 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_versionstringThe 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_revstringGit 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_attimestampWhen 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.
caveatstringWhat 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.

ColumnTypeMeaning
sectionstringMeasure grouping (coverage, verification, identity, timeliness).
measurestringHuman-readable measure name.
measure_keystringStable key of the measure.
scopestringWhich slice of the universe the measure is computed over; 'all' is a real value, never null.
numeratorintegerThe counted quantity.
denominatorintegerWhat it is counted against — published beside the numerator so the figure cannot travel without its base.
sharenumbernumerator / denominator; null (not 0) when the denominator is 0 — 0/0 must never read as perfect coverage of nothing.
unitstringWhat is being counted (funds, positions, facts, dollars).
caveatstringThe 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_orderintegerStable 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.

ColumnTypeMeaning
sourcestringThe SEC source.
latest_period_enddateNewest fiscal period the source contributes.
latest_filed_atdateNewest filing date seen from the source.
days_since_periodintegerAge of the newest period, in days.
max_age_daysintegerThe configured freshness band; null when no band is configured.
is_assertedbooleanFalse when no freshness band exists for this source — no check can fail on it, which is a finding, not a pass.
statusstringOK, STALE, or UNASSERTED (unwatched or contributing no rows).
row_countintegerPublished rows contributed by the source.
notestringWhat 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.

ColumnTypeMeaning
slugstringFund slug.
fund_namestringFund name.
tickerstringFund ticker where one exists.
asset_classstringClassified asset class.
structurestringVehicle structure.
expected_from_classstringAsset class used to size the expected metric set.
metrics_presentintegerDistinct metrics the fund carries.
expected_presentintegerHow many of the class-expected metrics the fund carries.
metrics_expectedintegerSize of the class-expected metric set — the denominator behind metric_share.
metric_sharenumberexpected_present / metrics_expected.
latest_period_enddateFund's newest reported fiscal period.
months_stalenumberMonths since that period — includes the reporting lag a filer is entitled to.
is_stalebooleanWhether 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_loadedbooleanWhether any book is loaded for the fund.
holdings_sourcestringWhich disclosure supplied the book.
holdings_period_enddatePeriod of the loaded book — routinely a different date from the fund's newest metric.
position_countintegerPositions in the loaded book.
is_partialbooleanTrue when the loaded book is truncated; null when no book is loaded — never 'the whole portfolio'.
recon_statusstringReconciliation verdict of the loaded book.
recon_rationumberLoaded 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.

Get the quarterly AltsVault Private Credit Crowding Index — the most-crowded borrowers in private credit, from SEC filings. Free, no account.