Takeoff Radar

The API

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

DATA THROUGH 2026-09-04 · 140,587 FILINGS SINCE 2024-04-01

Everything the feed shows, as data your other tools can read: US operating companies with new SEC private-offering filings (Form D), one row per offering, refreshed nightly. Same fields, same privacy boundary (issuer city/state only), nothing the feed doesn't show.

Which route fits you

You don't need to be a developer to get the data out. Pick the row that sounds like you:

You wantUsePlanWhere to start
A spreadsheet you can sort, share, or import anywhereCSV exportMaxThe feed's Download as a spreadsheet button. No setup.
To ask ChatGPT or Claude about new filingsMCP connectorMCPTwo steps on the integrations page. No code.
Filings flowing into your CRM, dashboard, or scriptsREST APIMCPThe three steps below.
To know who on an existing client list just filedBulk list matcherMaxUpload a CSV on your My radar page.

Our recommendation: start with the CSV export even if you plan to build on the API later. It answers "is this data useful to me" in one click, and the API returns the same fields, so nothing you learn is wasted.

Get set up in three steps

  1. Be on the MCP plan: it carries the REST API and the MCP connector both.
  2. On your My radar page, under API keys, click Create API key. The key starts with tkr_ and is shown once, so copy it somewhere safe before you leave the page. Lost one? Revoke it and mint another; it takes seconds.
  3. Copy and paste a ready-made call with your key in it, and you get back the same filings the feed shows, as JSON your tools can read. That's the whole setup: no SDK, no install, one line in a scheduler and done.

What the numbers mean

Every amount is what the company told the SEC it plans to raise, not money confirmed in the bank. When a filing doesn't state a number, we say undisclosed instead of guessing. And when we've checked a company's website ourselves, the row is marked verified, so you always know which details came straight from the filing and which ones we confirmed.

What each field means

The data is honest about what a Form D does and doesn't say. This table is the contract:

FieldWhat it holdsHow to read it
amountThe stated offering target from the filing itself, in whole US dollars.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.
sectorOur sector classification.Carries a provenance label; see below.
descriptionOne line on what the company does.Appears only when verified.
websiteThe company's own site.Appears only when verified.
provenanceHow sector and description were established."inferred" means classified from the Form D fields alone. "verified" means web-checked against the company's own site.
urlThe filing's own page on this site.Present only for filings that have a published page here, so a link you get back is a link that resolves. edgar_url is on every row either way.
hiringWhat the company's own public job board showed the last time we read it: how many roles were open, the date we read it, how long the oldest and the middle role had been open, whether one of them is a recruiter of their own, and the date a board that had been empty first showed roles.An observation with its own date, never a forecast, and it counts open roles rather than people. Absent when we have found no confirmed board for that company, and absent when the newest reading is more than 45 days old. Absent means not observed. It is never a zero and never a claim that nobody is hiring.
lcaWork-visa sponsorship as the US Department of Labor discloses it: certified work-visa filings over the last four quarters, permanent-residency filings over the same span, the occupation sponsored most often, and the date the disclosure runs through.Public federal disclosure data as published, not our inference. Absent when the company appears in no disclosure we hold, and absent when the newest quarter we hold is more than 180 days old. Absent means not observed, never zero.
awardsFederal contract work as USAspending records it: how many separate federal awards saw money move over the past year, the dollars committed on them, when money last moved, which agencies bought, and whether this is the company's first federal award on record.Public federal spending data as published, not our inference. Dollars are what the government committed on contracts, never the company's revenue, and an award is not a hire. Absent when we matched no award record for that company, and absent when the newest reading is more than 120 days old. Absent means no matched award record, never that the company does no federal work, and never zero.

Authentication

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

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

GET /v1/filings

The filing list, newest first. Results come in pages: each response ends with a next_cursor; pass it back as cursor to get the next page, and stop when it comes back null. Every parameter is optional; with none you get the newest filings across the country.

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, pasted back as-is, for the next page-
curl -H "Authorization: Bearer tkr_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/…",
      "url": "https://www.takeoffradar.com/f/0001234567-26-001234/"
    }
  ],
  "count": 1,
  "next_cursor": "MjAyNi0wNy0xMHwwMDAxMjM0NTY3LTI2LTAwMTIzNA"
}

A row can also carry three more objects, hiring, lca and awards, described in the field table above. Each one is left off a row we have not observed rather than sent as zeros, so write your reader to treat a missing object as "no observation", not as "none".

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 tkr_YOUR_KEY" \
  "https://form-d-radar-paid.nicholas-9e7.workers.dev/v1/filings/0001234567-26-001234"

Limits, and what errors look like

Each key gets 1,000 requests a day, resetting at midnight UTC. That is plenty for a nightly CRM sync with headroom to explore; if you're hitting it, you're probably re-downloading data that only changes once a day, so fetch once and store it. Every response tells you where you stand (X-RateLimit-Remaining), and going over returns a 429 with a Retry-After header saying how many seconds until the reset.

When something is wrong, the response says so in plain JSON, { "error": "…" }, with the honest status code:

CodeWhat it meansWhat to do
400A parameter isn't validThe error message names it; fix and retry.
401The key is missing, wrong, or revokedCheck the header; mint a fresh key on your My radar page if needed.
403Your plan doesn't include this endpointThe REST API is on the MCP plan.
404No filing with that accessionThe API covers operating-company raises, not funds.
429Over today's request budgetWait for Retry-After seconds, or spread calls out.

CSV export

Any filtered feed view exports as a CSV (same columns plus the verified website) straight from the feed's Download as a spreadsheet button (Max plan, up to 10,000 rows per export). The file carries extra columns: what each company's own job board showed, whether it sponsors work visas, and what federal contract work it has been paid for.

Those Max columns are flat summaries of the hiring, lca and awards objects above, one value to a cell so a spreadsheet can sort on them. A cell is empty where we have not observed that company. Never a 0:

ColumnWhat it holds
hiring_open_rolesOpen roles counted on the company's own public job board. Open roles, not people: repeats of the same role count once and contractor postings are left out, so the board itself can list more, and one role can cover several hires.
hiring_checked_atThe date we read that board. Past 45 days this is empty, and so is every other hiring column on the row.
hiring_oldest_req_daysDays the longest-open role has been up.
hiring_median_req_daysDays the middle role has been up.
hiring_recruiter_req_openWhether one of the open roles is a recruiter of their own.
hiring_zero_to_n_dateThe date a board we had seen empty first showed open roles.
lca_certified_4qCertified work-visa filings over the last four quarters of Department of Labor disclosure.
lca_perm_4qPermanent-residency filings over those same four quarters.
lca_top_roleThe occupation sponsored most often, as the disclosure names it.
lca_as_ofThe date that disclosure runs through. Past 180 days this is empty, and so is every other sponsorship column on the row.
awards_count_12mSeparate federal awards that saw money move over the past year. Awards, not hires: one award can run for years and cover no new people.
awards_usd_12mDollars the government committed on those awards. Money committed on contracts, never the company's revenue.
awards_latest_actionThe date money last moved on any of them.
awards_as_ofThe date that spending record runs through. Past 120 days this is empty, and so is every other federal contract column on the row. Empty means no matched award record, never that the company does no federal work.

The bulk list matcher

Send a CSV of company names (first column, up to 5,000 names; Max plan) and get a CSV back saying who on your list filed, when, and for how much, with a No row for everyone who didn't. Most people should skip scripting entirely and just upload the file on their My radar page; the how and the fine print live on the integrations page.

MCP: the no-code way in

The same data is available to AI assistants, so you can ask ChatGPT or Claude who filed in Texas this week mid-conversation and get real filings back. No code involved: you paste one link into your assistant's settings, following the steps on the integrations page. It is part of the MCP plan, at 1,000 calls a day, and the rows come back with the same hiring, lca and awards objects the REST API returns, so you can ask an assistant which of this week's companies are already hiring.