TikTok Competitor Monitor & Video Growth Radar
Pricing
$20.00 / 1,000 product research reports
TikTok Competitor Monitor & Video Growth Radar
Monitor TikTok competitor profiles: new videos, measured growth across runs and source-linked reports. First run establishes a baseline. Existing product research included. $0.02 per delivered report plus optional, capped collection fees. No prediction of virality or sales.
Pricing
$20.00 / 1,000 product research reports
Rating
0.0
(0)
Developer
HirePulse
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Features
Share
See what changed on competitor TikTok accounts: new videos, measured view growth and source links. The first run establishes a baseline. Repeat the same watchlist after at least six hours for growth comparisons. No prediction of virality, sales or revenue.
Start in three steps
- Open the competitor examples, or copy the JSON below into the Actor's JSON input. Replace
apifylifewith your competitor's handle. This starts paid collection only becauseallow_paid_upstreamis explicitly true. - Run once and open Research report under Output. The first run establishes a baseline, not a growth alert.
- Run the same input again after at least six hours, with the same
state_id. Inspect new videos and measured changes. Avoid overlapping runs for the same watchlist. No schedule is enabled automatically.
{"analysis_mode": "competitor_monitor","profiles": ["apifylife"],"state_id": "my-competitors","max_videos_per_profile": 3,"allow_paid_upstream": true,"upstream_max_charge_usd": 0.04}
Understand the price before running
| Item | Price / limit |
|---|---|
| One delivered profile report, including baseline or stable observation | $0.02 |
| Clockworks collection | Separate charge, limited by the total source cap |
| One-profile example above | At most $0.02 report + $0.04 source events, plus platform usage |
| Source failure without a delivered report | No report event; source/platform charges may still apply |
A repeat run is not free merely because no video grew. Set the parent Actor's spending limit separately; it does not replace the upstream cap. A $0.03 parent event limit covers the one-profile example's $0.02 report. Choose a 300-second timeout. These settings do not authorize a recurring schedule.
Actual tested output — 3 November 2026
Excerpt from run VcdaXQXbfdd9sv4UV, account apifylife. This is a historical observation, not a current counter or an endorsement. This follow-up was less than six hours after the prior check, so growth fields correctly stayed null.
{"video_id": "7697323679381720342","url": "https://www.tiktok.com/@apifylife/video/7697323679381720342","views": 337.0,"observed_at": "2026-11-03T15:18:47.302Z","status": "observed","comparison_status": "stale_or_interval_outside_6h_to_45d","views_delta": null,"views_per_hour": null}
The tested parent plus collection runs reported approximately $0.01284 in owner-account usage. This owner test is not a quote for customer pricing; the event prices and limits above apply to customer runs.
Ready-to-copy instructions for an AI agent
Use hirepulse/viral-product-radar with analysis_mode="competitor_monitor".Ask for 1–5 TikTok profile handles, a stable state_id and a collection budget.Never invent handles, collection consent or a recurring budget.Live data requires explicit allow_paid_upstream=true and upstream_max_charge_usd.Reuse state_id for repeat observations. Avoid overlapping jobs for that watchlist.Read OUTPUT.status, OUTPUT.errors and each profile's errors before interpreting results.Group videos:- New posts: status="new_video". Include source URL and publication time.- Measured growth: comparison_status="measured" and views_delta>0. Include delta,elapsed_hours, views_per_hour, observed_at and URL. Sort by views_per_hour.- Measured stable: comparison_status="measured" and views_delta=0.- Insufficient evidence: baseline, first_seen_existing, observed without a measuredcomparison, counter_correction, null deltas or stale/invalid intervals.A profile-level status="observed" does not prove growth or no change.source_failed/source_unavailable means unavailable data, not zero activity.partial means incomplete: identify affected profiles and missing evidence.Videos in not_seen_in_sample are not proven deleted.First-seen historical videos are not newly published posts.breakout_candidate is a relative heuristic, not a viral prediction.Summarize measured changes with evidence. If none are measurable, explain why andthe next valid observation time. Never infer sales, spoken hooks, visual formatsor official endorsement.
API integration
POST the input above as JSON to https://api.apify.com/v2/acts/hirepulse~viral-product-radar/runs?build=latest&timeout=300&memory=256&maxTotalChargeUsd=0.03.
Use Content-Type: application/json and an Authorization Bearer header supplied from your secret manager. Never put an Apify token in a public URL or shared workflow.
The call starts asynchronously. Poll /v2/actor-runs/{runId} with the same authentication until terminal. Retrieve OUTPUT and REPORT from its defaultKeyValueStoreId, and reports from its defaultDatasetId. A successful platform run can return setup_required when inputs need correction; inspect application output. API integrations should retrieve OUTPUT even on failure to inspect source errors.
Monitor competitor accounts
{"analysis_mode":"competitor_monitor","profiles":["apifylife"],"state_id":"my-competitors","max_videos_per_profile":3,"allow_paid_upstream":true,"upstream_max_charge_usd":0.04}
Select Competitor profiles under Analysis mode. Existing product research remains available in product_videos; its saved export is a dated example, not current TikTok data. The competitor mode ignores those product-mode example fields and never treats them as a live competitor observation.
Each cycle discovers recent posts through a bounded profile scrape, and refreshes a bounded cohort of previously observed videos absent from that sample. At most 5 profiles; 1–10 recent videos per profile plus up to the same number of tracked refreshes. This is sampled monitoring, not a guarantee to discover every post between checks. A video missing from a response is not proven deleted.
What you receive
One JSON dataset report per successfully observed profile, a human-readable HTML REPORT and a machine-readable OUTPUT. Each video includes its public URL, counters and original collection timestamp. Comparable observations include view and engagement deltas and views per hour. New-to-monitor historical posts are distinguished from posts published since the prior check. Counter decreases are flagged as corrections. Blocked, private, empty or unavailable profiles are reported as source failures rather than as zero growth.
A relative-growth multiple is shown only with at least five other comparable videos from the same profile and a similar age; otherwise it remains null. It is not a prediction. Hashtag counts describe captions in the sample; the product does not infer spoken hooks or visual formats.
Cost and limits
The existing price is $0.02 per delivered research report: in competitor mode, one report means one observed profile. Collection is billed separately by the upstream provider, within upstream_max_charge_usd across the whole run. Half of each profile's allocation is reserved for discovery and half for refresh, each at least $0.009; use at least $0.018 total per profile. A one-profile run with a $0.04 collection cap permits up to $0.06 of report-plus-source events, plus platform usage under your Apify plan. Inspect Pricing before running. No paid source starts without allow_paid_upstream=true.
State is stored in your invoking account under state_id. Reuse that label for repeat observations; use a different label for a separate watchlist. There is no automatic schedule or outbound message. You can schedule the Actor in Apify after choosing a recurring budget.
Import your own observations
For offline analysis, supply competitor_snapshot with observed_at, source and records, and leave paid consent off. Records may use Clockworks-style webVideoUrl, playCount, diggCount, commentCount, shareCount, text and createTimeISO. Preserve the real collection time. Repeated identical observations do not generate another report. Imports are marked report_mode=import, never as freshly collected data.
Existing product research workflow
Tracking competitor Shopify stores? Try Shopify Competitor Price, Stock & Launch Watcher: it saves a snapshot and returns only price drops, restocks, sell-outs and new products between runs ($0.005 per store).
Rank product topics for further research using growth measured on the **same video
IDs at different collection times**. Show supporting videos, added views,
creator-account breadth, concentration, repeat growth and reasons to abstain.
Large lifetime counts and newly discovered old videos do not establish growth.
Direct anonymous collection failed in two Apify cloud checks. The analysis accepts
existing exports or an explicit, capped Clockworks opt-in. Importing a file never
starts an upstream Actor, subscription, proxy or schedule.
First run in Apify
The default form analyzes a **saved, real mini-projector export collected on
2026-10-28 at 09:51 UTC**. Its original timestamp, source and video URLs are
retained. It is a dated example, not a live query or current market measurement.
Start with this export to inspect the JSON dataset and HTML REPORT. One delivered
product report costs $0.02; this import starts no collection provider. Platform
account charges can still apply. The prefilled example_mode=true creates a fresh baseline on each run, isolated
from watchlist history. Each requested example report costs $0.02; repeating the
example is not a growth observation. In normal watchlist mode (example_mode=false),
reimporting identical observations under the same state ID does not create new
growth evidence or another delivered report.
What the dated example returns (verified 2026-10-31)
One item, analysis_mode: product_videos, classification: baseline:
{"score": null, "score_status": "insufficient_history","sample_size": 3, "comparable_videos": 0, "unique_creators": 2, "sample_views": 19915300,"growing_creators": 0, "added_views": null, "source_age_hours": 72.2,"confidence": "low", "recommended_action": "inspect_example"}
The export was collected on 2026-10-28, so the 24-hour freshness guard flags it
(stale_or_future_observation) and the run is not alert-eligible. That is the guard
working as designed, not a defect. score is null because one observation cannot
establish growth; run the same keyword twice at least six hours apart to get one.
For fresh observations:
-
Disable Run the dated export as a fresh example baseline (
example_mode).Clear Existing video observation export (
video_snapshot). -
Select Live videos via Clockworks and enter one specific product keyword.
-
Review the total source cap and explicitly enable **I allow the separately
capped Clockworks collection charge**. This checkbox is off by default.
-
Run the Actor. One product report is $0.02 plus the source's separately capped
fee. With a $0.04 source cap, report plus source events can total at most $0.06
for one report; platform account charges are separate.
-
Repeat the same live
state_idafter at least six hours for comparable growth.
For your own export, replace video_snapshot and preserve its actual collection
timestamp. Select public for imports. Direct anonymous cloud collection is not
supported. Missing consent, mixing a snapshot with Clockworks, or an invalid export
is a setup step, not a crash: the run finishes successfully with `status:
setup_required, data_collected: false`, an HTML setup report listing both routes,
needs_attention: true and a paste-ready live_collection_example. The status
message says nothing was collected or charged. API callers can provide an explicit
snapshot or explicitly opt into live collection. A genuine collection or delivery
failure still fails the run, so a red status always means the source broke, never
that a setting is missing.
For people and agents
Every observation has a research-priority score, classification, next action,
per-video comparison windows, source URLs and blockers. agent_decision includes
rationale, missing evidence and next checks for relevance, sourcing, landed cost
and fulfilment. Attention does not establish sales, conversion or margin.
Creators are distinct public accounts; their business independence is unknown.
Pricing: $0.02 per delivered product research report
The Actor charges one apify-default-dataset-item event at $0.02 for each
product report written to the default dataset. No startup fee or monthly
subscription is configured. A baseline or watch report is a completed research
report, even when it does not recommend further investigation. A source failure
with no report produces no report charge. Failed or blocked upstream collection
can still incur the upstream provider's separately capped charges.
Clockworks collection is billed separately to the invoking account, within
upstream_max_charge_usd. At the checked source price of $0.003 per video, one
product report using ten videos is approximately $0.05 ($0.02 analysis + $0.03
collection). Fewer collected videos cost less. Check the current provider pricing
in Apify; the cap remains in force if its pricing changes. Existing export imports
do not start Clockworks. Platform account charges outside these events may apply
according to your Apify plan.
The parent run's spending limit is checked against the number of requested reports
before any upstream Actor starts. Every charged report is a delivered dataset item.
An unchanged reimport with the same state ID and acknowledged source timestamp is
not delivered again. deliver_all_reports=true is the default and includes new
baseline, watch and candidate observations; alert identity and deduplication remain
separate. Set deliver_all_reports=false to select the legacy alert/baseline feed;
only records it actually delivers incur a report event. Unchanged alerts do not
become new alerts merely because another research report is delivered.
Input and collection
analysis_mode=product_videos is the default. Supply explicit product keywords.
Public video_urls can seed collection where pages expose their data. Without
URLs the public challenge/video paths are attempted; empty or blocked sources
fail explicitly. Direct-public collection is blocked by the cloud setup guard before collection.
This mode does not query Shop, ads, global sounds or unrelated Creative Center
discovery. analysis_mode=multi_signal retains the old engine in a separate state
namespace; Run-PublicRadar.ps1 explicitly selects the legacy hashtag path.
An existing export uses this envelope:
{"observed_at": "2026-10-23T12:00:00Z","source": "source name and collection run","records": []}
Records need exact view counters, matching product descriptions and canonical
public TikTok video URLs. The parser accepts native view_count, description,
creator, url or export fields playCount, text, authorMeta.name /
authorMeta: {name: ...}, webVideoUrl. Likes, comments, shares, publication time
and sponsorship flags are optional. These names match the
documented Clockworks output, but
the same formats are used by the optional collection integration below.
Optional capped cloud collection
{"analysis_mode": "product_videos","keywords": ["mini projector"],"state_id": "my-product-research","upstream_source": "clockworks","allow_paid_upstream": true,"upstream_max_charge_usd": 0.04,"max_items": 10,"max_requests": 60,"max_runtime_seconds": 120}
The first collection uses clockworks/tiktok-hashtag-scraper (build 0.0.474).
With the same watchlist ID, later runs use clockworks/tiktok-video-scraper
(build 0.0.477) to refresh the already observed video URLs. video_urls can also
seed an explicit cohort. Existing video cohorts are followed rather than silently
replaced with unrelated search results. This is cohort research, not full-market
product discovery. Start another watchlist to research a new sample.
The upstream PPE spending cap is split across all keywords, with at most one
upstream run per keyword. Each must have at least a $0.009 allocation; reduce
the keyword count when the budget is too small. The cap defaults to $0.04 total
and requires a separate allow_paid_upstream=true opt-in; it is not a monthly
subscription. Parent Actor platform usage is separate. Current pricing and
limited permissions are checked before a child run is started. Video downloads,
covers, slideshows, related-video expansion and subtitles/transcripts are disabled.
Child runs have a charge cap and timeout; interrupted collection requests abort.
The collection time is the end of the source run's recorded collection window,
not the later analysis time. The complete window and upstream run IDs are exposed
in OUTPUT. Fine timing within that window is unknown. All measured growth is
still subject to the six-hour minimum comparison window. A successful first run
establishes a baseline and cannot create a growth alert yet.
observed_at means when counters were collected, not when a file was downloaded
or imported. Future, mixed-time, conflicting reimports and out-of-order observations
are rejected. A repeated export cannot become a new measurement. Imports older
than 24 hours can establish history but cannot issue an alert now.
./Run-VideoRadar.ps1 -SnapshotFile C:/data/observation.json -Keywords 'mini projector' -StateId projector-research
Reuse the state ID and keywords with later exports. At most 100 records can be
imported per run; max_items caps each product sample. The import path makes no
outbound source requests. All observations, including non-alerts, are saved to
product-video-data/history/. OUTPUT.json contains every ranked observation;
the dataset contains delivered research reports by default. REPORT.html
provides a Hebrew decision report with the same measurements and blockers. Cloud
runs expose the HTML report in their output as well as the machine-readable JSON.
Scoring policy
Comparisons require 6-72 hours between measurements of the same video and creator.
Counter decreases are excluded as corrections. New IDs establish baselines only.
The daily rate is normalized from the actual window, not a forecast.
| Component | Points | Calculation |
| --- | ---: | --- |
| Momentum | 40 | Daily percentage lift saturates at 50%; daily added views saturate at 10,000 |
| Creator breadth | 25 | Accounts adding at least 1,000 views/day and 20%/day, saturating at five |
| Engagement | 15 | Mean interaction-delta/view-delta ratio on videos adding at least 1,000 views, saturating at 5%; missing counters stay unknown |
| Persistence | 20 | At least 500 added views and 20%/day in each of two non-overlapping intervals, saturating at three accounts |
Alerts also need three repeatedly observed videos, growth from three distinct
accounts, 3,000 actual added views, at least 20% normalized daily growth, no creator
responsible for more than 70% of measured daily growth, current source data and
the configured min_score (default 30). These are explicit heuristics awaiting
validation, not calibrated probabilities. First observations are baselines: score is
null with score_status: insufficient_history and four components stay null, because a
single observation has nothing to compare against. A numeric score appears only once a
repeated-video comparison exists.
Missing comparisons or concentrated growth cause abstention. Delivery must
succeed before a fingerprint is acknowledged.
Measure whether ranking helps
python -m src.evaluation --history product-video-data/history --output product-video-data/evaluation.json --top-k 3
Rankings are frozen at decision time, then labeled from the same videos around
24 hours later (18-30 hours). Labels require at least 80% coverage and three
matched video IDs. The target is continued attention: 3,000 added views, 20%
daily growth and three growing accounts. Missing future data stays pending.
Replays are deduplicated; an unobserved choice is not replaced with a lower-ranked
measured one. Radar top-k considers actual research alerts; no-alert batches abstain.
The popularity comparator selects the same number of products by lifetime views.
The precision difference uses fully observed paired batches only and reports the
number of pending comparison batches. Alert precision is also measured separately.
This does not test profit, causality or market-wide
discovery. Overlapping windows are not independent trials. No live forward
performance claim is made.
python scripts/video_demo.py produces a clearly labeled synthetic example of an
emerging product, an established high-view product and a single-creator spike.
Its outputs illustrate and test decisions; they are not market evidence.