Skip to content
/api/insiders/bulk/form-{form_type}/index.json

List the monthly bulk files for a form type (3, 4, or 5): one row per calendar month that has, or had, filings of this form type, newest month first, from the month list the platform refreshes every night.

List the monthly bulk files for a form type (3, 4, or 5): one row per calendar month that has, or had, filings of this form type, newest month first, from the month list the platform refreshes every night. Each row gives the file's status (`available` = built and ready to download, `pending` = not built yet), its size, when it was last built, the month's filing count, and its download path. Requires your API key, like every insider route.

25 tokensSince v3.14.0

Why use this

The entry point for every bulk download: read this list first, then download each `available` month from its `url` with GET /api/insiders/bulk/form-{form_type}/{year}/{filename}. A `pending` month has no file yet, and its download returns 404 until the file is built. Every night the platform rebuilds the current month, the previous month during the first five days of a new month (so filings from a month's last day are included), and any month that gained, lost or replaced a filing since its last build (a new filing, an amendment that supersedes one, or a change in the month's number of filings); a correction to a filing's details that changes none of these is included the next time its month is rebuilt. Compare a row's `updatedAt` with your last download to decide whether to fetch the month again. Filing counts are as of that nightly refresh.

Common use case

A nightly mirror job that downloads every month marked `available` and skips months still `pending`.

Returns one row per calendar month that has, or had, filings of this form type, newest month first, with each month's file status, from the month list the platform refreshes every night. Read it before downloading: available months download from their url via GET /api/insiders/bulk/form-{form_type}/{year}/{filename}; pending months are not built yet and return 404 until they are. Requires an API key; each call costs 25 tokens.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
form_typepathrequired——SEC insider-trading form type: `3` (initial statement of beneficial ownership), `4` (statement of changes, one per transaction report; the highest volume), or `5` (annual statement). Any other value returns 400.4

Response schema

FieldTypeNullableDescription
[]arraynoBare JSON array (not wrapped in a `data`/`status` envelope): one row per calendar month that has, or had, at least one filing of this form type, newest month first. A month whose filings were all superseded or moved keeps its row, with `recordCount` 0 and an empty file.
[].keystringnoThe file's path within the form type, `{YYYY}/{YYYY}-{MM}.jsonl.gz` (for example `2025/2025-09.jsonl.gz`). Its last part is the `filename` for the download route.
[].yearintegernoCalendar year of the month the file covers.
[].monthintegernoCalendar month (1-12) the file covers. Filings are grouped by their filing timestamp.
[].updatedAtstringyesWhen the file was last built, as an ISO-8601 server timestamp (UTC) without a timezone suffix. `null` while the month is `pending`.
[].sizeintegernoSize of the built file in bytes (gzip-compressed). `0` while the month is `pending`.
[].recordCountintegernoNumber of filings in the month (superseded filings excluded), as of the last nightly refresh. A file built earlier can hold fewer filings than this count until its next build.
[].urlstringnoThe month's download path: `/api/insiders/bulk/form-{form_type}/{YYYY}/{YYYY}-{MM}.jsonl.gz`.
[].statusstringno`available` when the file is built and downloadable; `pending` when it is not built yet (its download returns 404).

Sample response

·
    • "key": "2025/2025-09.jsonl.gz"
    • "year": 2025
    • "month": 9
    • "updatedAt": "2025-10-01T06:12:40.118211"
    • "size": 4128000
    • "recordCount": 28432
    • "url": "/api/insiders/bulk/form-4/2025/2025-09.jsonl.gz"
    • "status": "available"
    }
    • "key": "2025/2025-08.jsonl.gz"
    • "year": 2025
    • "month": 8
    • "updatedAt": null
    • "size": 0
    • "recordCount": 30117
    • "url": "/api/insiders/bulk/form-4/2025/2025-08.jsonl.gz"
    • "status": "pending"
    }
]

Errors

StatusLabelDescription
400`form_type` is not 3, 4, or 5.
403Missing or invalid API key.
503The month list has not been written yet (only before the first nightly refresh after an installation); retry after the `Retry-After` seconds.

Code samples

curl "https://api.finradar.ai/api/insiders/bulk/form-4/index.json" \
  -H "X-API-Key: YOUR_API_KEY"

Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).

Try it

Related endpoints