Every figure here is a share of a universe we only partly have. This page publishes the denominator next to each one — where the number came from, how it was checked, how old it is, and where we have nothing.
Four SEC feeds carry rows today. Company financials come from XBRL as each fund tagged it; portfolios come from Form N-PORT and from the BDC Schedules of Investments. Nothing on this site is estimated from a survey, a manager questionnaire or a third-party database.
Each figure on a fund page carries the accession number of the filing it came from, which is what its source ↗ link resolves to. If a number looks wrong, that link is the fastest way to check it against the filing itself — and we would rather you did.
Position-level Schedules of Investments from SEC's BDC Data Sets — the private-credit books, filed whole rather than truncated.
newest filed period 2026-03-31
Position-level portfolios from Form N-PORT, plus fund-level figures filed on the same form. Monthly period grain, filed about 60 days after quarter end.
newest filed period 2026-04-30 · newest filing seen 2026-06-29
SEC's re-aggregation of the same XBRL submissions, one concept-period at a time. This is the second view a figure is cross-checked against.
newest filed period 2026-06-30 · newest filing seen 2026-07-15
Company financials as tagged in each fund's own 10-K/10-Q — the primary source for NAV, assets, debt and income.
newest filed period 2026-07-14 · newest filing seen 2026-07-15
A figure is marked 2 sources when two SEC endpoints report it within 1%. Be precise about what that buys you: both endpoints are SEC’s own views of the same submitted XBRL. Agreement between them catches transcription and aggregation faults, ours and SEC’s. It does not independently confirm what the fund filed. Genuinely independent confirmation needs a source derived from a different document, and that is a known gap rather than a solved problem.
Which is why the split below matters more than the tick: most of this product is single-source, and single-source means unchecked, not wrong.
Two SEC endpoints report the same value within 1%. Both are SEC’s own views of the same submitted XBRL, so this is a cross-check, not independent corroboration.
Only one endpoint publishes the figure. Not wrong — unchecked. N-PORT figures are single-source by nature: no other SEC dataset publishes them.
Two sources report values further apart than the tolerance. Zero is a reading rather than a missing check; a rise from zero means a feed genuinely drifted.
Funds report on their own schedules, so the universe is never uniform in vintage. Each feed has an age band configured for its filing cadence — 400 days for BDC schedules, which come off annual 10-Ks, against 150 for quarterly XBRL — and a feed past its band is a loader question, not a filer question.
The dates below are filed fiscal period ends, and the ages are computed as you read them rather than stored. That distinction is not pedantry: a stored status is frozen at whatever the last data build decided, and a feed that quietly stops arriving goes on looking current until something recomputes. This site has been caught by exactly that once.
Within its freshness band
newest filed period 2026-03-31 · 63,899 rows
Re-armed. Was deliberately exempt on the belief SEC had stopped publishing; in fact SEC moved to monthly filenames and 15 files went unread for ~15 months. 400 days because the SoI comes off annual 10-Ks, so a fund legitimately reports once a year.
Within its freshness band
newest filed period 2026-04-30 · 118,187 rows
N-PORT is filed ~60 days after quarter end, monthly period grain.
Within its freshness band
newest filed period 2026-06-30 · 23,314 rows
Same cadence as companyfacts — it is SEC's re-aggregation of the same filings.
Within its freshness band
newest filed period 2026-07-14 · 63,520 rows
10-Q lands ~45 days after quarter end; allow a full extra quarter.
A BDC Schedule of Investments carries no CUSIP, so most positions in the private-credit books are matched to a borrower on a normalised name. That join is the weakest one this product makes and the majority one, and its error runs in both directions: two companies fused into one, or one company split across spellings.
So any figure that depends on identifying a borrower is published here as a band, with the measured error beside it. A single number for the crowding index would be the one figure on this site that looked measured while being an artefact of a join.
Share of private-position fair value sitting in borrowers held by two or more of the funds whose books we hold.
the range this index takes across 4 issuer-matching rules · measured 2026-07-24 · not recomputed since
Under the rule the site uses, that is $309B of $557B in private-position fair value across 231 funds, counting a borrower as crowded when 2 or more of those funds hold it. Every figure on this site that depends on identifying a borrower — crowding, overlap, co-investment, the manager complex — inherits the same sensitivity.
These four rows are recomputed with the data, not recorded. They are the reason the band is the honest way to publish anything that depends on matching a borrower.
THE WEAKEST JOIN AND THE MAJORITY ONE, because the BDC Schedule of Investments carries no CUSIP at all and that is the private-credit book this product is about. Its measured two-way error is the next two rows, and every issuer-level figure — crowding, overlap, co-investment, the manager complex — inherits both directions of it.
The strong join and the smallest one. The first six characters identify the ISSUER and the next two the issue, so share classes and bond series of one borrower collapse correctly; the 99xxxx dummy range and all-zero placeholders are rejected first, which is what stopped 23 unrelated private companies merging under one prefix.
Measured only where CUSIPs exist to disagree with, so it is an estimate of the name join's error and not a census of it — and probably a kind one, since CUSIP-bearing rows are public and syndicated names while private borrowers are spelled worse. Over-merge fuses two companies into one issuer and INFLATES every crowding and overlap figure.
The opposite failure at almost the same size: one company split across spellings, which DEFLATES the same figures. Close enough in magnitude that they partly cancel in aggregate and do not cancel for any individual issuer — which is why a key-sensitive number belongs on the page as a band, never as a single figure.
Every coverage measure we publish, each with its own numerator, its own denominator and the sentence that says what it does not prove. Several are not progress bars in disguise: truncated books are higher-is-worse, and the issuer count is a compression ratio rather than a coverage share. Read the caveat under each one — it is the part we would have to remove to make the number sound better than it is.
The dated figures in this section were measured when the data was last built, so a bucket count can lag the filed dates shown elsewhere on this page by a build.
Published is the configured publish rule — every BDC plus anything not exchange-traded — and not a claim of coverage: some of these funds carry no figure and no portfolio at all, counted on their own rows below. The denominator is every fund-shaped entity discovery has ever admitted, including the operating companies a SIC sweep drags in and that `active` has since switched off.
One metric from any period, of any age, counts here. This numerator is the denominator the rest of the product quotes for its own coverage claims, which is why it is published NEXT TO the universe count rather than reconciled with it — the two answer different questions, and forcing them together is how a coverage number ends up meaning neither.
Loaded is not complete and not current. Some of these books are stored top-N and some do not tie to the fund's own reported total; both are counted in this numerator, and both are measured on their own rows below.
Share of the books we hold by the form they arrived on — NOT coverage of that form's own filing population, which we do not hold a roster of. A fund filing both forms would count in both rows; none does today, so these sum to the row above by luck rather than by construction.
RECONCILED means the loaded positions sum to within the configured tolerance of the total the fund itself reported, so it tests the COMPLETENESS OF THE LOAD and says nothing about whether any individual position is right. Unreconciled books are still published, labelled, and never presented as exact.
Same test, per form. The two feeds are not comparable on this measure: an N-PORT book is checked against a filed net-asset total on the same form, while a BDC schedule is checked against a total assembled from the same sparse fact table the positions came from.
HIGHER IS WORSE ON THIS ROW. A top-N slice cannot be normalised against a total we do not hold, so these funds' position weights come from the filer's own reported percentage and are null where none was filed — computing them from the loaded rows instead inflated every weight about 1.6x (a 4.6% position rendered as 7.5%).
NOT MEASURABLE for this feed, which is why it is blank rather than zero. Truncation is detected by comparing the filer's own reported position count to the rows we hold, and the BDC Data Sets do not publish that count on any row. A BDC schedule is generally filed whole, but this page does not get to assert that from a column it cannot see.
Same test, per form.
The gap is rows staging REFUSES, and this is the only row on the page where a refused one is visible — every figure below starts after the reject. A period end in the future is a mis-tagged filing rather than a portfolio: one BDC filed its entire ten-row "book" dated next December, and taken at face value it would have replaced that fund's real positions with a phantom, which is also why the fund counts here read one lower than the raw filing table.
The remainder is retained history, not loss — superseded periods are what make a point-in-time question answerable. Every position and dollar figure below describes the current book only.
A position with no fair value is real and unweightable, so it counts in every position denominator on this page and in no dollar one. That is the gap between the two: a dollar share is computed over a smaller book than the position share directly above it.
Seniority as the filer stated it — first lien, second lien, equity. It was 0% on the BDC feed until the sparse dimensional axes were mined for it: all 12,633 rows carrying a dedicated instrument axis are nameless, so the label has to be recovered from the identifier's own segments. Where it is blank the position is still counted and still private — whether a BDC book is private credit is a fact about the form it files, not about whether this particular row named its tranche.
Fair value as filed, summed across funds whose reporting periods are not the same date. It is a footprint of what we can see, never an AUM total. Two things are excluded to stop it double-counting: only one period per fund and source, and the filers' own subtotal rows — a BDC schedule files "TOTAL INVESTMENTS" in the same column as its borrowers, and summing those added $58.4bn of the same money twice.
The strong join and the smallest one. The first six characters identify the ISSUER and the next two the issue, so share classes and bond series of one borrower collapse correctly; the 99xxxx dummy range and all-zero placeholders are rejected first, which is what stopped 23 unrelated private companies merging under one prefix.
A CUSIP-less row inheriting the issuer id of a same-named row that had one. It is exactly as reliable as the name key that carried it, so read it with the error rows below and not with the CUSIP row above.
THE WEAKEST JOIN AND THE MAJORITY ONE, because the BDC Schedule of Investments carries no CUSIP at all and that is the private-credit book this product is about. Its measured two-way error is the next two rows, and every issuer-level figure — crowding, overlap, co-investment, the manager complex — inherits both directions of it.
Measured only where CUSIPs exist to disagree with, so it is an estimate of the name join's error and not a census of it — and probably a kind one, since CUSIP-bearing rows are public and syndicated names while private borrowers are spelled worse. Over-merge fuses two companies into one issuer and INFLATES every crowding and overlap figure.
The opposite failure at almost the same size: one company split across spellings, which DEFLATES the same figures. Close enough in magnitude that they partly cancel in aggregate and do not cancel for any individual issuer — which is why a key-sensitive number belongs on the page as a band, never as a single figure.
A COMPRESSION RATIO, NOT A COVERAGE SHARE — the numerator counts distinct issuers and the denominator the positions that resolved to them. It is published because it is the denominator of the industry rows below, and because four fifths of that compression was performed by the name join rather than by an identifier.
THIS CAN NEVER APPROACH 100% AND IS NOT A BACKLOG. Where it is zero the form has no industry field to read at all. Where it is not, the label was mined from the sparse dimensional axes of a Schedule of Investments and a blank means the filer tagged nothing on that row. There is no fallback to look up: SIC and NAICS belong to SEC FILERS, and a private borrower inside a BDC portfolio does not file.
Dollar-weighted rather than row-weighted, and lower than the position share above it — the tagged rows are systematically the smaller positions, so counting rows flatters this coverage and counting dollars is the honest direction.
The grain the issuer pages actually render — tranches of one borrower collapsed into one row per holding fund — so this share differs from the position-level rows above and both are correct at their own grain. Quoting one as the other is the mistake this long shape exists to make hard.
The dollar version of the row above, and the number to quote if only one is quoted: it is the lowest of the industry measures because the untagged positions are the large private borrowers this product is read for.
Joined on the same normalised name key the holdings side builds its fallback issuer id from — one macro, one rule — which means this row inherits that key's over- and under-merge error in full. A match is a label a filer wrote about a name; nothing here is inferred, and no conflicting labels are adjudicated.
The industry feed's own hit rate, not our coverage. It accumulates names from every filer and every period, so most of it describes borrowers no current book holds — which makes a low number here expected rather than a defect.
The normaliser merges spellings onto an existing key, which is the point and also the risk: the feed holds more (name, industry) pairs than it holds names, so one key can carry several conflicting industries and this model does not choose between them. Any label rendered from this feed needs its own provenance; this row is only the join's reach.
CROSS_CHECKED means two of SEC's OWN renderings of the same filing agree within the configured tolerance. It is agreement between views of one document, not independent confirmation of the figure, and widening that tolerance would make disagreement vanish rather than resolve it.
Most of the product. A single-source value is not wrong, it is UNCHECKED — and the distinction is invisible anywhere the badge is not rendered.
Zero is a reading, not a missing check. Sources agreeing perfectly at zero used to land in this bucket — 283 of 283 conflict badges — until exact agreement was tested before the relative tolerance. A rise from zero means a source genuinely drifted and is worth reading immediately.
Inside the band is the exact complement of the per-fund stale flag on the fund table — one definition, one config boundary — so the histogram and that table cannot disagree about a single fund.
MOSTLY NOBODY BEING LATE. period_end is the FISCAL period a value describes, not the day it was filed, and a 10-K lands about 75 days after year end — so a fund that filed on time sits in this band for months. Both boundaries are config; moving them moves these rows and nothing else in the product.
Past the point filing lag explains it. These are usually funds that stopped filing, merged or were renamed, but the loader cannot tell those apart from a feed it silently lost — which is the failure mode the source-freshness view exists for.
The thinnest rows we publish, and they render on the funds page beside fully covered funds. They are in the universe because the publish rule admits them, not because we found anything for them.
Measured on the BOOK's own period rather than the fund's newest metric, because the two are routinely different dates and one number for both would report whichever is fresher.
Expected to be the largest holdings bucket by construction: BDC schedules come off ANNUAL 10-K filings, so a current BDC book is normally between six and twelve months old and is not stale in any useful sense.
The bucket that should have caught the 15 months BDC holdings sat frozen while the loader 404d on filenames SEC had changed and the freshness test passed because the source was exempt. A non-trivial count here is a loader question, not a filer question.
Largely structural rather than missing: position-level disclosure exists only on the BDC schedules and on Form N-PORT, so a published fund outside both forms has no book for us to load and never will.
Coverage in aggregate hides which funds are carrying it. This list is ordered by how little we hold, so it opens on the funds this page exists to expose — including the ones with no figure at all, which render on the fund table beside fully covered funds. A fund is scored against the figures a reader of its asset class expects, not against every metric in the catalog.
The 40 thinnest of 644 published funds, thinnest first. 635 of those 644 carry at least one figure; the rest are published because the universe rule admits them, not because we found anything for them.
newest figure 2024-12-31 · 18 months old today · 1 figure held in total, of any kind
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
newest figure 2026-03-31 · 3 months old today · 1 figure held in total, of any kind
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
no figure of any period
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
newest figure 2025-06-30 · 12 months old today · 2 figures held in total, of any kind
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
newest figure 2025-09-30 · 9 months old today · 10 figures held in total, of any kind
N-PORT · 2025-09-30 · 17 positions · whole book · ties to the fund's own reported total
newest figure 2025-11-30 · 7 months old today · 10 figures held in total, of any kind
N-PORT · 2025-11-30 · 31 positions · whole book · ties to the fund's own reported total
newest figure 2025-12-31 · 6 months old today · 8 figures held in total, of any kind
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
newest figure 2026-02-28 · 5 months old today · 10 figures held in total, of any kind
N-PORT · 2026-02-28 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
newest figure 2026-02-28 · 5 months old today · 10 figures held in total, of any kind
N-PORT · 2026-02-28 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
newest figure 2026-02-28 · 5 months old today · 10 figures held in total, of any kind
N-PORT · 2026-02-28 · 70 positions · whole book · ties to the fund's own reported total
newest figure 2026-02-28 · 5 months old today · 10 figures held in total, of any kind
N-PORT · 2026-02-28 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 8 figures held in total, of any kind
No portfolio. Position-level disclosure exists only on BDC schedules and Form N-PORT.
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 27 positions · whole book · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 4 positions · whole book · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · positions sum to 0.90× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 1 positions · whole book · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 27 positions · whole book · positions sum to 0.17× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · positions sum to 0.80× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · positions sum to 1.23× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 37 positions · whole book · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 26 positions · whole book · positions sum to 0.84× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 30 positions · whole book · positions sum to 0.83× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 35 positions · whole book · positions sum to 0.85× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 21 positions · whole book · positions sum to 0.88× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 15 positions · whole book · positions sum to 0.74× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 39 positions · whole book · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 20 positions · whole book · positions sum to 0.86× of the reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 27 positions · whole book · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
newest figure 2026-03-31 · 3 months old today · 10 figures held in total, of any kind
N-PORT · 2026-03-31 · 100 positions · stored as the largest 100 only · ties to the fund's own reported total
Showing 40 of 644 published funds · every fund, with its figures →
Industry, for private borrowers. This will never approach full coverage and it is not a backlog. SIC and NAICS codes belong to SEC filers, and a private company inside a BDC portfolio does not file, so there is no register to look it up in. Where a label exists it was tagged by the filer on that position; where it is blank there is nothing to fall back to. Form N-PORT has no industry field at all.
A genuinely independent second source. Two SEC endpoints agreeing is a cross-check on transcription, not corroboration of what was filed.
Whole books, everywhere. Large N-PORT portfolios are stored as the largest positions only. Where that happens the fund page says so, and a position’s share of the portfolio comes from the filer’s own reported percentage — never from dividing by a total we do not hold.
Anything real-time. These are fiscal periods off public filings. A fund that reported on time still reaches six months old before its next report lands, which is why age here is stated in months since a filed period rather than dressed up as a data freshness score.
Values we judged implausible. Where a filed figure was outside the range its metric can physically take, it was suppressed rather than quietly adjusted, so what you see is either what was filed or nothing.
The rules behind all of this — what counts as a fund, how portfolios are reconciled, how derived metrics are computed — are on the methodology page.