# IPO Alert Monitor — New SEC S-1 & F-1 Filings Feed (`datadeltas/ipo-s1-monitor`) Actor

Get alerted the moment a company files to go public. Monitors SEC EDGAR for new S-1 and F-1 registration statements (plus optional amendments and 424B4 pricing prospectuses) and emits only NEW filings each run — company, CIK, industry (SIC), state of incorporation and direct links.

- **URL**: https://apify.com/datadeltas/ipo-s1-monitor.md
- **Developed by:** [Daniel Matthee](https://apify.com/datadeltas) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.50 / 1,000 new ipo filing detecteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## IPO Alert Monitor — New SEC S-1 & F-1 Filings Feed

Get alerted the moment a company files to go public. This monitor watches
**SEC EDGAR** for new **S-1** (US issuers) and **F-1** (foreign issuers)
registration statements — optionally amendments and **424B4** priced final
prospectuses too — and emits **only filings you have not seen before**. No
re-scraping the same registrations, no duplicate rows in your pipeline.

Every record arrives with the industry (SIC code *and* the official SEC
industry label), the state or country of incorporation, and direct links to
both the prospectus document and the EDGAR filing index.

Built for:

- **Investors & analysts** — see the IPO pipeline forming weeks before the
  roadshow, filtered to the sectors you actually trade.
- **Journalists** — catch an S-1 the day it hits EDGAR, with the filer's
  industry and incorporation state already resolved.
- **Bankers & advisers** — track competitor mandates and comparable filings
  as they appear; the amendment stream shows which deals are moving.
- **IPO-tracking apps & data products** — a clean, stable, deduplicated
  upstream feed with no API key and no HTML parsing on your side.

### What it covers

| Form | What it means |
|---|---|
| `S-1` | Initial registration statement, US issuer — the classic "filed to IPO" event |
| `F-1` | Initial registration statement, foreign private issuer |
| `S-1/A` | Amended S-1 — updated terms, deal progress, price range |
| `F-1/A` | Amended F-1 |
| `424B4` | Final priced prospectus — the deal is priced and going out |

Default is `["S-1", "F-1"]`: **new registrations only**, the highest-signal
subset. Turn on the amendment and 424B4 forms when you want the full deal
lifecycle.

**Volume, so you can budget:** in a representative recent week EDGAR carried
20 S-1, 18 S-1/A, 7 F-1, 12 F-1/A and 9 424B4 filings — 66 across all five
forms, 27 on the default settings. This is a low-volume, high-signal feed.

**Source:** the SEC's own EDGAR full-text search index. Not a third-party
aggregator, not a scraped IPO calendar — the registry itself, keyless, with a
declared User-Agent per the SEC fair-access policy.

### Example output

```json
{
  "accessionNumber": "0001683168-26-006779",
  "cik": "1402328",
  "companyName": "Sunshine Biopharma Inc.",
  "formType": "S-1",
  "sicCode": "2834",
  "sicLabel": "PHARMACEUTICAL PREPARATIONS",
  "stateOrCountry": "CO",
  "filedAt": "2026-08-28",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/1402328/000168316826006779/sunshine_s1.htm",
  "indexUrl": "https://www.sec.gov/Archives/edgar/data/1402328/000168316826006779/0001683168-26-006779-index.htm",
  "isAmendment": false,
  "detectedAt": "2026-08-31T09:44:31Z"
}
```

Field notes:

- `accessionNumber` is the SEC's own filing identifier — a stable primary key
  you can dedupe and join on downstream.
- `sicLabel` is resolved from the SEC's official SIC code list, so you get
  `"PHARMACEUTICAL PREPARATIONS"` rather than a bare `2834`.
- `stateOrCountry` is the EDGAR **incorporation** code: a US state (`DE`,
  `CO`) or an EDGAR foreign code (`Y9`, `E9`). `null` when EDGAR does not
  publish one — a handful of filers each week.
- `sicCode`/`sicLabel` are `null` for the occasional brand-new filer with no
  SIC on file yet. Every other field is populated on every filing.
- `filingUrl` is the primary prospectus document; `indexUrl` is the full
  submission index if you want the exhibits.
- `isAmendment` is `true` for `/A` forms, so you can route new registrations
  and deal updates to different consumers.

### Input options

| Option | Default | What it does |
|---|---|---|
| `formTypes` | `["S-1","F-1"]` | Exact form types to emit; pick from S-1, S-1/A, F-1, F-1/A, 424B4 |
| `sicCodes` | none | Industry filter as SIC digit prefixes — `283` = pharma, `7372` = software, `6199` = finance |
| `keywords` | none | Case-insensitive substrings matched on company name |
| `sinceDays` | `7` | Backfill window by filing date on the first run (max 90) |
| `maxItems` | `500` | Cap on new filings per run; the overflow carries to the next run |
| `userAgent` | generic | **Set this** to `Your Name your@email.com` — SEC fair-access policy |
| `stateStoreName` | `ipo-s1-monitor-state` | Change it to reset the monitor and re-emit the backfill |

#### How the monitor behaves

- **First run** backfills every matching filing in the `sinceDays` window.
- **Every later run** emits only filings that appeared since — a clean delta.
  A quiet week legitimately returns zero records and exits successfully.
- **Filters are applied at emit time, permanently.** A filing your filter
  rejects is recorded as inspected, so broadening `sicCodes` or `keywords`
  later will not flood you with back-dated filings. To rebuild history under
  a new filter, change `stateStoreName`.
- **A dead source fails loudly.** If EDGAR cannot be reached the run fails
  with a non-zero exit and the seen-state is left untouched — a broken fetch
  is never silently recorded as a quiet IPO week.

Recommended schedule: **hourly or every few hours** during US market days.
EDGAR posts registration statements throughout the business day.

### Use cases

**"Alert me to every biotech IPO filing."**

```json
{ "formTypes": ["S-1", "F-1"], "sicCodes": ["283", "8731"], "sinceDays": 7 }
```

Pharma preparations plus commercial biological research — the two SIC groups
that cover most biotech registrations.

**"Track the full lifecycle of every software IPO, from filing to pricing."**

```json
{ "formTypes": ["S-1", "S-1/A", "F-1", "F-1/A", "424B4"], "sicCodes": ["7372", "7370", "7371"] }
```

Registrations, every amendment and the final priced prospectus — the whole
deal timeline for the sector, in one dataset.

**"Watch for a specific company or sponsor family filing to go public."**

```json
{ "formTypes": ["S-1", "S-1/A"], "keywords": ["acquisition corp", "capital partners"], "sinceDays": 30 }
```

Name-keyword matching on the filer, useful for tracking sponsor platforms and
shell families across filings.

### Pricing (pay-per-event)

| Event | Price |
|---|---|
| Actor start | $0.005 per run |
| New IPO filing detected | $0.015 per new filing emitted |

At real EDGAR volumes, a full five-form subscriber running hourly pays roughly
a dollar a week; the default new-registrations-only feed costs well under
that. You pay for filings, not for polling.

### Notes and limits

- **v1 is header-level only.** No prospectus-body parsing: deal size, proposed
  maximum offering amount and 424B4 price lines are not extracted. Planned for
  v1.1 from the EX-FILING FEES exhibit.
- **Set `userAgent`.** The SEC asks automated clients to identify themselves.
  Requests are sequential with a gentle delay and honour `Retry-After`.
- `sinceDays` is capped at 90 days. For a deeper historical backfill, run
  successive windows with different `stateStoreName` values.
- Schema drift is logged with the exact missing field name and never crashes a
  run; the field set above is checked against live EDGAR data.

### Changelog

#### 1.0.0

- Initial release: S-1, S-1/A, F-1, F-1/A and 424B4 monitoring from the EDGAR
  full-text search index, with SIC industry labels, incorporation state, and
  form/SIC/keyword filters.

# Actor input Schema

## `formTypes` (type: `array`):

Exact SEC form types to emit. S-1 (US) and F-1 (foreign issuers) are the initial IPO registrations; /A variants are amendments; 424B4 is the priced final prospectus. Default: new registrations only.

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

Optional industry filter: digit prefixes matched against the filer's 4-digit SIC code. Example: '283' matches all pharmaceutical preparations (2834, 2836, ...), '7372' matches prepackaged software. Leave empty for all industries.

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

Optional case-insensitive substrings matched against the company name. A filing is emitted if ANY keyword matches. Leave empty for all companies.

## `sinceDays` (type: `integer`):

How many days of filings to scan. On the first run this is your backfill; on later runs only filings not seen before are emitted.

## `maxItems` (type: `integer`):

Cap on new filings emitted in a single run (cost control). Filings over the cap are picked up on the next run.

## `userAgent` (type: `string`):

SEC asks automated clients to identify themselves. Set this to 'YourName or Company daniel@apexwebstudio.co.nz' — requests are sent with this User-Agent header.

## `stateStoreName` (type: `string`):

Named key-value store holding seen accession numbers. Change it to reset the monitor and re-emit the backfill.

## Actor input object example

```json
{
  "formTypes": [
    "S-1",
    "F-1"
  ],
  "sicCodes": [],
  "keywords": [],
  "sinceDays": 7,
  "maxItems": 500,
  "userAgent": "ipo-s1-monitor/1.0 (Apify actor; set the userAgent input to your contact)",
  "stateStoreName": "ipo-s1-monitor-state"
}
```

# Actor output Schema

## `records` (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 = {
    "formTypes": [
        "S-1",
        "F-1"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datadeltas/ipo-s1-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 = { "formTypes": [
        "S-1",
        "F-1",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("datadeltas/ipo-s1-monitor").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 '{
  "formTypes": [
    "S-1",
    "F-1"
  ]
}' |
apify call datadeltas/ipo-s1-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datadeltas/ipo-s1-monitor"
        }
    }
}
```

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/AnNqVqmeIC0Mkbjjm/builds/u4766rESSKwqSXzaq/openapi.json
