Research · Audit

Form D Shell Fan-Out Audit — The Same Odd Name Keeps Turning Up. Is It One Story?

Assembles the person-keyed Form D cluster across every wave since 2001, tests whether money moved, sweeps counterparties, files a cited dossier.

An audit, not a chat answer: a fixed procedure for the moment you notice a repetition across filings — a shared surname on several Form Ds, the same signer, the same round offering amount, an exempt offering with no placement agent — and want to know whether the entities are related, whether any money has actually moved, and what the record itself contradicts. It assembles the cluster at history scale, keys it on the people rather than the entity names, checks for sales, sweeps counterparties, tests registered offerings for self-contradiction, and files the result as a cited dossier with create_report.

This is a record audit, not an accusation. Fan-outs are usually innocent — series-LLC platforms and fund families fan out identically every week. The procedure's job is to state which discriminators fired and which did not, in language that quotes the filing or states a structural fact, and never characterizes a person.

Why this works with edgar.tools MCP

Per-filing tools discard the only signal that matters here: repetition. The audit needs full-text search across every Form D since 2001, typed access to each filing's related persons and offering fields, the reverse join from a person to every issuer they sign for, and a report object that enforces the citation discipline:

  • search_filings — EDGAR full-text search with no date floor; matches related-person names inside primary documents and exhibits. The cluster assembler.
  • search_entities — the entity directory's view of a name stem; finds name-linked siblings the person query misses.
  • live_filings — same-day Form D context, for corroboration only.
  • filing_details — the typed Form D: issuer, related persons, offering amounts, exemptions, compensation, recipients, signature.
  • person_intel — the reverse join: every Form D relation for a named person (Analyst plan).
  • company_filings — each member's and counterparty's full history: amendments, serial notice filings, Reg A / S-1 and their qualification events.
  • create_report — files the dossier. The server enforces sources on every block.

How to use

Copy the procedure below into your Claude / ChatGPT / Gemini conversation with edgar.tools MCP connected, then describe what you noticed:

Audit this Form D fan-out: [the name fragment, accession, or headlines you noticed].
Prompt — paste this into Claude, ChatGPT, or Gemini

The audit (v1)

You are running a pattern audit: a repetition was noticed across SEC filings, and the question is whether it is one story, whether any money has moved, and what the record contradicts. Follow the steps in order. Step labels are fixed (R resolve · G gather · A analyze · W widen · D deliver). The deliverable is a create_report dossier, not a chat summary.

Non-negotiables

  • No invention. Every name, amount, date, and quoted phrase comes from a tool result tied to an accession. Unknown is UNKNOWN.
  • Characterize filings, never persons. Persons appear only as the record names them — related person, signer, title. Never write fraud, scam, sham, or ponzi unless quoting a filing or an official enforcement document, and then attribute it ("the SEC's complaint alleges").
  • Conclusions are the questions the record raises. "We could not reconcile X with Y" — never a verdict.
  • Fan-out alone is innocent. Series-LLC platforms and fund families fan out identically. State which discriminators fired and which did not.
  • The disconfirmation section is mandatory. A dossier without "what would make this innocent" is not done.

Procedure

R1 — Normalize the noticing into seed keys. Reduce whatever was noticed — a name fragment, one accession, a person's name, a few headlines — to seed keys: a name token, a person name, an accession list. If the seed is a single filing, its related persons become seed keys after G2.

G1 — Assemble the cluster at history scale, not the day. search_filings({ q: "<seed token>" }) with no date floor — fan-outs are slow-rolled in waves and the wave you noticed is rarely the first. search_entities({ query: "<token>" }) for the directory's view. live_filings({ form: "D", hours: 48 }) adds same-day context only. Record every candidate CIK and accession with its filing date. The cluster's timeline — wave dates, gaps, naming-convention changes between waves — is a finding, not just a membership list.

G2 — Open every member. filing_details({ url: "<accession>" }) per candidate. Capture: issuer (name, CIK, jurisdiction), related persons (names, relationships), offering (total, sold, remaining, minimum), exemptions claimed, whether general solicitation is allowed, total compensation and recipients, signer name and date, and whether the offering is stated to last more than one year.

A1 — Field-compare across the cluster. Tabulate every captured field across members. Identity is the fan-out signature; divergences are equally informative — record each one (five of seven set one flag, two did not, is the one human decision visible in a mechanical batch).

A2 — Extract the person key. The normalized, order-independent set of related-person names. This is the cluster key — not the entity names (chosen by the filer, freely varied) and not the address (registered-agent drops are shared by thousands of unrelated entities). DECISION: if the person sets across members are disjoint, stop — you have coincidence, not a fan-out. As soon as the person set exists, check every name against official enforcement sources (SEC litigation releases, administrative proceedings, IAPD) — early, not as a final garnish — and note the dates.

W1 — Sweep each person's other issuers. person_intel({ name }) for the reverse join (Analyst plan), then search_filings({ q: "<person name>" }) to reach filings the indexer predates, and search_entities on any shared name stem. Merge new members into the cluster and loop back to G2 for each.

G3 — Check for money. For every member, company_filings({ company: <cik> }): any D/A? Amendments exist to report sales — a cluster with zero amendments has raised nothing on the record. For amendments found, re-open with filing_details and read total sold, number of investors, date of first sale. DECISION: if material sales exist, investors are now involved — escalate care on language and check for placement agents in the recipients.

W2 — Sweep counterparties. Any third party named in exhibits or MOUs surfaced by W1: pull its full history with company_filings, then filing_details on the notable filings. Look for serial notice filings with frozen zeros, offering types that changed shape over time, and signer rotation — especially a signer rotation adjacent to an enforcement date.

A3 — Check registered-offering coherence. If any member or counterparty has a Reg A (1-A) or S-1: is it qualified or effective (look for QUALIF / EFFECT / 253G2 in its history — absence means it cannot legally sell)? Read the cover-page fields against each other: named auditor versus the audit-status flag; named underwriter versus what that firm is; blue-sky spend versus jurisdictions claimed; broker-dealer CRD versus distribution claims. Self-contradiction inside one document is the strongest safe finding available — hunt for it deliberately. Then check the timeline against the market: if an instrument tied to the offering already trades somewhere, compare the venue's listing date with the registration timeline.

D1 — Write the dossier. Sections, in this order, unnumbered: Assessment (one bolded central claim, two or three pillars pointing into the evidence, a posture verdict) · Cluster table (member, CIK, filed, amount, sold, minimum, exemptions — one row each) · Shared infrastructure (persons, address, phone, signer, dates) · Divergences (every field that varies) · Money check (amendments, sales, investors, agents) · Counterparty record (history-scale behavioral facts) · Enforcement record (official sources only, with dates and current posture, or "no public enforcement record found as of <date>" — never "no issues") · Coherence findings (each as: field A says X, field B says Y, same accession) · Timeline (every dated fact in one table — the arc is often the finding) · What would make this innocent (which benign explanations survive; which discriminators did not fire) · Open questions · Sources (official record and open web separated; every accession cited once) · a citationNote with the method chain.

D2 — File. create_report({ kind: "dossier", title, blocks }). Block rules: every block carries sources: [] at minimum, headings and the citationNote included; citationNote.method is an array of strings; do not number headings (the renderer letters sections); one callout per verbatim quote; external sources are https://www.sec.gov/… URLs. Share links are minted on the report page (Analyst plan), never by this procedure.

Priors — what each observation is worth

  • Fan-out alone is innocent. Discriminators that move a cluster out of the benign class: no platform or series naming convention; no placement agent anywhere (zero compensation and empty recipients on large offerings); round identical amounts; interchangeable invented names; a natural-person promoter rather than a management company as the related person.
  • Form D's offering amount is a free assertion. Unreviewed notice, nothing to file. Weight "total offering" at zero as evidence of capacity. The informative fields carry legal or behavioral cost: the exemption chosen (506(c) obliges accredited-status verification and permits public solicitation), amendments (obligatory on material change — their absence is evidence), placement agents (real programs have them).
  • Repetition is the signal; per-filing tools discard it. N identical filings mean far more than one filing read N times. Always sweep the full history before judging any single document.
  • Entity names are chosen by the filer; key on persons. A promoter dodging name-based grouping just varies names. Person names are asserted under signature and stay invariant.
  • Address and filer agent confirm, never key. Shared infrastructure matches everyone.
  • Waves drift, and drift is directional. A descending minimum-investment ladder, dropped Investment Company Act exclusions, and a switch to 506(c) together describe a widening funnel — more, smaller investors, public solicitation — that no single filing shows.
  • Self-contradiction beats external contradiction. A filing that names an auditor and declares the financials unaudited impeaches itself; no outside source is needed.
  • Exotic collateral is a known typology. Safe-keeping receipts against gemstones, bullion, or art: treat the valuation as unverified by construction and check whether the instrument is even executed (a blank counterparty signature block is a structural fact).
  • Absence of enforcement is not exoneration. Comment letters publish weeks after review; actions lag conduct by years. Say "none found as of <date>."
  • Signer rotations read against enforcement dates. A signer who keeps signing for months after being charged, then rotates away, is a dated structural fact worth its own line.

Stopping conditions

  • Disjoint person sets across members → stop at A2 and report coincidence.
  • No amendments anywhere and no counterparty of note → the dossier is short; file it anyway, with the discriminators that did not fire as the central claim.
  • If person_intel returns TIER_INSUFFICIENT, continue with search_filings on the person name and say in the dossier that the reverse join was not run.
Then askRun this on a name you keep seeing.

What the audit finds that a single filing cannot

QuestionOne filingThis audit
Is this one story?One issuer, one related personThe person-keyed cluster across every wave since 2001
Has money moved?"Total offering" — a free assertionAmendments, sales, investors, agents across every member
Who is on the other side?A name in an exhibitThe counterparty's full history — serial filings with frozen zeros, signer rotation
Does the registered offering hold up?A cover pageThe cover page read against itself, and against the market's timeline
DeliverableA chat answerA cited dossier object the server validated, shareable as a frozen link

Worked run (2026-08-28): a seven-member Form D cluster assembled across three waves over three months, keyed on a shared related person, with a counterparty carrying over a hundred notice filings at zero sold and a Reg A offering that named an auditor while declaring the financials unaudited. The dossier reported each of those as a structural fact, and its disconfirmation section listed the benign explanations that survived.

  • Off-Balance-Sheet Commitments Audit — the family's other audit: one filer's notes over time rather than cross-filing linkage.
  • Short-Seller Forensics — when the target is an operating company with financial statements to test.
  • Insider Activity Interpreter — when the repetition you noticed is in Form 4s rather than Form Ds.