Rip the script out of any video ad — TikTok, YouTube Shorts, Reels, Meta Ad Library, X, whatever yt-dlp can grab — transcribe it locally with Whisper, and auto-extract the hook, CTA, and copy patterns into a clean swipe file.
Built for media buyers, UGC creators, creative strategists, and copywriters who study winning ads at scale.
$ ad-whisperer https://www.tiktok.com/@brand/video/123...
Downloading audio... ok (4.2s)
Transcribing (whisper small)... ok (11.1s)
Analyzing creative... ok
HOOK "POV: you just found the skincare routine..."
CTA "link in bio — first 100 get 40% off"
WORDS 187 (WPM: 152)
STRUCTURE PAS (Problem → Agitate → Solve)
EMOTIONS urgency, curiosity, social-proof
→ swipe/tiktok_brand_123.md
Studying other people's ads is the single highest-ROI thing a creative strategist does. But nobody wants to:
- Re-watch the same 30-second ad ten times to transcribe the hook.
- Pay per-minute transcription services when you're dissecting 200+ ads a week.
- Send your client's unreleased competitor research to a third-party API.
ad-whisperer runs entirely on your machine, batch-processes a whole swipe list overnight, and gives you searchable, structured output you can grep, diff, or drop into Notion / Airtable.
- Any source yt-dlp supports — TikTok, YouTube (incl. Shorts), Instagram Reels, Facebook / Meta Ad Library, X / Twitter, Vimeo, and 1000+ more.
- Local Whisper via
faster-whisper— 4x faster than reference Whisper, runs on CPU. - Hook extraction — isolates the first 3 seconds (the part that decides whether the ad works).
- CTA detection — finds "link in bio", "swipe up", "first N get X", "comment the word…", "tap below", etc.
- Structure tagging — classifies as AIDA, PAS, 4Ps, Story-Lesson-Application, or unstructured.
- Emotional-trigger tagging — urgency, curiosity, social proof, FOMO, authority, contrarian.
- Batch mode — feed it a
.txtof URLs, it builds a full swipe library. - Output formats — per-ad Markdown, combined CSV, and JSON for programmatic use.
pipx install ad-whisperer
# or
pip install ad-whispererYou'll also need ffmpeg on your PATH:
brew install ffmpeg # macOS
sudo apt install ffmpeg # Debian/UbuntuSingle ad:
ad-whisperer https://www.tiktok.com/@nike/video/7234567890Batch (swipe file):
ad-whisperer --batch urls.txt --out swipe/ --model smallBigger model for noisy / accented audio:
ad-whisperer URL --model mediumCSV rollup of everything you've transcribed:
ad-whisperer --rollup swipe/ > swipe-library.csvEach ad produces a file like this:
# Nike — TikTok 7234567890
- **URL:** https://www.tiktok.com/@nike/video/7234567890
- **Duration:** 28.4s
- **Words:** 72
- **WPM:** 152
- **Structure:** PAS
- **Emotional triggers:** urgency, social-proof
## Hook (0.0–3.0s)
> "If you still haven't tried these, you're missing the whole point."
## Full transcript
...
## CTAs detected
- "link in bio"
- "limited drop — gone by Sunday"See examples/ for real output.
ad-whisperer [URL ...] [OPTIONS]
Options:
--batch PATH Text file of URLs, one per line.
--out DIR Output directory (default: ./swipe).
--model NAME Whisper model: tiny|base|small|medium|large-v3
(default: small — good balance of speed / accuracy).
--language CODE Force language (e.g. "en"). Default: auto-detect.
--hook-seconds N Seconds to treat as hook (default: 3.0).
--format FMT md|json|both (default: both).
--rollup DIR Scan a swipe dir, emit CSV to stdout.
--no-download Skip download, use existing audio file as input.
-v, --verbose Verbose logging.
Audio and transcripts never leave your machine. No API keys required. No telemetry.
MIT — see LICENSE.
Issues and PRs welcome. If you run a creative shop and want a specific structure template or CTA pattern added to the analyzer, open an issue with a few example ads.