Dataset New Items Alerts: Email, Slack, Discord & Telegram avatar

Dataset New Items Alerts: Email, Slack, Discord & Telegram

Pricing

from $1.00 / 1,000 alert delivereds

Go to Apify Store
Dataset New Items Alerts: Email, Slack, Discord & Telegram

Dataset New Items Alerts: Email, Slack, Discord & Telegram

Get an email, Slack, Discord, Telegram or webhook alert with only the new items from any Apify scraper's dataset. Remembers what was sent, filters with simple rules (price < 500), one digest per run. Failed sends are free.

Pricing

from $1.00 / 1,000 alert delivereds

Rating

0.0

(0)

Developer

Nicholas Powers

Nicholas Powers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

Get an alert with only the new items every time your Apify scraper runs. Connect this Actor to any scraper or task, and after each run it checks the dataset, remembers what it already sent, and posts one tidy digest of the new items to Slack, Discord, Telegram, a webhook (Zapier, Make, n8n, your API) or email. New jobs, new listings, price drops, new products, new articles, new reviews: you hear about them once, and only once.

Add alert rules like price < 500, title contains remote or rating >= 4.5 so you only get pinged for items that matter. Failed deliveries are free, runs with nothing new send nothing and cost almost nothing, and the Actor never goes over your max cost per run.

What it does

  • 🆕 Only new items: remembers the items it has already alerted on (by url, or any key fields you choose) across runs, so a scheduled scraper never repeats itself. URLs are matched without tracking parameters (utm_*, fbclid...), www. or trailing slashes; text is matched case-insensitively.
  • 🎯 Alert rules: =, !=, >, >=, <, <=, contains, !contains, matches (regex), exists, empty. Numbers like $1,299 and dates like 2026-11-01 are compared as numbers and dates. Dot paths (offer.price) work. Combine with ALL or ANY.
  • 📣 Channels: Slack (incoming webhook, Block Kit), Discord (webhook embeds with optional thumbnails), Telegram (your bot), any webhook (full items as JSON), and email to your own Apify account address. Use several at once.
  • 🧾 One digest per run, not one message per item: a title like "12 new items", each item's headline linked to its URL, the fields you choose (price, location, date...), and "+N more" with a link to the full dataset. Titles, links and fields are detected automatically if you don't set them.
  • 🔌 Built for integrations: set Dataset to {{resource.defaultDatasetId}} in "Run another Actor when a run succeeds" and it works for every future run. Runs with limited permissions (it can read only the dataset you give it).
  • 🛟 Reliable: retries 429 rate limits (honoring Retry-After), 5xx errors and timeouts; splits long digests to fit Slack (50 blocks), Discord (10 embeds / 6,000 chars) and Telegram (4,096 chars) limits; stable error codes per channel. If every channel fails, the items are not marked as sent, so the next run tries again.
  • 🔒 Secrets stay secret: webhook URLs and bot tokens are encrypted input fields and never written to logs.
  • 🧪 Dry run: preview every message in the dataset without sending, charging or touching the memory.

Pricing

Pay per event. Compute and storage are included.

EventFree & BronzeSilverGold & above
Alert delivered (one digest to one channel, any number of items)$0.0015$0.0012$0.001
1,000 items checked, beyond the first 1,000 in a run$0.001$0.001$0.001

Plus Apify's standard Actor start event ($0.00005 per run at the default 256 MB).

Not charged: failed deliveries, runs with nothing new (unless you turn on the heartbeat), the first 1,000 items of every run, dry runs, the free demo, and items checked in runs where every channel failed.

Examples (Free plan prices)

ScenarioCost
Hourly job scraper (200 items per run) → Slack, about 3 runs/day have new jobs90 alerts × $0.0015 + 720 starts × $0.00005 = about $0.17/month
Daily real-estate scraper (5,000 listings) → Telegram + Discord, every day has new listings30 × (2 × $0.0015 + 4 × $0.001) = about $0.21/month
One run, 50,000 items checked, 1 webhook$0.0015 + 49 × $0.001 = $0.05
Run with nothing new (up to 1,000 items checked)$0.00005 (Actor start only)

Email note: email is sent through Apify's free Send Email Actor, which delivers only to the email address of your Apify account and runs as a short separate run in your account (its small compute usage is billed by Apify as usual, typically a fraction of a cent). To email other people, point the webhook at Zapier, Make or n8n.

How to use it

  1. Open your scraper or saved task → Integrations → Run another Actor when a run succeeds → choose Dataset New Items Alerts.
  2. In its input, set Dataset to {{resource.defaultDatasetId}} and fill in a channel (for example the Slack webhook URL).
  3. Done. Every successful run of the scraper triggers a check; you get a message only when there are new items.
{
"datasetId": "{{resource.defaultDatasetId}}",
"keyFields": ["url"],
"slackWebhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX",
"fields": ["price", "location"],
"title": "{{count}} new listings"
}

Tip: if the scraper already has hundreds of items, set First run to Silent: the first run just remembers everything and later runs alert only on genuinely new items.

2. Only alert on what matters

{
"datasetId": "{{resource.defaultDatasetId}}",
"filters": ["price <= 1500", "city = Tempe", "title !contains studio"],
"telegramBotToken": "123456789:AA...",
"telegramChatId": "-1001234567890",
"fields": ["price", "bedrooms", "city"]
}

3. Send new items to your own system

The webhook receives one JSON POST per run:

{
"event": "dataset.new_items",
"title": "3 new items",
"newItemCount": 3,
"items": [{ "title": "...", "url": "https://...", "price": 129 }],
"itemsTruncated": false,
"datasetId": "WkzbQMuFYuamGv3YF",
"sourceActorId": "...",
"sourceRunId": "...",
"memoryName": "...",
"datasetUrl": "https://console.apify.com/storage/datasets/WkzbQMuFYuamGv3YF",
"sentAt": "2026-11-01T17:13:09.000Z"
}

Add headers such as {"Authorization": "Bearer ..."} in Webhook headers. Zapier "Catch Hook", Make "Custom webhook" and n8n "Webhook" nodes accept it as is.

Getting the webhook URLs

  • Slack: create an app at api.slack.com/apps → Incoming Webhooks → Add New Webhook to Workspace → copy the https://hooks.slack.com/services/... URL.
  • Discord: channel settings → Integrations → Webhooks → New Webhook → Copy Webhook URL.
  • Telegram: message @BotFather → /newbot → copy the token. Add the bot to your group or channel (or send it /start), then use the chat ID (e.g. -1001234567890) or @channelname.

How "new" is decided

Each item gets a key from Key fields (default url). Keys of alerted items are stored as compact fingerprints in a key-value store in your account named alerts-memory-<memory name>. Leave Memory name empty and one is created per source Actor + channels + filters, so two different alert setups never share memory. Set a name to share it on purpose, or Reset memory to start over. Items matching your rules are remembered only after at least one channel received them.

Output

  • Dataset: a delivery log, one row per channel: channel, status (sent, partial, failed, skipped, dry-run), messagesSent, newItemCount, itemsShown, errorCode, error, charged. In dry runs each row also has a preview of the exact message.
  • NEW_ITEMS record: the new matching items of this run (first 1,000), ready for the next step of a pipeline.
  • OUTPUT record: summary with items checked, new, filtered out, seen in earlier runs, duplicates, memory size and per-channel status.

Error codes

CodeMeaningCharged
INPUT_INVALIDInput problem (e.g. unfilled {{resource.defaultDatasetId}}, bad filter); the message says what to fixNo
DATASET_NOT_FOUNDWrong or expired dataset IDNo
DATASET_NO_ACCESSThe dataset was not passed in the Dataset field (limited permissions)No
WEBHOOK_INVALIDSlack/Discord/your webhook rejected the URL (404, 410, 401...), or Telegram rejected the bot tokenNo
CHAT_NOT_FOUNDTelegram chat ID wrong, or the bot isn't in the chatNo
MESSAGE_REJECTEDThe service refused the message content (HTTP 400)No
RATE_LIMITEDStill HTTP 429 after 4 attemptsNo
SERVICE_ERRORHTTP 5xx after 4 attemptsNo
NETWORK_ERRORDNS, TLS or timeout after 4 attemptsNo
EMAIL_NOT_OWN_ADDRESSSend Email delivers only to your Apify account's emailNo
EMAIL_FAILEDThe Send Email run failedNo
MAX_COST_REACHEDYour max cost per run was reached; channel skippedNo

If some channels succeed and others fail, the run succeeds and the failures are listed in the log. If every channel fails, the run fails (so your integration shows it), nothing is charged, and the items stay "new" for the next run.

FAQ

Which scrapers does it work with? Any Actor or task that writes to a dataset: job boards, real-estate, e-commerce, news, reviews, social media, your own Actors.

Is one message sent per item? No, one digest per channel per run (split into a few messages only when Slack/Discord/Telegram size limits require it). You pay per digest, not per item.

Can I get a message even when nothing is new? Yes, turn on Send a message when nothing is new for a daily "No new items" heartbeat (charged as a normal alert).

What about very large datasets? It streams the dataset in pages and stores fingerprints compactly; millions of items work. Use Max items to check or your max cost per run to cap it.

Is my data shared? The Actor sends items only to the channels you configure. It is not affiliated with Slack, Discord, Telegram or any scraper you connect it to.