
A hook is the opening device meant to gain attention. The collector does not decide if a hook worked. An Actor is a hosted program that collects source rows. A Task is a saved input preset. The Actor returns timed words. You write the labels.
A window is the opening time span you study. Use the same window for every video, such as 0-3 seconds. The unit is that fixed opening, not the whole video. This method does not rank videos by performance.
Public view counts do not measure retention. Retention means how long people keep watching. View counts do not show that one hook caused performance. This post asks why different openings perform differently. Likes there cannot show a competitor's retention. This post shows the need to list hooks by hand. Use only that need. Do not copy claims about installs, click rates, causes, or favored tools.
What you can collect
Use the TikTok Transcript Actor. The current public build is 0.1.36. It accepts 1 to 100 known public targets. A target may be a video URL, a short link, or a numeric video ID. It does not search profiles. It does not search keywords. It does not open sound pages. It does not mark paid ads.
preferredLanguages is your ordered list of public caption languages. A caption track is one public language version of the words. The Actor picks an existing public track in list order. An empty list uses the first public track. The Actor does not translate. It does not write words for sound with no public track. It does not collect comments. It does not assign hook labels.
languageCode may be regional, such as eng-US. Read the code on the row. Do not assume a short language name and a regional code are the same track.
One submitted input returns one dataset row, even when the row is not a successful transcript. Keep videoId as text. A long ID can change if you store it as a number.
A row has these fields:
- inputIndex
- inputUrl
- videoId
- videoUrl
- authorHandle
- durationSeconds
- languageCode
- text
- segments
- status
- statusReason
- isBillable
- scrapedAt
A segment is one timed piece of caption text. Each segment has startSeconds, endSeconds, and text. Use those segment times as given. durationSeconds is the video length. It is not the hook window.
status is the outcome word for that input. It can be succeeded, no_public_captions, language_unavailable, duplicate_input, not_tiktok, invalid_input, unsupported_url, video_unavailable, not_public, or blocked_or_challenged. A failure to read the track is also a status. succeeded requires text that is not empty. Empty text with a failure status is not spoken silence.
isBillable is true only for a successful public caption result. Other rows are still evidence. Platform use is separate from that flag. Do not call the whole run free. A run is one Actor job.
The job also returns these OUTPUT totals:
- inputsReceived
- resultRows
- billableTranscriptRows
- nonBillableResultRows
- duplicateVideosSkipped
- statusCounts
These totals describe the job. They do not show that your videos stand for all videos. duplicateVideosSkipped counts repeat videos skipped in the job. It is not a study finding.
The public check date is 2026-10-13. The check used build 0.1.36 and the saved one-video input. The row had the same video ID that was requested. The text was not empty. The row had 12 segments with startSeconds, endSeconds, and text. The check did not keep the caption words. That shows a public caption path for that one source. It does not show captions on every video. It does not show perfect word accuracy. It does not show that a hook label is valid.
The saved Task is the TikTok hook research Task. Its current input is:
{
"startUrls": ["https://www.tiktok.com/@hankgreen1/video/7047596209028074758"],
"preferredLanguages": []
}Replace that sample with one known public video you mean to study. Do not keep the sample unless that exact video is in your study. A Task is only a starting input. It does not do the labeling for you.
For an English study, use this one-video pilot:
{
"startUrls": ["PASTE_ONE_KNOWN_PUBLIC_VIDEO_URL"],
"preferredLanguages": ["en"]
}Use ["en"] only when English is your declared study language. If you study another language, write that language rule. Do not copy ["en"]. An empty list keeps the first public track. That track may be the wrong language.
Eight actions
- Write the question and the video list before you compare hooks.
State the creative question in one sentence. List only known public videos you chose. Pick one window and keep it for every video. The same window stops you from labeling early words on one video and later words on another. The Actor cannot search all competitor posts. It cannot infer paid-ad status. Your list is the sample you declared. It is not the whole platform.
- Get one caption track, then check identity, language, status, and text.
Start with one intended video. Check videoId against your target. Check authorHandle. Check languageCode against your language rule. Check that status is succeeded. Check that text is not empty. Keep the original segment times. Read statusReason when it is present.
These statuses leave the spoken opening unknown: no_public_captions, video_unavailable, not_public, blocked_or_challenged, and language_unavailable. A caption read failure is unknown too. Unknown means the spoken evidence is missing. It does not mean "no hook". It does not mean zero.
If the status is language_unavailable, do not label a different language as your study language. A bad input status is not a hook result. not_tiktok, invalid_input, and unsupported_url mean you must fix the input. duplicate_input is not a second video. Count that video once.
- Keep every segment that shares time with the window. Do not cut letters by time share.
Two time spans overlap when they share any time. For a 0-3 second window, keep a segment when startSeconds is less than 3. Also require endSeconds to be greater than 0. A segment fully inside the window is kept. A segment that crosses 3 seconds is kept. A segment that starts at 3 seconds or later is not kept. A segment that ends at 0 or earlier is not kept. If you pick another window, use the new end time in the same test for every video.
A crossing segment can hold speech from after the window. Keep its full raw text. Watch the clip and mark which words fall inside the window. Do not slice the letters in proportion to time. Speech can pause. A short word can fall after the cut. A long word can fall before the cut.
- Write a small spoken codebook before you compare results.
A codebook is the written list of spoken labels and rules. Write it before you look for a pattern. To code an opening is to give it one spoken label from that list. These labels are manual study labels. They are not Actor fields. They are not proven winning formats.
Use one primary label per video unless you first write a rule for more than one. A primary label is the one spoken label for that video. Combine a question and a problem into question_problem. If you split them, one question about a problem can look like two hooks. Keep promise and result-first apart. A promise points forward. Result-first puts the finished thing in the opening. The label list is question_problem, promise, result-first, spoken_demonstration_cue, other, and no_clear_device. Missing captions stay unknown. Unknown is not in this spoken list.
- Watch and listen to the same window. Keep separate fields.
A field is a named place in your sheet. Play the same 0-3 seconds. Record what you see in a visual field. Record words printed on the screen in their own field. Record the speaker and other sounds in an audio field. Record the earliest meaningful action and its time. That action is the first important thing that happens in the window.
A silent demonstration can be a visual hook even when caption text is empty. No transcript field recognizes a scene. Do not paste a visual note into the spoken label. On-screen words are not spoken words. If you did not record a field, leave it blank. Blank is not the same as none.
- Save the evidence, the coder, and the uncertainty.
Keep the raw caption text. Keep a separate manual note for any correction. Record the time range, the spoken label, the coder, and the uncertainty. A coder is the person who assigns the label. Review a small pilot with a second coder, or do a stated second pass. If the two checks disagree, change the rule or the note. Do not invent an accuracy score. Do not replace the raw text with the manual copy. You need both.
- Compare label presence across the declared sample.
Count unique videos. Do not count caption segments. Two segments in one window are still one video. Report unknown captions apart from checked spoken openings. A share uses only the denominator you name. The denominator is the count you divide by. Say that denominator in the result.
If you later compare public counters, match video age, topic, and time. Say that the match only describes the set. It does not show that a label caused the counts. Do not keep only high-view videos and call their labels winners. The retention question does not prove a cause, and likes there do not show retention.
- Use the sheet to plan one new test, not a guaranteed gain.
Use the codes and notes to design one new opening you can test. A creative hypothesis is that test idea. It is not a promised improvement. This method studies an opening already in the source. It does not choose new edit points. It does not cut a new clip. It does not predict a viral hit. It does not measure retention. It does not read the picture for you.
Spoken codebook
The sample phrases in this codebook are original fiction. They are not words from the public control. They are not a product result. Each video gets one primary spoken label.
question_problem is the combined primary label for a question or a named problem. Do not also add a second spoken label for the same video. A fictional phrase is "Does your tray tip over?"
promise means the speaker says a result will come, but the finished result is not in the opening. A fictional phrase is "I will show you a level tray." That points forward. It is not result-first.
result-first means the opening states the finished result now. A fictional phrase is "Here is the finished garden bed." The words put the finished bed in the opening. That is different from a promise of a later result.
spoken_demonstration_cue means spoken words tell the viewer to watch an action. A fictional phrase is "Watch this lid snap." A silent action does not get this spoken label. Put that action in the visual field.
other means a valid check found one clear spoken device in the window, and that device sits outside the named categories. The device is distinct. Add a short note that names the device.
no_clear_device means a valid caption check or a valid manual check found no spoken device in the window. Use it for checked speech with no spoken device. Also use it for confirmed silence. Do not use it when evidence is missing or the caption check failed. Missing or failed evidence stays unknown.
unknown means you do not have usable spoken evidence. It is a missing-evidence mark, not a hook label. A no_public_captions row stays unknown. Do not rename unknown as no_clear_device. Do not rename unknown as "no hook". Do not treat unknown as zero.
Fictional worked example
The four videos below are original fiction. They are not the public control, and they are not a real creator result. The window is 0-3 seconds for every video. The codebook above is the only spoken codebook. One video gets one primary spoken label, or unknown.
Keep a segment when startSeconds is less than 3 and endSeconds is greater than 0.
| Video | Status | Raw overlapping caption | Spoken label | Visual field | Audio field | Earliest action | On-screen words | Coder | Uncertainty |
|---|---|---|---|---|---|---|---|---|---|
| V1 | succeeded | 0.0-1.5 "Does your tray tip over?" Also 1.5-3.5 "This simple handle keeps it level." | question_problem | A tipping tray | Speech starts at 0.0 seconds | The tray tips in the opening | Not supplied | Coder A | The second segment crosses 3 seconds |
| V2 | succeeded | 0.0-2.0 "Here is the finished garden bed" | result-first | The finished garden bed | The speaker states the finished bed | The finished bed is already shown | Not supplied | Coder A | The full segment is inside 0-3 seconds |
| V3 | no_public_captions | None | unknown | A silent demonstration | No usable spoken evidence | A silent demonstration | Not supplied | Coder A | Spoken opening is unknown |
| V4 | succeeded | None. The first caption starts at 4.0 seconds | no_clear_device | A ruler demonstration | No speech in the 0-3 second window | A ruler action at 1.0 seconds | Not supplied | Coder A | Manual watch finds no speech before 3 seconds |
V1 has two segments, and both meet the window test. The first runs from 0.0 to 1.5 seconds. Its full text is "Does your tray tip over?" That segment sits inside the window. The second runs from 1.5 to 3.5 seconds. Its full raw text is "This simple handle keeps it level." Keep that full sentence in the raw field. The sentence ends at 3.5 seconds, so only its first phrase is inside the window. The manual note holds that boundary check. Do not cut a share of the letters and call that share the in-window speech. The primary spoken label is question_problem. The two segments still count as one video. They do not add a second primary label.
V2 has one segment from 0.0 to 2.0 seconds. The whole segment is inside the window. The words state the finished garden bed now, so the spoken label is result-first. It is not promise, because the opening does not delay the result. The visual field shows the finished bed as a separate note. That note is not a second spoken label.
V3 has status no_public_captions, so there is no caption text to label. A manual watch shows a silent demonstration. Record that only in the visual field. The spoken mark stays unknown. The missing caption is not spoken silence, not no_clear_device, and not a spoken "no hook".
V4 has succeeded captions, but the first caption starts at 4.0 seconds. No segment has startSeconds less than 3, so no caption text enters the window. A late first caption is not proof by itself. The manual watch confirms there is no speech from 0 to 3 seconds. The spoken label is no_clear_device. A ruler action occurs at 1.0 seconds. That is a visual demonstration. It is not spoken_demonstration_cue, because the window has no spoken cue.
The set has 4 selected videos. All 4 have a manual visual note. Checked spoken outcomes are 3: V1, V2, and V4. Unknown spoken outcomes are 1: V3. One of the three checked videos is question_problem. The checked share is 1 of 3, which is 33.3 percent. Do not report 1 of 4 by habit. Use 4 only when you mean all selected videos. You must still show the 1 unknown video. V3 does not add a spoken "no hook". V1 counts once, even with two segments. The label other is not used in these four rows. This fiction uses no view counts, and it names no winning label.
The raw text and the manual note stay in separate fields. This example does not invent an agreement score. A second coder, or a second pass, would review these four rows. A disagreement would change the note or the rule.
Sources & further reading
By Chronometrica · Updated
Back to top ↑

