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 want | Use | Plan | Where to start |
|---|---|---|---|
| A spreadsheet you can sort, share, or import anywhere | CSV export | Max | The feed's Download as a spreadsheet button. No setup. |
| To ask ChatGPT or Claude about new filings | MCP connector | MCP | Two steps on the integrations page. No code. |
| Filings flowing into your CRM, dashboard, or scripts | REST API | MCP | The three steps below. |
| To know who on an existing client list just filed | Bulk list matcher | Max | Upload 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
- Be on the MCP plan: it carries the REST API and the MCP connector both.
- 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. - 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:
| Field | What it holds | How to read it |
|---|---|---|
amount | The 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. |
sector | Our sector classification. | Carries a provenance label; see below. |
description | One line on what the company does. | Appears only when verified. |
website | The company's own site. | Appears only when verified. |
provenance | How sector and description were established. | "inferred" means classified from the Form D fields alone. "verified" means web-checked against the company's own site. |
url | The 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. |
hiring | What 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. |
lca | Work-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. |
awards | Federal 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.
| Param | Meaning | Example |
|---|---|---|
| state | comma-separated state codes (+ INTL for non-US) | state=TX,CA |
| sector | one sector key, the values in the feed's sector filter | sector=fintech |
| min_amount | minimum stated target, whole USD; excludes undisclosed raises | min_amount=5000000 |
| since / until | filed-date range, inclusive, YYYY-MM-DD | since=2026-06-01 |
| limit | rows per page, 1–500 (default 100) | limit=200 |
| cursor | the 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:
| Code | What it means | What to do |
|---|---|---|
400 | A parameter isn't valid | The error message names it; fix and retry. |
401 | The key is missing, wrong, or revoked | Check the header; mint a fresh key on your My radar page if needed. |
403 | Your plan doesn't include this endpoint | The REST API is on the MCP plan. |
404 | No filing with that accession | The API covers operating-company raises, not funds. |
429 | Over today's request budget | Wait 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:
| Column | What it holds |
|---|---|
hiring_open_roles | Open 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_at | The date we read that board. Past 45 days this is empty, and so is every other hiring column on the row. |
hiring_oldest_req_days | Days the longest-open role has been up. |
hiring_median_req_days | Days the middle role has been up. |
hiring_recruiter_req_open | Whether one of the open roles is a recruiter of their own. |
hiring_zero_to_n_date | The date a board we had seen empty first showed open roles. |
lca_certified_4q | Certified work-visa filings over the last four quarters of Department of Labor disclosure. |
lca_perm_4q | Permanent-residency filings over those same four quarters. |
lca_top_role | The occupation sponsored most often, as the disclosure names it. |
lca_as_of | The date that disclosure runs through. Past 180 days this is empty, and so is every other sponsorship column on the row. |
awards_count_12m | Separate 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_12m | Dollars the government committed on those awards. Money committed on contracts, never the company's revenue. |
awards_latest_action | The date money last moved on any of them. |
awards_as_of | The 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.