YouTube Shorts Text Extractor
Pricing
from $0.37 / 1,000 short processeds
YouTube Shorts Text Extractor
Extract on-screen text from public YouTube Shorts—overlays, burned-in captions, stickers, hashtags, watermarks, @mentions—with MM:SS timestamps, text type, screen position, language, and confidence. Visual OCR, not audio transcription. No login needed. Structured segments plus fullText.
Pricing
from $0.37 / 1,000 short processeds
Rating
0.0
(0)
Developer
rainminer
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
The YouTube Shorts Text Extractor is an Apify Actor that reads public YouTube Shorts and returns every piece of visible on-screen text as structured data. Creators and brands burn text, captions, stickers, hashtags, and watermarks directly into their videos — this Actor unlocks that content for search, analysis, and database ingestion without manual review.
This is visual OCR, not audio transcription. Speech-to-text tools give you what was said; this Actor gives you what was shown — the headline card, the price tag, the discount code, the lower-third name badge, the "link in bio" call to action. That text is invisible to every transcript-based tool.
Each Short is processed by AI vision and the results are returned as a structured dataset of text segments — each with its timestamp, type, screen position, language, and confidence rating — plus a combined fullText field for quick search and indexing.
Key Features
- On-screen text only: Reads text rendered on top of the video, never the audio track.
- Full coverage: Captures animated overlays, burned-in captions, sticker labels, watermarks, hashtags, and @mentions.
- Timestamp-aware: Records the MM:SS timestamp when each text element first appears.
- Type classification: Distinguishes overlay, caption, sticker, watermark, hashtag, mention, and other text types.
- Combined
fullText: All segments joined into a single newline-separated block, ready for full-text search. - Multilingual: Detects the ISO 639-1 language code for each segment from the text itself.
- Position detection: Classifies text placement as top, center, or bottom of screen.
- Confidence rating: High/medium/low rating based on text clarity in the video frame.
- Flexible URL input: Accepts
youtube.com/shorts/...,youtu.be/..., andyoutube.com/watch?v=.... - No login required: Works with any public YouTube Short.
Why Extract Text from YouTube Shorts?
Shorts are a primary publishing surface for businesses, creators, and brands. Product drops, discount codes, event announcements, hiring notices, and pricing updates are routinely shared only as burned-in video text — never structured, never indexed, and never captured by transcript tools. This Actor makes that content machine-readable for:
- Content intelligence and brand monitoring tracking what competitors publish on Shorts.
- Retail and e-commerce indexing product drops, promo codes, prices, and launch dates.
- Food and hospitality capturing daily specials and seasonal menus announced via video.
- Event aggregators extracting event names, dates, venues, and lineup text from promo Shorts.
- Creator and influencer analytics measuring hook text, captions, and call-to-action patterns.
- Market research tracking pricing, offers, and messaging trends across channels.
- Accessibility tools converting visual Shorts text to readable formats.
Who Is It For?
- Marketing and analytics teams monitoring brand or competitor Shorts content at scale.
- Product and data teams building structured datasets from short-form video.
- Developers integrating Shorts text extraction into discovery or monitoring pipelines.
- Researchers studying visual communication trends in short-form video.
Input Schema
{"shortUrls": ["https://www.youtube.com/shorts/0uTo-oe2ecA","https://www.youtube.com/shorts/MJstrGQT79k"],"maxItems": 10}
shortUrls is required. All other fields are optional.
| Field | Type | Default | Description |
|---|---|---|---|
shortUrls | Array of strings | — | Public YouTube Shorts URLs (/shorts/..., youtu.be/..., or /watch?v=...) |
maxItems | Integer | 10 | Maximum number of Shorts to process in a single run |
proxyConfiguration | Object | Residential on | Proxy used for downloads — YouTube blocks most datacenter IPs |
Output Schema
Each dataset item represents one Short and all the on-screen text found in it:
{"shortUrl": "https://www.youtube.com/shorts/MJstrGQT79k","videoId": "MJstrGQT79k","duration": 45,"textSegments": [{"text": "Suffolk wildfires ‘stabilising’, say firefighters","timestamp": "00:00","type": "overlay","position": "top","language": "en","confidence": "high"},{"text": "At least 12 fire engines remain on scene.","timestamp": "00:09","type": "caption","position": "bottom","language": "en","confidence": "high"}],"fullText": "Suffolk wildfires ‘stabilising’, say firefighters\nAt least 12 fire engines remain on scene.","scrapedAt": "2026-08-01T07:16:28.904Z"}
| Field | Description |
|---|---|
shortUrl | Normalized canonical URL of the Short |
videoId | YouTube 11-character video ID |
duration | Video length in seconds |
textSegments | Array of all on-screen text elements found |
textSegments[].text | The visible text content as it appears on screen |
textSegments[].timestamp | MM:SS when the text first appears — null if indeterminate |
textSegments[].type | overlay | caption | sticker | watermark | hashtag | mention | other |
textSegments[].position | top | center | bottom — vertical screen position, null if it moves |
textSegments[].language | ISO 639-1 language code detected from the text, e.g. "en", "es" — null if indeterminate |
textSegments[].confidence | high | medium | low — extraction confidence based on text clarity |
fullText | Every segment's text joined with newlines — convenient for search and indexing |
scrapedAt | ISO timestamp of when this Short was processed |
How It Works
- Validate inputs — each URL is checked against accepted YouTube URL patterns, the video ID is extracted, and the URL is normalized to a canonical Shorts form.
- Fetch (retriable) — each Short is retrieved in a dedicated crawler step. Failed fetches are retried automatically with a fresh proxy (up to 5 attempts).
- Process — the video is analyzed by AI vision to extract all visible on-screen text in a single pass.
- Structured output — each text segment is classified by type, position, language, and confidence.
- Push to dataset — one dataset row is pushed per Short containing all its text segments plus the combined
fullText.
Pricing
This Actor uses pay-per-event pricing:
| Event | Charged |
|---|---|
short-processed | Once per Short successfully processed |
video-second | Per second of video processed (rounded up, minimum 1) |
Shorts that fail to download or contain no on-screen text are not charged.
Notes and Limitations
- Public Shorts only: Private, unlisted, and age- or login-gated videos are not supported.
- Video availability: Deleted, region-blocked, or expired videos will fail to fetch and are skipped with a warning.
- Proxy recommended: YouTube blocks most datacenter IPs. Residential proxy is the default and is strongly recommended.
- OCR accuracy: Fast-moving, small-font, or low-contrast text may yield lower confidence extractions.
- Text-free videos: Shorts with no burned-in text return no dataset row — this is expected, not an error.
- Video size: Very large videos are skipped automatically.
- Audio not included: Spoken content is intentionally excluded — only text visually rendered on screen is extracted. Use a transcription Actor if you need speech.