# AI Account Watch: Custom Sales Trigger Alerts (`fayoussef/ai-account-watch`) Actor

Watch a list of companies and get alerted when one does what you describe in plain English: raises funding, hires a CMO, opens a location, gets sued. AI reads fresh Google News and alerts only on real, new events, to email, Slack or webhook.

- **URL**: https://apify.com/fayoussef/ai-account-watch.md
- **Developed by:** [youssef farhan](https://apify.com/fayoussef) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 company rule checks

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AI Account Watch: Custom Sales Trigger Alerts for Any Company List

**Watch a list of companies and get alerted the moment one of them does what you describe in plain English.** Write rules like *"announces a new funding round"*, *"hires a new CMO"* or *"opens a location in Texas"*, paste your account list, and schedule it. Every run, AI reads the fresh news on each company and sends an alert only when an event really matches and has not been alerted before.

It is a Google Alerts replacement built for sales, recruiting, investing and PR teams: no keyword noise, no repeat alerts, and every alert comes with its source articles and a quote that proves it.

### Why AI Account Watch

- **Your own triggers, not a fixed menu.** Other trigger tools give you funding, hiring and exec changes. Here, anything you can describe in a sentence is a trigger: layoffs, lawsuits, data breaches, new locations, product launches, partnerships, price changes, government contracts.
- **AI filtering, not keyword matching.** Google Alerts fires on every article that mentions a name. This Actor reads each article and alerts only when *this* company is the one that did it, as a real, recent event. Namesakes, opinion pieces, listicles and stock tips are dropped.
- **Never the same event twice.** A funding round covered by fifteen outlets is one alert with fifteen sources, and a follow-up article next week is not a second alert.
- **Proof in every alert.** Each alert carries a one-sentence summary, the event date, a confidence score, the evidence quote and every source link.
- **No API key needed.** The AI runs on Apify's built-in access out of the box.
- **Alerts where you work.** Email, Slack, Discord, Telegram, or a webhook into n8n, Make, Zapier, Clay or your CRM.

### Who uses it

| Team | Example rules |
|---|---|
| **SDRs and account executives** | announces a new funding round; hires a new VP of Sales or CRO; expands to a new country |
| **Recruiters and staffing agencies** | announces layoffs; opens a new office or engineering hub; announces a hiring spree |
| **Investors and M\&A analysts** | acquires another company; is reported to be exploring a sale; files for an IPO |
| **Agencies and consultants** | hires a new CMO or Head of Marketing; launches a rebrand; loses a major client |
| **Vendor risk and compliance** | is hit by a data breach; is sued or fined by a regulator; files for bankruptcy |
| **Local and franchise sales** | opens a new location in Texas; announces a store closure |

### How it works

1. **Search.** For each company and rule, the Actor searches fresh news inside your lookback window (last 24 hours, 7 days or 30 days). Your rule is turned into Google keywords once and reused.
2. **Skip what is already known.** Articles judged by an earlier run are never sent to the AI again, so repeat runs stay fast and cheap.
3. **Judge.** The AI reads the new articles and decides which ones report that this company really did what your rule says. Several articles about the same event are grouped into one.
4. **Guard.** Events dated outside the lookback window are dropped, and events already alerted are skipped.
5. **Verify (optional).** With *Deep verify* on, each match gets one extra web search that confirms the event and when it was first announced.
6. **Alert.** New events land in the dataset and go out to your channels.

### Two search engines: you choose

| | Google search (default) | AI web search |
|---|---|---|
| **What it searches** | Google News, filtered to your lookback window | The open web, searched by the AI itself |
| **Best for** | Scheduled monitoring of news-worthy events | Events that only appear on company blogs, press pages or niche sites |
| **Speed** | Fast | Slower |
| **AI usage** | Low: the AI only reads articles it has not seen | Higher: every check runs a paid web search |
| **Repeat runs** | Exact dedupe on article links | Dedupe on the event itself |

Start with Google search. Switch a watchlist to AI web search when your companies are small enough that news sites rarely cover them.

### Input

| Field | What it does |
|---|---|
| **Companies to watch** | One per line. Add the website after a bar to avoid namesakes: `Mercury \| mercury.com` |
| **Alert me when the company...** | Your rules in plain English, one per line |
| **Search engine** | Google search (recommended) or AI web search |
| **Look back** | Last 24 hours, 7 days or 30 days. Match it to your schedule |
| **Deep verify matches** | One extra web search per match to confirm it before alerting |
| **Minimum confidence** | How sure the AI must be before an event becomes an alert (default 70) |
| **Articles per check** | Most new articles read per company and rule per run |
| **News country** | Which country's Google News edition and Google domain to check: 39 countries, from the United States and United Kingdom to Germany, Greece, the UAE and Brazil |
| **News language** | Auto (the country's main news language) or a specific language. Rules can stay in English: search keywords are written in the news language for you |
| **Also list checks with no match** | Adds a row per company and rule even when nothing matched |
| **Watchlist name** | Keeps the memory of alerted events apart for separate schedules |
| **Alert delivery** | Email, Slack, Discord, Telegram or a webhook, all optional |
| **AI model** | Which model reads the news. The default is fast and cheap |

#### Example input

```json
{
    "companies": [
        "Stripe | stripe.com",
        "Notion | notion.so",
        "Canva | canva.com"
    ],
    "rules": [
        "announces a new funding round or acquisition",
        "hires a new CMO or VP of Marketing"
    ],
    "searchEngine": "google",
    "lookback": "day",
    "deepVerify": false,
    "minConfidence": 70,
    "notificationEmail": "you@company.com",
    "watchlistName": "saas-accounts"
}
```

### Output

One row per new event, per company and rule:

```json
{
    "status": "alert",
    "company": "OpenAI",
    "companyDomain": "openai.com",
    "rule": "announces a new funding round, acquisition or investment",
    "summary": "OpenAI acquired Glass Imaging for $300 million.",
    "eventDate": "2026-09-17",
    "confidence": 95,
    "evidence": "OpenAI Acquires Glass Imaging in a $300 Million Bet on AI's Next Challenge",
    "url": "https://news.google.com/rss/articles/...",
    "sources": [
        { "title": "OpenAI Acquires Glass Imaging in a $300 Million Bet on AI's Next Challenge", "url": "https://...", "publisher": "Memeburn", "publishedAt": "2026-09-17T10:34:28Z" }
    ],
    "sourceCount": 3,
    "engine": "google",
    "verified": true,
    "verifyNote": "OpenAI acquired Glass Imaging for over $300 million on or around September 16, 2026.",
    "watchlist": "saas-accounts",
    "detectedAt": "2026-09-17T13:40:00Z"
}
```

The **Alerts** view shows the event, date, confidence and source link; the **Evidence** view shows why each alert matched. A run summary is saved as `OUTPUT` in the key-value store.

### Schedule it

1. Save your input as a Task.
2. Add a Schedule: daily with *Look back: last 24 hours*, or weekly with *last 7 days*.
3. Turn on email, Slack or a webhook.

Overlapping windows are safe: an event is never alerted twice within the same watchlist. Use a different **Watchlist name** for each separate list you schedule.

### Pricing

This Actor is billed **pay per event**:

| Event | What triggers it |
|---|---|
| `rule-check` | One company checked against one rule in a run (a check whose search fails completely is not billed) |
| `trigger-alert` | One new matching event pushed to your results |

The current rates are shown on this Actor's Store page. AI model usage is billed separately by Apify's OpenRouter integration, or by OpenRouter directly if you add your own key, so this Actor adds no token charge of its own. Google search checks only send unseen articles to the AI, which keeps repeat runs light.

**Free plan:** runs watch up to 3 companies with 1 rule (1 company in AI web search mode). Unlock full lists by subscribing to an [Apify plan](https://apify.com/pricing?fpr=youssef).

### FAQ

**Is this a Google Alerts alternative?**
Yes, for company monitoring. Google Alerts matches keywords; this Actor matches meaning, groups duplicate coverage, and skips events you already know about.

**Do I need an OpenAI or OpenRouter key?**
No. The AI runs on Apify's built-in access. You can optionally add your own OpenRouter key to have model usage billed to your OpenRouter account.

**How does it avoid old news?**
Every alert needs an event date inside your lookback window. In AI web search mode the dates printed on the cited pages are also checked, so an old announcement that is still online is not reported as new. *Deep verify* adds a check on when the event was first announced.

**How many companies can I watch?**
Up to 1,000 companies and 10 rules per run on a paid plan. Split larger lists into several Tasks with their own watchlist names.

**Can I send alerts to my CRM or Clay?**
Yes. Set a webhook URL and each run posts its new alerts as JSON, or use Apify's built-in integrations.

**What if a company name is ambiguous, like Mercury or Notion?**
Add the website after a bar (`Mercury | mercury.com`). The AI uses it to tell the company apart from namesakes.

***

⚡ Unlock full lists and higher limits with an [Apify plan](https://apify.com/pricing?fpr=youssef).
💼 Need a custom solution? Reach out at youssefarhan24@gmail.com
🌐 Got a site in mind? [Suggest it here](https://automationbyexperts.com/apify)

# Actor input Schema

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

One company per line. Add the website after a bar to avoid mix-ups with namesakes, for example "Mercury | mercury.com". Works for any size of company, from public giants to local businesses.

## `rules` (type: `array`):

Your trigger rules in plain English, one per line. The AI reads every fresh article and alerts only when a company really did what the rule says. Examples: "announces a new funding round", "hires a new CMO or VP of Marketing", "opens a new office or location", "announces layoffs", "launches a new product", "is hit by a data breach or lawsuit".

## `searchEngine` (type: `string`):

Google search checks Google News for fresh articles and the AI only reads articles it has not seen before, so repeat runs stay cheap. AI web search lets the AI search the whole web itself, which can catch events that only appear on company blogs or niche sites, but every check uses a paid web search.

## `lookback` (type: `string`):

How far back each run looks for news. Match it to your schedule: daily runs use the last 24 hours, weekly runs the last 7 days. Events are never alerted twice, so overlap between runs is safe.

## `deepVerify` (type: `boolean`):

Google search only. Before alerting, the AI runs one extra web search per match to confirm the event really happened. Fewer false alerts, and it only costs extra when something matched.

## `minConfidence` (type: `integer`):

How sure the AI must be before an event becomes an alert. Raise it for fewer, surer alerts; lower it to catch borderline news.

## `maxArticlesPerCheck` (type: `integer`):

The most new articles the AI reads for one company and rule per run. In AI web search mode it is the number of web results the search reads.

## `country` (type: `string`):

Which country's Google News edition and Google search domain to check. Pick the country where your companies make the news.

## `language` (type: `string`):

Language of the news results. Auto uses the country's main news language, which is right for almost every case. Google News only offers some languages per country (for example Canada in English or French); if the pair does not exist, news comes from the country's main edition and Google search still uses your language. Rules can stay in English.

## `reportEveryCheck` (type: `boolean`):

Off: the results hold alerts only. On: every company and rule also gets a row saying no matching event was found, which is handy as a proof-of-coverage log.

## `watchlistName` (type: `string`):

Names the memory of what was already alerted, so repeat runs never alert on the same event twice. Leave empty for one watchlist; give each schedule its own name to keep separate lists apart.

## `notificationEmail` (type: `string`):

An email address that receives the new alerts after each run that finds any.

## `slackWebhookUrl` (type: `string`):

An incoming webhook URL from your Slack workspace (Slack apps, Incoming Webhooks).

## `discordWebhookUrl` (type: `string`):

A channel webhook URL from Discord (Channel Settings, Integrations, Webhooks).

## `telegramBotToken` (type: `string`):

The token BotFather gave your own bot. Needs the chat ID below as well.

## `telegramChatId` (type: `string`):

The chat, group or channel your bot posts to.

## `webhookUrl` (type: `string`):

Any endpoint for n8n, Make, Zapier, Clay or your CRM. It receives the new alerts as JSON.

## `notifyMaxItems` (type: `integer`):

How many alerts one Slack, Discord, Telegram or email message lists before it says "and N more".

## `model` (type: `string`):

Which AI model reads the news. Prices in brackets are the model's own per-million-token rates, billed separately from this Actor by Apify's OpenRouter integration (or by OpenRouter on your own key). Fast, cheap models work well here: each check is a short read.

## `openrouterApiKey` (type: `string`):

Optional. Bring your own OpenRouter key and calls go straight to OpenRouter, billed by them on your own OpenRouter account instead of through Apify. Leave empty to use the built-in access, which needs no key at all.

## `apifyToken` (type: `string`):

Optional. Only needed when running this Actor outside the Apify platform. On Apify it is filled in automatically.

## Actor input object example

```json
{
  "companies": [
    "Stripe | stripe.com",
    "Notion | notion.so",
    "Canva | canva.com"
  ],
  "rules": [
    "announces a new funding round or acquisition"
  ],
  "searchEngine": "google",
  "lookback": "week",
  "deepVerify": false,
  "minConfidence": 70,
  "maxArticlesPerCheck": 10,
  "country": "us",
  "language": "auto",
  "reportEveryCheck": false,
  "notifyMaxItems": 20,
  "model": "google/gemini-2.5-flash"
}
```

# Actor output Schema

## `alerts` (type: `string`):

Every new trigger event found this run.

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

Checks run, articles read, alerts found and notification delivery.

# 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": [
        "Stripe | stripe.com",
        "Notion | notion.so",
        "Canva | canva.com"
    ],
    "rules": [
        "announces a new funding round or acquisition"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/ai-account-watch").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": [
        "Stripe | stripe.com",
        "Notion | notion.so",
        "Canva | canva.com",
    ],
    "rules": ["announces a new funding round or acquisition"],
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/ai-account-watch").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": [
    "Stripe | stripe.com",
    "Notion | notion.so",
    "Canva | canva.com"
  ],
  "rules": [
    "announces a new funding round or acquisition"
  ]
}' |
apify call fayoussef/ai-account-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fayoussef/ai-account-watch"
        }
    }
}
```

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/4k0Y8yO7SUzXBe2Nu/builds/z3L5pMQYuPzUEPkqs/openapi.json
