Technical writing

SEC Form D: The Federal Record of Private Securities Offerings

· 12 min read· AI Analytics
SECForm DPrivate PlacementsRegulation DFederal Data

When a startup closes a seed round, when a new hedge fund or private-equity fund opens to investors, or when a sponsor syndicates an apartment complex, the money almost never moves through a public offering. It moves through a private placement—and the only public trace it leaves with the federal government is a short notice called Form D. That notice is one of the few windows into a private market that now raises far more capital each year than every public stock and bond offering combined. Our table holds roughly 10,000 of these private-offering notices, each keyed to its issuer, each disclosing the exemption claimed, the amount sought, the amount sold, and the kind of company doing the raising.

This article covers what Form D is and why a private offering needs a federal notice at all; the Securities Act registration requirement and the Regulation D exemptions that Form D claims; the pivotal distinction between Rule 506(b) and Rule 506(c)—the long-standing private placement and the JOBS Act’s general-solicitation alternative; the fields the notice actually discloses and the fact that it is a notice, not an approval; who files Form D—startups, venture and growth financings, private funds, and real-estate syndications; how the filing joins to the EDGAR company registry and to an issuer’s other SEC filings through the CIK; the analytical uses, from tracking private-capital formation to measuring the adoption of general solicitation; a Python workflow that pulls Form D filings from EDGAR, splits 506(b) versus 506(c) usage, and aggregates offering amounts by industry; and the caveats—self-reported amounts, the notice-versus-substance gap, late and missing filings, and the limits of a window that shows the offering but not the investors— that every analyst must keep in mind.

What the dataset is

Form D is the Notice of Exempt Offering of Securities: a brief, standardized filing that an issuer submits to the Securities and Exchange Commission when it sells securities in an offering that is exempt from full public registration under Regulation D. It is not a prospectus, not a registration statement, and not anything the SEC reviews or approves. It is a notice—a record that an exempt private offering happened, who ran it, under which exemption, and how big it was. Because Regulation D is the workhorse exemption behind the overwhelming majority of US private fundraising—startup rounds, fund launches, real-estate deals— Form D is, in aggregate, the closest thing there is to a public ledger of private-capital formation.

In our database the record is stored as the table sec_form_d, at the grain of one row per Form D filing. An issuer that runs two unrelated offerings files two Form Ds and contributes two rows; an issuer that amends an existing notice files an amendment that points back to the original. Every row is keyed to the issuer through its EDGAR Central Index Key, the persistent identifier that ties the notice back to the same issuer’s registry record and any other filings it has made. The columns capture who is raising money, what kind of company it is, under which exemption, and how much it is seeking and has sold:

cik                     -- EDGAR Central Index Key of the filing issuer
accession_number        -- unique SEC identifier for this filing
issuer_name             -- the entity raising the capital
issuer_state            -- jurisdiction of incorporation / principal place
industry_group          -- issuer's industry (e.g. pooled investment fund,
                           technology, real estate, banking, energy)
issuer_size             -- revenue range or, for funds, net asset value range
exemption_claimed       -- Rule 504 / 506(b) / 506(c) / Section 4(a)(2), etc.
date_of_first_sale      -- date the first security was sold in the offering
total_offering_amount   -- amount the issuer is offering ("indefinite" allowed)
total_amount_sold       -- amount sold as of the filing date
investors_count         -- number of investors who have purchased
sales_commissions       -- commissions paid to placement agents / brokers
finders_fees            -- finders' fees paid in the offering
filed_date              -- date the notice was filed (within 15 days of sale)

The cik is the load-bearing column. The Central Index Key (CIK) is the number EDGAR assigns to every filer; it is the join key that links a Form D to the issuer’s company registry entry and to every other filing the same issuer has made. The exemption_claimed field is the substantive heart of the record—it states which Regulation D rule the issuer is relying on, and as the next sections explain, the difference between 506(b) and 506(c) carries real legal and behavioral meaning. The paired total_offering_amount and total_amount_soldfigures are what make Form D a capital-formation dataset rather than a mere registry: aggregated across thousands of notices they trace how much private money is being raised, by what kind of issuer, and when. And the date_of_first_sale field anchors the timing, because the filing deadline runs from that date, not from the close of the offering.

What it is and the Securities Act exemption frame

To understand Form D you have to start from the rule it is an exception to. The Securities Act of 1933, the foundational federal securities statute, embodies a simple default: any offer or sale of a security must either be registered with the SEC or qualify for an exemption from registration. Registration is the full public-offering process—an IPO-style filing of a registration statement and prospectus, subject to SEC review, mandatory disclosure, and liability. It is expensive, slow, and built for raising money from the public at large. For a startup raising a few million dollars from a handful of investors, or a fund raising from institutions, full registration would be wildly disproportionate. The exemptions exist to let that capital be raised without it.

The oldest and most fundamental exemption is the statutory private-offering exemption in Section 4(a)(2) of the Securities Act, which exempts “transactions by an issuer not involving any public offering.” The trouble with relying on Section 4(a)(2) directly is that the statute never defines what counts as a non-public offering; for decades issuers had to navigate a body of case law and SEC interpretation to be confident they qualified. To replace that uncertainty with a bright-line safe harbor, the SEC adopted Regulation D in 1982. Reg D is a set of rules that, if followed, give an issuer assurance that its offering is exempt—a defined path through the private-offering exemption rather than a judgment call. Form D is the single procedural obligation the regulation attaches: to use the safe harbor, the issuer must file a Form D notice with the SEC.

Regulation D contains several exemptions. Rule 504 permits smaller offerings up to a capped dollar amount in a twelve-month period and is used mainly by very small companies, often in conjunction with state registration. The dominant exemption—the one that accounts for the vast majority of capital raised under Reg D—is Rule 506, which comes in two flavors discussed in the next section. Rule 506 is so important partly because it is a covered-securities exemption under the National Securities Markets Improvement Act: a 506 offering preempts the substantive registration requirements of state “blue sky” laws, leaving states able to require only a notice filing and a fee. That federal preemption is a large part of why 506 became the default structure for private fundraising nationwide—it lets an issuer run a single offering across many states without registering in each one.

The central concept running through all of Regulation D is the accredited investor. The exemptions are premised on the idea that investors who meet defined wealth, income, or professional thresholds—and certain institutions—can fend for themselves and do not need the protections of the full registration-and-prospectus regime. An individual generally qualifies as accredited by meeting an income or net-worth test, or by holding certain professional credentials; institutions, funds, and large entities qualify by their size or nature. Who counts as accredited, and how the issuer establishes it, is exactly the dimension on which the two versions of Rule 506 diverge.

Rule 506(b) versus Rule 506(c): the central distinction

The single most consequential field on a Form D is which sub-rule of Rule 506 the issuer claims, because the two paths embody opposite tradeoffs between marketing freedom and investor-verification burden. Understanding the split is essential to reading the data, and it is the cleanest way the dataset exposes a structural change in how private capital is raised.

Rule 506(b) is the traditional private placement, in place since Regulation D’s adoption. It lets an issuer raise an unlimited amountfrom an unlimited number of accredited investors, plus up to thirty-five non-accredited but sophisticated investors (with additional disclosure obligations triggered if any non-accredited investors participate). Its defining condition—and its defining constraint—is that the issuer may not engage in general solicitation or general advertising. The offering must be conducted privately: through pre-existing, substantive relationships with prospective investors, not through public ads, open websites, cold outreach, or media. Under 506(b) the issuer is generally permitted to rely on investors’ self-certification of accredited status; it does not have to affirmatively verify each one. The bargain is simple—you may not advertise, but in exchange the verification burden is light.

Rule 506(c) is the newer path, created by the JOBS Act of 2012and implemented in 2013. It does something Reg D had never permitted: it lets an issuer generally solicit and advertise a private offering—publish it on a website, post it on social media, pitch it at a demo day open to the public, run it through an online platform. In return for that freedom, 506(c) imposes a stricter condition: all purchasers must be accredited investors (no non-accredited investors at all), and the issuer must take reasonable steps to verify that each purchaser is in fact accredited—it can no longer rely on self-certification alone. Verification typically means reviewing tax returns, bank and brokerage statements, or a written confirmation from a CPA, attorney, or registered broker-dealer. The bargain is the mirror image of 506(b)—you may advertise to the world, but you must affirmatively prove every investor is accredited.

That tradeoff explains the adoption pattern visible in the Form D data. Many sophisticated issuers—established venture funds, private-equity funds, hedge funds with their own deal flow and investor relationships— have continued to favor 506(b), because they do not need to advertise and prefer to avoid the verification burden and the legal risk that an inadequate verification could blow the exemption. The 506(c) path, by contrast, has been adopted most by issuers for whom public marketing is valuable: online investment platforms, crowdfunding-adjacent real-estate sponsors, and newer fund managers raising from investors they do not already know. Because the exemption-claimed field records which path each issuer chose, the dataset lets an analyst measure the relative uptake of the JOBS Act’s general-solicitation experiment—how large a share of private offerings now advertise, how that share differs by industry and issuer type, and how it has moved over the years since 506(c) became available. It is a rare case where a single regulatory data field captures the adoption curve of a deliberate policy change.

It is a notice, not an approval

A persistent misconception about Form D is that filing it confers some kind of SEC blessing on the offering. It does not, and the distinction matters both legally and for how the data should be read. Form D is a notice—the SEC does not review it for accuracy, does not approve the offering, and does not pass on the merits of the securities being sold. The filing simply records that an exempt offering is taking place. The exemption from registration comes from the issuer’s compliance with Regulation D’s substantive conditions; the Form D is the procedural notice the regulation requires, not the source of the exemption.

The notice must be filed within fifteen days after the first sale of securities in the offering, with the clock running from the date of first sale rather than from any later close. Issuers must amend the Form D annually for a continuing offering and to reflect material changes, so a single offering can produce an original notice and a chain of amendments over time. The information disclosed is deliberately limited—the identity and basics of the issuer, the exemption claimed, the offering and amount-sold figures, the use of a placement agent and the commissions or finders’ fees paid, and the date of first sale—but it notably does not include the names of the investors, the terms of the securities, or any financial statements. The point is to give the SEC and the public a standardized record that an offering occurred and its broad shape, not to open the offering up the way registration would. For the analyst, the consequence is that Form D is rich on the supply side—who raised, how much, under what exemption—and silent on the investor side, a limitation the caveats section returns to.

Who files Form D

The breadth of issuers that file Form D is what makes the dataset such a wide-angle view of private markets. Four broad categories dominate, and recognizing them is the key to reading the industry-group field.

Operating companies raising venture and growth capital. The most familiar filers are startups and growth-stage companies—the technology, life-sciences, and other operating businesses raising seed, Series A, and later rounds from venture capital and angel investors. Each priced equity round is typically a Regulation D offering, so a successful startup leaves a trail of Form D filings that, read in sequence, sketch its fundraising history. In aggregate these notices are a leading dataset for tracking venture financing activity across sectors and geographies.

Private investment funds. A very large share of Form D filings—and an even larger share of the dollars—comes not from operating companies but from pooled investment funds: hedge funds, private-equity funds, venture funds, credit funds, and the like. When a fund manager launches a new fund and raises commitments from limited partners, the fund itself is an issuer selling interests under Regulation D, and it files a Form D (usually a 506(b)) with an industry group of pooled investment fund. This is why Form D is also a barometer of fund formation—new fund launches, their target sizes, and the pace of capital being committed to private-fund vehicles all surface in the data.

Real-estate syndications. A distinctive and voluminous category is real-estate sponsors who pool investor money to acquire and operate property—apartment complexes, commercial buildings, development projects. These syndications, and the real-estate funds that aggregate them, are Regulation D offerings, and the rise of online real-estate investment platforms has made 506(c) particularly visible in this segment, where public marketing of deals to accredited investors is part of the business model. Other issuersround out the picture: banks and financial institutions raising private capital, energy and infrastructure ventures, and a long tail of small companies across every industry. The common thread is that any entity selling securities privately under Reg D—whatever it makes or does—passes through Form D, which is precisely what makes the dataset a near-comprehensive census of US private offerings rather than a window onto one industry.

Joining to the company registry and other filings

Form D is most powerful not in isolation but as one filing type within EDGAR’s integrated filing system, and the cik is the universal join key that connects it to everything else an issuer files. Two joins matter most.

The first is to the EDGAR company registry. EDGAR maintains a master entity record for every filer—its CIK, its names and former names, its state of incorporation, its business address, and its standard industrial classification. Joining sec_form_d to the company registry by CIK is what resolves a raw issuer name on a notice to a canonical entity: it disambiguates similarly named filers, surfaces an issuer’s former names and address history, and lets an analyst normalize across filings that use slightly different name spellings. Because the registry is the authoritative index of who has ever filed, it is the spine to which the Form D record attaches.

The second join is to an issuer’s other SEC filings by the same CIK—and this is where Form D becomes a tool for tracing the private-to-public arc. A company that files a string of Form Ds as a private startup and later files an S-1 registration statement for an IPO leaves both in EDGAR under one CIK; an analyst can follow that company from its first private round to its public debut. A private-fund adviser’s Form D filings can be related to the adviser’s other regulatory footprints. And because the submissions API lists every filing an issuer has made keyed by CIK, the full filing history is one request away once the CIK is known. Joining Form D to the broader filing record is what turns a one-time notice into a node in an issuer’s complete federal disclosure history—the difference between knowing that a company raised money once and understanding its entire capital-raising trajectory.

Analytical uses

A national, issuer-resolved, exemption-tagged record of private offerings supports analyses that no public-markets dataset can, precisely because private markets are otherwise so opaque.

Tracking private-capital formation.The most important use is measuring the scale and direction of private fundraising. Aggregating total_amount_sold across Form D filings—by quarter, by industry group, by issuer state— produces a time series of how much private capital is being raised and where it is flowing. Because private offerings now raise more capital annually than public ones, this is one of the only public ways to size the larger half of the US capital markets. Slicing it by industry shows whether the money is going to technology, life sciences, real estate, or pooled funds; slicing it by geography shows the concentration of private financing in particular states and metros.

Measuring 506(b) versus 506(c) adoption. The exemption-claimed field makes Form D a natural experiment in regulatory policy. Counting filings and dollars by sub-rule over time quantifies how far the JOBS Act’s general-solicitation provision has actually been taken up—whether advertised private offerings remain a niche or have become mainstream, which industries embraced them, and whether the verification burden has held adoption back. This is a clean, data-grounded read on the real-world effect of a deliberate deregulatory change.

Mapping fund launches and venture activity. Filtering to pooled-investment-fund issuers turns Form D into a fund-formation tracker—new funds, their target and sold amounts, and the cadence of commitments—while filtering to operating-company issuers and following each CIK’s sequence of notices reconstructs venture financing rounds. Finally, the private-to-public pipelinebrings the cross-filing join to bear: identifying which Form D issuers later registered for public offerings, and how long the journey took, connects the earliest private financings to eventual public-market outcomes—a longitudinal view of company formation that begins years before any public dataset can see the company at all.

Python workflow: splitting 506(b)/506(c) and aggregating by industry

The script below pulls Form D filings from SEC EDGAR for a date window, resolves each filing’s issuer CIK and accession number, parses the Form D primary document to extract the claimed exemption, the issuer industry, and the offering and amount-sold figures, and then computes two core metrics: the split between Rule 506(b) and Rule 506(c) usage, and the total capital sold aggregated by issuer industry. EDGAR requires no API key—only a descriptive User-Agent identifying the caller—but it does enforce a fair-access rate limit, so the script paces its requests. Because the Form D XML schema and tag names vary across filing versions, the parsing is deliberately defensive; any production use should validate against the current EDGAR Form D technical specification and page through the full result set.

import requests, time
import pandas as pd
from collections import defaultdict

# SEC EDGAR -- Form D notices of exempt offering.
#
# Two public endpoints on data.sec.gov / efts.sec.gov are used together:
#   1. Full-text search (efts.sec.gov/LATEST/search-index?q=...&forms=D)
#      returns the accession numbers of Form D filings.
#   2. The submissions API (data.sec.gov/submissions/CIK##########.json)
#      lists every filing an issuer has made, keyed by CIK.
# No API key is required; the SEC asks only for a descriptive
# User-Agent identifying the caller. Respect the fair-access rate limit
# (roughly 10 requests/second) -- the sleeps below stay well under it.
UA = {"User-Agent": "AI Analytics research contact@ai-analytics.org"}
FTS = "https://efts.sec.gov/LATEST/search-index"


def form_d_hits(date_from, date_to, page_size=100, max_pages=5):
    # Page through Form D filings filed in a date window. Each hit
    # carries the accession number and the issuer CIK(s).
    hits = []
    for page in range(max_pages):
        params = {
            "forms": "D",
            "dateRange": "custom",
            "startdt": date_from,
            "enddt": date_to,
            "from": page * page_size,
        }
        r = requests.get(FTS, headers=UA, params=params, timeout=60)
        r.raise_for_status()
        batch = r.json().get("hits", {}).get("hits", [])
        if not batch:
            break
        hits.extend(batch)
        time.sleep(0.3)
    return hits


def submissions(cik):
    # Zero-pad the CIK to 10 digits, the form the endpoint expects.
    url = f"https://data.sec.gov/submissions/CIK{int(cik):010d}.json"
    r = requests.get(url, headers=UA, timeout=60)
    r.raise_for_status()
    return r.json()


def industry_and_exemption(cik, accession):
    # The Form D primary document is XML; its <offeringData> block carries
    # the industry group, the claimed exemption(s), and the offering and
    # amount-sold figures. Parse defensively -- tag names vary by version.
    acc = accession.replace("-", "")
    base = f"https://www.sec.gov/Archives/edgar/data/{int(cik)}/{acc}"
    idx = requests.get(f"{base}/index.json", headers=UA, timeout=60).json()
    doc = next((f["name"] for f in idx["directory"]["item"]
                if f["name"].lower().endswith(".xml")), None)
    if not doc:
        return None
    xml = requests.get(f"{base}/{doc}", headers=UA, timeout=60).text
    def grab(tag):
        a, b = f"<{tag}>", f"</{tag}>"
        return xml.split(a)[1].split(b)[0].strip() if a in xml else None
    industry = grab("industryGroupType")
    total = grab("totalOfferingAmount") or "0"
    sold = grab("totalAmountSold") or "0"
    # Both 506(b) and 506(c) live under federalExemptionsExclusions as
    # the items "06b" and "06c"; presence of "06c" marks general solicitation.
    low = xml.lower()
    rule = "506c" if "06c" in low else ("506b" if "06b" in low else "other")
    return {"industry": industry, "rule": rule,
            "offering": float(total) if total.isdigit() else 0.0,
            "sold": float(sold) if sold.isdigit() else 0.0}


def analyze(date_from, date_to):
    by_industry = defaultdict(float)
    by_rule = defaultdict(int)
    rows = []
    for h in form_d_hits(date_from, date_to):
        src = h.get("_source", {})
        ciks = src.get("ciks", [])
        acc = h.get("_id", "").split(":")[0]
        if not ciks or not acc:
            continue
        info = industry_and_exemption(ciks[0], acc)
        time.sleep(0.3)
        if not info:
            continue
        by_industry[info["industry"] or "(unspecified)"] += info["sold"]
        by_rule[info["rule"]] += 1
        rows.append(info)

    print(f"Form D notices parsed: {len(rows):,}")
    print("\n506(b) vs 506(c) usage:")
    for rule, n in sorted(by_rule.items(), key=lambda kv: -kv[1]):
        print(f"  {rule:<7} {n:>5,}")

    print("\nCapital sold by issuer industry (top 10):")
    top = sorted(by_industry.items(), key=lambda kv: -kv[1])[:10]
    for ind, amt in top:
        print(f"  {ind[:34]:<34} ${amt:>16,.0f}")
    return pd.DataFrame(rows)


analyze("2024-01-01", "2024-03-31")

Two practical notes apply. First, the amount aggregation uses total_amount_sold rather than total_offering_amount because the latter is frequently marked “indefinite” for funds and continuing offerings— summing offering targets would badly overstate the capital actually raised, whereas amount-sold reflects what has truly been placed as of the filing date. Even so, amount-sold is a snapshot: a continuing offering reports more in each annual amendment, so a rigorous capital-formation series must deduplicate offerings by their accession lineage and take the latest amendment, not sum every filing. Second, for national-scale work—multi-year private-capital-formation series, or the full private-to-public pipeline analysis—EDGAR’s bulk Form D datasets and the structured quarterly financial-statement-and-notes data sets are far more efficient than tens of thousands of paginated API calls, and they ship with the authoritative, version-stamped field definitions for each release.

Limitations and analytical caveats

Form D is the most comprehensive public record of US private offerings, but it is a notice filed by the issuer, and several structural features must be internalized before drawing conclusions from it.

The amounts are self-reported and the offering field is often open-ended. The offering and amount-sold figures come from the issuer, are not audited or reviewed by the SEC, and are reported as of the filing date. Many funds and continuing offerings report an “indefinite” total offering amount, which cannot be summed; and because amount-sold is updated only through annual amendments, a snapshot understates the eventual total of a live offering. Any capital-formation aggregate built from raw Form D dollars without handling indefinite amounts and amendment lineage will be wrong, often by a wide margin.

It is a notice, not the substance of the offering. Form D records that an exempt offering occurred and its broad shape—but it does not disclose the investors, the terms of the securities, the valuation, or any financial statements, and the SEC does not verify the exemption claimed. The presence of a Form D claiming 506(c) is the issuer’s assertion that it followed 506(c), not proof that it actually verified every investor; the data shows the claimed structure, not compliance with it. Treating a notice as evidence of a successful, fully compliant raise reads more into the record than it carries.

There are late, amended, and missing filings. The filing obligation runs from the date of first sale, but compliance is imperfect: some issuers file late, some never file at all, and the relationship between the filing date and the underlying economic event varies. Because a single offering generates an original notice plus a chain of amendments, naive counts of filings overstate the number of distinct offerings unless amendments are collapsed. And while failure to file Form D does not by itself forfeit the underlying registration exemption, it means some genuine private offerings simply do not appear—so the dataset is a near-census, not a complete one, and under-counts the least sophisticated issuers most.

It shows the offering, not the investors—and entity resolution is on you. The notice is silent on who bought the securities, so Form D illuminates the supply side of private capital and leaves the demand side dark. And because the issuer name is a free-text field, joining across filings, to the company registry, and to outside datasets depends entirely on careful entity resolution through the CIK and name normalization—name-only matching collides on common entity names and on the many similarly named special-purpose vehicles that funds and syndicators create. Held with those caveats, the sec_form_d table is a uniquely valuable resource: roughly 10,000 issuer-resolved, exemption-tagged notices of private offerings— the public ledger of a private market that raises more capital than the public one, visible nowhere else in this much detail.

Related writing

SEC EDGAR Company Registry: The Federal Index That Resolves Every Public Company — The registry is the spine every Form D attaches to: joining a private-offering notice to the company record by CIK resolves the raw issuer name to a canonical entity and connects the filing to the issuer’s entire EDGAR history.

SEC Schedule 13D Filings: The Federal Database Behind Activist Investor Stakes — Where Form D records who is raising private capital and how, Schedule 13D records who is accumulating large stakes in public companies, and both are EDGAR disclosures keyed to the same CIK that reward careful entity resolution.

SEC N-PORT Mutual Fund Holdings: The Federal Database Behind Every Fund Portfolio Position — The pooled-investment funds that dominate Form D’s dollar volume have a public-fund counterpart in the registered funds that file N-PORT, and the two datasets together span the private-fund-launch and public-fund-portfolio sides of the same asset-management industry.