# Securities Exchange Listing Changes (`datapilot/securities-exchange-listing-changes`) Actor

25, 25-NSE, 8-A12B, and 8-A12G. Supports keyword filtering, date-range monitoring, ticker extraction, company name, CIK, filing date, action type, and SEC filing links. Includes Residential Proxy support, automatic retries, duplicate-safe processing, and structured Apify Dataset output.

- **URL**: https://apify.com/datapilot/securities-exchange-listing-changes.md
- **Developed by:** [Data Pilot](https://apify.com/datapilot) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 scraped results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

📈 **Securities Exchange Listing Changes** Monitor is a powerful Apify Actor designed to discover, track, and collect stock exchange listing and delisting activity directly from the SEC's own EDGAR Full-Text Search API. This tool provides comprehensive **Securities Exchange Listing Changes** intelligence including ticker symbol, action type (new listing or delisting), form type, company name, CIK, filing date, and a direct link to the filing document for any keyword. Whether you're building a market surveillance dashboard, tracking exchange activity for a sector, or conducting investor research, the Securities Exchange Listing Changes Monitor delivers actionable **Securities Exchange Listing Changes** insights efficiently.

With targeted form-type querying, ticker resolution with CIK fallback, resilient retry handling, and reliable Apify Dataset delivery, the Securities Exchange Listing Changes Monitor ensures comprehensive **Securities Exchange Listing Changes** coverage across new listings and delistings alike. It focuses on key **Securities Exchange Listing Changes** signals including ticker, action type, and filing date, making it an essential tool for market surveillance and listing-change intelligence.

***

### 📋 Table of Contents

- [Features](#-features)
- [Data Source](#-data-source)
- [How It Works](#-how-it-works)
- [Input](#-input)
- [Output](#-output)
- [Technical Stack](#-technical-stack)
- [Data Fields](#-data-fields-explained)
- [Use Cases](#-use-cases)
- [Quick Start](#-quick-start)
- [Configuration](#-configuration)
- [Performance](#-performance)
- [Important Notes](#-important-notes)
- [License & Legal](#-license--legal)

***

### 🔥 Features

- **Direct EDGAR API Access** – Queries the SEC's official Full-Text Search API (`efts.sec.gov`) directly for fast, structured **Securities Exchange Listing Changes** data.
- **Targeted Form-Type Filtering** – Restricts results to the exact forms that signal listing changes: Form 25/25-NSE for delistings and Form 8-A12B/8-A12G for new listings.
- **Action-Type Selection** – Filter for delistings only, new listings only, or both in a single run.
- **Ticker Symbol Resolution** – Extracts the ticker directly from the filer's display name when present.
- **CIK Submissions Fallback** – Automatically queries the filer's SEC submissions profile to resolve the ticker when it isn't embedded in the search result.
- **Configurable Date Window** – Search any rolling number of days back from today.
- **Direct Filing Links** – Builds a link to the exact filing document or, as a fallback, the EDGAR company browse page.
- **Retry-Resilient Requests** – Automatically retries on rate limits (429) and forbidden (403) responses with backoff delays.
- **Residential Proxy Support** – Apify residential proxy for reliable **Securities Exchange Listing Changes** access.
- **Real-Time Dataset Push** – Pushes each normalized filing to Apify Dataset as it's processed.

***

### 📊 Data Source

#### **SEC EDGAR Full-Text Search & Submissions APIs**

- **Authority**: The U.S. Securities and Exchange Commission's official EDGAR Full-Text Search index (`efts.sec.gov/LATEST/search-index`) and company submissions API (`data.sec.gov/submissions`)
- **Access Method**: Browser-impersonated HTTP requests via `curl_cffi`, run through an executor for async compatibility
- **Coverage**: Any publicly filed **Securities Exchange Listing Changes** notice (Form 25, 25-NSE, 8-A12B, 8-A12G) matching the given keyword and date range
- **Data**: Structured JSON search hits, cross-referenced with company submissions data for ticker resolution
- **Access**: Public API, no API key required (SEC requests a descriptive User-Agent, which is included)
- **Update Frequency**: Reflects EDGAR's current live filing index at time of run

***

### ⚙️ How It Works

The Securities Exchange Listing Changes Monitor accepts an optional keyword, an action filter (delisting, new listing, or both), and a lookback window in days, then queries the SEC EDGAR Full-Text Search API restricted to the exact form types that represent listing changes. The Actor pages through all available results within the date range up to the configured maximum, retrying automatically on rate limits or forbidden responses. Each search hit is normalized by mapping its form type to a human-readable action (e.g., Form 25 → "Delisting"), extracting the company name and CIK, and attempting to pull the ticker symbol directly from the filer's display name. If no ticker is found there, the Actor falls back to querying the filer's SEC submissions profile by CIK to resolve it. A direct link to the filing document (or the EDGAR company page as a fallback) is built for every result, and each normalized record is pushed to the Apify Dataset immediately as it's processed.

**Key Processing Steps:**

1. **Input Parsing** – Accept a keyword, action filter, lookback window (days), and max result count
2. **Proxy Setup** – Configure Apify residential proxy for the impersonated HTTP session
3. **Form Selection** – Choose the relevant SEC form types based on the action filter
4. **Date Window Calculation** – Compute the search date range based on the configured days-back value
5. **Search Request** – Query EDGAR's full-text search API with the keyword, forms, and date range
6. **Retry Handling** – Back off and retry on rate limits (429) or forbidden (403) responses
7. **Pagination** – Continue requesting subsequent pages until all available results or the max cap are reached
8. **Action Mapping** – Translate each form type into a readable action label (Delisting / New Listing)
9. **Ticker Resolution** – Extract the ticker from the display name, or fall back to the CIK submissions API
10. **Link Construction** – Build a direct link to the filing document or the EDGAR company page
11. **Dataset Push** – Push each normalized record to the Dataset immediately after processing

**Key Benefits:**

- Pull **Securities Exchange Listing Changes** data for any keyword without manually monitoring EDGAR
- Catch new listings and delistings as they're filed, within a configurable lookback window
- Automatically resolve ticker symbols even when they're not directly present in the filing
- Feed market surveillance dashboards, investor research pipelines, or compliance monitoring tools
- Automate recurring **Securities Exchange Listing Changes** checks as new filings are published

***

### 📥 Input

The Actor accepts the following input parameters:

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `keyword` | string | *(none — all filings)* | Optional search term to match against filings. |
| `action` | string | `"both"` | Filter type: `"delisting"`, `"new-listing"`, or `"both"`. |
| `days` | integer | `30` | Number of days back from today to search. |
| `maxResults` | integer | `50` | Maximum number of **Securities Exchange Listing Changes** records to collect. |
| `proxyConfiguration` | object | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` | Apify proxy configuration for the search session. |

**Example Input:**

```json
{
  "keyword": "",
  "action": "both",
  "days": 30,
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Delistings Only, Last 60 Days:**

```json
{
  "action": "delisting",
  "days": 60
}
```

**New Listings Matching a Keyword:**

```json
{
  "keyword": "biotech",
  "action": "new-listing",
  "maxResults": 100
}
```

***

### 📤 Output

The Actor pushes **Securities Exchange Listing Changes** records with the following structure:

| Field | Type | Description |
|-------|------|-------------|
| `ticker` | string | The resolved stock ticker symbol, or `"N/A"` if unresolved |
| `action` | string | Human-readable action label (e.g., "Delisting", "New Listing") |
| `form_type` | string | The underlying SEC form type (25, 25-NSE, 8-A12B, or 8-A12G) |
| `company_name` | string | Name of the filing company |
| `cik` | string | The filer's SEC Central Index Key (CIK) |
| `date` | string | Date the filing was submitted to EDGAR |
| `link` | string | Direct URL to the filing document, or the EDGAR company page as a fallback |
| `scraped_at` | string | ISO 8601 timestamp of when the record was scraped |

**Example Securities Exchange Listing Changes Record:**

```json
{
  "ticker": "EXMP",
  "action": "New Listing",
  "form_type": "8-A12B",
  "company_name": "Example Holdings Inc. (EXMP) (CIK 0001234567)",
  "cik": "1234567",
  "date": "2026-08-05",
  "link": "https://www.sec.gov/Archives/edgar/data/1234567/000123456726000045/filing.txt",
  "scraped_at": "2026-08-22T09:00:00+00:00"
}
```

***

### 🧰 Technical Stack

- **HTTP Client:** `curl_cffi` with Chrome impersonation for reliable access to SEC EDGAR APIs
- **Concurrency:** `asyncio` with an executor bridge for running the impersonated client asynchronously
- **Pattern Matching:** `re` for extracting ticker symbols embedded in filer display names
- **Date Handling:** `date`, `datetime`, and `timedelta` for computing the configurable search window
- **Proxy:** Apify Proxy with `RESIDENTIAL` configuration by default
- **Logging:** Apify Actor logging system
- **Platform:** Apify Actor serverless environment

***

### 📊 Data Fields Explained

#### **Listing Identity**

- **ticker**: The stock ticker symbol associated with the filer, resolved from the filing or the CIK submissions profile
- **company\_name**: The name of the company as it appears in the filing's display name

#### **Action Details**

- **action**: Whether this filing represents a new listing or a delisting
- **form\_type**: The specific SEC form that triggered the action classification

#### **Filing Metadata**

- **cik**: The SEC's Central Index Key identifying the filer
- **date**: The date the filing was submitted
- **link**: Direct link to the filing document or the filer's EDGAR company page

***

### 🎯 Use Cases

- **Market Surveillance** – Track new listings and delistings across the market or within a sector
- **Investor Research** – Monitor exchange status changes for companies of interest
- **Compliance Monitoring** – Stay current on listing-related regulatory filings
- **Sector Analysis** – Identify listing/delisting trends within a specific keyword or industry
- **Academic Research** – Study public market entry and exit patterns at scale
- **Media Monitoring** – Source primary filing data for financial journalism on exchange activity

***

### 🚀 Quick Start

#### **1. Prepare Input**

Go to Apify Console and enter:

```json
{
  "action": "both",
  "days": 30
}
```

#### **2. Run the Actor**

Click **Start**. The Actor will:

- Query SEC EDGAR for the relevant form types within the configured date window
- Page through all matching results, retrying on rate limits automatically
- Resolve ticker symbols, falling back to the CIK submissions API when needed
- Push each normalized record to the Dataset as it's processed

#### **3. Monitor Progress**

Console shows:

```
🔎 Searching SEC EDGAR from 2026-07-23 to 2026-08-22 | Forms: 25,25-NSE,8-A12B,8-A12G | Query: 'ALL'
Fetched 42 hits (Total available: 42)
Processed 42/42 filings into Dataset
🎉 Complete! Successfully saved 42 SEC listing changes.
```

#### **4. View & Download Results**

- **Results Tab**: All **Securities Exchange Listing Changes** records
- **Export**: JSON, CSV, Excel, or HTML
- **Filter**: By action type or ticker
- **API Access**: Available via the Apify API

***

### ⚙️ Configuration

Delistings only:

```json
{
  "action": "delisting",
  "days": 30
}
```

New listings with a keyword:

```json
{
  "keyword": "biotech",
  "action": "new-listing",
  "maxResults": 100
}
```

Longer lookback window:

```json
{
  "action": "both",
  "days": 90,
  "maxResults": 200
}
```

***

### 📈 Performance

#### **Processing Speed**

- One or more paginated search requests, plus one CIK submissions fallback request per unresolved ticker
- 0.25 second delay between paginated search requests to stay within fair-use expectations
- Automatic retry backoff (up to 3 attempts) on rate limits or forbidden responses

#### **Resource Usage**

- Memory: Low, since no browser instance is launched
- Network: Multiple lightweight JSON requests, scaling with result volume and ticker fallback needs
- Proxy: One residential proxy tunnel shared across the impersonated session for the run

***

### ⚠️ Important Notes

#### **Legal & Compliance**

- **Fair Use**: Includes a descriptive `User-Agent` per SEC's access guidelines and applies pacing delays between requests
- **Public Data Only**: Retrieves only publicly filed **Securities Exchange Listing Changes** notices already indexed by EDGAR
- **Legal**: Not legal advice — consult qualified professionals before using this data for compliance-sensitive or investment decisions

#### **Data Quality**

- **Freshness**: Reflects EDGAR's currently published filing index within the configured date window
- **Completeness**: Ticker resolution depends on display-name parsing and CIK submissions data; some tickers may remain `"N/A"`
- **Accuracy**: Sourced directly from the SEC's own EDGAR Full-Text Search and submissions APIs
- **Verification**: Cross-check high-stakes listing changes against the live SEC EDGAR website

#### **Best Practices**

- Update the contact email in the User-Agent header before running in production, per SEC's access guidelines
- Use the `action` filter to focus specifically on delistings or new listings as needed
- Re-run periodically (e.g., daily) to catch new filings within the rolling lookback window
- Expect some `ticker` values to remain `"N/A"` if neither resolution method succeeds
- Combine with a keyword to narrow results to a specific sector or company name pattern

***

### 📄 License & Legal

**Terms of Use:**

- Use for legitimate research, market surveillance, and investor relations purposes
- Respect the SEC's EDGAR access guidelines, including fair-use request pacing
- Use **Securities Exchange Listing Changes** data responsibly and in compliance with applicable laws
- Not a substitute for professional investment or legal advice

**Disclaimer:**
Securities Exchange Listing Changes Monitor is provided as-is for research and analytics purposes. Users are responsible for compliance with the SEC's terms and all applicable laws. This is not legal or financial advice.

***

### ⚖️ Securities Exchange Listing Changes Excellence

This Actor is optimized for **Securities Exchange Listing Changes** research with:

- ✅ Direct, official EDGAR API access — no HTML scraping fragility
- ✅ Precise form-type targeting for accurate action classification
- ✅ Ticker resolution with CIK submissions fallback
- ✅ Retry-resilient requests with automatic backoff
- ✅ Real-time Dataset push
- ✅ Production-ready code

# Actor input Schema

## `keyword` (type: `string`):

Filter by company name or leave blank for all recent listing changes.

## `action` (type: `string`):

Choose between new listings, delistings, or both.

## `days` (type: `integer`):

Number of days back to search from today.

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

Maximum number of filings to collect.

## `proxyConfiguration` (type: `object`):

Select Residential Proxy for SEC EDGAR requests.

## Actor input object example

```json
{
  "keyword": "",
  "action": "both",
  "days": 30,
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `crawlResults` (type: `string`):

No description

## `listingOverview` (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("datapilot/securities-exchange-listing-changes").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("datapilot/securities-exchange-listing-changes").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 datapilot/securities-exchange-listing-changes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datapilot/securities-exchange-listing-changes"
        }
    }
}

```

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/WMforTCoNhF3cjShe/builds/lPobZagpoKRhalRON/openapi.json
