# US Market Events Scraper (FDA, SEC, Contracts, Insiders) (`claudethegoat/us-material-events-monitor`) Actor

Unified daily feed of FDA drug approvals (NDA/BLA only, no generics), SEC 8-K material-event filings, $1M+ federal contract awards from USAspending.gov, and Form 4 insider buy/sell transactions from OpenInsider. One normalized JSON schema across all four high-signal US public-data sources.

- **URL**: https://apify.com/claudethegoat/us-material-events-monitor.md
- **Developed by:** [Manik Anand](https://apify.com/claudethegoat) (community)
- **Categories:** Developer tools, Lead generation, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## US Material Events Monitor

Stop scraping four sources. This actor pulls FDA drug approvals, SEC 8-K filings, $1M+ federal contract awards, and Form 4 insider transactions every run — normalized into a single JSON schema, ready for whatever downstream pipeline you're feeding.

### What you get

Every event from every source comes out in the same shape:

```json
{
  "source": "fda" | "sec_8k" | "federal_contracts" | "insider",
  "source_id": "stable unique ID per record",
  "event_type": "FDA Approval" | "8-K Filing" | "Contract Award" | "Insider Buy" | "Insider Sell",
  "ticker": "TKR or null",
  "company": "Company Name",
  "event_date": "2026-05-22",
  "summary": "human-readable one-line",
  "url": "primary source URL",
  "amount_usd": 12500000.0,
  "raw": { "...source-specific fields..." }
}
````

`event_date` is the **truthful "this happened" date**:

- FDA — approval status date
- SEC 8-K — filing date
- Federal contracts — last-modified date (not the original contract start, which can be decades old)
- Insider — Form 4 filing date

`amount_usd` is populated for contract awards and insider transactions (price × quantity). FDA approvals and 8-K filings don't carry a dollar value.

### Sources

| Source | What it covers | Notes |
|---|---|---|
| **openFDA** | NDA + BLA drug approvals (status AP, ORIG submissions + EFFICACY supplements) | Skips ANDA generics and routine housekeeping submissions — the noise that drowns out actual approvals. |
| **SEC EDGAR** | 8-K filings (material events, leadership changes, M\&A, bankruptcy, going concerns) | Pulled from EDGAR's full-text-search endpoint. |
| **USAspending.gov** | Federal contract awards above your `$` threshold | Filtered by Action Date so you get contracts with **recent activity**, not just those whose period of performance started this week. Default threshold $1M; configurable up. |
| **OpenInsider** | Form 4 insider buy/sell transactions ≥ $25k | Both purchases and sales pulled. |

### Inputs

| Field | Default | Notes |
|---|---|---|
| `sources` | all four | Subset by name: `fda`, `sec_8k`, `federal_contracts`, `insider_trades` |
| `lookback_days` | 7 | 1–30. Window applied client-side; the larger you go, the more you'll be billed (PPR). |
| `tickers` | `[]` | Optional symbol whitelist. Empty = no filter. |
| `keywords` | `[]` | Optional case-insensitive substring filter applied to `summary` + `company` + `event_type`. Empty = no filter. |
| `min_contract_usd` | `1000000` | Federal-contracts only — minimum award value. |
| `max_results_per_source` | `100` | Hard cap. Use this to control PPR cost. |

### Use cases

- Daily monitoring digests for BD and competitive intelligence teams
- Sales-trigger pipelines for healthcare, biotech, defense CRMs
- Federal-contracts lead generation for GovCon vendors
- News-desk feeds for journalists covering biotech, defense, or financial markets
- Custom GPT grounding via tool-call
- Zapier / Make / n8n workflow inputs

### What this actor is NOT

- **Investment advice.** This is a data pipe. Trade decisions are yours.
- **Real-time.** Pull-based, not push. Schedule it hourly or daily; you won't see filings within the first 30 seconds.
- **Non-US.** All four sources are US public-data only.
- **A guarantee of completeness.** Each source has its own coverage gaps. OpenInsider lags Form 4 filings by ~30 min. EDGAR full-text-search lags the actual filing by a few minutes.

### Pricing

Pay-per-result. The first 50 results per month are free for every user. After that, you pay only for the events the actor actually returns — your `tickers` / `keywords` / `min_contract_usd` filters lower the bill, not raise it.

### Example: pull everything in the last 3 days, only biotech

```json
{
  "sources": ["fda", "sec_8k", "insider_trades"],
  "lookback_days": 3,
  "keywords": ["pharma", "biotech", "therapeutics", "FDA"],
  "max_results_per_source": 50
}
```

### Schedule it

Apify's built-in scheduler runs this actor on whatever cron you want. Hook the dataset to a Zapier/Make webhook or pipe directly into your Postgres / Supabase / Slack via Apify integrations. No additional code on your side.

### Caveats and known gotchas

- **FDA submission\_status\_date can lag the public press release by 1-2 business days.** If you're scraping for media coverage, you'll usually see the press release before this actor sees the approval.
- **EDGAR 8-K filings include routine items.** If you only care about M\&A and going-concerns, filter on `keywords: ["acquisition", "going concern", "departure", "Item 5.02", "Item 1.01", ...]`.
- **OpenInsider scraping** depends on their HTML staying stable. They've been stable since 2009, but if their layout changes, this actor will return zero insider events until I push a parser fix. File a Store issue and I'll patch within 48 hrs.
- **Tickers on 8-K filings are sometimes missing** when the filer is a holding company with no equity ticker, or when multiple share classes are listed.

### Support

Found a bug? Hit an edge case? File an issue on the actor's Apify Store page. Patch turnaround target: 48 hrs for parser breaks, longer for new features.

# Actor input Schema

## `sources` (type: `array`):

Which data sources to scan. Default: all four.

## `lookback_days` (type: `integer`):

How many days back to scan (1-30).

## `tickers` (type: `array`):

Optional list of ticker symbols to filter results to. Empty = no filter.

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

Optional list of case-insensitive keywords. Events matching any keyword in title/summary/event\_type are kept. Empty = no filter.

## `min_contract_usd` (type: `integer`):

For federal\_contracts source only — minimum award value to include.

## `max_results_per_source` (type: `integer`):

Cap results per source (helps control cost on Pay Per Result pricing).

## Actor input object example

```json
{
  "sources": [
    "fda",
    "sec_8k",
    "federal_contracts",
    "insider_trades"
  ],
  "lookback_days": 7,
  "tickers": [],
  "keywords": [],
  "min_contract_usd": 1000000,
  "max_results_per_source": 100
}
```

# 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("claudethegoat/us-material-events-monitor").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("claudethegoat/us-material-events-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 claudethegoat/us-material-events-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=claudethegoat/us-material-events-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "US Market Events Scraper (FDA, SEC, Contracts, Insiders)",
        "description": "Unified daily feed of FDA drug approvals (NDA/BLA only, no generics), SEC 8-K material-event filings, $1M+ federal contract awards from USAspending.gov, and Form 4 insider buy/sell transactions from OpenInsider. One normalized JSON schema across all four high-signal US public-data sources.",
        "version": "0.1",
        "x-build-id": "Xmn0BkMvgRnlyy8aT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/claudethegoat~us-material-events-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-claudethegoat-us-material-events-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/claudethegoat~us-material-events-monitor/runs": {
            "post": {
                "operationId": "runs-sync-claudethegoat-us-material-events-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/claudethegoat~us-material-events-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-claudethegoat-us-material-events-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "sources": {
                        "title": "Sources",
                        "type": "array",
                        "description": "Which data sources to scan. Default: all four.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "fda",
                                "sec_8k",
                                "federal_contracts",
                                "insider_trades"
                            ],
                            "enumTitles": [
                                "openFDA drug approvals",
                                "SEC 8-K filings",
                                "Federal contract awards",
                                "Insider Form 4 transactions"
                            ]
                        },
                        "default": [
                            "fda",
                            "sec_8k",
                            "federal_contracts",
                            "insider_trades"
                        ]
                    },
                    "lookback_days": {
                        "title": "Lookback days",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "How many days back to scan (1-30).",
                        "default": 7
                    },
                    "tickers": {
                        "title": "Ticker filter (optional)",
                        "type": "array",
                        "description": "Optional list of ticker symbols to filter results to. Empty = no filter.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "keywords": {
                        "title": "Keyword filter (optional)",
                        "type": "array",
                        "description": "Optional list of case-insensitive keywords. Events matching any keyword in title/summary/event_type are kept. Empty = no filter.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "min_contract_usd": {
                        "title": "Minimum contract value (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "For federal_contracts source only — minimum award value to include.",
                        "default": 1000000
                    },
                    "max_results_per_source": {
                        "title": "Max results per source",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap results per source (helps control cost on Pay Per Result pricing).",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
