TikTok Competitor Monitor & Video Growth Radar avatar

TikTok Competitor Monitor & Video Growth Radar

Pricing

$20.00 / 1,000 product research reports

Go to Apify Store
TikTok Competitor Monitor & Video Growth Radar

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

HirePulse

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Features

Limited permissions

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

  1. Open the competitor examples, or copy the JSON below into the Actor's JSON input. Replace apifylife with your competitor's handle. This starts paid collection only because allow_paid_upstream is explicitly true.
  2. Run once and open Research report under Output. The first run establishes a baseline, not a growth alert.
  3. 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

ItemPrice / limit
One delivered profile report, including baseline or stable observation$0.02
Clockworks collectionSeparate charge, limited by the total source cap
One-profile example aboveAt most $0.02 report + $0.04 source events, plus platform usage
Source failure without a delivered reportNo 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 measured
comparison, 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 and
the next valid observation time. Never infer sales, spoken hooks, visual formats
or 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:

  1. Disable Run the dated export as a fresh example baseline (example_mode).

    Clear Existing video observation export (video_snapshot).

  2. Select Live videos via Clockworks and enter one specific product keyword.

  3. Review the total source cap and explicitly enable **I allow the separately

    capped Clockworks collection charge**. This checkbox is off by default.

  4. 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.

  5. Repeat the same live state_id after 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.