# Company News Triggers: Funding, Layoffs, M\&A and More (`jtpalms/company-news-triggers`) Actor

Watch a list of companies for buying-signal news from open GDELT data: funding, acquisitions, layoffs, expansions, leadership changes, lawsuits, launches. Readable rules, no AI guesses, each event cites its article. Schedule daily with only-new. USD 3 per 1,000 events.

- **URL**: https://apify.com/jtpalms/company-news-triggers.md
- **Developed by:** [JT Palms](https://apify.com/jtpalms) (community)
- **Categories:** Lead generation, News, Business
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 trigger events

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

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

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

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

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

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

# README

## Company News Triggers: Funding, Layoffs, M\&A and More

**Company trigger alerts from open news, with rules you can read.** Give this actor a list of companies and it returns dated buying-signal events from the [GDELT Project](https://www.gdeltproject.org/)'s open 15-minute news files: acquisitions, funding rounds, layoffs, expansions, leadership changes, product launches, partnerships, lawsuits and regulatory actions, bankruptcies, security incidents and earnings. Each row cites the real article, says which rule fired and why the company matched. No AI guesses, no search engine scraping, no LinkedIn, no proxies, no API key.

USD 3 per 1,000 events. Companies with no news cost nothing; a run with no events costs only the start fee.

### What people use it for

- **Outreach timing for SDR and BD teams.** Watch your target accounts daily and reach out the week they raise, expand, launch or hire a new executive.
- **Account watch.** Customers announcing layoffs, a new CFO, an acquisition or a security incident: know before the renewal call.
- **Competitor watch.** Launches, partnerships, lawsuits and acquisitions of the companies you compete with, in one daily feed.
- **Layoff and expansion watch for recruiters and outplacement firms.** New sites, plants, offices and hiring announcements, and the opposite.
- **CRM enrichment.** Push events to a sheet, Slack or your CRM with Apify integrations, keyed by company name and domain.

### Sample output

Real rows from a run on 2026-10-06 (companies `OpenAI`, `Nvidia`, `Microsoft`, `Walmart`, `Uber`; 24 hours; English sources; 22 events, the same 22 on Apify in 32 seconds):

| Published (UTC) | Company | Trigger | Confidence | Headline | Publisher |
|---|---|---|---|---|---|
| 2026-10-06 17:30 | OpenAI | funding | medium | OpenAI in talks with UAE funds, BlackRock for $30 billion funding round | business-standard.com |
| 2026-10-06 14:51 | Uber | acquisition, expansion | medium | Uber to Acquire EzCater for $2.3B, Expanding Catering Reach | businessinsider.com |
| 2026-10-06 15:00 | Microsoft | security-incident | high | Microsoft Exchange flaw allows hackers to read mailboxes across an organization, so patch now | techradar.com |
| 2026-10-06 14:30 | Nvidia | product-launch | high | Nvidia rolls out new Game Ready graphics driver for Call of Duty and more | kitguru.net |
| 2026-10-05 21:19 | Walmart | legal-regulatory | high | Frozen Berries Sold at Walmart and Trader Joe's Recalled Due to Potential E. Coli Contamination | aol.com |

One full row (JSON), exactly as output:

```json
{
  "id": "h1PN5e-s6YU-20261005231500-806",
  "company": "Walmart",
  "matchedName": "Walmart",
  "domain": null,
  "triggerTags": [
    "legal-regulatory"
  ],
  "primaryTrigger": "legal-regulatory",
  "confidence": "high",
  "matchedOn": [
    "headline",
    "organization"
  ],
  "matchedRule": "regulatory.1",
  "matchedRules": [
    "regulatory.1"
  ],
  "title": "Frozen Berries Sold at Walmart and Trader Joe's Recalled Due to Potential E. Coli Contamination",
  "url": "https://www.aol.com/articles/frozen-berries-sold-walmart-trader-211919000.html",
  "sourceDomain": "aol.com",
  "publishedAt": "2026-10-05T21:19:00.000Z",
  "seenAt": "2026-10-05T23:15:00.000Z",
  "language": "en",
  "tone": -1.6,
  "themes": [
    "TAX_FNCACT_TRADER",
    "AFFECT",
    "TAX_DISEASE_OUTBREAK",
    "WB_635_PUBLIC_HEALTH",
    "WB_2165_HEALTH_EMERGENCIES",
    "WB_2166_HEALTH_EMERGENCY_PREPAREDNESS_AND_DISASTER_RESPONSE",
    "WB_621_HEALTH_NUTRITION_AND_POPULATION",
    "WB_2167_PANDEMICS",
    "EPU_CATS_HEALTHCARE",
    "WB_2024_ANTI_CORRUPTION_AUTHORITIES"
  ],
  "organizations": [
    "trader joe",
    "walmart",
    "publix"
  ],
  "matchedOrganizations": [
    "walmart"
  ],
  "countries": [
    "US",
    "PR"
  ],
  "alsoOnDomains": [],
  "rulesVersion": "2026-10-06.1",
  "source": "gdelt-gkg",
  "citation": "Contains data from the GDELT Project, https://www.gdeltproject.org/",
  "fetchedAt": "2026-10-06T20:18:44.399Z"
}
```

### How it works

1. **One scan for the whole list.** GDELT publishes one Global Knowledge Graph file every 15 minutes with every article it processed (about 1,500 English-language articles per file). The actor downloads the files for your window (4 at a time, newest first) and checks every headline against one dictionary built from all your company names, so 500 companies cost about the same scan as 5. A 24-hour run reads 96 files (about 470 MB): 30 seconds on Apify in our test, 9 seconds from a fast home line.
2. **Company match.** A row is a candidate when a company name or alias appears as whole words in the headline, when GDELT's organization list for the article names the company, or when the article sits on the company's own domain.
3. **Trigger rules.** The headline is checked against the published rules below. Every rule has an id (`acquisition.1`, `lawsuit.1`...) that appears in `matchedRule`, so you can audit any row.
4. **Role checks.** For funding, expansion and product launches the company must be named before the trigger words (it is the one raising, opening or launching), and for funding not after "from", "by", "with", "backed", "led" or "including" (an investor in someone else's round is not reported as raising money). For leadership changes the company must be named before the appointment words, or right after "of" or "at" ("new CEO of X"). A company named as a source ("X says", "according to X", "in X report"), or as a person's past employer ("former X chief", "X veteran", "X alum"), is not the subject.
5. **Confidence.** `high`: the headline names the company and GDELT also tagged it as an organization. `medium` (the default minimum): the headline names the company, or the article is on the company's domain. `low` (only with **Minimum confidence: Low**): GDELT's organization list names the company but the headline does not, or only a GDELT theme code (`ECON_BANKRUPTCY`, `WB_1277_BANKRUPTCY_AND_LIQUIDATION`, `CYBER_ATTACK`) suggests the trigger.
6. **Duplicates.** The same URL is one event. The same headline on many sites is one event per company, keeping the earliest copy and naming the other publishers in `alsoOnDomains`. Different companies in one headline give one event each. Rows come out newest first; each row is charged once.

### The rules, published

Rules version `2026-10-06.1`. Words are matched as whole words in any case. Precision is the share of correct rows in a hand-checked sample: rows this actor output for a 430-company watch list (big tech, banks, retailers, automakers, airlines, pharma, telecoms, Canadian and Indian majors, AI startups) over the 72 hours of GDELT files to 2026-10-06 20:00 UTC. A row counts as correct only when the headline reports that kind of event with the watched company (or a named unit of it) as a party; an investor in someone else's round, a source, a venue or another company with the same name counts as wrong. Recall was not measured: headlines worded in other ways are missed. The labelled rows ship with the actor's tests, which fail if the rules drift from these numbers.

| Trigger type | Main words (rule ids) | Measured precision |
|---|---|---|
| `acquisition` | acquires, to acquire, acquisition of, takeover, buyout, merger, merges, agrees to buy, deal to buy, bought by, snaps up (not "acquires N shares", "customer acquisition", shoppers who "snap up" a bargain) (`acquisition.1`) | 20 of 20 |
| `expansion` | expands presence, footprint, operations, production or capacity (`expansion.1`); expands into (`.2`); opens a new office, plant, factory, store, hub, data center, hotel and similar (`.3`); to build or plans a new site (`.4`); invests an amount in a new site or capacity (`.5`); breaks ground, enters the market, international or retail expansion, expansion plans (`.6`); to hire or create N jobs (`.7`) | 20 of 20 |
| `product-launch` | launches, unveils, introduces, debuts, rolls out or releases followed by a product word (app, platform, model, service, feature, chip, vehicle, flavors...) but not a probe, campaign, attack, budget or plan (`product-launch.1`); now available, hits shelves (`.2`) | 19 of 20 |
| `partnership` | partners with, partnership with, strategic or technology partnership, teams up with, joint venture, strategic alliance, collaborates with, joins forces, tie-up, signs a deal or agreement with, strikes a deal with (not diplomatic or bilateral partnerships) (`partnership.1`) | 19 of 20 |
| `legal-regulatory` | sues, sued, lawsuit, class action, litigation, injunction, patent infringement, settles a suit (`lawsuit.1`); regulator, antitrust, competition authority, FDA/SEC/FTC/FCA/CMA and others approve, fine, probe or block, recalls, consent decree, licence revoked, GDPR (`regulatory.1`); fined, hit with a fine or probe, faces or opens a probe or investigation, under investigation, indicted, pleads guilty, subpoena, penalty (`legal.1`) | 19 of 20 |
| `layoffs` | layoffs, lays off, laid off, job cuts, cuts N jobs, slashes jobs, redundancies, workforce reduction, downsizing, furloughs, voluntary separation (not "avoids furloughs", "no layoffs") (`layoffs.1`) | 18 of 19 (all available) |
| `leadership-change` | appoints, names, hires, taps or promotes a CEO, CFO, CTO, chief officer, president, chair or managing director (`leadership-change.1`); a chief steps down, resigns, retires or is ousted (`.2`); new or interim CEO, takes the helm, succeeds as CEO (`.3`); not prime ministers or coaches | 17 of 19 |
| `earnings` (off by default) | earnings report, results, beat or miss; Q1 to Q4 results, profit or revenue; revenue rises or falls; beats or misses estimates; raises or cuts guidance; profit warning; trading update (`earnings.1`) | 17 of 20 |
| `security-incident` | data breach, hacked, hackers, cyberattack, ransomware attack, data leak, phishing attack, DDoS, zero-day, stolen data (`security-incident.1`) | **13 of 19, weak**: articles about breach rules and people who hack are tagged too |
| `funding` | raises, secures, lands or closes an amount (USD 5M, EUR 2bn, 25 million) for a round (`funding.1`); Series A to F, seed round, pre-seed, funding round, venture round, in new funding (`funding.2`); not PACs, campaigns, charity drives or raised outlooks, guidance, forecasts, revenue, estimates or dividends | **weak or unproven**: 2 of 4 company events (only 4 in 72 hours for this list); the headline rule alone was right on 15 of 20 headlines (misses: charity drives, a stock exchange's listings total) |
| `bankruptcy` | bankruptcy, Chapter 7, 11 or 15, insolvency, receivership, liquidation, creditor protection, CCAA, enters administration, administrators appointed, goes bust, files for bankruptcy (`bankruptcy.1`) | **weak or unproven**: 0 of 2 company events (only 2 in 72 hours for this list); the headline rule alone was right on 14 of 18 headlines (misses: a person's bankruptcy, an insolvency risk warning, legal commentary) |

Honest notes on these numbers: samples are small and concentrated on a few big stories rewritten by many publishers (the Paramount and Warner Bros. Discovery merger, HDFC Bank's new CEO, an OpenAI data incident in Australia), so another week will differ. The same company-role errors can appear in any type: a headline that names your company next to someone else's event ("X Secures Major Nvidia GPU Contract for AI Expansion") is still tagged. Check `matchedRule` and the headline before acting on an event.

### Company matching and how to avoid false matches

- Write names as people write them: `Shopify`, `C.H. Robinson`, `AT&T`, `McDonald's`. Accents, dots in initials, `&` versus `and`, possessives (`Shopify's`) and decimal numbers are normalised. Legal endings at the end of a name (Inc, Corp., Corporation, Ltd, LLC, PLC, GmbH, AG, SA, NV and others) are ignored, so `Acme Corp.` matches "Acme" and "Acme Corporation". Group words (Holdings, Group) are kept in your name but ignored in GDELT's organization names, so `Rolls-Royce` matches GDELT's "rolls royce holdings".
- A mention does not count when it is written all in lower case while your name has capitals ("snap up" is not Snap), when it follows a currency sign ("GBP 3m" is not 3M), when it is glued to another word by a hyphen ("Nvidia-backed", "ex-Microsoft"), or when it sits in a short " - Publisher" or " | Publisher" ending.
- Add other names on the same line: `JPMorgan | JPMorgan Chase | JP Morgan`.
- For names that are also common words, add `+` words: the headline (or GDELT's organization list) must contain one of them. `Visa | +payments | +card | +cards | +mastercard`.
- Add `-` words to drop headlines: `Ford | -doug ford | -harrison ford`.
- Add the company's domain (`block.xyz`) to output it and to count articles published on that domain.
- In **Company details (JSON)** you can also set `matchCase: true` (the headline must use your exact capitals) or `requireOrganization: true` (GDELT must also tag the company as an organization), the strongest guard for names like Block or Square.

### Scheduling recipe: a daily trigger feed

1. Save your company list as a task with **Only new events** on, **Look back** 24 or 26 hours (the overlap catches late files) and the trigger types you care about.
2. Schedule it daily (or every few hours with a shorter look back).
3. Add an Apify integration: Slack, email, a webhook, Zapier or Make on "Run succeeded", or read the dataset from the API into a sheet or CRM.

The first run outputs current events (or nothing, with **First run with Only new** = None). Later runs output only events no earlier run output. The memory is kept per company list and settings in your own `company-news-triggers-state` key-value store for 14 days, so two tasks with different lists never hide each other's events.

### Input example

```json
{
  "companies": ["Shopify", "Stripe", "Visa | +payments | +card", "Ford Motor | Ford | -doug ford"],
  "companyDetails": [{ "name": "Block", "aliases": ["Block Inc", "Square", "Cash App"], "domain": "block.xyz", "requireOrganization": true }],
  "triggerTypes": ["funding", "acquisition", "layoffs", "leadership-change", "expansion"],
  "lookbackHours": 26,
  "onlyNew": true,
  "maxEventsPerCompany": 10,
  "maxResults": 500
}
```

### Output fields

| Field | Meaning |
|---|---|
| `id` | Company id plus GDELT record id. |
| `company` | The company as you wrote it. |
| `matchedName` | Which of its names matched (or the domain). |
| `domain` | The company domain you supplied, if any. |
| `triggerTags` | All trigger types the headline matched, most specific first. |
| `primaryTrigger` | The first of `triggerTags`. |
| `confidence` | `high`, `medium` or `low` (see How it works). |
| `matchedOn` | `headline`, `organization` and/or `domain`. |
| `matchedRule`, `matchedRules` | Rule id of the primary trigger, and of every tag in `triggerTags`. |
| `title` | The headline as published (HTML entities decoded, long dashes written as a hyphen). |
| `url`, `sourceDomain` | The publisher's article URL and domain. |
| `publishedAt`, `seenAt` | Publisher's timestamp when GDELT found one, else the GDELT file time; and the GDELT file time (UTC). |
| `language`, `tone` | Source language; GDELT's overall tone (about -10 to +10). |
| `themes`, `organizations`, `countries` | Top 10 GDELT theme codes, organization names and ISO country codes of the article. |
| `matchedOrganizations` | GDELT organization names that matched the company. |
| `alsoOnDomains` | Other publishers that ran the same headline. |
| `rulesVersion`, `source`, `citation`, `fetchedAt` | Rules version, `gdelt-gkg`, the GDELT credit line, and when this run wrote the row. |

The run's **SUMMARY** record lists events per company (including companies with none) and per trigger type, files read, articles scanned, duplicates merged and what was charged.

### Pricing

Pay per event:

| Event | Price (FREE and BRONZE plans) |
|---|---|
| Run start | USD 0.002 |
| Trigger event (one output row) | USD 0.003, so USD 3 per 1,000 |

SILVER plans pay 10% less per event and GOLD and above 20% less. Examples:

- The default input (5 companies, 24 hours) returned 22 events on 2026-10-06: about USD 0.07.
- 200 companies watched daily with **Only new events**, about 60 new events a week: about USD 0.78 a month for events plus USD 0.06 for 30 starts.
- Quiet companies cost nothing. Set **Maximum cost per run** in the run options to cap any run; the actor stops cleanly at that limit.

### Personal data

GDELT's files also carry person names, quotations and page authors; this actor never reads those columns and has no field for a person. `leadership-change` only labels the article: the headline is the publisher's own text and may name the executive, exactly as published.

### Attribution and data source

Contains data from the GDELT Project (https://www.gdeltproject.org/). GDELT states that its datasets "are available for unlimited and unrestricted use for any academic, commercial, or governmental use of any kind without fee", with a citation and a link to its website when redistributing. Every row carries that citation in `citation`; please keep it when you republish the data.

### Limits

- Headline rules miss events worded in other ways and mis-tag some; the precision above is measured, not guaranteed. GDELT's coverage is broad but not complete.
- Different headlines about the same story from different publishers are separate events (only identical headlines are merged). **Maximum events per company** keeps one big story from filling a run.
- English rules: non-English headlines rarely match. Translated sources arrive 1 to 3 hours late.
- Titles only: GDELT publishes no snippet and this actor does not fetch articles.
- 72 hours is the maximum window per run.

### Polite fetching

Every request names this actor (`Mozilla/5.0 (compatible; company-news-triggers/1.0; +https://apify.com/JTPalms)`). GDELT files are static downloads from data.gdeltproject.org, at most 4 at a time, each downloaded once per run. No proxies, no browser automation, no article pages fetched.

# Actor input Schema

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

One company per line, written as it is usually written (Snap, not snap). Legal endings such as Inc, Corp., Ltd or GmbH are ignored, so Acme Corp. also matches Acme and Acme Corporation. Optional extras on the same line, separated by |: other names (Block | Square | Cash App), the company's own domain (block.xyz), -word to drop headlines containing that word (Ford | -doug ford), +word to keep only headlines (or GDELT organization names) that also contain one of the + words (Visa | +payments | +card).

## `triggerTypes` (type: `array`):

Which kinds of events to return. Empty = all except earnings. Each type is a published keyword rule on the headline; measured precision per type is in the README.

## `minConfidence` (type: `string`):

High: the headline names the company and GDELT also tagged it as an organization. Medium (default): the headline names the company (or the article is on the company's own domain). Low: also articles where only GDELT's organization list names the company, or where only a GDELT theme code (bankruptcy, cyber attack) suggests the trigger.

## `lookbackHours` (type: `integer`):

Window ending now. GDELT publishes one file every 15 minutes, so 24 hours = 96 files (about 450 MB read, about 10 seconds). One scan serves every company in the list.

## `languages` (type: `array`):

Two-letter codes. en (default) reads GDELT's main files (English-language sources). Other codes (fr, de, es...) also read GDELT's translation files, which arrive 1 to 3 hours late; their headlines stay in the original language, so the English trigger rules rarely fire on them (use Minimum confidence: Low to see theme-based events). Empty = all.

## `onlyNew` (type: `boolean`):

Remember which events earlier runs output and output only new ones. Schedule daily: runs with nothing new output nothing and cost only the start. The memory is kept per company list and settings in your company-news-triggers-state key-value store for 14 days.

## `firstRunOutput` (type: `string`):

All: the first run outputs the current events. None: the first run outputs nothing and only records what is there, so alerts start with the next run.

## `maxEventsPerCompany` (type: `integer`):

Cap per company per run, newest first, so one big story cannot fill the whole run.

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

Hard cap per run across all companies. Files are read newest first and reading stops once the cap is reached.

## `companyDetails` (type: `array`):

Advanced: companies as objects, added to the list above. Fields: name (required), aliases (list), domain, excludeWords (list), mustInclude (list), matchCase (true: the headline must use the same capitals, so Block never matches BLOCK or block), requireOrganization (true: only articles where GDELT also tagged the company as an organization). Example: \[{"name": "Block", "aliases": \["Block Inc", "Square", "Cash App"], "domain": "block.xyz", "requireOrganization": true}]

## Actor input object example

```json
{
  "companies": [
    "OpenAI",
    "Nvidia",
    "Microsoft",
    "Walmart",
    "Uber"
  ],
  "triggerTypes": [
    "funding",
    "acquisition",
    "layoffs",
    "expansion",
    "leadership-change",
    "product-launch",
    "partnership",
    "legal-regulatory",
    "bankruptcy",
    "security-incident"
  ],
  "minConfidence": "medium",
  "lookbackHours": 24,
  "languages": [
    "en"
  ],
  "onlyNew": false,
  "firstRunOutput": "all",
  "maxEventsPerCompany": 20,
  "maxResults": 50
}
```

# Actor output Schema

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

One row per (company, article) trigger event in the default dataset (JSON, CSV, Excel via the format parameter).

## `summary` (type: `string`):

Window, files read, articles scanned, events per company and per trigger type, duplicates merged, rows output and charged.

# 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": [
        "OpenAI",
        "Nvidia",
        "Microsoft",
        "Walmart",
        "Uber"
    ],
    "lookbackHours": 24,
    "languages": [
        "en"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("jtpalms/company-news-triggers").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": [
        "OpenAI",
        "Nvidia",
        "Microsoft",
        "Walmart",
        "Uber",
    ],
    "lookbackHours": 24,
    "languages": ["en"],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("jtpalms/company-news-triggers").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 '{
  "companies": [
    "OpenAI",
    "Nvidia",
    "Microsoft",
    "Walmart",
    "Uber"
  ],
  "lookbackHours": 24,
  "languages": [
    "en"
  ],
  "maxResults": 50
}' |
apify call jtpalms/company-news-triggers --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jtpalms/company-news-triggers"
        }
    }
}
```

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/wMvUh9gm4R1lf108b/builds/p9EBc73firi9Yu7OK/openapi.json
