LatestAll news

Home / Data standards

Data standards

Where our figures come from, what they mean, how they are checked and how we fix mistakes.

Sources

Definitions

How figures are checked

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Result: FSK 0.00% / 0.00% and GBDC −0.06% / −0.08% vs the 10-Q (cost / fair value).

BDC demo data

  1. 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.
  2. 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.
  3. 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.
  4. FV/cost = fair value ÷ cost, per row. Rows are holdings as tagged by the filer (one issuer can have several tranches).
  5. 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”.
  6. Software exposure demo: industry from SOI headings / the FSK Industry column, tied to each filer’s industry table. See industry tags.
  7. PIK-tagged holdings demo: case-insensitive text match for a standalone PIK token 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.
  8. 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)

Row hygiene and reconciliation (added 16 Oct 2026)

  1. 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).
  2. Drop issuer-level rollup rows that duplicate pipe-delimited holding rows for the same issuer.
  3. 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

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:

  1. 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.
  2. 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.
  3. 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.
  4. No single-point numbers. Ranges are rough and meant to be replaced with your own team’s figures.