YouTube Script AI Analyzer - Hooks, Pacing & CTA Teardown avatar

YouTube Script AI Analyzer - Hooks, Pacing & CTA Teardown

Pricing

from $150.00 / 1,000 video analyzeds

Go to Apify Store
YouTube Script AI Analyzer - Hooks, Pacing & CTA Teardown

YouTube Script AI Analyzer - Hooks, Pacing & CTA Teardown

Analyze YouTube video scripts in bulk for competitor research. Input video URLs or a channel URL (auto-pulls top-viewed videos). Returns structured JSON per video: hooks, timestamped scene blocks, CTAs, pacing, tone, SEO keywords, and attention-rated winner/weak moments. Charged per analyzed video.

Pricing

from $150.00 / 1,000 video analyzeds

Rating

0.0

(0)

Developer

Domin Vo

Domin Vo

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

What does YouTube Script AI Analyzer do?

The YouTube script analyzer for competitor research. Paste a channel — or specific video URLs — and get a structured script teardown for every video: hook, pacing, CTAs, tone, title alignment, and attention-rated winning moments, all in one sortable JSON row per video.

Point it at a channel URL and it automatically finds and analyzes that channel's top-viewed videos — no hunting for individual links. Or paste up to 50 specific URLs to compare a curated set head-to-head.

Under the hood it fetches public captions and metadata from YouTube, segments each script into timestamped blocks, classifies every block with a fixed schema, and converts a public attention signal into coarse winner / neutral / weak labels. For batches of 3+ videos it also emits a cross-video pattern summary at no extra charge.

Run it from Apify Console, schedule it, or call it via API. Download results as JSON, CSV, or Excel.

Why use YouTube Script AI Analyzer?

  • Tear down a whole channel in one run. Paste a channel URL; the Actor ranks its top-viewed recent videos and analyzes each one. Perfect for sizing up a competitor fast.
  • Compare competitor scripts without reading every transcript. Each run returns timestamped blocks, hook type, CTA placements, SEO keywords, and pacing stats for every video.
  • Evidence-backed labels. Attention-rated winner and weak moments come from a public signal, not guesswork.
  • Stable JSON output. Fixed schema across every run — easy to sort, filter, and pipe into your own tools or automations.
  • Batch pattern detection. Analyze 3–50 videos and get a cross-video summary: repeated winning tactics, weak moves, common scene sequences, and pacing medians.
  • Pay only for results. Failed, private, or caption-less videos are not charged.

Who is this for?

PersonaJob to be done
Content agenciesCompare competitor scripts for a client niche without reading every transcript
Faceless-channel operatorsFind repeatable script moves from proven videos backed by structured evidence
Creator-tool buildersFeed stable script intelligence (JSON) into a workflow or product

Raw transcript buyers are out of scope — there are 100+ cheaper transcript Actors for that.

How to use YouTube Script AI Analyzer

  1. Open the Actor on Apify Console.
  2. Either paste public YouTube video URLs into the Video URLs field, or paste a Channel URL (e.g. https://www.youtube.com/@HalfasInteresting) and set Top N to analyze that channel's top-viewed recent uploads. You can do both — up to 50 videos total.
  3. Leave Include Batch Pattern Summary checked if you want cross-video patterns (free, requires 3+ usable videos).
  4. Click Start and wait for the run to complete (typically 30–90 seconds per video; channel runs also spend a little time ranking).
  5. Open the Dataset tab to browse, sort, or download results.

Input

Analyze specific videos:

{
"video_urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/watch?v=9bZkp7q19f0",
"https://www.youtube.com/watch?v=JGwWNGJdvx8"
],
"include_batch_summary": true,
"language": "en"
}

Or analyze a channel's top-viewed recent videos:

{
"channel_url": "https://www.youtube.com/@HalfasInteresting",
"top_n": 20,
"include_batch_summary": true,
"language": "en"
}
FieldTypeDefaultNotes
video_urlsstring[]optionalPublic YouTube URLs. Provide these, channel_url, or both — up to 50 videos total
channel_urlstringoptionalA channel URL. Expands to its top-top_n most-viewed recent uploads (not all-time)
top_ninteger201–50. How many top-viewed recent videos to pull from channel_url. Each is charged
include_batch_summarybooleantrueEmits a batch summary row when 3+ videos succeed. Included, not charged.
languagestring"en"V1: English captions only

Provide at least one of video_urls or channel_url. A channel run analyzing 20 videos costs about $3.00 (20 × $0.15); the ranking step is not charged.

Output

You can download the dataset in JSON, CSV, HTML, or Excel from the Dataset tab.

video_teardown row (attention rating applied)

{
"record_type": "video_teardown",
"video_id": "9bZkp7q19f0",
"video_url": "https://www.youtube.com/watch?v=9bZkp7q19f0",
"title": "PSY - GANGNAM STYLE(강남스타일) M/V",
"duration_sec": 253,
"attention_rating_status": "applied",
"analysis_notes": "Strong hook with visual contrast. CTA cluster at 70% mark.",
"hook_type": "visual_contrast",
"hook_strength": 0.82,
"cta_placements": [176.0, 231.0],
"title_alignment": "Title matches hook framing and first 10 seconds.",
"seo_keywords": ["gangnam style", "kpop", "viral music video"],
"block_count": 14,
"pattern_interrupts_total": 9,
"interrupts_per_minute": 2.13,
"blocks": [
{
"id": 0,
"t0": 0.0,
"t1": 12.4,
"text": "Oppa Gangnam style...",
"scene_type": "hook",
"pulls": ["pattern_interrupt", "high_energy_open"],
"tone_markers": ["playful", "high_energy"],
"pattern_interrupts": 1,
"attention_rating": "winner"
}
]
}

video_teardown row (attention rating unavailable)

{
"record_type": "video_teardown",
"video_id": "dQw4w9WgXcQ",
"video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"duration_sec": 212,
"attention_rating_status": "unavailable",
"analysis_notes": "Attention rating unavailable — this video's public engagement signal isn't established yet (this can happen with newer or lower-traffic videos). The full script teardown above is complete; only the per-block winner/weak attention labels are affected.",
"hook_type": "music_intro",
"hook_strength": null,
"cta_placements": [],
"title_alignment": "Title matches song content.",
"seo_keywords": ["rick astley", "never gonna give you up", "80s pop"],
"block_count": 11,
"pattern_interrupts_total": 4,
"interrupts_per_minute": 1.13,
"blocks": [
{
"id": 0,
"t0": 0.0,
"t1": 18.0,
"text": "We're no strangers to love...",
"scene_type": "hook",
"pulls": ["familiar_reference"],
"tone_markers": ["sincere", "nostalgic"],
"pattern_interrupts": 0,
"attention_rating": "unavailable"
}
]
}

batch_pattern_summary row

{
"record_type": "batch_pattern_summary",
"source_video_ids": ["9bZkp7q19f0", "dQw4w9WgXcQ", "JGwWNGJdvx8"],
"repeated_winning_pulls": ["pattern_interrupt", "open_loop"],
"repeated_weak_moves": ["delayed_hook", "generic_cta"],
"common_scene_sequences": ["hook -> frame -> story", "exposition -> list_item -> cta"],
"pacing_summary": {
"median_block_count": 12.0,
"median_interrupts_per_minute": 1.8
},
"attention_rating_coverage": {
"applied": 2,
"unavailable": 1
}
}

Field Reference

video_teardown fields

FieldTypeDescription
record_typestringAlways "video_teardown"
video_idstringYouTube video ID
video_urlstringOriginal input URL
titlestringVideo title
duration_secintegerVideo duration in seconds
attention_rating_statusstring"applied" or "unavailable"
analysis_notesstringBrief plain-English summary of key observations
hook_typestringIdentified hook strategy (e.g. "open_loop", "visual_contrast")
hook_strengthfloat or nullRating-backed hook score 0–1; null when rating is unavailable
cta_placementsfloat[]Timestamps (seconds) where CTAs appear
title_alignmentstringHow well the title aligns with the hook and first block
seo_keywordsstring[]Keywords identified in the script
block_countintegerTotal number of script blocks
pattern_interrupts_totalintegerTotal rhetorical/structural shifts across all blocks
interrupts_per_minutefloatPattern interrupts per minute (comparable across videos)
blocksobject[]Timestamped script blocks (see below)

blocks[] item fields

FieldTypeDescription
idintegerBlock index (0-based)
t0floatStart time in seconds
t1floatEnd time in seconds
textstringBlock transcript text
scene_typestringhook, frame, story, exposition, evidence, list_item, turn, payoff, cta, or outro
pullsstring[]Attention tactics used (e.g. "open_loop", "social_proof")
tone_markersstring[]Short tone labels (e.g. "urgent", "conversational")
pattern_interruptsintegerStructural or rhetorical shifts within this block
attention_ratingstring"winner", "neutral", "weak", or "unavailable"

batch_pattern_summary fields

FieldTypeDescription
record_typestringAlways "batch_pattern_summary"
source_video_idsstring[]IDs of videos included in this summary
repeated_winning_pullsstring[]Tactics seen in winner-rated blocks across multiple videos
repeated_weak_movesstring[]Patterns seen in weak-rated blocks across multiple videos
common_scene_sequencesstring[]Repeated block-order patterns
pacing_summary.median_block_countfloatMedian block count across analyzed videos
pacing_summary.median_interrupts_per_minutefloatMedian interrupts per minute
attention_rating_coverage.appliedintegerVideos where the attention rating was successfully applied
attention_rating_coverage.unavailableintegerVideos where the attention rating was unavailable

Pricing

$0.15 per successfully analyzed video (launch test price). The video_analyzed event is charged once per video_teardown row emitted.

ItemCost
Actor start$0.00005 (platform fee)
Each analyzed video$0.15
Batch pattern summaryIncluded — $0 extra
Failed, private, or caption-less videos$0 — not charged

Example: Analyze 10 competitor videos → $0.00005 + (10 × $0.15) = $1.50005

Pricing is subject to change after the cloud cost spike confirms real per-video LLM and compute costs. Subscribe to Actor updates for changes.

How to run via API

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
run_input = {
"video_urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/watch?v=9bZkp7q19f0",
],
"include_batch_summary": True,
"language": "en",
}
run = client.actor("dominvo/youtube-script-ai-analyzer").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Tips

  • Start with 3–5 videos to verify the output structure before running a full batch.
  • Use include_batch_summary: true (the default) any time you submit 3+ URLs — the cross-video summary is the most actionable output for competitor research.
  • Filter by record_type in your downstream tool to separate teardown rows from the summary row.
  • Sort by interrupts_per_minute to quickly find the fastest-paced videos in a batch.
  • Videos without English captions are skipped and not charged.

FAQ

Is this affiliated with YouTube or Google? No. This Actor reads publicly available captions and metadata — the same data accessible in any browser. It is not affiliated with, endorsed by, or a product of YouTube or Google.

English captions only? Yes, V1 supports English captions only. Other languages may be added after demand is confirmed.

What is the "attention rating"? The Actor converts a publicly available per-segment signal into coarse block-level labels: winner, neutral, or weak. This is not YouTube's private creator audience-retention curve and does not represent any internal YouTube analytics data. When the signal is unavailable for a video, all blocks get attention_rating: "unavailable" and attention_rating_status: "unavailable".

What counts as a "failed" video? Private videos, deleted videos, age-gated videos, and videos without English captions are all skipped and not charged. You'll see a log message for each skip.

Can I export to CSV or Excel? Yes. Use the Dataset tab's export options or the API with ?format=csv or ?format=xlsx.

Need help or a custom solution? Open an issue on the Issues tab or contact the actor author.