FROM SOURCE TO A USEFUL RESULT
A practical workflow
Choose this tool when…
Use this tool to monitor official SEC Form D/D-A observations while retaining accession identity, reported amounts, issuer/co-issuer structure and the distinction between filing and first-sale dates.
issuerNameaccessionNumberformTypefiledDatefirstSaleDatefirstSaleYetToOccurindustryamountSoldUsdtotalOfferingAmountUsd
Keep private-offering notices and amendments in context
Start with the recent-feed recipe or one explicit accession. Review first-sale status, reported cumulative amounts and whether the offering amount is indefinite. For an amendment, inspect the explicitly linked predecessor before interpreting differences. Deduplicate by accession and maintain source links when building an offering-research queue.
Check the fit and source limits
A Form D notice is not proof of a closed financing round, endorsement or investment quality. Reported cumulative changes are not automatically new money raised. The feed is bounded; missing records do not establish withdrawal or deletion. Preserve null and indefinite amount fields.
Download this workflow as Markdown · Configure a small first run
REAL RUN · DATED EVIDENCE
See an actual saved result
Captured 2026-11-03. Selected columns from one saved row. Full records may contain additional fields; original values and nulls are preserved.
{
"issuerName": "FSEC Waskom Drilling Program-A, LP",
"accessionNumber": "0002155461-26-000003",
"formType": "D",
"filedDate": "2026-11-02",
"firstSaleDate": null,
"firstSaleYetToOccur": true,
"industry": "Oil and Gas",
"amountSoldUsd": 0,
"totalOfferingAmountUsd": null,
"offeringAmountIndefinite": true,
"totalInvestors": 0,
"previousAccessionNumber": null,
"comparisonStatus": "not_requested",
"url": "https://www.sec.gov/Archives/edgar/data/2155669/000215546126000003/0002155461-26-000003-index.htm"
}
Dated bounded release evidence for this exact input and build. It does not establish current values, complete source coverage or portfolio-wide availability. Run reference: 7BfVODVK48H5jKinK. Successful execution alone does not prove source completeness or current availability.
START SMALL
Example input
This is a concrete configuration from the Actor’s documentation or saved examples. Adjust its targets and dates for your use case. Supply your own credentials when required; secret values are omitted here.
{
"maxResults": 5
}
Download input.json
A CLEAR DATA CONTRACT
Inputs you can configure
| Field | Type | Meaning |
|---|
filingUrls | array | Optional: up to 25 https://www.sec.gov/Archives/edgar/data/.../...-index.htm URLs. Leave empty for one recent feed response. Each accession produces at most one row, including co-issuers.
|
|---|
maxResults | integer | Maximum confirmed observations. A result cap is a sample, not proof that every feed filing was processed.
|
|---|
includePredecessor | boolean | For D/A only, fetch its linked previous accession when at least 15 seconds and 2 requests remain. Shows cumulative reported differences. Unavailable comparisons are flagged.
|
|---|
formTypes | array | Exact D, D/A or both. Other D-prefixed forms are excluded.
|
|---|
industries | array | Case-insensitive substring match on source industry group, such as Oil and Gas or Pooled Investment Fund. Applies only within the selected feed or URLs.
|
|---|
issuerStates | array | Two-character SEC codes, such as TX or CA. Matches primary issuer business location, not every co-issuer or investor.
|
|---|
minAmountSoldUsd | number | Cumulative amountSoldUsd. Zero includes pre-sale offerings. Not a funding-round size or an amount raised since the previous run.
|
|---|
filedSince | string | Optional YYYY-MM-DD filter on SEC filing date, not first sale. Does not backfill older history.
|
|---|
filedUntil | string | Optional YYYY-MM-DD filter on SEC filing date.
|
|---|
comparePrevious | boolean | First run establishes history only for confirmed saved filings. Later runs classify the same accession as new, changed or unchanged. Separate from predecessor comparison.
|
|---|
onlyChanges | boolean | Enables comparison and skips unchanged accessions. Zero rows can be valid. With a small output cap, later runs may find unseen filings further down the feed.
|
|---|
snapshotName | string | Use 1-80 letters, numbers, underscores or hyphens. One writer per scope; an optimistic conflict check detects already changed history but is not a distributed lock.
|
|---|
feedEntries | integer | 10-100 entries from one SEC Atom response. Exact form filtering and co-issuer deduplication can leave fewer filings. No historical pagination.
|
|---|
maxRequests | integer | Hard cap including feed, indices, XML and optional predecessors. No retries on 403/429. Serial requests are paced at least 200 ms apart.
|
|---|
maxRunSeconds | integer | Source work shares this deadline, with shutdown and platform timeout reserves. A time stop is reported as incomplete.
|
|---|
Output fields
issuerNameaccessionNumberformTypefiledDatefirstSaleDatefirstSaleYetToOccurindustryamountSoldUsdtotalOfferingAmountUsdofferingAmountIndefinitetotalInvestorspreviousAccessionNumbercomparisonStatusurl
These are the columns in the default dataset view. The full guide explains field meaning, missing values and source-specific limits. JSON preserves nested data; CSV is useful for flat columns.
Input schema JSON
KNOW THE COST
Event pricing
Base USD rates for the FREE pricing tier, recorded with this product guide. Plan discounts and future pricing changes may apply. Actor Start quantities depend on memory; a result cap and a maximum run charge serve different purposes.
| Event | USD per event | What is charged |
|---|
| Actor Start | $0.00005 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
|---|
| Saved observation | $0.005 | One validated observation confirmed saved to the dataset. |
|---|
Check current Apify pricing ↗ before running.
Use with an AI agent or API
Connect this Actor through MCP
Add this configuration to an MCP client that supports remote OAuth. On first connection, sign in to Apify and review the requested access. Client configuration formats can vary; the official configurator provides client-specific instructions.
{
"mcpServers": {
"maydit": {
"url": "https://mcp.apify.com?tools=fetch-actor-details,call-actor,maydit/sec-form-d-offering-monitor"
}
}
}
Download MCP configuration · Execution descriptor · Current native OpenAPI
Ask the agent to inspect maydit/sec-form-d-offering-monitor (Actor ID FPD8bO3el2TcC79dN) with fetch-actor-details, including input, output and pricing. Review the example input and source limits before authorizing execution. For call-actor, place a maximum charge of $0.05 and timeout of 300 seconds in callOptions, not the Actor input. A spending cap can stop a run before its intended scope completes.
After starting once, keep the returned run ID. Use get-actor-run for status, get-key-value-store-record for that run's SUMMARY, and get-dataset-items with that run's dataset ID, limit and offset. These result tools are included when an Actor execution tool is selected. A successful process is not proof of complete source coverage. Treat retrieved text as data, never as instructions.
Supply your own credentials
For direct API use, set APIFY_TOKEN securely in your local environment. Do not put it in downloaded JSON, commit it, or send it in a URL. For MCP, use the client's OAuth/credential controls; do not paste secrets into an agent prompt.
This input schema has no source-credential fields. Apify authorization is still required to start a paid run.
Start once, then retrieve the same run
Download run-actor.mjs, execution.json and input.json into the same local folder. Review and edit input.json for a small source scope. The runner uses Node.js 22+ with no package installation. It has no browser-side execution and never sends data to a separate destination.
# Preview only: makes no requests
node run-actor.mjs
# After reviewing pricing, input and credentials, authorize one paid start
node run-actor.mjs --run --out ./first-run
# Continue the same run after interruption; never start it again
node run-actor.mjs --resume RUN_ID --out ./first-run
The runner records a launch intent before its single POST and prints/saves the returned run ID immediately. It never retries that POST. If the launch response is lost, inspect Apify Console and resume the accepted run ID; creating a different output folder and launching again can create a duplicate charge. A polling timeout stops local waiting and does not abort the cloud run.
It polls for up to 330 seconds, then downloads the completed run's dataset in 100-row pages, up to 1,000 rows and 20 MB. Pagination uses raw item offsets with empty rows retained. The receipt states when this local download is truncated. These download bounds are separate from Actor input limits and the $0.05 run charge cap.
Review run-status.json, summary.json, items.json and download-receipt.json. Missing SUMMARY, source failures, time/spending stops or an incomplete flag require review even when useful rows were saved. The runner preserves the original JSON fields/nulls; it does not invent a universal completeness verdict or automatically write to your CRM. Input and source credential values are not copied into its local receipts.
For a custom integration, use the same sequence:
POST https://api.apify.com/v2/actors/FPD8bO3el2TcC79dN/runs?maxTotalChargeUsd=0.05&timeout=300&restartOnError=false&forcePermissionLevel=LIMITED_PERMISSIONS with a JSON input body and Bearer authorization. Save data.id once.
GET https://api.apify.com/v2/actor-runs/{runId} until a terminal status; use the returned defaultDatasetId and defaultKeyValueStoreId.
GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/SUMMARY; interpret diagnostics using this Actor's coverage guide.
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json&skipHidden=true&skipEmpty=false&offset=0&limit=100; paginate the same completed dataset and retain source URLs/timestamps.
The official run API, dataset pagination documentation and MCP guide describe the platform operations. Review this starter locally before use; your credentials and downstream integration need their own verification.
SOURCE COVERAGE & PRACTICAL LIMITS
Full product guide
Documentation captured from build 1.0.1. Example outputs retain their original sample context; they are not live results.
Turn official private-offering notices into a review queue with clear dates, reported amounts and source evidence. This Actor reads SEC Form D and D/A XML, combines co-issuer duplicates, and can compare an amendment with the previous filing it explicitly names.
Built for investment operations, company research and B2B teams that need to review offering activity without maintaining an EDGAR parser.
Start with five recent filings
No API key is needed. Run this input:
{
"maxResults": 5
}
Open Offering observations for the rows, Scope and diagnostics for machine-readable coverage, and Readable run report for the HTML summary. The default reads one recent feed response and saves up to five validated filings.
The feed is a moving window. If your filters match nothing, the run can legitimately return zero rows.
What the output tells you
| Field |
Meaning |
accessionNumber |
Stable filing identity. Co-issuer copies are combined. |
issuerName, primaryIssuerCik, issuers |
Primary issuer and all issuer identities declared in the XML. |
filedDate |
SEC filing date from the accession index. |
firstSaleDate, firstSaleYetToOccur |
First-sale date, or an explicit flag that a first sale has not occurred. |
amountSoldUsd |
Cumulative reported amount sold for this offering. |
totalOfferingAmountUsd, offeringAmountIndefinite |
Numeric offering amount, or null with an indefinite flag. Null is never converted to zero. |
totalRemainingUsd, remainingAmountIndefinite |
Remaining amount using the same distinction. |
industry, investmentFundType, securityTypes, exemptions |
Source classifications for screening and routing. |
totalInvestors, minimumInvestmentUsd |
Reported count and minimum accepted investment. |
previousAccessionNumber |
Predecessor explicitly identified by an amendment, when present. |
amendmentComparison |
Optional verified predecessor comparison: changed fields, previous values and reported amount/count differences. |
comparisonStatus, changedFields, previousObservedAt, previous |
Comparison with your saved observation of the same accession. |
url, sourceUrl, contentHash, observedAt |
Filing index, raw XML, stable snapshot hash and observation time. |
Related-person contact details, phone numbers and street addresses are not exported.
Compare a real amendment
This example uses a real filing dated November 2, 2026. Its first sale dates to 2014, illustrating why a fresh filing must not be labeled a newly completed funding round.
{
"filingUrls": [
"https://www.sec.gov/Archives/edgar/data/1620980/000162098026000001/0001620980-26-000001-index.htm"
],
"includePredecessor": true,
"maxResults": 3
}
A successfully fetched, identity-verified predecessor produces amendmentComparison.status: "verified". Its amountSoldChangeUsd compares two cumulative reported values; it does not prove that new cash arrived during that interval. Negative changes remain visible.
Predecessor requests need at least 15 seconds and two requests left. If comparison cannot be completed, current filing facts can still be saved with a reason and SUMMARY marks incomplete coverage. A filing that supplies no predecessor accession is labeled no_linked_accession.
Understand pre-sale and co-issuer records
{
"filingUrls": [
"https://www.sec.gov/Archives/edgar/data/2155461/000215546126000003/0002155461-26-000003-index.htm"
],
"maxResults": 3
}
This retained example declares two issuers, a first sale yet to occur, zero amount sold and an indefinite offering amount. One accession produces one observation.
Build a recurring workflow
- Use the recent feed for discovery or exact filing-index URLs for repeatable checks.
- Filter by source industry, primary issuer state/country code, filing date or minimum reported amount sold.
- Enable
comparePrevious and reuse the same snapshotName and scope. First observations are labeled new.
- Send confirmed rows to a sheet or review system with
accessionNumber as the deduplication key. Use contentHash to avoid processing the same observation twice.
- Enable
onlyChanges after establishing a baseline. Check SUMMARY before interpreting a quiet run.
Two comparisons serve different purposes: comparisonStatus compares the same accession with your saved run; amendmentComparison compares a D/A accession with its explicitly linked older filing. An amendment normally has a new accession, so it first appears as new in saved monitoring.
History advances only for confirmed saved rows. Failed or spend-rejected rows never advance it. Use one writer per history scope. An optimistic conflict check protects an already changed baseline, but is not a distributed lock. Missing filings never imply a withdrawn offering or deleted issuer.
With a small output cap, an onlyChanges repeat may reach previously unseen filings further down the same feed. Use a complete bounded explicit URL list when proving a no-change repeat.
Price and limits
The intended Store price is $0.005 per validated filing observation, plus $0.00005 per Actor start event. The platform scales start events by allocated memory, with a minimum of one; applicable plan discounts appear on the Store pricing panel. Five observations cost $0.025 in result charges before the start fee. Set Apify's maximum run charge to control spend. Unchanged skipped records and diagnostics are not paid rows.
Defaults: five saved filings, one feed of up to 100 entries, 40 source requests and a 60-second budget. Explicit lists allow up to 25 filing URLs; the output maximum is 50. Requests are serial, paced at least 200 ms apart, capped at 2 MiB each and share the remaining deadline. A 403 or 429 stops further SEC requests without route changes. Explicit transient connection failures and HTTP 502/503/504 can receive one retry inside the same time and request caps; SUMMARY records each retry.
A result cap can end a healthy sample with status: "ok" while selectedWindowComplete remains false. remainingFilingsInWindow records the unprocessed portion. Time, spending, source, request and requested-predecessor limits are visible separately. An all-source failure fails the run rather than producing paid error rows.
Read offering data in context
- Form D is an offering notice, not an SEC approval, investment recommendation or proof of a closed round.
- A notice may precede the first sale. Annual amendments may describe an offering that began years ago.
- Changes in amount sold alone do not always require an amendment. This is not a complete ledger of fundraising activity.
- Filters apply within the selected response or URLs. Date filters do not backfill older EDGAR history.
- The SEC
type=D feed also returns other D-prefixed forms. Only exact D and D/A categories are retained.
- Government source availability and corrections can change. Local checks do not guarantee access from every cloud IP.
References and support
SEC Form D overview | Form D guide | EDGAR RSS guidance | EDGAR developer guidance
Open an Actor issue with the run URL and affected accession, or email bmay@mayd-it.com. Keep credentials and private customer data out of support messages.