Form D Radar

The API

The feed as JSON: keyed, read-only, updated nightly from SEC EDGAR. Point it at your CRM.

DATA THROUGH 2026-07-14 · 131,787 FILINGS SINCE 2024-04-01

Read-only REST over the exact rows the feed publishes: newly funded US operating companies from SEC Form D filings, deduped to one row per offering, refreshed nightly. Same fields, same privacy boundary (issuer city/state only), nothing the feed doesn't show. API access is part of the Max plan; mint keys on your account page.

What the numbers mean

amount is the stated offering target from the filing itself; null means the filer declared an indefinite amount (undisclosed on the feed), never zero. Targets are not confirmed closes: don't sum them as if they were. sector and description carry a provenance field: "inferred" (classified from the Form D fields alone) or "verified" (web-checked against the company's own site). description and website appear only when verified.

Authentication

Pass your key in either header. Keys start with fdr_ and are shown once at creation; revoke and re-mint anytime from the account page.

Authorization: Bearer fdr_YOUR_KEY
# or
X-API-Key: fdr_YOUR_KEY

GET /v1/filings

The filing list, newest first, cursor-paginated.

ParamMeaningExample
statecomma-separated state codes (+ INTL for non-US)state=TX,CA
sectorone sector key, the values in the feed's sector filtersector=fintech
min_amountminimum stated target, whole USD; excludes undisclosed raisesmin_amount=5000000
since / untilfiled-date range, inclusive, YYYY-MM-DDsince=2026-06-01
limitrows per page, 1–500 (default 100)limit=200
cursorthe previous response's next_cursor; opaque-
curl -H "Authorization: Bearer fdr_YOUR_KEY" \
  "https://form-d-radar-paid.nicholas-9e7.workers.dev/v1/filings?state=TX&min_amount=5000000&since=2026-06-01"

Response (next_cursor is null on the last page):

{
  "data": [
    {
      "accession": "0001234567-26-001234",
      "company": "Acme Robotics Inc",
      "location": "Austin, TX",
      "state": "TX",
      "filed": "2026-07-10",
      "amount": 12000000,
      "stage": "early",
      "sector": { "value": "deeptech", "provenance": "inferred" },
      "description": { "value": "Builds warehouse picking robots.", "provenance": "verified" },
      "website": { "value": "https://acmerobotics.example", "provenance": "verified" },
      "edgar_url": "https://www.sec.gov/Archives/edgar/data/…"
    }
  ],
  "count": 1,
  "next_cursor": "MjAyNi0wNy0xMHwwMDAxMjM0NTY3LTI2LTAwMTIzNA"
}

GET /v1/filings/{accession}

One filing by its accession number (the same object shape as the list rows). 404 if the accession isn't in the product universe; the API covers operating-company raises, not funds or amendments-only chains.

curl -H "Authorization: Bearer fdr_YOUR_KEY" \
  "https://form-d-radar-paid.nicholas-9e7.workers.dev/v1/filings/0001234567-26-001234"

Rate limits

1,000 requests per key per day, resetting at 00:00 UTC. Every response carries X-RateLimit-Limit / X-RateLimit-Remaining; going over returns 429 with a Retry-After header (seconds until the reset). Errors are JSON: { "error": "…" } with the honest status code: 400 bad parameter, 401 bad key, 403 plan without API access, 404 unknown accession, 429 over the limit.

CSV export

Any filtered feed view exports as a CSV (same columns plus the verified website) straight from the feed's Export CSV button (Pro and Max plans, up to 10,000 rows per export).

POST /match.csv

The bulk list matcher: POST a CSV of company names (first column, up to 5,000; your session token, Max plan) and get a CSV back: one row per (name, matching offering), with match_type exact or normalized and a No row for everything unmatched. Matching is never fuzzy: a name shared by two companies returns both rows, with the EDGAR link to tell them apart. Recipe on the integrations page.

MCP

The same data speaks the Model Context Protocol for AI agents: search_filings and get_filing tools over streamable HTTP at /mcp, authenticated by the same fdr_ keys against the same daily budget. Setup on the integrations page.