TikTok Video Stats: Views, Likes & Shares by URL avatar

TikTok Video Stats: Views, Likes & Shares by URL

Pricing

from $1.50 / 1,000 tiktok video returneds

Go to Apify Store
TikTok Video Stats: Views, Likes & Shares by URL

TikTok Video Stats: Views, Likes & Shares by URL

TikTok video scraper without login, for n8n, Make, Clay or the API: paste video links and get one row per video - plays, likes, comments, shares, saves, caption, hashtags, sound, creator, post date. Track a video's views daily and get a Discord, Slack or Telegram alert. Misses are free.

Pricing

from $1.50 / 1,000 tiktok video returneds

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

TikTok Video Lookup: tiktok video scraper by URL

Paste TikTok video links and get one spreadsheet row per video: plays, likes, comments, shares, saves, caption, hashtags, sound, creator and post date. Switch on tracking and the same list tells you which videos took off since yesterday.

Who uses this

  • Social media teams reporting the numbers of the videos a campaign ran, without opening each link.
  • Agencies and brands watching a creator's sponsored videos: views, likes and shares side by side, once or every day.
  • Analysts and n8n or Make builders who already hold a list of video links and need the stats in Google Sheets, Airtable or a workflow.

Try it in 30 seconds

The input box already holds three public videos. Click Start and you get one row per video. No login, no cookies, no app.

What it does

You give it video links; for each one it reads the video's own public page and returns the numbers TikTok shows a logged-out visitor. It takes the full link, a vm.tiktok.com short link, @handle/video/<id>, or just the numeric video id. A deleted, private or age-restricted video comes back as a row that says so and costs nothing.

It is not a profile scraper (use TikTok Profile Lookup for follower counts) and not a downloader: there is no video file and no download link in the output.

Fields

FieldWhat it holds
videoId, urlthe video's id and its canonical link
descriptionthe caption
createdAtwhen it was posted (UTC)
plays, likes, comments, shares, savesthe counts the page shows. comments is the number, not the comments
durationSeclength in seconds
authorHandle, authorVerifiedthe creator's @handle and verified badge. Nothing else about the creator
musicTitle, musicAuthorthe sound used
hashtagshashtag names from the caption, without the #
isAdTikTok's own "ad" flag on the post
coverUrlthe cover image. It is a signed link that stops working after about two days
checkedAtwhen we read the page
playsDelta, likesDelta, commentsDelta, sharesDelta (+ ...Pct), moved, previousSnapshotAt, daysSincePreviouschange since the last run, only with tracking on (empty otherwise)

Track a video's views daily (3 steps)

  1. Paste the videos you care about, tick Track these videos across runs, and give the watchlist a name. Run it once: that run is the baseline, every change column is empty.
  2. Save the input as a Task and add a Schedule (daily at the hour you like).
  3. From the next run on, every row carries playsDelta, likesDelta, commentsDelta, sharesDelta and moved. Tick Only report videos that moved and a quiet video is left out and not billed. Paste a Discord, Slack or Telegram link into Send alerts to and a video that moved by at least the Smallest change to report (10 % by default) posts one message.

Example output

queryfoundstatusvideoIdurldescriptioncreatedAtplayslikescommentssharessavesdurationSecauthorHandleauthorVerifiedmusicTitlemusicAuthorhashtagsisAdcoverUrlcheckedAtplaysDeltalikesDeltacommentsDeltasharesDeltaplaysDeltaPctlikesDeltaPctcommentsDeltaPctsharesDeltaPctmovedpreviousSnapshotAtdaysSincePreviousscrapedAt
https://www.tiktok.com/@scout2015/video/6718335390845095173trueOK
<duration (sec)><plays change (%)><likes change (%)><comments change (%)><shares change (%)><moved?>1970-01-01T00:00:00.000Z

Example runs

TikTok video stats by URL. Paste any public video links.

{"videos": ["https://www.tiktok.com/@scout2015/video/6718335390845095173", "https://www.tiktok.com/@duolingo/video/7701442022678220045", "https://www.tiktok.com/@duolingo/video/7699890686870506765"]}

TikTok video views tracker, daily. Schedule it daily; only videos whose plays, likes, comments or shares moved by 10 % or more come back, and only those are billed.

{"videos": ["https://www.tiktok.com/@duolingo/video/7701442022678220045", "https://www.tiktok.com/@duolingo/video/7699890686870506765"], "deltaMode": true, "deltaName": "campaign-views", "alertOnChangeOnly": true, "minChangePercent": 10, "notifyUrl": "https://discord.com/api/webhooks/<your webhook>"}

TikTok likes, comments and shares export. Only the engagement columns, ready for a sheet.

{"videos": ["https://www.tiktok.com/@duolingo/video/7701442022678220045", "https://www.tiktok.com/@duolingo/video/7699890686870506765", "https://www.tiktok.com/@duolingo/video/7514320905909194030"], "columns": ["videoId", "url", "authorHandle", "createdAt", "plays", "likes", "comments", "shares", "saves"]}

Limits, stated plainly

  • Page data only. Everything comes from the public video page a logged-out visitor sees. There are no comments (only their count), no list of who liked or shared, no audience data, and no media files or download links.
  • Counts are what the page shows. TikTok rounds a large count to about four significant digits (a video with 159,600 plays may really have 159,6xx). That is TikTok's figure, not ours: very small percentage changes on a huge video can be rounding noise, which is why tracking has a Smallest change to report setting.
  • Videos only. Photo posts (/photo/ links) carry no stats on their logged-out page and come back as a free BAD_FORMAT row. Private, deleted and age-restricted videos come back as a free NOT_FOUND row.
  • Short links. vm.tiktok.com and tiktok.com/t/ links are followed to the video. A short link that is expired or invalid comes back as NOT_FOUND. Full links are the safest input.
  • A video is looked up by its id. If TikTok ever answers with a different video than the one you asked for, the row is withheld and nothing is billed.
  • A TikTok verification page is free. If TikTok answers with a check instead of the video, the actor tries that video once more on a fresh connection; if the check is still there the row is BLOCKED with the reason and nothing is billed. Run it again later.
  • Alerts. At most Most alert messages per run are sent; a video past that limit is still in the dataset and its notifyErrors says no message was sent for it.
  • Cost. It runs on Apify's default datacenter proxy: one page request per video, one measured 5-video run used $0.00054 of platform usage, which works out to roughly $0.06 per 1,000 videos plus about $0.0002 per run on our side.

Pricing

Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed per item only when data is actually found and returned — see .actor/pay_per_event.json for exact prices. A miss is never charged.

How to use

  1. In the Apify Console. Open the actor page and click Start — the videos field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~tiktok-video-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"videos":["https://www.tiktok.com/@scout2015/video/6718335390845095173","https://www.tiktok.com/@duolingo/video/7701442022678220045","https://www.tiktok.com/@duolingo/video/7699890686870506765"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"videos": [
"https://www.tiktok.com/@scout2015/video/6718335390845095173",
"https://www.tiktok.com/@duolingo/video/7701442022678220045",
"https://www.tiktok.com/@duolingo/video/7699890686870506765"
]
}

One TikTok video per line: the video link, a vm.tiktok.com short link, @handle/video/

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~tiktok-video-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"videos":["https://www.tiktok.com/@scout2015/video/6718335390845095173","https://www.tiktok.com/@duolingo/video/7701442022678220045","https://www.tiktok.com/@duolingo/video/7699890686870506765"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~tiktok-video-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"videos":["https://www.tiktok.com/@scout2015/video/6718335390845095173","https://www.tiktok.com/@duolingo/video/7701442022678220045","https://www.tiktok.com/@duolingo/video/7699890686870506765"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~tiktok-video-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"videos":["{{video}}"]}, mapping the row's video into the videos array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "TikTok Video Scraper API: Views, Likes & Shares by URL" — the agent will find and run this actor.