Home / Data standards
Data standards
Where our figures come from, what they mean, how they are checked and how we fix mistakes.
Sources
- SEC EDGAR filings: BDC 10-Q and 10-K reports, their Schedules of Investments, and the SEC BDC Data Sets built from them.
- Company press releases and filed exhibits such as credit agreements and facility amendments.
- Rating-agency public notes and other dated public reporting, each linked at the point of use.
Definitions
- Fair value mark: fair value ÷ cost (or ÷ par where principal is reported), per holding, as tagged by the filer.
- Non-accrual: a loan on which the lender has stopped recognizing interest income, as reported by the BDC.
- PIK (payment in kind): interest paid by adding to principal instead of in cash. Identifier text matches are labeled as such and are not PIK income ratios.
- Shared borrower: a normalized issuer name held by two or more BDCs. Every match is a possible match until confirmed in the filing.
How figures are checked
- Each BDC’s holdings are tied to the cost and fair-value totals in its own filing within ±0.5% before any figure is published.
- Every number links to the filing or public source it comes from.
- Adjustments needed to reconcile a filer are documented below.
Update timing
BDC data is refreshed after each quarterly filing season, once the SEC posts the monthly data set covering the new 10-Qs. News items carry the date of the underlying report.
Corrections
Errors are fixed against the source and logged with the date and the change in the corrections log.
Technical notes
Shared borrowers across BDCs
Shared-borrower count. One method is used everywhere on this site: start from the 30 Jun 2026 holdings of ARCC, BCRED, FSK, GBDC, HTGC, MAIN and OBDC; keep debt holdings only (drop cash, subtotals, JV interests, and identifiable equity, warrants, preferred, units, LP, LLC and fund interests; “LLC interest” rows, common in GBDC’s schedule, are equity); drop FSK’s unfunded-commitment rows, which are not funded holdings; normalize borrower names (lowercase, strip punctuation and legal/holding-company words such as Inc, LLC, Holdings, Parent, Topco, Bidco, Acquisition); then count normalized borrowers held by two or more BDCs. Result: 208 of 2,034 borrowers. Name matching is approximate, and most BCRED rows don't name the instrument type, so they are kept because they didn't match the equity filter.
FSK and GBDC: adjustments that make them reconcile
Both are checked against the same ±0.5% test as the other five BDCs (cost and fair value vs the 10-Q’s XBRL totals). Every adjustment below is applied in data/build_soi.py and re-derived by an independent check.
- FSK unfunded-commitment netting. FS KKR prints each unfunded commitment as its own schedule row (footnote “(x)”), at gross cost and fair value, then nets them in three subtotal lines with no investment identifier: Unfunded Loan Commitments $(1,069.9)m, Unfunded Debt Commitments $(7.9)m and Unfunded Asset Based Finance Commitments $(33.2)m, $1,111.0m in total. We subtract those amounts from FSK’s total cost and fair value (June 30, 2026 schedule only; each line is text-checked against the filing). Holdings rows are not changed.
- Unfunded rows. The 199 FSK “(x)” rows stay in the holdings list, tagged unfunded. They are left out of the below-90%-of-cost count, the FV/cost buckets, mark dispersion and the shared-borrower count, because their FV/cost is not a funded-loan mark.
- Zero-cost rows. Six FSK positions carry zero cost and positive fair value ($14.9m in total). They count toward FSK’s totals but have no FV/cost and are left out of mark analytics. Other BDCs keep the cost > 0 rule.
- GBDC supplement rows. Golub tags seven June 30, 2026 schedule lines without an investment identifier (the only position of its type in its industry), so the standard filter drops them: six affiliate equity positions and one affiliate one-stop loan, $109.3m cost and $104.3m fair value. We add each line from the 10-Q. Each must appear exactly once in the current-period schedule, and must match an identifier-less SEC data-set row with the same cost and fair value. Each row cites the filing. The 14 GBDC affiliate rows with fair value but no cost come from the affiliated-investments roll-forward table, not the schedule, and stay excluded.
- Current-period boundary. Text checks use only each filing’s own current-period schedule. It is cut at that filing’s prior fiscal-year-end comparative (December 31, 2025 for most filers; September 30, 2025 for GBDC, whose fiscal year ends in September). Comparative lines never count as holdings.
- Result: FSK 0.00% / 0.00% and GBDC −0.06% / −0.08% vs the 10-Q (cost / fair value).
BDC demo data
- Download the monthly SEC BDC Data Sets ZIPs (here: 2026_07 and 2026_08, which contain the 10-Qs for the period ending 2026-06-30) with a declared User-Agent, following SEC fair-access guidance.
- From
soi.tsv, keep rows for the selected BDCs where the reporting date is 2026-06-30, the value is a point-in-time value, an investment identifier is present, and both cost and fair value are tagged with cost > 0 (FSK zero-cost rows and GBDC supplement rows: see above). Only the latest filing per BDC for the period is used. - In the 2026 monthly sets, per-holding cost and fair value for many filers appear under the column headers “Adjusted cost basis” and “Initial fair value of Investment”. We checked these against the filed 10-Q HTML for one filer (Ares Capital: the Aimbridge Topco common units show cost $3.3m and fair value $2.9m in both) and use them when the standard columns are empty. As a cross-check, ARCC's tagged rows sum to $29.67bn of cost and $29.33bn of fair value, against total investments of $29.675bn at amortized cost and $29.349bn at fair value on the 10-Q balance sheet. Other BDCs have not been reconciled this way yet.
- FV/cost = fair value ÷ cost, per row. Rows are holdings as tagged by the filer (one issuer can have several tranches).
- Cross-holder matching: issuer name = text before the first “|”, “,” or “(”, lower-cased, punctuation and common suffixes (Inc, LLC, Holdings, Parent, Topco…) removed. This is crude. Every match is labeled “possible match”.
- Software exposure demo: industry from SOI headings / the FSK Industry column, tied to each filer’s industry table. See industry tags.
- PIK-tagged holdings demo: case-insensitive text match for a standalone
PIKtoken or “payment/paid in kind” in the identifier. Counts reflect identifier wording, not PIK income as a share of investment income, and do not label good vs. bad PIK. Filers that put coupon terms in the identifier (again, HTGC) dominate the counts. The full PIK-watch income-ratio use case still needs 10-Q XBRL. - Mark dispersion demo: among debt holdings of the reconciled BDCs, match normalized borrower and comparable lien language (first lien / senior secured, second lien, unitranche, …). Take the largest-cost row per BDC in that bucket. Mark = FV/par when principal is on both sides, else FV/cost. Publish pairs whose unrounded marks differ by ≥10 points; list same-lien near misses in [8, 10) pts (shown to one decimal; rounding never feeds either band); hold out name-match errors, lien mismatches, missing same-period peers, currency mismatches, and purchase-discount artifacts. Do not treat prior-period comparative SOI lines as current holdings (BCRED Peraton 2L at YE2025 is not a Q2 position). Script:
data/build_mark_dispersion.py.
The build script (data/build_soi.py) is part of the site source. Known limits: sums of tagged rows can differ from reported totals; some holdings are untagged or tagged inconsistently; matching can both miss and over-merge names; the PIK text-match classifier inherits every filer’s tagging habits.
Industry tags (software exposure)
- Source. Each filer’s own June 30, 2026 10-Q HTML Schedule of Investments: industry section headings for ARCC, BCRED, GBDC, HTGC and OBDC; the Industry column for FSK. XBRL does not carry industry on the holding rows for these filers this quarter, and no tag is inferred from words in company names.
- MAIN: not disclosed by holding. MAIN’s SOI has no industry heading or column. Its holdings are untagged; we show only its own composition-table percentages, which cover its combined LMM, Private Loan and Middle Market investments (excluding Other Portfolio investments and the External Investment Manager).
- Buckets. Narrow software (headline): Software, Software and Services / Software & Services, Application Software, System Software, Internet software and services. Broad tech adds IT Services and Health Care Technology. ARCC states it uses GICS industry groupings; FSK uses the same Software & Services label without citing GICS. Both labels include IT services.
- Validation. Each filer’s tagged subtotals are compared with its own industry composition table (dollar tables for FSK, GBDC and HTGC; percent tables for ARCC, BCRED and OBDC, allowing their 0.1-pp rounding). Every software and broad-tech label ties within 0.5%. The few small non-software misses are tranches missing from the SEC data set (GBDC) or a filer table on a different basis than its own SOI subtotal (OBDC Chemicals).
- Counts. Software name counts use the graph’s entity matching (the same normalized-issuer key as the shared-borrower count), so related legal entities like Connatix Buyer / Connatix Parent count as one. Summed across BDCs they are positions; a company below 90% of cost at two BDCs counts once as a distinct company.
- Limits. Labels are each filer’s own taxonomy and are not like-for-like across filers. Facility caps use each facility’s own definitions, not SOI headings.
Row hygiene and reconciliation (added 16 Oct 2026)
- Drop issuer subtotal rows (“…, Total …”), cash, money-market and treasury-fund rows, and joint-venture look-through rows (holdings of a JV that the BDC reports as one JV interest).
- Drop issuer-level rollup rows that duplicate pipe-delimited holding rows for the same issuer.
- Compare each BDC's summed cost and fair value with the 10-Q totals in XBRL company facts (same accession). Any BDC more than 0.5% off is excluded and listed as “pending reconciliation” on the demos page.
Vendors
Vendor names are listed for identification only (nominative use). No logos, rankings or “vs.” claims, and no paid placements. Any future sponsorship will be labeled.
What we won't do
- No buy/sell views, ratings or recommendations.
- No inference of distress from a mark: we report what the filing reports.
- No fabricated figures, quotes or testimonials.
- No confidential documents. Demos for private-deal workflows will use clearly labeled synthetic documents.
How we estimate value
Each use-case page shows an estimated range of analyst hours and dollars a year, against an assumed tool cost. The method:
- We state the assumptions on the page: hours per unit of work today, hours with an agent including human review, units a year for one team, a loaded hourly cost of $150–250, and an annual tool or build cost range.
- The range is computed in code from those assumptions: the low end pairs the smallest saving per unit with the lowest volume; the high end pairs the largest with the highest volume.
- Where a vendor, survey or fund has published a figure, we quote it in its own words, link it and label it (for example vendor-reported). We never attribute our estimate to a source.
- No single-point numbers. Ranges are rough and meant to be replaced with your own team’s figures.