# Company News & Announcement Finder (`coregent/company-news-announcement-finder`) Actor

Find recent public company news, press releases, newsroom posts, blog announcements, product launches, funding updates, partnerships, and expansion signals. One flat, CSV-ready row per announcement. No login or cookies.

- **URL**: https://apify.com/coregent/company-news-announcement-finder.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 announcement-results

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

## Company News & Announcement Finder

![Company News & Announcement Finder](https://raw.githubusercontent.com/coregentdevspace/company-news-announcement-finder-assets/main/thumbnail-company-news-announcement-finder.png)

Find recent **public company news, press releases, newsroom posts, blog announcements, product launches, funding updates, partnerships, and expansion signals** for a list of companies or source URLs. You get **one flat, CSV-ready row per announcement**: title, URL, source, date, snippet, a detected category, signal tags, and a transparent **growth-signal score** (0–100).

Built for **B2B sales, lead generation, competitor monitoring, and market research** — turn a company list into a clean stream of business signals without expensive news APIs or AI media-intelligence platforms.

- ✅ **No login, no cookies, no API keys.** Public data only.
- ✅ **One row per announcement** with source tracking and simple signal scoring.
- ✅ **Transparent, non-AI scoring** you can audit field-by-field.
- ✅ Prefers **public RSS/Atom feeds** and company-owned **news/press/blog** pages, with a free public-search fallback.

---

### What it does

For every company input the actor:

1. **Resolves** the company website (free public search for bare names).
2. **Discovers** public announcement sources — common paths like `/news`, `/press`, `/press-releases`, `/blog`, `/newsroom`, plus any `RSS/Atom` feeds, with a public-search fallback.
3. **Extracts** announcements from RSS/Atom feeds, schema.org `Article`/`NewsArticle` JSON-LD, Open Graph metadata, and visible article links.
4. **Normalizes** URLs, dates, snippets, and source types; **classifies** a category and signal tags.
5. **Scores** a transparent `growth_signal_score` and emits one flat row per announcement.

For **start URLs**, the actor scans the provided newsroom/press/blog/RSS pages directly.

It does **not** do login/session scraping, paywalled content, full-article or media downloads, deep crawling, AI summaries, or ongoing monitoring.

---

### Input

| Field                  | Type             | Default                     | Description                                                                                      |
| ---------------------- | ---------------- | --------------------------- | ------------------------------------------------------------------------------------------------ |
| `companies`            | array of strings | `[]`                        | Company names or domains. Provide at least one company **or** start URL. Max 500.                |
| `startUrls`            | array of strings | `[]`                        | Direct newsroom/press/blog/RSS URLs to scan.                                                     |
| `searchMode`           | string           | `company_sources`           | `company_sources` (discover sources) or `direct_urls_only` (scan only start URLs).               |
| `sourceTypes`          | array of strings | all                         | `newsroom`, `press_release`, `blog`, `rss`, `general_news`.                                      |
| `maxResults`           | integer          | `100`                       | Global cap on saved announcement rows (1–5000).                                                  |
| `maxResultsPerCompany` | integer          | `20`                        | Cap on announcements per company (1–200).                                                        |
| `lookbackDays`         | integer          | `180`                       | Keep dated announcements within this window (1–3650). Undated rows are kept.                     |
| `fromDate` / `toDate`  | string           | `""`                        | Optional fixed `YYYY-MM-DD` bounds; override `lookbackDays`. When set, undated rows are dropped. |
| `includeKeywords`      | array of strings | `[]`                        | Keep only announcements matching at least one keyword.                                           |
| `excludeKeywords`      | array of strings | `[]`                        | Drop announcements matching any keyword.                                                         |
| `signalCategories`     | array of strings | `[]`                        | Keep only matching detected categories.                                                          |
| `deduplicate`          | boolean          | `true`                      | Remove duplicate announcements before saving/charging.                                           |
| `proxyConfiguration`   | object           | `{ "useApifyProxy": true }` | Datacenter, no proxy, or custom proxy URLs. Apify Residential rejected at startup.               |

#### Example inputs

**1. Enrich a company list with recent announcements and filter by signal**

```json
{
    "companies": ["Canva", "atlassian.com", "HubSpot"],
    "startUrls": ["https://www.canva.com/newsroom/"],
    "searchMode": "company_sources",
    "sourceTypes": ["newsroom", "press_release", "blog", "rss", "general_news"],
    "maxResults": 100,
    "maxResultsPerCompany": 20,
    "lookbackDays": 180,
    "includeKeywords": ["launch", "partner", "expansion", "funding"],
    "excludeKeywords": ["webinar replay"],
    "signalCategories": ["partnership", "product_launch", "expansion", "funding"],
    "deduplicate": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

**2. Scan only specific newsroom / RSS URLs**

```json
{
    "startUrls": ["https://www.atlassian.com/blog", "https://www.canva.com/newsroom/news/"],
    "searchMode": "direct_urls_only",
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

**3. Minimal run — just give it companies**

```json
{ "companies": ["Canva", "stripe.com", "Notion"] }
```

***

### Output

One flat row per announcement. Key fields:

- **Company**: `input_company`, `company_name`, `company_domain`
- **Source**: `source_type`, `source_name`, `source_domain`, `is_company_owned_source`, `discovery_method`, `source_page_url`, `http_status`
- **Announcement**: `announcement_title`, `announcement_url`, `canonical_url`, `published_date`, `published_datetime`, `snippet`
- **Signals**: `detected_category`, `signal_tags`, `growth_signal_score` (0–100), `signal_strength` (`high`/`medium`/`low`), `matched_keywords`
- **Timestamp**: `scraped_at`

#### Company announcements — all fields (table view)

![Company announcements output, all fields table view](https://raw.githubusercontent.com/coregentdevspace/company-news-announcement-finder-assets/main/company-news-announcement-finder-output-all-fields-table-view.png)

#### Sample record

```json
{
    "input_company": "Stripe",
    "company_name": "Stripe",
    "company_domain": "stripe.com",
    "source_type": "blog",
    "source_name": "Stripe",
    "source_domain": "stripe.com",
    "announcement_title": "New ways to turn global demand into revenue",
    "announcement_url": "https://stripe.com/blog/new-ways-to-turn-global-demand-into-revenue",
    "canonical_url": "https://stripe.com/blog/new-ways-to-turn-global-demand-into-revenue",
    "published_date": "2026-06-04",
    "published_datetime": "2026-06-04T07:00:00.000Z",
    "snippet": "At Sessions 2026, Stripe unveiled dozens of products and capabilities to help businesses turn global demand into revenue. See how to go global faster with localized checkout and Adaptive Pricing, smarter fraud tools, multicurrency treasury support, and automated tax compliance.",
    "detected_category": "financial",
    "signal_tags": "financial",
    "growth_signal_score": 60,
    "signal_strength": "medium",
    "matched_keywords": "",
    "is_company_owned_source": true,
    "discovery_method": "source_page_link",
    "source_page_url": "https://stripe.com/blog",
    "http_status": 200,
    "scraped_at": "2026-06-14T00:30:26.921Z"
}
```

A **run summary** is stored in the default key-value store under `RUN_SUMMARY` with counters such as `inputs_total`, `sources_scanned`, `raw_results_found`, `results_saved`, `duplicates_removed`, `filtered_out`, and `charged_events`.

***

### Growth-signal score

A transparent 0–100 weighted sum (see PRD §7), based only on visible public fields:

- `+10` base for any valid announcement
- `+20` company-owned source
- `+15 / +10` published within 30 / 90 days
- `+15` high-value category (`funding`, `partnership`, `product_launch`, `expansion`, `customer_win`)
- `+10` secondary category (`leadership`, `financial`, `hiring`, `event`)
- `+10` strong signal word (launches, raises, acquires, partners, expands, …)
- `+5` snippet present

Labels: `70–100 high`, `40–69 medium`, `0–39 low`.

***

### Pricing

**Pay Per Event.** One event, `announcement-result`, is charged **only after** a valid, unique announcement row is successfully pushed to the dataset. Duplicate announcements, filtered-out rows, failed fetches, source pages, and summary records are **never** charged. The actor honours your per-run spending limit and stops cleanly when it is reached.

***

#### 🚦 Proxy policy

Use **Apify Datacenter** proxy or **no proxy** for normal runs — both work reliably for company news/RSS pages at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor fails at startup if `apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth (~$8/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's **Custom proxy URLs** field — that traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

***

### How sources are found

For each company the actor tries, in order of reliability:

1. **RSS/Atom feeds** advertised by the homepage or a news/press/blog section (structured and fast).
2. **Common announcement paths** — `/news`, `/newsroom`, `/company/news`, `/press`, `/press-releases`, `/media`, `/blog`.
3. **Schema.org `Article`/`NewsArticle` JSON-LD** and **Open Graph** metadata on those pages.
4. **Visible article links** on listing pages as a fallback.
5. **Free public search** fallback when no company-owned source is found (may surface third-party `general_news`).

### Notes & limitations

- Coverage is strongest for companies that publish an **RSS feed** or a structured **newsroom/blog**; custom JavaScript-only pages with no feed, JSON-LD, or server-rendered links may yield few or no rows (this actor is HTTP-only by design — no headless browser).
- Dates are extracted **conservatively** and never invented; announcements without a reliable date keep `published_date: null`.
- Company-**name** inputs are resolved best-effort via free public search; supplying a **domain** or a direct **source URL** is more reliable.

# Actor input Schema

## `companies` (type: `array`):

Company names or domains to find recent public news and announcements for, for example "Canva", "atlassian.com", or "HubSpot". Provide at least one company OR at least one start URL. Max 500.

## `startUrls` (type: `array`):

Direct public source pages to scan: newsroom, press, blog, or RSS/Atom feed URLs. Each must be a valid http/https URL.

## `searchMode` (type: `string`):

"Company sources" discovers common public announcement pages (news, press, blog, newsroom) and RSS feeds for each company, with a search fallback. "Direct URLs only" skips discovery and scans only your start URLs.

## `sourceTypes` (type: `array`):

Limit which source types are accepted. Leave empty to accept all.

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

Maximum saved announcement rows per run (the global cap). Range 1-5000.

## `maxResultsPerCompany` (type: `integer`):

Maximum announcements collected per company/input so one company cannot consume the whole run. Range 1-200.

## `lookbackDays` (type: `integer`):

Keep announcements published within this many days when a reliable date is available. Dated rows older than this are filtered out; undated rows are kept. Range 1-3650.

## `fromDate` (type: `string`):

Optional fixed lower date bound (YYYY-MM-DD). Overrides lookback days. When set, undated announcements are filtered out.

## `toDate` (type: `string`):

Optional fixed upper date bound (YYYY-MM-DD). Must be on or after the from date. When set, undated announcements are filtered out.

## `includeKeywords` (type: `array`):

Keep only announcements matching at least one of these keywords in the title, snippet, URL path, or source name. Leave empty to keep all.

## `excludeKeywords` (type: `array`):

Remove announcements matching any of these keywords in the title, snippet, URL path, or source name.

## `signalCategories` (type: `array`):

If set, keep only announcements whose detected category matches one of these.

## `deduplicate` (type: `boolean`):

Remove duplicate announcements (same canonical/announcement URL or same title) so you are not charged for duplicates.

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

Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).

## Actor input object example

```json
{
  "companies": [
    "Canva",
    "atlassian.com",
    "HubSpot"
  ],
  "startUrls": [
    "https://www.canva.com/newsroom/"
  ],
  "searchMode": "company_sources",
  "sourceTypes": [
    "newsroom",
    "press_release",
    "blog",
    "rss",
    "general_news"
  ],
  "maxResults": 100,
  "maxResultsPerCompany": 20,
  "lookbackDays": 180,
  "fromDate": "",
  "toDate": "",
  "includeKeywords": [
    "launch",
    "partner",
    "expansion",
    "funding"
  ],
  "excludeKeywords": [
    "webinar replay"
  ],
  "signalCategories": [],
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Flat table view with one row per announcement: company identity, source type/name/domain, title, announcement and canonical URLs, publication date, snippet, detected category, signal tags, growth signal score and strength, matched keywords, and discovery metadata.

# 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 = {
    "companies": [
        "Canva",
        "atlassian.com",
        "HubSpot"
    ],
    "startUrls": [
        "https://www.canva.com/newsroom/"
    ],
    "includeKeywords": [
        "launch",
        "partner",
        "expansion",
        "funding"
    ],
    "excludeKeywords": [
        "webinar replay"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/company-news-announcement-finder").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 = {
    "companies": [
        "Canva",
        "atlassian.com",
        "HubSpot",
    ],
    "startUrls": ["https://www.canva.com/newsroom/"],
    "includeKeywords": [
        "launch",
        "partner",
        "expansion",
        "funding",
    ],
    "excludeKeywords": ["webinar replay"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/company-news-announcement-finder").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 '{
  "companies": [
    "Canva",
    "atlassian.com",
    "HubSpot"
  ],
  "startUrls": [
    "https://www.canva.com/newsroom/"
  ],
  "includeKeywords": [
    "launch",
    "partner",
    "expansion",
    "funding"
  ],
  "excludeKeywords": [
    "webinar replay"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/company-news-announcement-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=coregent/company-news-announcement-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Company News & Announcement Finder",
        "description": "Find recent public company news, press releases, newsroom posts, blog announcements, product launches, funding updates, partnerships, and expansion signals. One flat, CSV-ready row per announcement. No login or cookies.",
        "version": "1.0",
        "x-build-id": "mDMAB2ekjV8j3DhDu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coregent~company-news-announcement-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coregent-company-news-announcement-finder",
                "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/coregent~company-news-announcement-finder/runs": {
            "post": {
                "operationId": "runs-sync-coregent-company-news-announcement-finder",
                "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/coregent~company-news-announcement-finder/run-sync": {
            "post": {
                "operationId": "run-sync-coregent-company-news-announcement-finder",
                "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": {
                    "companies": {
                        "title": "Companies",
                        "type": "array",
                        "description": "Company names or domains to find recent public news and announcements for, for example \"Canva\", \"atlassian.com\", or \"HubSpot\". Provide at least one company OR at least one start URL. Max 500.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct public source pages to scan: newsroom, press, blog, or RSS/Atom feed URLs. Each must be a valid http/https URL.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchMode": {
                        "title": "Search mode",
                        "enum": [
                            "company_sources",
                            "direct_urls_only"
                        ],
                        "type": "string",
                        "description": "\"Company sources\" discovers common public announcement pages (news, press, blog, newsroom) and RSS feeds for each company, with a search fallback. \"Direct URLs only\" skips discovery and scans only your start URLs.",
                        "default": "company_sources"
                    },
                    "sourceTypes": {
                        "title": "Source types",
                        "type": "array",
                        "description": "Limit which source types are accepted. Leave empty to accept all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "newsroom",
                                "press_release",
                                "blog",
                                "rss",
                                "general_news"
                            ],
                            "enumTitles": [
                                "Newsroom",
                                "Press release",
                                "Blog",
                                "RSS feed",
                                "General news"
                            ]
                        },
                        "default": [
                            "newsroom",
                            "press_release",
                            "blog",
                            "rss",
                            "general_news"
                        ]
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum saved announcement rows per run (the global cap). Range 1-5000.",
                        "default": 100
                    },
                    "maxResultsPerCompany": {
                        "title": "Max results per company",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum announcements collected per company/input so one company cannot consume the whole run. Range 1-200.",
                        "default": 20
                    },
                    "lookbackDays": {
                        "title": "Lookback days",
                        "minimum": 1,
                        "maximum": 3650,
                        "type": "integer",
                        "description": "Keep announcements published within this many days when a reliable date is available. Dated rows older than this are filtered out; undated rows are kept. Range 1-3650.",
                        "default": 180
                    },
                    "fromDate": {
                        "title": "From date",
                        "type": "string",
                        "description": "Optional fixed lower date bound (YYYY-MM-DD). Overrides lookback days. When set, undated announcements are filtered out.",
                        "default": ""
                    },
                    "toDate": {
                        "title": "To date",
                        "type": "string",
                        "description": "Optional fixed upper date bound (YYYY-MM-DD). Must be on or after the from date. When set, undated announcements are filtered out.",
                        "default": ""
                    },
                    "includeKeywords": {
                        "title": "Include keywords",
                        "type": "array",
                        "description": "Keep only announcements matching at least one of these keywords in the title, snippet, URL path, or source name. Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeKeywords": {
                        "title": "Exclude keywords",
                        "type": "array",
                        "description": "Remove announcements matching any of these keywords in the title, snippet, URL path, or source name.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "signalCategories": {
                        "title": "Signal categories",
                        "type": "array",
                        "description": "If set, keep only announcements whose detected category matches one of these.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "funding",
                                "partnership",
                                "product_launch",
                                "expansion",
                                "hiring",
                                "leadership",
                                "customer_win",
                                "event",
                                "financial",
                                "general"
                            ]
                        },
                        "default": []
                    },
                    "deduplicate": {
                        "title": "Deduplicate announcements",
                        "type": "boolean",
                        "description": "Remove duplicate announcements (same canonical/announcement URL or same title) so you are not charged for duplicates.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
