SEC Form D New Filings Feed: Reg D Private Placements
Pricing
$5.00 / 1,000 results
SEC Form D New Filings Feed: Reg D Private Placements
SEC Form D new filings from EDGAR at $0.005 per result. Delta feed: each run returns only filings not delivered before. Reg D private placements as JSON. Not affiliated with or endorsed by the SEC. Not investment, legal or financial advice; no guarantee of completeness or timeliness.
Pricing
$5.00 / 1,000 results
Rating
0.0
(0)
Developer
Augeo auto
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
SEC Form D New Filings Feed: Reg D Private Placements from EDGAR
This Actor delivers new SEC Form D and Form D/A filings from EDGAR (Regulation D private placements) as flat JSON, one item per filing, at $0.005 per result. It is a delta feed: each run delivers only the filings that earlier runs did not deliver, so a daily schedule gives you the new filings and nothing twice.
The data is sourced from SEC EDGAR public filings. This Actor is unofficial: it is not affiliated with or endorsed by the U.S. Securities and Exchange Commission.
Nothing here is investment, legal or financial advice. There is no guarantee of completeness or timeliness, and none that a value is correct: amounts and all other fields are passed through as the filer reported them. Check the filing on the SEC website (the filingUrl of each item) before you rely on it.
What you get
A company that sells securities in a private placement under Regulation D (Reg D) files a Form D notice with the SEC. Each item of this Actor is one such notice, with 20 fields: who the issuer is, where it is, its industry group, the exemptions it claims, how much it is offering, how much it has sold and to how many investors, and a link to the filing.
People use Form D data to follow private fundraising: startup funding rounds, real estate offerings and other private placements appear here when the issuer files its notice. Not every private raise is filed on Form D, and the amounts are the filer's own figures.
Rule 506(b) and Rule 506(c) offerings can be told apart in the output: federalExemptions holds the codes the filing states, 06b for Rule 506(b) and 06c for Rule 506(c). The Actor has no input filter by exemption; filter on that field in your own code.
Sample output item (synthetic example)
This item is a synthetic example. It is the item the Actor's offline fixture test expects for the test document tests/fixtures/form_d_amendment.txt (the constant EXPECTED_AMENDMENT in tests/run_fixtures.js), not a capture from a run on the Apify platform. The issuer, the CIK and the accession number are made up and only the layout follows a real Form D, so this filingUrl does not open a real filing. Items of a real run have the same 20 fields in the same order.
{"accessionNumber": "0009100004-26-000007","formType": "D/A","filedDate": "2026-10-02","issuerName": "Tallgrass Biotherapeutics Inc","cik": "9100004","entityType": "Corporation","stateOfIncorporation": "DELAWARE","issuerCity": "AUSTIN","issuerState": "TX","industryGroup": "Biotechnology","federalExemptions": ["06b"],"dateOfFirstSale": "2026-03-12","totalOfferingAmount": 15000000,"offeringAmountIndefinite": false,"totalAmountSold": 11250000,"totalRemaining": 3750000,"minimumInvestment": 50000,"numberOfInvestors": 31,"hasNonAccreditedInvestors": true,"filingUrl": "https://www.sec.gov/Archives/edgar/data/9100004/000910000426000007/0009100004-26-000007-index.htm"}
Input examples
No field is required. Copy one of these into the JSON input of the Actor, or set the same fields in the input form.
1. Daily scheduled run of new Form D filings
New notices only (no amendments), all states and industries. Save it as a task and put the task on a daily schedule (see "Run it on a schedule").
{"deltaMode": true,"includeAmendments": false,"maxResults": 500}
2. Filter by state and minimum offering amount
Issuers with an address in California or New York whose total offering amount is at least 1,000,000 US dollars. Filings with an indefinite amount are left out when minOfferingAmount is set.
{"states": ["CA", "NY"],"minOfferingAmount": 1000000,"deltaMode": true,"maxResults": 200}
3. Filter by industry group
Filings whose Form D industry group is Biotechnology, new notices and amendments.
{"industryGroups": ["Biotechnology"],"includeAmendments": true,"deltaMode": true,"maxResults": 100}
Run it on a schedule
Each scheduled run returns only the filings that are new since the previous run of the same task. With deltaMode on (the default) the Actor remembers which filings it delivered and which daily index it last read to the end, and the next run starts from there.
- Open the Actor in Apify Console, set your filters, leave
sinceDateempty anddeltaModeon, and save the input as a task. - In Schedules, create a schedule with the cron expression
0 6 * * *and the timezone UTC, and add the task to it. - Read the dataset of each run (Console, the Apify API, or an integration or webhook on the task). It holds only the filings that earlier runs of that task did not deliver.
Why 06:00 UTC: EDGAR publishes the daily index of a business day at about 10 p.m. US Eastern time, which is 02:00 or 03:00 UTC of the next day. A run at 06:00 UTC therefore finds the index of the previous business day. Any later hour works as well.
What the schedule does on each kind of day:
- First run: reads from yesterday (UTC), or the latest index of the 7 days before when none exists yet.
- Later runs: read from the day after the last daily index an earlier run finished, up to today.
sinceDatestays empty. - Saturday morning: reads Friday's index. Sunday and Monday mornings, and the morning after a US federal holiday: no new index, so the run ends with 0 items and 0 charges.
- After a pause of the schedule: the next run reads every day it missed, up to
maxResults; the run after that continues.
Set maxResults above the number of filings you expect per day with your filters. A run that stops at maxResults loses nothing: the rest is delivered by the next run.
Cost
$0.005 per result. One result is one filing delivered to the dataset. result is the only event this Actor charges and there is no start fee.
- A run with no new filings charges no
resultevent: it ends successfully with 0 items and 0 charges. - A filing skipped by delta mode, removed by a filter or without a readable XML document is not delivered and not charged.
- A run that fails, for example because the SEC answers HTTP 403 or 429, charges only for the items it had already delivered; nothing is charged for the error.
- A run with the default
maxResultsof 25 costs at most $0.125; a run of 100 filings costs at most $0.50; the hard maximum of 5000 filings costs at most $25.00. - If you set a maximum charge for the run, the Actor stops when it is reached.
The filings themselves are free to read on the SEC website. What you pay for here is the daily listing, the parsing into flat fields, the filters and the delta memory.
What it does
- Reads the folder listing of the EDGAR daily index to see which days have a form index.
- Reads the form index of each day in the window and keeps the rows whose form type is exactly
DorD/A. - For each of those filings, downloads one file, the filing's
primary_doc.xml, and reads the issuer and offering fields from it. - Applies your filters, writes one item per filing to the dataset and charges one
resultevent for it.
It uses no browser, no login and no API key. It contacts one host, www.sec.gov, directly, and only the two EDGAR archive folders named under "Data source".
Input
| Field | Type | Default | Description |
|---|---|---|---|
sinceDate | string, YYYY-MM-DD | yesterday (UTC); see below | Earliest filing date. 2009-01-01 or later, not in the future. |
maxResults | integer | 25 | Stop after this many filings. From 1 to 5000 (hard maximum per run). |
includeAmendments | boolean | true | Deliver amendments (D/A) as well as new notices (D). |
deltaMode | boolean | true | Deliver only filings that earlier runs with the same filters did not deliver. |
states | array of strings | all | Keep issuers whose address is in one of these states or countries, as the 2-character codes EDGAR uses (CA, NY, TX). |
industryGroups | array of strings | all | Keep filings whose Form D industry group equals one of these names, ignoring case (Biotechnology, Other Technology, Residential, Commercial, Oil and Gas). |
minOfferingAmount | integer | none | Keep filings whose total offering amount is at least this many US dollars. Filings with an indefinite amount are left out when this is set. |
contactEmail | string, optional | the operator's mailbox | Leave empty. Only if you want the SEC to reach you instead of the operator: your contact email for the SEC User-Agent. See "Contact email" below. |
All filters are combined with AND; several values inside states or industryGroups are combined with OR.
A run with no input
A run with an empty input, or with the prefilled form as it is, delivers at most 25 filings (at most $0.125): new notices and amendments, all states and industries, from the most recent daily index that EDGAR has published (see "Which days a run reads"). It sends the Actor's own User-Agent, so you do not have to type anything.
Contact email (contactEmail)
The SEC asks every automated client of EDGAR to say in its User-Agent who is making the requests and how to reach them. This Actor sends the same header with every request:
Augeo FormD Feed autoaugeo@gmail.com
That is the name of the Actor's operator and the operator's mailbox. It is a fixed value in the code (SEC_USER_AGENT in src/edgar.js) and needs no input.
contactEmail is optional. When you give one, your address takes the place of the operator's mailbox in that header, so the SEC would write to you about the requests of your runs. What happens to an address you give:
- It is sent only to
www.sec.gov, inside the User-Agent header of the requests of that run. - It is not written to the dataset, to the delta state or to the log, and the Actor's error messages do not repeat it.
- The field is marked as a secret input, so Apify stores it encrypted with the run's input.
- It is not part of the filters: it does not change which delta record a run uses.
A contactEmail that is not a usable address (not an email address, or a made-up one on a reserved domain) stops the run with a message that says so: no request is sent to the SEC and nothing is charged. Leave the field empty to use the operator's mailbox. The input form does not prefill this field.
Invalid input (a date that is not a real YYYY-MM-DD date, maxResults outside 1 to 5000, a state that is not a 2-character code, a negative amount, a contactEmail that is not a usable address) fails the run at once with a message naming the field. No request is sent and nothing is charged.
Which days a run reads
sinceDategiven: from that date to today.sinceDateempty, delta mode on, and an earlier run exists: from the day after the last daily index that an earlier run read to its end. A paused schedule catches up on its next run.sinceDateempty otherwise (a first run, or delta mode off): from yesterday (UTC). EDGAR publishes the index of a business day at about 10 p.m. US Eastern time, and none for weekends and US federal holidays. If no index exists yet from yesterday on, the run looks back over the 7 days before and reads the latest index among them, so a run on a Sunday, on a Monday or after a holiday returns the filings of the last business day.
Delta mode
With deltaMode on, the Actor keeps a small state record in a named key-value store of your Apify account, sec-form-d-feed-delta: the accession numbers it delivered (kept for 120 days after the filing date) and the last daily index it read to the end. The record is separate for each combination of includeAmendments, states, industryGroups and minOfferingAmount, so two saved tasks with different filters do not affect each other. sinceDate and maxResults do not change which record is used.
A run that stops at maxResults continues from the same day on its next run and skips what it already delivered. To start over, delete the key-value store sec-form-d-feed-delta in Apify Console, or turn deltaMode off for a run. With deltaMode off nothing is stored and every filing of the window is delivered on each run.
Output
One dataset item per filing. A field the filing does not state is null. The sample item near the top of this page shows all 20 fields.
| Field | Type | Description |
|---|---|---|
accessionNumber | string | EDGAR accession number. |
formType | string | D (new notice) or D/A (amendment), from the daily index. |
filedDate | string | Date of the daily index that lists the filing, YYYY-MM-DD. |
issuerName | string or null | Name of the primary issuer, as written in the filing. |
cik | string | SEC Central Index Key of the primary issuer, without leading zeros. |
entityType | string or null | Legal form, for example Limited Liability Company. |
stateOfIncorporation | string or null | Jurisdiction of incorporation or organization, as written (DELAWARE). |
issuerCity | string or null | City of the issuer's principal place of business. |
issuerState | string or null | State or country of that address, 2-character EDGAR code. |
industryGroup | string or null | Form D industry group. |
federalExemptions | array of strings | Exemption and exclusion codes as written in the filing (06b for Rule 506(b), 06c for Rule 506(c), 3C.1). |
dateOfFirstSale | string or null | YYYY-MM-DD; null when the first sale is yet to occur. |
totalOfferingAmount | number or null | US dollars; null when the amount is indefinite or not stated. |
offeringAmountIndefinite | boolean | true when the filing states the total offering amount as Indefinite. |
totalAmountSold | number or null | US dollars. |
totalRemaining | number or null | US dollars; null when indefinite. |
minimumInvestment | number or null | Minimum investment accepted from an outside investor, US dollars. |
numberOfInvestors | integer or null | Investors who have already invested. |
hasNonAccreditedInvestors | boolean or null | Whether securities were or may be sold to non-accredited investors. |
filingUrl | string | The filing's index page on the SEC website. |
Privacy: no related persons, no phone numbers
A Form D names executive officers, directors and promoters with their addresses, the recipients of sales compensation, the person who signed, and the issuer's phone number and street address. This Actor delivers none of them. Its parser reads only the issuer and offering sections of the document and builds each item from the 20 fields in the table above; the related persons list, the sales compensation list, the signature block and the further issuers of a filing are discarded while the document is read, and the phone number, street lines and postal code are never copied.
issuerName is the name of the entity that filed. In rare cases an entity's name contains a person's name (for example a company named after its founder); it is delivered as the filing states it.
Data source
- The EDGAR daily index,
https://www.sec.gov/Archives/edgar/daily-index/(the folder listing and the form index of each day). - The filing folders,
https://www.sec.gov/Archives/edgar/data/(oneprimary_doc.xmlper filing).
SEC rules for automated access are on the page "Accessing EDGAR Data": https://www.sec.gov/os/accessing-edgar-data. It asks clients to declare a User-Agent, to download only what they need and to stay under 10 requests per second. This Actor sends one request at a time with at least 250 ms between request starts (at most 4 per second), and names its operator and a contact email in the User-Agent of every request: Augeo FormD Feed autoaugeo@gmail.com, or your contactEmail in place of that mailbox when you give one (see "Contact email").
When EDGAR answers HTTP 403 or 429, it has blocked the client or wants it to slow down. The Actor does not try that request again: the run stops at once and fails with a message that names the status code, no further request is sent, and nothing is charged for the error. Filings delivered before it stay delivered and charged, and in delta mode the next run continues after them. Wait at least 10 minutes before you run again. Network errors and server errors (HTTP 500 and above) are retried, four attempts in all, with waits of 1, 2 and 4 seconds.
Coverage and limits
- Only filings that EDGAR lists with form type
DorD/Ain its daily form index. Filings made on paper before the electronic Form D (2008 to 2009) have no XML document and are not delivered. - Daily index lag: a filing appears only after EDGAR publishes the index of its day, at about 10 p.m. US Eastern time on business days. A filing accepted in the morning is delivered by a run that evening at the earliest, and no index is published for weekends and US federal holidays. This is a daily feed, not a live one.
- A filing with several issuers is delivered once, with the data of its primary issuer.
- Amounts are as reported by the filer.
totalOfferingAmount,totalAmountSold,totalRemainingandminimumInvestmentare the numbers written in the notice; the Actor does not correct, convert or cross-check them. Issuers make mistakes; amendments (D/A) restate the whole notice and are delivered as separate items. - No guarantee of completeness or timeliness: a filing whose XML document is missing (HTTP 404), is not an XML Form D or cannot be parsed is skipped. The run log names its accession number, nothing is charged for it and the run continues. In delta mode a skipped filing is not tried again once its day has been read to the end. EDGAR can also publish an index late.
- Download cap: a run may use 120 download units before its first result and 120 more for each result it has delivered, never more than 3000 (one unit per filing document, 4 per daily index). With filters that match few filings, a run can stop at that cap before reaching
maxResultsand says so in its status message; in delta mode the next run continues from the row where it stopped. With delta mode off nothing is remembered, so a run with narrow filters reads only the start of its window. - When EDGAR lists the daily index of a day but does not serve it (HTTP 404, another error, or an answer that is not an index), the run stops at that day and says so in its status message. The day is not counted as read: in delta mode the next run starts at that day again. If EDGAR never serves that index, set
sinceDateto the following day to move past it. filedDateis the date of the daily index that lists the filing.- Maximum 5000 filings per run.
What has been checked
As of 2026-10-05:
- The layout of the daily index folder listing, the row layout of the daily form index and the element names of a Form D
primary_doc.xmlwere read from live EDGAR files of 2026-09-30 to 2026-10-02, and the parser was written against them. - The repository holds two offline test scripts with synthetic fixtures (made-up issuers and people, EDGAR layout):
tests/test_edgar.jsfor the parser, the filters, the request throttle, the retries, the stop on HTTP 403 and 429, the delta skip and the weekend rule, andtests/run_fixtures.jsfor the output mapping of all 20 fields, the absence of related persons and phone numbers in the output, delta runs,maxResults, one charge per delivered item, the User-Agent of every simulated request, the size of a run with no input, the request rate, and a run that the SEC answers with HTTP 403 or 429. Both scripts use a fake EDGAR and send no request. tests/run_fixtures.jsalso holds one synthetic document for each of nine layout variants (a byte order mark with CRLF line endings, namespace prefixes and attributes, optional elements absent, several issuers with many related persons, a non-US issuer, a fund's net asset value range, several exemption codes, amounts with decimals, empty and self-closing elements) and checks all 20 output fields of each, plus filings whose document is cut off, malformed, an HTML page, empty or answered with HTTP 404: each is skipped with a log line and never charged. These documents are made up. They show what the parser does with those layouts as written in the test files, not that every real EDGAR document is read correctly.- The earlier version of this Actor, with 83 checks in
tests/run_fixtures.js, passed all of them in a sandbox run with node v20.20.2, and its mutation check (which mapsissuerStatefrom the wrong element on purpose) was caught. The checks added with the variants above had not been run when this page was written, so this page records no result for them yet. - This version has not yet been run on the Apify platform. Run time, memory use at 256 MB and the behaviour of EDGAR towards requests from Apify's servers are not measured. The only figures that exist are estimates in
tests/COST_CHECK.md, built on assumed download times and an assumed compute unit price: an estimated 26.5 seconds for a run that delivers 25 filings with no filters. That is an estimate, not a cloud measurement. This section will be replaced with observed behaviour after the first runs.
Problems and removal requests
Open an issue in the Issues tab of this Actor's page in the Apify Store. That tab is the only contact channel for this Actor.
How it was built
This Actor, including its code and this README, was built with AI assistance.