# Executive Changes Tracker — New CEO/CFO/Exec Alerts (`exuberant_volley/executive-changes-scraper`) Actor

Job-change trigger leads without LinkedIn: newly announced CEO/CFO/exec and board appointments, departures and promotions from mandatory SEC 8-K Item 5.02 disclosures and official newswire people-moves releases. Name + role + company only — no contact data.

- **URL**: https://apify.com/exuberant\_volley/executive-changes-scraper.md
- **Developed by:** [ScrapeForge](https://apify.com/exuberant_volley) (community)
- **Categories:** Lead generation, News, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Executive Changes Tracker — New CEO/CFO/Exec Alerts

**Job-change trigger leads without LinkedIn** — newly announced executive appointments, departures and promotions from **mandatory SEC disclosures and official press releases**. ToS-clean and GDPR-defensible: statutory public disclosures and syndication-intended newswire releases, never contact-detail scraping.

> Source-cited senior appointment triggers — API-first, no CRM contract, no contact enrichment, pay only for records.

When a company gets a new CEO, CFO or VP of Sales, budgets move, stacks get reviewed and agencies get hired. US public companies **must** file an 8-K Item 5.02 within 4 business days of any senior officer or director change — this actor turns that legal obligation (plus official newswire people-moves releases) into clean, source-cited trigger leads.

### Who uses this

- **B2B sales / GTM engineers** — "new exec in role" is one of the highest-converting outreach triggers. Clean JSON output is Clay- and webhook-friendly: pipe records straight into enrichment tables or sequences.
- **Recruiters** — every departure record is an open seat; every appointment is a fresh decision-maker to pitch.
- **PR & agencies** — new CMOs/CEOs review agencies in their first 100 days.
- **Investors & analysts** — systematic monitoring of leadership churn across filers.

### Sources (all legal/official — explicitly NOT LinkedIn)

| Source | What | Coverage |
|---|---|---|
| `sec` | SEC EDGAR full-text search for 8-K **Item 5.02** filings (Departure/Election of Directors; Appointment of Officers), item-code verified, primary document parsed | US public companies, statutory, ~20-60 filings/day |
| `newswires` | GlobeNewswire **Directors and Officers** people-moves feed (official corporate press releases) | Public + private companies, global, most recent releases |
| Companies House (opt-in) | UK statutory officer appointments/resignations for company numbers you watch — **only when you supply your own free API key**; skipped otherwise | UK registered companies |

PR Newswire and Business Wire subject feeds are not included: PRN's personnel RSS redirects to a generic all-news feed and Business Wire's feed has been deactivated (verified empirically). The SEC + GlobeNewswire pair already yields deep, verifiable coverage.

### Output

One record per detected person-level change (dates in ISO `YYYY-MM-DD`):

```json
{
  "source": "sec",
  "company": "Coronado Global Resources Inc.",
  "ticker": "CODQL",
  "cik": "0001770561",
  "person": "Sandeep Deoji",
  "role": "CFO",
  "changeType": "appointed",
  "announcedDate": "2026-07-14",
  "effectiveDate": "2026-08-01",
  "headline": "8-K Item 5.02 — Coronado Global Resources Inc.",
  "url": "https://www.sec.gov/Archives/edgar/data/1770561/000110465926083237/tm2620319d1_8k.htm",
  "snippet": "...the Board appointed Sandeep Deoji, the Company's current Vice President, Group Financial Control, to serve as the Company's Interim Chief Financial Officer...",
  "confidence": "high",
  "dedupeKey": "coronadoglobalresourcesinc|sandeepdeoji|cfo|appointed"
}
````

- `changeType`: `appointed` | `departed` | `promoted` | `unknown` (ambiguous filings are kept as `unknown` rather than dropped).
- `confidence`: `high` (person + role + change verb all matched), `medium` (partial match), `low` (no person extracted — the record is kept with `snippet` + `url` so you can verify in one click).
- `dedupeKey`: stable slug of company+person+role+changeType — records are deduped across sources within a run; use it to dedupe across your own runs too.
- `snippet`: ≤300-char evidence excerpt. We sell event metadata + source URL + short evidence — never article text.
- Person-name extraction is heuristic (capitalized-name-near-role-keyword). Compensation-only and amendment 8-K filings are filtered out.

### Input

| Field | Default | Description |
|---|---|---|
| `daysBack` | `3` | Days of announcements to scan (1-30) |
| `roles` | all senior roles | CEO, CFO, COO, CTO, CIO, CMO, CHRO, President, Chairman, Vice President, Head of, Managing Director, General Counsel, Board Director |
| `sources` | `["sec","newswires"]` | Which sources to scan |
| `maxItems` | `100` | Stop after this many records |
| `companiesHouseApiKey` | *(empty)* | Optional, secret. Enables the UK Companies House source |
| `companiesHouseCompanyNumbers` | `[]` | UK company numbers to watch (used only with a key) |

**The default run needs NO API keys and returns real records** (typically 50-100+ for the last 3 days).

### Compliance & data minimization

- **What is collected:** person name + role + company + dates + the public source URL. **Never** emails, phone numbers, home addresses, or any contact details — no enrichment, no cross-referencing.
- **Where it comes from:** statutory filings (SEC EDGAR — US government public-domain data; UK Companies House statutory register) and official corporate press releases distributed for syndication. No LinkedIn, no social scraping, no logins, no cookies.
- **Retention:** records live only in your run's dataset; the actor keeps nothing beyond it.
- **Removal/suppression:** if a data subject asks you to remove them, delete the record from your systems — and note the original disclosure remains in the public statutory source. Suppression requests relating to this actor's listing can be sent to the author via the Apify issue tab.
- **Your obligations:** if you use these triggers for direct outreach, you are the controller for that processing — GDPR Art. 14 transparency and right-to-object handling are on you. This actor's design (statutory/press sources, no contact data) is built to keep the *sourcing* side defensible.

### SEC fair access

Every SEC request sends a descriptive `User-Agent` and the actor stays well under the SEC's 10 req/s fair-access ceiling (throttled to <4 req/s with retries + exponential backoff). Per-source failures are tolerated; the run only fails if **all** sources fail.

### Suggested pricing (for operators renting this actor)

Pay-per-result at **$0.05-$0.10 per qualified record** fits this data: these are timing-sensitive trigger leads (a new CFO is worth a sequence, not a spreadsheet row), and Apify is retiring rental pricing in 2026 — pay-per-result/pay-per-event is the forward-compatible model. A free sample angle works well: e.g. the last 48 hours / first 25 records free, paid beyond that.

# Actor input Schema

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

How many days of announcements to scan (1-30). SEC 8-K Item 5.02 filings are date-filtered; the newswire feed covers roughly the most recent 1-3 days.

## `roles` (type: `array`):

Only keep changes for these senior roles. Recognized values: CEO, CFO, COO, CTO, CIO, CMO, CHRO, President, Chairman, Vice President, Head of, Managing Director, General Counsel, Board Director (free-text like "Chief Executive" also works). Leave as-is for all senior roles.

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

Which sources to scan: "sec" (SEC EDGAR 8-K Item 5.02 statutory disclosures) and/or "newswires" (GlobeNewswire Directors & Officers people-moves feed).

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

Stop after this many executive-change records (most recent first).

## `companiesHouseApiKey` (type: `string`):

Optional. Free key from developer.company-house.gov.uk enables the UK Companies House officers source for the company numbers listed below. Leave empty to skip — the default run needs NO keys.

## `companiesHouseCompanyNumbers` (type: `array`):

Optional. UK Companies House company numbers (e.g. 00000006) whose officer appointments/resignations should be checked. Used only when an API key is provided.

## Actor input object example

```json
{
  "daysBack": 3,
  "roles": [
    "CEO",
    "CFO",
    "COO",
    "CTO",
    "CIO",
    "CMO",
    "CHRO",
    "President",
    "Chairman",
    "Vice President",
    "Head of",
    "Managing Director",
    "General Counsel",
    "Board Director"
  ],
  "sources": [
    "sec",
    "newswires"
  ],
  "maxItems": 100,
  "companiesHouseCompanyNumbers": []
}
```

# 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 = {
    "daysBack": 3,
    "roles": [
        "CEO",
        "CFO",
        "COO",
        "CTO",
        "CIO",
        "CMO",
        "CHRO",
        "President",
        "Chairman",
        "Vice President",
        "Head of",
        "Managing Director",
        "General Counsel",
        "Board Director"
    ],
    "sources": [
        "sec",
        "newswires"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("exuberant_volley/executive-changes-scraper").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 = {
    "daysBack": 3,
    "roles": [
        "CEO",
        "CFO",
        "COO",
        "CTO",
        "CIO",
        "CMO",
        "CHRO",
        "President",
        "Chairman",
        "Vice President",
        "Head of",
        "Managing Director",
        "General Counsel",
        "Board Director",
    ],
    "sources": [
        "sec",
        "newswires",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("exuberant_volley/executive-changes-scraper").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 '{
  "daysBack": 3,
  "roles": [
    "CEO",
    "CFO",
    "COO",
    "CTO",
    "CIO",
    "CMO",
    "CHRO",
    "President",
    "Chairman",
    "Vice President",
    "Head of",
    "Managing Director",
    "General Counsel",
    "Board Director"
  ],
  "sources": [
    "sec",
    "newswires"
  ],
  "maxItems": 100
}' |
apify call exuberant_volley/executive-changes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=exuberant_volley/executive-changes-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Executive Changes Tracker — New CEO/CFO/Exec Alerts",
        "description": "Job-change trigger leads without LinkedIn: newly announced CEO/CFO/exec and board appointments, departures and promotions from mandatory SEC 8-K Item 5.02 disclosures and official newswire people-moves releases. Name + role + company only — no contact data.",
        "version": "0.1",
        "x-build-id": "aYhsnQ3PxRGN1sLYe"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/exuberant_volley~executive-changes-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-exuberant_volley-executive-changes-scraper",
                "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/exuberant_volley~executive-changes-scraper/runs": {
            "post": {
                "operationId": "runs-sync-exuberant_volley-executive-changes-scraper",
                "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/exuberant_volley~executive-changes-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-exuberant_volley-executive-changes-scraper",
                "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": {
                    "daysBack": {
                        "title": "Days back",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "How many days of announcements to scan (1-30). SEC 8-K Item 5.02 filings are date-filtered; the newswire feed covers roughly the most recent 1-3 days.",
                        "default": 3
                    },
                    "roles": {
                        "title": "Roles to track",
                        "type": "array",
                        "description": "Only keep changes for these senior roles. Recognized values: CEO, CFO, COO, CTO, CIO, CMO, CHRO, President, Chairman, Vice President, Head of, Managing Director, General Counsel, Board Director (free-text like \"Chief Executive\" also works). Leave as-is for all senior roles.",
                        "default": [
                            "CEO",
                            "CFO",
                            "COO",
                            "CTO",
                            "CIO",
                            "CMO",
                            "CHRO",
                            "President",
                            "Chairman",
                            "Vice President",
                            "Head of",
                            "Managing Director",
                            "General Counsel",
                            "Board Director"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "sources": {
                        "title": "Sources",
                        "type": "array",
                        "description": "Which sources to scan: \"sec\" (SEC EDGAR 8-K Item 5.02 statutory disclosures) and/or \"newswires\" (GlobeNewswire Directors & Officers people-moves feed).",
                        "default": [
                            "sec",
                            "newswires"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max records",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Stop after this many executive-change records (most recent first).",
                        "default": 100
                    },
                    "companiesHouseApiKey": {
                        "title": "UK Companies House API key (optional)",
                        "type": "string",
                        "description": "Optional. Free key from developer.company-house.gov.uk enables the UK Companies House officers source for the company numbers listed below. Leave empty to skip — the default run needs NO keys."
                    },
                    "companiesHouseCompanyNumbers": {
                        "title": "UK company numbers to watch (optional)",
                        "type": "array",
                        "description": "Optional. UK Companies House company numbers (e.g. 00000006) whose officer appointments/resignations should be checked. Used only when an API key is provided.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
