Instagram Story On-Screen Text Extractor (OCR)
Pricing
from $0.37 / 1,000 story processeds
Instagram Story On-Screen Text Extractor (OCR)
Read promo codes, CTAs, link-sticker URLs, and every on-screen overlay from public Instagram Stories with AI OCR. Paste Story or Highlight URLs—no login. Get structured JSON with text segments, language, and confidence. Export to JSON, CSV, Excel, or call via API.
Pricing
from $0.37 / 1,000 story processeds
Rating
0.0
(0)
Developer
rainminer
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
The Instagram Story Text Extractor is an Apify Actor that reads public Instagram Stories and returns every piece of visible on-screen text as structured data—plus promo codes, call-to-action phrases, and link-sticker URLs when they appear on screen. Brands publish flash sales, coupon codes, and swipe-up links in Stories; this Actor turns that visual content into JSON you can search, monitor, and pipe into databases without watching Stories manually.
Each Story is analyzed with AI vision. Results land in one dataset row per Story with typed text segments, language detection, and confidence scores.

Key Features
- On-screen text OCR: Captures overlays, stickers, captions, hashtags, @mentions, promo banners, and CTA text.
- Marketing fields: Surfaces
promoCode,callToAction, andlinkStickerUrlwhen visible on the Story. - Video and image Stories: Handles motion and still Stories from direct Story URLs or Highlight items.
- Timestamp-aware (video): Records MM:SS when each text element first appears in video Stories.
- Type classification: overlay, caption, sticker, promo, cta, hashtag, mention, and more.
- Multilingual: ISO 639-1 language code per segment.
- No login required: Works with public Stories and Highlight items you can open without an account.
What data can you extract?
| Field | Description |
|---|---|
storyUrl | Canonical Instagram Story URL |
username | Story owner handle (resolved from media metadata when the URL omits it) |
highlightId | Highlight reel id when the URL is a Highlight item |
mediaId | Instagram media id for the Story frame |
onScreenTextPlain | Pipe-separated summary of marketing-relevant on-screen phrases (UI countdown filtered out) |
onScreenText | Array of text segments with type, position, language, confidence |
promoCode | Discount or coupon code if shown on screen |
callToAction | Primary CTA phrase (e.g. Shop now) |
linkStickerUrl | URL on a link sticker when visible |
mediaType | video or image |
duration | Length in seconds for video Stories |
scrapedAt | ISO timestamp when the Story was processed |
Who is it for?
- Marketing and competitive intelligence teams tracking promo codes and offers in Stories.
- Affiliate and influencer analysts capturing link-sticker destinations and campaign CTAs.
- Retail and e-commerce monitoring limited-time codes announced only in Stories.
- Developers building Story monitoring pipelines on Apify schedules and webhooks.
How do I extract text from Instagram Stories?
- Open the Actor on Apify Console and add start URLs — public Story or Highlight item URLs (
/stories/{username}/{id}/or/stories/highlights/{highlightId}/{id}/). - Set Max stories (default 5) and keep Apify Proxy enabled if downloads fail from your region.
- Run the Actor and open the Dataset tab for structured rows.
- Export to JSON, CSV, Excel, or pull results via the Apify API.
Input
{"startUrls": [{"url": "https://www.instagram.com/stories/highlights/17975319242920589/3713636227774800082/"}],"maxItems": 5}
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | request list | — | Public Story or Highlight item URLs |
maxItems | integer | 5 | Maximum stories to process per run |
proxyConfiguration | object | Apify Proxy on | Proxy for Instagram media downloads |
Output example
{"storyUrl": "https://www.instagram.com/stories/brand/3456789012345678901/","username": "brand","mediaId": "3456789012345678901","highlightId": null,"mediaType": "video","duration": 12.5,"promoCode": "SAVE20","callToAction": "Shop now","linkStickerUrl": "https://example.com/sale","onScreenText": [{"text": "SAVE20 — 20% off today only","timestamp": "00:01","type": "promo","position": "center","language": "en","confidence": "high"}],"scrapedAt": "2026-10-18T12:00:00.000Z"}
How it works
- Validate URLs — each input URL is checked against Instagram Story and Highlight patterns.
- Download media — the Story frame is retrieved without a browser session (video or image).
- AI extraction — Gemini vision reads on-screen text and structured marketing fields.
- Dataset output — one row per Story with segments and promo/CTA/link fields.
- Pay-per-event —
story-processedcovers media handling;story-text-processedcovers successful text extraction (separate from any media-only scrapers you run in parallel).
Pricing
This Actor uses pay-per-event billing on Apify: you are charged when Story media is processed and again when text is successfully extracted to the dataset. Exact prices appear on the Actor detail page in Apify Store. Start with a small maxItems value to estimate cost per Story before scaling.
Notes and limitations
- Public Stories only — private accounts and Stories that require login are not supported.
- Media download — Stories are fetched via Instagram’s logged-out guest session (
graphql/querywarm-up +reels_media+ CDN download). No Instagram login or cookies in input. Use Apify residential proxy when datacenter IPs are blocked. Expired 24h Stories cannot be recovered. - Ephemeral Stories — standard Stories expire after 24 hours; use a fresh URL or a Highlight item for stable tests.
- OCR accuracy — small, fast-moving, or low-contrast text may yield lower confidence.
- Link stickers —
linkStickerUrlis set only when a URL is clearly visible on screen (not inferred from Instagram metadata alone). - Audio excluded — spoken words are not transcribed; only visible text is extracted.
Learn more
Image Credit
Image credit: Instagram