Instagram Stories Scraper
Pricing
Pay per event
Instagram Stories Scraper
📸 Scrape Instagram Stories and Highlight Reels from any public profile. Extract photo/video URLs, timestamps, stickers, music, and links. Pay per story — no browser needed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
📸 Scrape Instagram Stories and Highlight Reels from any public profile. Extract photo and video story URLs, timestamps, music, stickers, captions, and more — with pay-per-story pricing so you only pay for what you get.
What does it do?
Instagram Stories Scraper fetches active stories and permanent highlight reels from public Instagram accounts. Stories disappear after 24 hours, making this actor essential for anyone who needs to monitor, archive, or analyze stories systematically.
For each story, you get:
- 📷 High-resolution media URL (image or video)
- 🕒 Timestamp and expiration time
- 🎵 Music/audio information
- 🔗 Swipe-up links and CTAs
- 🎯 Sticker types (polls, questions, countdowns, quizzes, location tags)
- 📝 Captions and text overlays
- 🌟 Highlight reel title (for archived highlights)
Who is it for?
🏢 Brand Monitoring Teams
Track competitor campaigns and product launches the moment they appear on Stories. Monitor brand mentions and collaborations in real time — before the 24-hour window closes.
📊 Social Media Analysts
Build datasets of story activity across industry leaders. Understand posting cadence, content formats, and engagement patterns. Feed data directly into your analytics pipeline.
📰 News & Media Organizations
Archive story coverage from journalists, news accounts, and official sources. Create a permanent record of ephemeral content for editorial research and fact-checking.
🤖 Automation Builders
Integrate story data into Zapier, Make, or custom workflows. Trigger alerts when specific accounts post new stories, automatically archive story media, or sync story data to your CMS.
📈 Influencer Marketing Agencies
Monitor influencer story activity, track sponsored content, and verify campaign deliverables without manually checking Instagram every hour.
Why use Instagram Stories Scraper?
- ✅ No browser needed — pure API calls, fast and lightweight (256 MB memory)
- ✅ Pay per story — only charged for stories actually extracted
- ✅ Full story metadata — media URLs, stickers, music, links, timestamps
- ✅ Highlight reels — access permanent story archives, not just active 24h stories
- ✅ Batch profiles — scrape multiple accounts in a single run
- ✅ Residential proxy — built-in proxy rotation for reliable access
Data you can extract
| Field | Description | Type |
|---|---|---|
storyId | Unique story identifier | String |
username | Account username | String |
mediaType | Image or Video | String |
mediaUrl | Direct URL to photo or video | String |
thumbnailUrl | Thumbnail for video stories | String |
timestamp | When the story was posted (ISO 8601) | String |
expiresAt | When the story expires (ISO 8601) | String |
durationSecs | Video story duration in seconds | Number |
caption | Story caption text | String |
isHighlight | true for highlights, false for active stories | Boolean |
highlightTitle | Highlight reel name (if highlight) | String |
musicArtist | Music track artist | String |
musicTitle | Music track title | String |
hasLink | Whether story has a swipe-up link | Boolean |
linkUrl | Swipe-up link URL | String |
stickerTypes | List of sticker types used | Array |
viewerCount | View count (own account only) | Number |
scrapedAt | When the data was collected | String |
How much does it cost to scrape Instagram Stories?
Pay-per-story pricing — you only pay for stories actually extracted:
| Item | Price |
|---|---|
| Run start (one-time per run) | $0.005 |
| Per story extracted | $0.002 |
Example costs:
- Monitor 5 brand accounts daily (avg. 5 stories each) = $0.055/day ($1.65/month)
- Archive 10 influencer accounts with all highlights (avg. 50 stories each) = $1.005
- Daily competitive monitoring of 20 accounts = $0.205/day (~$6/month)
Compare to the competitor at $0.01 start + $0.005/story — our pricing is up to 60% cheaper.
Before you start: Get your session cookie
Instagram requires authentication to view stories. You need to provide your sessionid cookie value.
How to get your sessionid cookie:
- Open instagram.com in your browser and log in
- Open DevTools: press
F12or right-click → Inspect - Go to the Application tab (Chrome) or Storage tab (Firefox)
- Click Cookies →
https://www.instagram.com - Find the cookie named
sessionid - Copy the value (a long string of letters and numbers)
- Paste it in the Session Cookie field in the actor input
⚠️ Security note: Never share your session cookie publicly. The actor uses it only to authenticate API requests — your password is never needed or stored.
💡 Tip: Use a secondary Instagram account dedicated to scraping, not your main personal account.
How to use
- Set usernames — enter the Instagram usernames you want to monitor (without the @)
- Add session cookie — required for story access (see instructions above)
- Configure options — choose whether to include highlights and profile metadata
- Run the actor — stories are extracted and saved to your dataset
- Schedule it — run daily via Apify Schedules to never miss a story
Input configuration
{"usernames": ["natgeo", "nasa", "bbcnews"],"sessionCookie": "your_sessionid_value_here","includeHighlights": false,"maxHighlights": 10,"includeProfile": false}
Input fields
| Field | Type | Description | Default |
|---|---|---|---|
usernames | Array | Instagram usernames to scrape | Required |
sessionCookie | String | Your Instagram sessionid cookie | Required for stories |
includeHighlights | Boolean | Also fetch highlight reels | false |
maxHighlights | Integer | Max highlight reels per profile | 10 |
includeProfile | Boolean | Include profile metadata in output | false |
Output example
{"type": "story","storyId": "3581234567890123456","userId": "787132","username": "natgeo","profileUrl": "https://www.instagram.com/natgeo/","mediaType": "Image","mediaUrl": "https://scontent.cdninstagram.com/v/t51.2885-15/...","thumbnailUrl": "https://scontent.cdninstagram.com/v/t51.2885-15/...","timestamp": "2026-04-06T10:30:00.000Z","expiresAt": "2026-04-07T10:30:00.000Z","durationSecs": null,"caption": "Exploring the Amazon rainforest 🌿","isHighlight": false,"highlightId": null,"highlightTitle": null,"musicArtist": "Rodrigo y Gabriela","musicTitle": "Tamacun","hasLink": false,"linkUrl": null,"stickerTypes": ["location", "music"],"viewerCount": null,"scrapedAt": "2026-04-06T11:00:00.000Z"}
Tips for best results
✅ Use a dedicated account
Create a secondary Instagram account for scraping. This avoids any risk to your main account and keeps your monitoring separate.
✅ Run daily for active stories
Stories expire after 24 hours. Set up a daily schedule to reliably capture all stories before they disappear.
✅ Include highlights for full coverage
Active stories disappear in 24 hours, but highlights are permanent. Enable includeHighlights to get the full story archive.
✅ Batch multiple accounts
Add all usernames you want to monitor in a single run — the actor processes them sequentially with proper rate limiting to avoid triggering Instagram's anti-bot measures.
Integrations
📊 Google Sheets
Export story data directly to Google Sheets using the Google Sheets integration. Set up a daily scrape → auto-export to track stories over time.
🔔 Slack Alerts
Connect to Slack via Zapier or Make: trigger an alert whenever a monitored account posts a new story with a swipe-up link.
🗄️ Database Pipeline
Use the Apify API to pull results as JSON/CSV and push to your PostgreSQL, BigQuery, or Snowflake database for long-term analysis.
📧 Email Digests
Combine with Make to send a daily email digest of story activity from competitors — automatically summarizing new story counts and any stories with links.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/instagram-stories-scraper').call({usernames: ['natgeo', 'nasa'],sessionCookie: 'your_sessionid_here',includeHighlights: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Scraped ${items.length} stories`);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('automation-lab/instagram-stories-scraper').call(run_input={'usernames': ['natgeo', 'nasa'],'sessionCookie': 'your_sessionid_here','includeHighlights': True,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(f"@{item['username']}: {item['mediaType']} story at {item['timestamp']}")
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~instagram-stories-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames": ["natgeo", "nasa"],"sessionCookie": "your_sessionid_here","includeHighlights": false}'
Use with Claude Code (MCP)
Access Instagram Stories data directly from Claude Code or Claude Desktop with no coding required:
Claude Code setup:
$claude mcp add --transport http apify "https://mcp.apify.com"
Claude Desktop / Cursor / VS Code — add to your config:
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com?token=YOUR_API_TOKEN&tools=automation-lab/instagram-stories-scraper"}}}
Example prompts:
- "Scrape the latest stories from @natgeo and summarize the topics covered"
- "Get all highlight reels from @nasa and list the titles"
- "Monitor @bbcnews stories from the last 24 hours and identify any breaking news stories with links"
Is it legal to scrape Instagram Stories?
This actor accesses public Instagram data via the same API calls that Instagram's own apps use. You authenticate with your own account, and you can only access data that you would be able to see while logged in manually.
Best practices:
- Only scrape accounts you have legitimate business reasons to monitor
- Do not scrape private accounts or bypass privacy settings
- Respect Instagram's Terms of Service
- Store scraped data securely and in compliance with applicable privacy laws (GDPR, CCPA)
FAQ
Why do I need a session cookie? Can't it work without login?
Instagram's API requires authentication to view stories — this is a platform requirement, not a scraper limitation. You need a valid session from a logged-in account to access story content.
Will scraping hurt my Instagram account?
Using a dedicated secondary account minimizes any risk. The actor uses proper delays between requests and residential proxies to behave like a normal user. Scraping public content is significantly lower risk than automation that writes or interacts.
My session cookie stopped working. What do I do?
Instagram session cookies expire periodically (usually weeks to months). When this happens, log into Instagram in your browser again and copy the new sessionid value from DevTools.
Can I scrape private accounts?
No. The actor can only access stories from accounts that the session account follows, and public accounts. If the target account is private and the session account doesn't follow them, stories will not be accessible.
How do I scrape stories from multiple accounts in parallel?
The actor processes usernames sequentially within a single run to respect rate limits. To run faster for large lists (50+ accounts), split usernames across multiple parallel runs.
Stories are returning empty — what's wrong?
Common causes: (1) the account has no active stories right now, (2) the session cookie is expired, (3) the target account is private. Check the run logs for specific error messages.
Related scrapers
- Instagram Scraper — Scrape profiles, posts, comments, hashtags, and reels
- Instagram Reels Scraper — Focus specifically on Reels content
- Instagram Hashtag Scraper — Collect posts from specific hashtags