Public counter cards and a separate locked retention panel connect to distinct question cards.
Choose data that can answer the question.

An Actor is a hosted program that collects source rows. A Task is a saved input preset for an Actor. The TikTok Metrics Actor collects public rows. You do the check in this article. The Actor does not build a curve.

People ask which TikTok analytics tools to use in this discussion. That question shows a need to pick a data source. It does not show that public views contain watch positions. It does not measure how many people need this.

Pick the decision first

Public means someone can open it without your login. Owned means the video is on an account you control. Name the decision before you collect rows. The two decisions below need different data.

Pick the decision first
DecisionData that can answer itPublic view count
Which public video has more observed viewsView count, video ID, reading time, and precision flagUse it when the row is useful
Which moment in your video loses viewersWatch-position shares that your account screen actually showsCannot answer it

Retention is the source share still watching at a time position. The source states that share. The share may count viewers or viewing sessions. A viewing session is one play, as that source defines it. The base is the total the source divides by. Do not use the public view count as that private base.

If your account screen does not show watch positions, you cannot answer the second decision. Do not fill the gap with public views.

Read only public counters

The current public build is 0.1.36. It accepts `mode`, `startUrls`, and optional `maxItems`. It also accepts `includeProfileMetrics`, `requestTimeoutSecs`, `maxConcurrency`, and `failOnNoMetrics`. `mode` may be `auto`, `knownUrls`, or `profileUrls`. Choose `knownUrls` for this method. `auto` does not add a curve. `profileUrls` starts from profiles. That route is not a full history of every video. The time and concurrency settings do not add metrics. `failOnNoMetrics` does not create watch positions.

`includeProfileMetrics` set to true asks for current public profile facts. Those facts can be missing. They are not a list of followers. They are not private analytics.

One dataset row is one attempted or resolved video. Read `status` and `statusReason` before you use the row. A successful run can still miss useful metrics. Do not call that result a useful zero.

These are the native row fields used here.

Read only public counters
FieldPlain meaning
`inputUrl`URL you submitted
`postUrl`Public video URL the run matched
`postId`Public video ID
`profileId`Public profile ID
`profileHandle`Public profile name
`profileUrl`Public profile URL
`publishedAt`Public publish time
`videoDurationSeconds`Video length in seconds
`views`Public view counter
`likes`Public like counter
`comments`Public comment counter
`shares`Public share counter
`saves`Public save counter
`reposts`Public repost counter
`profileFollowersCount`Public follower counter
`postMetricStatus`Result of the post metric read
`profileMetricStatus`Result of the profile metric read
`scrapedAt`Time of this reading

No field in that list is a retention curve. Video length is not a watch history. The follower counter is not the viewers of one video. A missing metric is null. Null means missing. It is not 0.

A precision flag tells you how firm a number is. `exact` means an exact public integer. That integer is still the platform total. It is not a count of distinct people. `display_rounded` means the screen showed a rounded number. `likely_rounded` means the value is probably rounded. `unavailable` means the value was not read. Do not change `unavailable` into 0. The Actor does not return calculated rates. A rate you calculate is your math, not a source curve.

The current source check is for public counters only. A one-video `knownUrls` control matched the post ID and the profile ID. It returned public views, likes, comments, shares, saves, and reposts. It returned the public follower count and precision flags. Some counts were `likely_rounded`. Saves and reposts were `exact`. That supports current public counters and identity on that source. It does not accept retention. It does not accept completion, private reach, clicks, sales, fraud checks, or unique viewers. It does not accept every profile. It does not accept a private curve. There is no private curve in this Actor to accept.

Check these output totals

Inspect the run output before you keep a row. Read `providedUrls`, `contentUrls`, `inputUrls`, `resolvedUrls`, `metricRows`, `noPublicMetricRows`, `blockedRows`, `failedRows`, and `statusCounts`. Compare the URL totals with each other. Do not assume every supplied URL became a useful metric row. Use `metricRows` for rows that returned public metrics. Use `noPublicMetricRows` for rows with no public metrics. Those rows are not zeros. Use `blockedRows` and `failedRows` before you trust the set. Use `statusCounts` to see rows by status. If a total is absent, leave it unknown. Do not write 0 unless the output shows 0.

This article does not invent those totals for the control. The control only supports the public counters named above. Read the totals on your own run.

Change the Task to one video

The public Task is TikTok Profile Analytics. It was checked on 13 October 2026. The name means public video metrics. It does not mean a retention curve. The saved input is a start. It is not proof that analysis happens by itself.

The saved input is below. The three profiles are samples. They are not your report.

json
{
  "mode": "profileUrls",
  "startUrls": ["@mrbeast", "@nike", "@playstation"],
  "maxItems": 60,
  "includeProfileMetrics": true
}
Change the Task to one video

Change it for this method. Use one public video URL you already know. Set `maxItems` to 1.

json
{
  "mode": "knownUrls",
  "startUrls": ["YOUR_ONE_PUBLIC_VIDEO_URL"],
  "maxItems": 1
}
Change the Task to one video

Replace `YOUR_ONE_PUBLIC_VIDEO_URL` with that one video URL. Do not leave a profile URL in `startUrls`. Do not keep `maxItems` at 60 for this check. You may set `includeProfileMetrics` to true for public profile facts. That flag still adds no curve.

Seven actions

  1. State the decision in one sentence. Either you need the moment an owned video loses viewers, or you need which public video has more views. Do not collect data before you choose. Retention uses the source share at each time position. The base is the source total, not the public view counter. The table above is the split. A view total answers a public comparison only.
  2. Inventory one known public video. Check post identity, duration, views, status, reading time, and precision. Use `knownUrls`, one video, and `maxItems` 1. That is the public-counter route. No private curve field exists on this Actor. If a metric is missing, keep it missing. Do not store 0 in its place. If status says the row is not useful, leave the metrics out of the report.
  3. Ask whether the source shows a retention series by time. One view count cannot restore that series. Likes, comments, shares, saves, and reposts cannot restore it. Video length cannot restore it. An average watch time cannot restore it. Many curves can share one average. A later public reading may show a higher view count. The gap is new counter activity. It is not a map of seconds watched. Do not divide views by seconds to draw a line.
  4. If you own the video, use your TikTok account tools. TikTok Studio documents those tools. Creator tools documents creator tools and post performance. The pages support analytics for an individual post. They do not promise a retention curve on every account. They do not promise an export file on every account. Open your post and read the labels that are really there. If a label is missing, write unavailable. Never give this public Actor your password or signed-in session.
  5. Keep the source definition next to every number. Also keep the video ID, the date window, the cohort, and the time positions when they are shown. A cohort is the group behind the share. Compare the same window and the same definition. If you only have an average, report the average under that definition. Do not turn the average into a curve. If you only have a screenshot, mark the read values as approximate. Rounded labels can hide the exact value.
  6. Use this step only when a real position curve is on your screen. Watch the original video around the drop. Write one possible content reason. Write one change to test on a later video. The note is a possibility, not proof that people left for that reason. Repeat viewers can change the numbers. A loop is an extra play of the same video. Loops can change the numbers. Source rules can include or exclude those plays. If the label does not say, that rule is unknown. Do not put a public view total under a private retention share.
  7. If the watch-position data is still unavailable, say so in the report. Then answer only the public comparison you can support. Narrow the decision to observed public views. Keep a collection plan before you change the video. Do not change the opening only because you guessed a curve. The plan names the screen, the field, the video, and the date you will read them. Owned math is allowed only when those watch positions are actually shown.

A real curve needs five parts. You need the video ID. You need the date window. You need the cohort. You need each time position. You need the source share still watching at that position. If one part is missing, you do not have a curve.

Equal views can hide two curves

The next histories are fiction. They are not an Actor result. They are not a TikTok measurement. They are not a benchmark.

Two fictional videos are each 30 seconds long. Each shows 1,000 public views. The totals match. The unseen watch histories do not have to match. Each scenario uses a made-up cohort of 100 sessions. The header for Scenario A is 100 total. The header for Scenario B is 100 total. Scenario A is not 90 total. Scenario B is not 50 total.

Equal views can hide two curves
ScenarioCohort totalStill watching at 5 secondsStill watching at 15 secondsStill watching at 30 seconds
A10090 sessions, 90 percent80 sessions, 80 percent70 sessions, 70 percent
B10050 sessions, 50 percent20 sessions, 20 percent10 sessions, 10 percent

The percent is sessions still watching divided by the cohort total of 100. For Scenario A at 5 seconds, 90 divided by 100 equals 90 percent. At 15 seconds, 80 divided by 100 equals 80 percent. At 30 seconds, 70 divided by 100 equals 70 percent. For Scenario B at 5 seconds, 50 divided by 100 equals 50 percent. At 15 seconds, 20 divided by 100 equals 20 percent. At 30 seconds, 10 divided by 100 equals 10 percent.

Neither row is calculated from the 1,000 public views. The same 1,000 views can sit on the high curve or the low curve. Dividing views by 30 seconds does not build either table. Do not report that division as retention. These percents use the made-up base of 100. They are not a TikTok definition. They are not a measured curve. Identical public totals do not show watched positions.

Owned percents need their own base

This second example is also fiction. It is a made-up screenshot. It is not a product result. It is not proof that your account has an export. Use the math only if your own screen shows watch positions.

Owned percents need their own base
ReadTime in the videoStill watchingBase
Fictional screenshot, approximate10 seconds62 percentThat screen's own stated definition
Fictional screenshot, approximate15 seconds48 percentSame definition and same group

The values are approximate because a screenshot can show rounded labels. 48 minus 62 equals -14. The change is -14 percentage points. A percentage point is one step on a percent scale. The share falls by 14 percentage points. That is not a relative decrease of 14 percent.

A relative decrease compares the drop with the starting share. The drop is 14 percentage points. The start is 62 percent. 14 divided by 62 equals about 0.226. That is 22.6 percent of the starting share. Report -14 percentage points, or a 22.6 percent relative decrease. Say which figure you mean.

This does not mean 14 percent of all public viewers left. It does not name a cause. The base is the fictional source cohort. It is not the 1,000 public views. It is not the made-up cohort of 100 sessions. Do not mix these bases. If your screen has no watch-position values, do not use this math.

Sources & further reading

By Chronometrica · Updated

Back to top ↑