Cross-platform OSINT Seed-list Monitor avatar

Cross-platform OSINT Seed-list Monitor

Pricing

Pay per event

Go to Apify Store
Cross-platform OSINT Seed-list Monitor

Cross-platform OSINT Seed-list Monitor

Monitor public Telegram, RSS, and web seed lists. Export normalized OSINT evidence records with source URLs, content hashes, and deltas.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Turn a seed list of public accounts, URLs, and feeds into a normalized OSINT evidence dataset.

This actor is built for repeatable public-source monitoring inspired by election-disinformation workflows: analysts start with known entities, refresh public records, preserve source URLs, and compare what is new between runs.

What does Cross-platform OSINT Seed-list Monitor do?

Cross-platform OSINT Seed-list Monitor collects public records from conservative no-login sources and outputs one consistent evidence schema.

It currently supports:

  • ๐Ÿ›ฐ๏ธ Telegram public channel preview pages
  • ๐Ÿ“ฐ RSS and Atom feeds
  • ๐ŸŒ Public web pages and articles
  • ๐Ÿ” Run-to-run content hash deltas
  • ๐Ÿ”Ž Keyword annotations for analyst triage

Who is it for?

This actor is useful for teams that need repeatable public evidence collection, not a one-off scrape.

  • ๐Ÿ—ณ๏ธ Election integrity and civil-society monitoring teams
  • ๐Ÿง‘โ€๐Ÿ’ป OSINT researchers and investigative journalists
  • ๐Ÿ›ก๏ธ Risk intelligence and trust-and-safety analysts
  • ๐ŸŽ“ Academic researchers studying narratives over time
  • ๐Ÿ“Š Agencies building briefing datasets from public sources

Why use this monitor?

Single-platform scrapers are useful when you already know the exact source. Influence and disinformation investigations usually start with a mixed watchlist: Telegram channels, source domains, campaign pages, RSS feeds, and keywords.

This actor keeps that workflow in one place:

  • one input seed list
  • one dataset schema
  • one content hash per evidence record
  • one runDelta field for scheduled monitoring
  • one export that downstream tools can join, filter, and audit

What sources are supported in v1?

V1 is intentionally conservative.

It focuses on public, no-login HTTP sources that are reliable enough for scheduled actor runs:

  • telegram โ€” public t.me/s/<channel> previews
  • rss โ€” RSS and Atom feed items
  • web โ€” page-level public web/article extraction

What is not included yet?

The actor does not log in to X, Facebook, TikTok, Instagram, VK, or private Telegram groups.

Those platforms can be added later through delegated Apify actors when a buyer wants that exact workflow. This keeps v1 reliable and avoids brittle login or CAPTCHA-heavy paths.

Data you can extract

FieldDescription
sourcetelegram, rss, or web
sourceUrlDirect URL for the public evidence record
seedOriginal seed value from your watchlist
seedLabelOptional human label for the seed
matchedEntityTelegram channel or domain
recordTypeTelegram message, RSS item, or web page
publishedAtSource timestamp when available
scrapedAtCollection timestamp
titlePage or feed title when available
textExtracted evidence text
authorNameSource author/channel when available
mediaUrlsPublic media URLs found on the record
outlinksLinks found in the evidence
engagementViews or similar public metrics when exposed
contentHashSHA-256 hash for dedupe and deltas
runDeltanew or seen across scheduled runs
matchedKeywordsKeywords found in the record text

How much does it cost to monitor OSINT seed lists?

The actor uses pay-per-event pricing.

You pay a small start fee for each run and a per-record fee for each normalized evidence record saved to the dataset. Current configured prices are:

EventFree plan tierBronze tierNotes
Run started$0.005000$0.005000Charged once per run
Evidence record$0.000035858$0.000031181Charged for each normalized dataset item

Approximate run-cost examples before Apify platform credits or subscriptions:

Example runItems savedFree plan tier estimateBronze tier estimate
Smoke test20~$0.00572~$0.00562
Small watchlist50~$0.00679~$0.00656
Realistic v1 validation120~$0.00930~$0.00874
Larger scheduled refresh1,000~$0.04086~$0.03618

Free-plan users still see the FREE tier event price above; Apify may apply any platform credits or free usage allowance in your account separately. Start with low limits so you can estimate the number of records your sources produce:

  • 1-3 seeds
  • 20-50 records per seed
  • 1-3 Telegram pages per seed

Then increase limits for scheduled monitoring once you know the sources are relevant.

Quick start

  1. Open the actor on Apify.
  2. Add Telegram channels, RSS feeds, or public URLs to seeds.
  3. Choose source types: telegram, rss, and/or web.
  4. Set maxRecordsPerSeed.
  5. Optionally add matchKeywords.
  6. Run the actor.
  7. Export the dataset as JSON, CSV, Excel, or via API.

Example input

{
"seeds": [
{ "value": "telegram", "label": "Telegram News", "type": "telegramChannel" },
{ "value": "https://blog.apify.com/rss/", "label": "Apify Blog RSS", "type": "url" },
{ "value": "https://blog.apify.com/qriton-election-disinformation-analysis/", "label": "Qriton case study", "type": "url" }
],
"sourceTypes": ["telegram", "rss", "web"],
"maxRecordsPerSeed": 50,
"maxPagesPerSeed": 3,
"matchKeywords": ["election", "disinformation", "OSINT"],
"includeRunDeltas": true
}

Example output

{
"source": "telegram",
"sourceUrl": "https://t.me/telegram/450",
"seed": "telegram",
"seedLabel": "Telegram News",
"matchedEntity": "telegram",
"recordType": "telegram_message",
"publishedAt": "2024-01-01T12:00:00+00:00",
"scrapedAt": "2026-07-08T15:00:00.000Z",
"text": "Public message text...",
"authorName": "telegram",
"outlinks": ["https://example.com"],
"engagement": { "views": 12345 },
"contentHash": "...",
"runDelta": "new",
"matchedKeywords": ["election"]
}

Telegram monitoring tips

Use public channel handles such as telegram or durov, or full URLs like https://t.me/s/telegram.

Private channels, groups, and login-only content are not supported.

Increase maxPagesPerSeed to collect more history. Each public Telegram preview page usually contains up to 20 messages.

RSS monitoring tips

RSS and Atom feeds work well for newsrooms, blogs, agency updates, and public advisories.

If a URL is not a feed, the actor will skip RSS parsing and can still process the same URL through the web source type.

Web page monitoring tips

The web collector saves one page-level evidence record per URL.

It is best for canonical pages, articles, reports, and landing pages. It is not a deep crawler. Add RSS feeds when you need many items from one publication.

Run-to-run deltas

When includeRunDeltas is enabled, the actor stores content hashes in the run key-value store.

Records are marked:

  • new โ€” hash was not seen in previous runs using the same default key-value store
  • seen โ€” hash already existed from an earlier run

This is useful for scheduled watchlists.

Keyword matching

matchKeywords annotates records but does not filter them out.

That design preserves the full evidence trail while still making analyst triage easier.

For strict filtering, filter the dataset after export or in your downstream workflow.

Integrations

You can connect the dataset to:

  • Google Sheets for analyst review
  • Slack or email alerts for runDelta = new
  • vector databases for narrative clustering
  • BI dashboards for source counts over time
  • case management tools for evidence preservation

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/cross-platform-osint-seed-list-monitor').call({
seeds: [{ value: 'telegram', type: 'telegramChannel' }],
sourceTypes: ['telegram'],
maxRecordsPerSeed: 25,
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/cross-platform-osint-seed-list-monitor').call(run_input={
'seeds': [{'value': 'telegram', 'type': 'telegramChannel'}],
'sourceTypes': ['telegram'],
'maxRecordsPerSeed': 25,
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~cross-platform-osint-seed-list-monitor/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"seeds":[{"value":"telegram","type":"telegramChannel"}],"sourceTypes":["telegram"],"maxRecordsPerSeed":25}'

MCP usage

Use Apify MCP with Claude Desktop or Claude Code:

https://mcp.apify.com/?tools=automation-lab/cross-platform-osint-seed-list-monitor

Claude Code setup:

$claude mcp add apify-osint-monitor https://mcp.apify.com/?tools=automation-lab/cross-platform-osint-seed-list-monitor

Claude Desktop JSON config example:

{
"mcpServers": {
"apify-osint-monitor": {
"url": "https://mcp.apify.com/?tools=automation-lab/cross-platform-osint-seed-list-monitor"
}
}
}

Example prompts:

  • "Run the OSINT seed-list monitor for these Telegram channels and summarize new records."
  • "Export all runDelta = new records from the latest dataset."
  • "Compare keyword matches across RSS and Telegram records."

Scheduling workflows

Schedule the actor hourly, daily, or weekly depending on source volatility.

For election or crisis monitoring, use smaller but more frequent runs. For background research, use daily or weekly runs with higher limits.

Evidence quality notes

The actor records public source URLs and content hashes to support repeatable evidence handling.

It does not guarantee that a source page will remain online. Export datasets or store snapshots if long-term preservation is required.

Legality

Only collect public data that you are allowed to process.

Only collect public data that you are allowed to process.

Respect platform terms, privacy rights, and local laws. Do not use this actor for doxxing, harassment, or unauthorized surveillance.

Troubleshooting

If you get few Telegram records, confirm that the channel is public and available at https://t.me/s/<channel>.

If an RSS seed returns no items, check that the URL is a real RSS or Atom feed. Try enabling web for page-level extraction.

If all records are marked seen, clear the default key-value store or disable includeRunDeltas for a fresh baseline.

FAQ

Can it monitor X, TikTok, Facebook, or VK?

Not directly in v1. Those platforms are better handled through dedicated Apify actors or future delegated-source integrations.

Does it require proxies?

No proxy is required for the current public no-login collectors.

Can I use keywords as seeds?

Keyword seeds are accepted for workflow compatibility, but v1 collectors focus on handles and URLs. Use matchKeywords to annotate collected records.

Does it remove duplicate records?

It deduplicates by content hash within a run and stores hashes for cross-run new/seen deltas.

Useful automation-lab actors for future delegated workflows:

Changelog

0.1

Initial version with Telegram public previews, RSS/Atom feeds, public web pages, normalized evidence records, content hashes, and run-to-run deltas.