Methodology
We show our work.
Every number on SpreadVista traces to a specific SEC submission, is checked against that filer's own stated totals, and carries a quality tier. When a filing can't be corroborated, we withhold it rather than serve it. This page documents exactly how — including the parts that don't flatter us.
Every figure below was measured against the live production dataset on July 27, 2026.
Read that denominator precisely: we serve 1,022 filing-periods. Of those, 955carry a filer-stated grand total we can reconcile against, and the accuracy figures above describe exactly those. The rest are covered in section 2 — we'd rather show you the gap than average it away.
1. Extraction: the filer's own tags, not our guesses
Since August 2022, the SEC has required business development companies to tag every Schedule of Investments position in machine-readable iXBRL (the closed-end fund tagging rule). SpreadVista reads those tags directly — fair value, cost, principal, spread, rate floor, maturity — rather than scraping PDF tables or estimating. The credit funds — interval, closed-end, bank-loan mutual and ETF — are ingested from their structured N-PORT XML, which is filer-tagged at source.
Coverage is 86 BDCs (49 exchange-listed and 37 non-traded) plus 55 credit-focused funds — 26 interval funds, 10 closed-end funds, 15 bank-loan mutual funds and 4 ETFs — from August 2022 onward. BDC data currently runs through March 2026. Most funds run through December 2025, with the earliest-reporting cohort through January 2026; one fund's last N-PORT is June 2024. Fund fiscal quarter-ends are staggered across the calendar and N-PORT reaches us on a longer lag than BDC 10-Qs, so the fund side trails.
We deliberately do not serve pre-2022 BDC data. Before mandatory tagging there is no machine-verifiable, filer-attested source for position-level numbers, and we don't serve what we can't verify.
2. Cross-validation: every filing checked against itself
After extraction, filings pass through an attestation pipeline that reconciles our position-level extraction against the filer's own totals and subtotals from the same submission. The comparison target is never our opinion; it is what the filer itself stated. A filing whose iXBRL cannot be parsed at all never reaches attestation — it is quarantined on the spot (13 filings to date). Everything that parses gets these eight checks:
- ·
grand_total_fv_matches— our summed fair value equals the filer’s own stated total - ·
grand_total_cost_matches— our summed cost equals the filer’s own stated total - ·
by_instrument_type_sums_match— per-instrument-type subtotals reconcile to the filer’s - ·
pct_of_nav_sums_to_100— the filer’s own percent-of-NAV column sums as it should - ·
position_count_within_bounds— the position count is plausible for this filer and period - ·
no_leaked_subtotals— no filer subtotal row was mistaken for a position (double-count guard) - ·
issuer_completeness— positions carry an issuer identity - ·
instrument_type_completeness— positions carry an instrument type
A check is skippedwhen the filer didn't tag the fact it needs — we can't compare against a total the filer never published. Each filing then receives a tier:
- PASS — neither of the two critical total-reconciliation checks failed (532 filing-periods). The other checks are diagnostic and do not downgrade the tier, so PASS is a statement about totals, not a clean bill of health: 504 of those 532 filings have at least one non-critical check failing (most often instrument-type completeness), and only 28 have no failing check at all. PASS also does not mean everything was compared — 261 had at least one check skipped for want of a filer-tagged fact (39 of them published no grand total at all), leaving 271 where every check actually ran. And even those 28 with nothing failing each had at least one check skipped — three of them (all SLRC) skipped both grand-total checks, so they reconciled against nothing. Across all 1,022 served filing-periods there is not one where every check both ran and passed.
- PARTIAL— served with a known, quantified residual, typically a section the filer didn't machine-tag (460 filing-periods, roughly 45% of what we serve). The tier travels with the data, so you see the confidence, not just the number.
- QUARANTINE — the extraction could not be corroborated, so the filing is withheld from every position, mark, and aggregate view. 148filing-periods are currently withheld. Their rows do still feed the field-coverage percentages — the per-chart “coverage” badges and the data-quality view — which measure the raw extraction table on purpose, so a coverage collapse inside a withheld filing stays visible instead of disappearing with it. A blank is honest; a guess is not.
- No attestation — 29served filing-periods carry no attestation record at all (~$50B of served fair value). Most sit at the coverage floor (19 of the 29 are Q3 2022), but not all: PSEC's September 2023 filing ($7.6B) is unattested while 71 other filings from that same quarter were attested. That is a coverage gap on our side, not a filer problem. They are served and they are not cross-validated — listed here rather than hidden inside a headline average.
Those four tiers account for 1,021 of the 1,022 served filing-periods. The remaining one (ADS, December 2023) has a later QUARANTINE attestation but an earlier passing one, and our pair-level policy keeps it served — an edge case we would rather name than round away.
Across the 955 filings with a filer grand total to compare against, what we serve sums to $4.30T against $4.28T of filer-stated totals — a median absolute gap of 0.47%per filing. Don't read those two totals as a 0.4% aggregate error: they net offsetting differences. Summed without regard to sign, the per-filing gaps come to about $67B, or 1.6% of the filer total.
3. Entity resolution: one borrower, one identity
The same borrower is spelled differently by different managers — “Acme Holdings, LLC” in one filing, “ACME HOLDINGS INC” in another. SpreadVista resolves 58,940 raw name variants into the 36,141 canonical credits that a live position or fund holding references — 65,728 variants across the full resolution table — using LEI codes, CUSIP identifiers, and conservative name matching, so a mark comparison compares the same credit rather than a naming artifact.
The honest distribution: the median credit has just one spelling and the average has 1.6 (1.9 among the 30,828 credits that carry any recorded variant), while our most-spelled issuer (MRI Software, LLC) appears under 47 variants. Most of the work is concentrated in a minority of heavily-syndicated borrowers — which is exactly where cross-manager comparison matters most.
Matching is deliberately conservative: we would rather leave two spellings unmerged than merge two genuinely different borrowers. That means some fragmentation remains, and the count above is credits referenced by a live position or fund holding.
4. Marks: reported, implied, and compared honestly
BDC marks are read directly from filings (fair value over cost basis). Fund holdings don't report a headline mark, so we derive an implied mark — value divided by principal — with one consistent method across managers, and label it as implied wherever it appears.
Cross-manager comparison is seniority-aware: first lien is compared with first lien, so dispersion reflects genuine disagreement rather than tranche mix. Aggregate views exclude artifact endpoints — commitment-shaped rows, composition flips, and bucket migrations are gated out of mover and dispersion calculations so a data mechanic never masquerades as a market signal.
Every mark links to the SEC submission it came from. If you doubt a number, the primary source is one click away — that is the product working as intended.
5. What we don't do, and what we can't yet
- We don't impute missing filer-reported values. Missing is shown as missing. Derived figures — implied marks — are computed by a published rule and labeled as derived.
- We don't serve pre-2022 BDC data (no filer-attested source exists).
- We don't serve filings that fail cross-validation.
- We don't average away the weak spots: the unattested, skipped-check, and PARTIAL counts are published above rather than folded into a single accuracy number.
Known limitations, stated plainly: categorical fields (industry, instrument type) are harvested from filer text and vary in coverage by filer; entity resolution is conservative but probabilistic and some borrower spellings remain unmerged; implied marks can differ mechanically from reported marks (accrued interest, partial funding, currency); fund data lags BDC data. Verify anything decision-critical against the filings we link.
Judge the data yourself.
Free during beta — pick any credit you know and check our numbers against the filings we link.
Get Free Access