Multi-Platform Viral Content Tracker avatar

Multi-Platform Viral Content Tracker

Pricing

from $2.62 / 1,000 content-results

Go to Apify Store
Multi-Platform Viral Content Tracker

Multi-Platform Viral Content Tracker

Track what's going viral on a topic across YouTube and Reddit in ONE run and ONE normalized schema. Ranked by viral velocity (engagement gained per hour). Stop stitching a separate scraper per platform. Pay per item.

Pricing

from $2.62 / 1,000 content-results

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

5

Monthly active users

14 days ago

Last modified

Share

Multi-Platform Viral Content Tracker

Track what's going viral on a topic across YouTube, Reddit, TikTok and Instagram in one run, returned as one normalized, ranked feed — instead of stitching together four separate scrapers with four different field shapes. Each item carries a velocity_score (engagement gained per hour since it was posted), so you see what is gaining traction right now, not just what has the highest raw count.

What it does

  • YouTube — free-text topic search (e.g. "ai agents"). Returns real view counts; exact publish time is not exposed by YouTube search, so posted_at/age_hours are derived from the relative "N weeks ago" label.
  • Reddit — per-subreddit (Reddit's own free-text search blocks bots, so this actor tracks named subreddits instead). Pulls a wide recent-post pool per subreddit and velocity-ranks it; because the underlying API sorts by time, not score, this surfaces "what's being posted and gaining traction now" in the subreddits you name, not a guaranteed all-time-top list.
  • TikTok — hashtag topic-discovery and/or known handles. Exact post timestamps, so velocity is fully accurate here.
  • Instagram — known handles only (Instagram has no public hashtag search without a login). Reads the account's recent posts/reels with exact timestamps.

Each platform runs and degrades independently — if one platform errors or a handle is unreachable, the others still return their results.

Input

Ten input fields, grouped by what feeds which platform:

Topic / account sources (leave any group empty to skip that platform):

  • keywords — topics to search on YouTube, e.g. ["ai agents", "home espresso"].
  • subreddits — subreddit names for Reddit, without r/, e.g. ["artificial", "singularity"].
  • hashtags — TikTok hashtags for topic discovery, without #.
  • tiktokHandles — TikTok accounts to track, without @.
  • instagramHandles — Instagram accounts to track, without @.

Run controls:

  • platforms — which of youtube / reddit / tiktok / instagram to run (default: all four).
  • maxPerPlatform — items pulled per platform per topic before ranking (default 25).
  • maxItems — cap on total items returned across all platforms/topics; 0 = no cap (default 0).
  • sortBy — velocity_score (default), engagement, views, likes, comments, or posted_at.
  • proxyConfiguration — Apify Proxy, RESIDENTIAL group prefilled. Used for YouTube, TikTok and Instagram (TikTok/Instagram reject datacenter IPs); Reddit's API needs no proxy.

Output fields

Every row, regardless of platform, is normalized to the same shape: rank, platform, content_id, url, title, author, author_url, description, posted_at, age_hours, views, likes (Reddit: upvote score), comments, engagement (sum of available interaction signals), velocity_score (engagement ÷ age in hours, age floored at 2h), thumbnail, query (the topic/handle/hashtag the item was found under), scraped_at, and platform_extra — a dict of platform-specific extras (e.g. subreddit/upvote_ratio for Reddit, duration_seconds/tags for YouTube, hashtags/share_count for TikTok, media_type/location_name for Instagram).

Ranking is computed within each platform, then results are concatenated — a YouTube view count dwarfs a Reddit score, so a single cross-platform sort would always bury Reddit. Re-sort the combined output yourself if you need a single global order.

Pricing

Pay-per-result — see the Store pricing tab for the current rate. Each ranked item returned is one charged unit.

Notes

  • Reddit and YouTube quality is bounded by what each platform's public/no-auth path exposes: Reddit surfaces recent-and-rising posts in the subreddits you name (not an all-time-top list), and YouTube's likes is always None (YouTube search doesn't expose it), so YouTube engagement is effectively its view count.
  • TikTok and Instagram carry exact timestamps, so their velocity_score is the most precise of the four platforms.
  • This actor supplies nothing on your behalf beyond the Apify Proxy connection already built in — no external keys or accounts required to run it.

Usage statistics

This Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.

Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.

Only these fields are recorded:

  • schema version, Actor name and build number;
  • UTC start and finish hour (not a precise timestamp);
  • run duration, number of results and time to the first result, each as a coarse range;
  • whether the result was empty, the end status, and an error type from a fixed list;
  • memory setting and counts of charged events;
  • names of the input fields you set, never their values;
  • the selected option for input fields that offer a fixed list of choices (for example a sort order).

We do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.

Additional fields (Phase 2)

This Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.

The same disableUsageStats: true input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.

Run-outcome signals (v2)

To learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:

  • the result limit you asked for (a range, when the input has one) and what share of it was delivered;
  • results delivered per input item you listed (a range);
  • output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;
  • how the run was started (console, API, schedule, webhook, another Actor);
  • how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;
  • if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;
  • a short code made from the names of the input fields you set, never their values.

Repeat-run fingerprint (v2)

When your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and disableUsageStats: true turns it off.