# SEC Form D Funding Signal Monitor (`wakuta/sec-form-d-signal`) Actor

Monitor new SEC Form D private-offering signals with offering amounts, industry, location, security type, and deduplicated paid delivery.

- **URL**: https://apify.com/wakuta/sec-form-d-signal.md
- **Developed by:** [SONAE SAFE](https://apify.com/wakuta) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 new form d signals

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SEC Form D Funding Signal Monitor

Monitor the SEC's official EDGAR feed and receive only **new Form D private-offering notices** that match your issuer keywords. Paid monitor results include the primary Form D XML fields needed for a first-pass funding-signal review.

This Actor is for developers, data teams, automation builders, investors, and sales-research workflows that need incremental SEC Form D signals without rebuilding monitoring, continuity, and deduplication logic.

### What one signal contains

- issuer name, CIK, filing date, form type, accession number, and original SEC URLs
- industry group, issuer location, and entity type
- total offering amount, amount sold, and remaining amount
- date of first sale and investor count
- federal exemptions and security types
- related-person names and disclosed roles
- amendment flag
- matched keywords, review status, limitations, and missing evidence

Form D is a notice of an exempt securities offering and **does not prove that a financing round has been completed**, that the stated amount was raised, or that issuer-supplied information was independently verified. Review the original SEC filing before making investment, sales, legal, or compliance decisions.

### Modes

#### `preview`

Returns at most three current matching Form D notices. Preview is free of the custom signal charge and does not expose diff state, delivery state, or monitoring history.

#### `monitor`

The first run creates a baseline. Later runs return only newly observed matching Form D notices. Schedule the same saved task to preserve the same keyword profile.

### Example input

```json
{
  "mode": "monitor",
  "keywords": ["artificial intelligence", "biotechnology"],
  "excludeKeywords": ["fund"],
  "includeAmendments": false,
  "maxSignalsPerRun": 5
}
```

Keywords are case-insensitive and match the issuer name and SEC feed summary. The Actor rejects non-Form-D entries even when the SEC `type=D` feed also contains forms whose names merely begin with the letter D.

### Example signal

```json
{
  "recordType": "form-d-signal",
  "signalKind": "EXEMPT_OFFERING_NOTICE",
  "issuerName": "Example Technology Inc.",
  "formType": "D",
  "accessionNumber": "0001234567-26-000001",
  "filedAt": "2026-08-27T01:02:03-04:00",
  "industryGroup": "Technology",
  "issuerLocation": {
    "city": "Austin",
    "stateOrCountry": "TX",
    "stateOrCountryDescription": "TEXAS",
    "jurisdictionOfIncorporation": "DELAWARE"
  },
  "entityType": "Corporation",
  "totalOfferingAmountUsd": 5000000,
  "totalAmountSoldUsd": 1250000,
  "remainingAmountUsd": 3750000,
  "dateOfFirstSale": "2026-08-01",
  "investorCount": 14,
  "federalExemptions": ["06b"],
  "securityTypes": ["Equity"],
  "amendment": false,
  "matchedKeywords": ["technology"],
  "recommendation": "REVIEW",
  "chargeEvent": "new-form-d-signal",
  "sourceUrl": "https://www.sec.gov/Archives/...-index.htm",
  "detailSourceUrl": "https://www.sec.gov/Archives/.../primary_doc.xml"
}
```

The example shows the normalized shape; values vary by filing and missing SEC fields remain `null` or empty.

### Scheduling example

1. Run `monitor` once to create the baseline.
2. Save the input as an Apify task.
3. Schedule that task at a conservative interval such as every 30–60 minutes.
4. Consume the default Dataset or the Actor output links from the API, integration, or MCP client.

Do not run the same keyword profile continuously. The Actor has no retry loop and deliberately stays far below the SEC's fair-access ceiling.

### Pricing

- `apify-actor-start`: **$0.00005 per run**
- `new-form-d-signal`: **$0.01 per newly observed, matched, enriched signal**
- `apify-default-dataset-item`: disabled

Baseline, no-match, gap, budget-limit, and diagnostic Dataset records do not trigger the custom signal event. The small start event covers baseline compute. Use Apify's maximum-cost-per-run control together with `maxSignalsPerRun` to cap spending.

### Continuity and delivery safety

- Normal runs start with one official SEC feed request.
- Selected preview or paid results add sequential primary Form D XML requests.
- If the 40-entry feed window no longer overlaps the previous state, the Actor checks at most four additional 40-entry pages.
- If no overlap is found within 200 entries, it returns `GAP_UNRECOVERED`, charges no signal, and preserves the prior state.
- A per-monitor Request Queue prevents concurrent runs from processing the same accession simultaneously.
- Delivery state is persisted as `DISCOVERED → CLAIMED → CHARGE_PENDING → CHARGED → DELIVERED`, with an internal Dataset-staging state.
- A deterministic idempotency key is derived from `monitorQueryHash + accessionNumber` for the charge request.
- If a process stops after a charge was attempted but before durable confirmation, the Actor does not retry that charge. It records `UNKNOWN_NOT_RETRIED` to prefer a possible missed charge over double charging.

### Source, attribution, and access policy

Source: U.S. Securities and Exchange Commission, EDGAR latest-filings Atom feed and primary Form D XML submissions.

This independent Actor is not an official SEC product and is not affiliated with, sponsored by, or endorsed by the U.S. Securities and Exchange Commission.

- fixed, contactable User-Agent
- proxy disabled
- no IP rotation
- no automatic retry on HTTP 403 or 429
- sequential requests with a conservative delay
- bounded recovery only when continuity is lost
- no external enrichment API, LLM, news source, CRM, email, or Slack integration

### Known limitations

- The latest-filings feed is a rolling window, not a guaranteed complete historical database.
- Bounded recovery can still return `GAP_UNRECOVERED`; the Actor will not silently create a new baseline in that condition.
- Form D values are issuer supplied and can be amended.
- Related persons are limited to names and disclosed roles; addresses and contact details are intentionally omitted.
- A rare crash during the charge-confirmation boundary may produce a delivered signal whose final charge status is unknown. The Actor will not charge it again automatically.

### MCP and automation

The Actor uses a structured input schema, structured Dataset records, limited permissions, and direct output links, so it can be invoked from Apify API clients, tasks, schedules, integrations, and MCP-compatible agent workflows. Human review remains required.

Store keywords: `SEC`, `EDGAR`, `Form D`, `fundraising signal`, `private offering`, `private capital`, `funding monitor`, `investment research`, `sales intelligence`.

# Actor input Schema

## `mode` (type: `string`):

Preview never changes monitor state. Monitor establishes a free baseline on its first run, then returns only new matches.

## `keywords` (type: `array`):

Case-insensitive terms matched against the issuer name and feed summary. At least one keyword is required.

## `excludeKeywords` (type: `array`):

Optional terms that remove a notice from results.

## `includeAmendments` (type: `boolean`):

When disabled, Form D/A amendment notices are omitted.

## `maxSignalsPerRun` (type: `integer`):

Hard cap for paid monitor signals. Free preview always returns at most 3 records.

## Actor input object example

```json
{
  "mode": "preview",
  "keywords": [
    "fund"
  ],
  "excludeKeywords": [],
  "includeAmendments": false,
  "maxSignalsPerRun": 1
}
```

# Actor output Schema

## `results` (type: `string`):

Preview, baseline, status, or matched new-filing records.

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("wakuta/sec-form-d-signal").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("wakuta/sec-form-d-signal").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call wakuta/sec-form-d-signal --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wakuta/sec-form-d-signal"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9gNo6evV0NqmIUd3u/builds/y2HpSAgUssA3ENNTU/openapi.json
