# Biopharma SEC 8 K Event Stream (`seaf999ield/biopharma-sec-event-stream`) Actor

Pharma and biotech 8 K and 6 K filings from SEC EDGAR with their EX 99 press releases, classified into FDA approval, CRL, PDUFA date, topline data, deal, offering and other events, with ticker, company and key number. Data only, not investment advice.

- **URL**: https://apify.com/seaf999ield/biopharma-sec-event-stream.md
- **Developed by:** [RustonRoad](https://apify.com/seaf999ield) (community)
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 sec events

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Biopharma SEC 8 K Event Stream: FDA Approvals, CRLs, PDUFA, Topline Data, Deals & Offerings

**A clean event feed of pharma and biotech 8 K and 6 K filings from SEC EDGAR.** Each filing's **EX 99 press release** is read and classified into an event type (**FDA approval, complete response letter (CRL), PDUFA date, topline data, deal, offering or other**), with the **ticker, company, filing date and key number** (PDUFA date, offering size, upfront payment, p value). Official SEC data, no login, no API key. **Data and events only, not investment advice.**

| Event type | Examples | Key number |
|---|---|---|
| ❌ **crl** | Complete response letter received | n/a |
| ✅ **approval** | FDA / EC / MHRA approval, CHMP positive opinion | n/a |
| 📅 **pdufa** | PDUFA target action date, NDA/BLA accepted, priority review, advisory committee | PDUFA / AdCom date |
| 📈 **topline** | Topline results, primary endpoint met or missed | p value or effect size |
| 🤝 **deal** | M\&A, licensing, collaboration, royalty deals | Upfront, total value or price per share |
| 💵 **offering** | Public offering, PIPE, registered direct, ATM, convertible notes | Gross proceeds / offering size |
| 📄 **other** | Earnings, designations, clinical holds, leadership, listing notices, governance | n/a |

### What it does

- Lists every **8 K and 6 K** in your date range from SEC EDGAR full text search
- Keeps filers with pharma and biotech **SIC codes** (2833, 2834, 2835, 2836, 8731 by default; medical devices optional)
- Opens each filing index, reads the attached **EX 99 press releases** and the filing itself
- Classifies the event (priority: CRL > approval > PDUFA > topline > deal > offering > other) and lists all event types it found
- Extracts the **key number**, a headline and the sentence that triggered the classification
- Gives you links to the filing index, the primary document and every EX 99 exhibit

### Who uses it

- **Biotech traders and analysts:** a morning list of catalysts filed overnight, with ticker and key number.
- **Newsletter writers and journalists:** every approval, CRL, readout and deal from the official filings.
- **Fintech and data teams:** a structured biopharma event feed for alerts, dashboards and models.
- **BD and competitive intelligence:** licensing deals and upfront payments as they're filed.

### Input

| Field | Example | Notes |
|---|---|---|
| Days back | `3` | Or set Date from / Date to |
| Event types | `["approval", "crl", "topline"]` | Empty = all |
| Include 'other' | `true` | Earnings, governance, conferences… |
| Tickers | `["GSK", "AZN"]` | Empty = all biopharma filers |
| SIC codes | `["2834", "2836", "8731"]` | |
| Add medical devices | `false` | Adds 3841, 3842, 3845, 8071 |
| Forms | `["8-K", "6-K"]` | |
| Max events | `200` | Newest filings first |
| Contact email | `you@example.com` | Optional: replaces the default contact in the SEC User Agent |

**Example: catalysts from the last 24 hours, no noise**

```json
{ "daysBack": 1, "eventTypes": ["crl", "approval", "pdufa", "topline", "deal", "offering"] }
```

**Example: everything a watchlist filed this month**

```json
{ "dateFrom": "2026-10-01", "tickers": ["GSK", "AZN", "BNTX", "ARGX"] }
```

### Output

```json
{
  "ticker": "HCM",
  "company": "HUTCHMED (China) Ltd",
  "form": "6-K",
  "filedDate": "2026-10-21",
  "eventType": "deal",
  "eventSubtype": "licensing-collaboration",
  "allEventTypes": ["deal"],
  "keyNumber": "$110.0M",
  "keyNumberLabel": "Upfront payment",
  "headline": "HUTCHMED Announces Closing of KRAS-EGFR-Antibody Conjugate Therapy License to GSK Outside China",
  "snippet": "HUTCHMED Announces Closing of KRAS-EGFR-Antibody Conjugate Therapy License to GSK Outside China…",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/1648257/000164825726000066/0001648257-26-000066-index.htm",
  "exhibits": [{ "type": "EX-99.1", "url": "https://www.sec.gov/Archives/edgar/data/1648257/…" }],
  "source": "SEC EDGAR",
  "disclaimer": "Data and events from public SEC filings only. Not investment advice."
}
```

Other fields: `tickers`, `cik`, `items` and `itemDescriptions` (8 K item codes), `sic`, `keyNumberUnit`, `primaryDocumentUrl`, `accessionNumber`, `location`. A `RUN_SUMMARY` record has the counts per event type and the number of SEC requests.

### Cost

You pay one event per **classified filing** in the output. A daily run over all biopharma filers is typically 20 to 60 events. See the Pricing tab for current prices.

### API

```bash
curl -X POST "https://api.apify.com/v2/acts/seaf999ield~biopharma-sec-event-stream/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" -d '{"daysBack":1,"eventTypes":["approval","crl","topline"]}'
```

Schedule it every weekday morning and send new events to Slack, Sheets or a webhook.

### Is it legal?

Yes. SEC EDGAR filings are public US government records. The actor follows the **SEC fair access policy**: it declares a User Agent with contact details (the actor maintainer's contact email by default; set `contactEmail` to use your own), stays well under 10 requests per second (about 6), and only reads EDGAR full text search and the EDGAR Archives. It doesn't log in, bypass anything or use third party data.

### FAQ

**How accurate is the classification?** It's rule based on the press release text and 8 K item codes, and tuned for precision on the main catalysts. Always check the linked filing. `allEventTypes` shows every event type mentioned, so an earnings release that mentions a PDUFA date is labelled `financial-results` but lists `pdufa`.

**Why 8 K and 6 K?** US issuers file press releases as 8 K exhibits (usually EX 99.1). Foreign private issuers such as GSK, AstraZeneca, BioNTech and argenx file them as 6 K.

**How fresh is it?** EDGAR publishes filings within minutes. Run it each morning with `daysBack: 1`.

**Does it give buy or sell signals?** No. It reports what companies filed. **This is not investment advice.**

**Does it cover FDA calendars and openFDA too?** Pair it with our **Biotech Catalyst Tracker** for openFDA approvals, CRLs, the AdCom calendar, MHRA and ClinicalTrials.gov.

### More

- **Weekly newsletter**, UK Industry & Bills: https://ukindustryandbills.substack.com

*Source: U.S. Securities and Exchange Commission, EDGAR. Data and events only. This is not investment advice.*

# Actor input Schema

## `daysBack` (type: `integer`):

Filing dates from this many days ago to today (ignored if Date from is set).

## `dateFrom` (type: `string`):

Filing date from (YYYY-MM-DD).

## `dateTo` (type: `string`):

Filing date to (YYYY-MM-DD). Empty = today.

## `eventTypes` (type: `array`):

Only output these event types. Empty = all.

## `includeOther` (type: `boolean`):

Earnings, governance, conferences, designations, clinical holds and other filings.

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

Only these tickers, e.g. GSK, AZN, BNTX. Empty = all biopharma filers.

## `sicCodes` (type: `array`):

SEC SIC codes to include. Default 2833, 2834, 2835, 2836, 8731.

## `includeDevices` (type: `boolean`):

Also include SIC 3841, 3842, 3845 and 8071.

## `forms` (type: `array`):

8-K (US issuers) and 6-K (foreign private issuers).

## `maxExhibitsPerFiling` (type: `integer`):

Press releases read per filing.

## `maxResults` (type: `integer`):

Stop after this many events (newest filings first). 0 = no limit.

## `contactEmail` (type: `string`):

Optional. Replaces the default contact email in the User-Agent sent to SEC EDGAR (SEC fair-access policy asks for contact details).

## Actor input object example

```json
{
  "daysBack": 3,
  "includeOther": true,
  "sicCodes": [
    "2834",
    "2836",
    "8731"
  ],
  "includeDevices": false,
  "forms": [
    "8-K",
    "6-K"
  ],
  "maxExhibitsPerFiling": 2,
  "maxResults": 200
}
```

# Actor output Schema

## `events` (type: `string`):

No description

## `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 = {
    "sicCodes": [
        "2834",
        "2836",
        "8731"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("seaf999ield/biopharma-sec-event-stream").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 = { "sicCodes": [
        "2834",
        "2836",
        "8731",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("seaf999ield/biopharma-sec-event-stream").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 '{
  "sicCodes": [
    "2834",
    "2836",
    "8731"
  ]
}' |
apify call seaf999ield/biopharma-sec-event-stream --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seaf999ield/biopharma-sec-event-stream"
        }
    }
}
```

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/I8Fxtsput1cLuHdPd/builds/BpUum9wLelJ4itwX0/openapi.json
