Instagram Story Details Scraper
Pricing
from $4.99 / 1,000 results
Instagram Story Details Scraper
📸 Instagram Story Details Scraper extracts rich metadata from public Instagram Stories—media URLs, timestamps, views, replies, mentions, hashtags, locations, stickers & links. 📊 Perfect for analytics, competitive research & content planning. ⚡ Export JSON/CSV.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
Instagram Story Details Scraper — Media, Captions and Timing Data
Instagram Story Details Scraper collects the currently active stories from any Instagram profile and returns each one as structured JSON — media URLs, caption text, posting and expiry timestamps, paid-partnership flags, and the story owner's profile fields. No HTML parsing, no browser automation on your end. Each story lands in the dataset the moment it's collected. Run it on Apify to check your first list of profiles.
🧭 What is Instagram Story Details Scraper?
Instagram Story Details Scraper is an Apify Actor that reads the active stories of one or more Instagram profiles and writes each story as one structured dataset row. It requires your own logged-in Instagram sessionid cookie — there is no anonymous mode, because Instagram's story-viewing endpoints only respond to an authenticated session. It's built for social media analysts, brand and competitor monitoring teams, and developers who need story data fed into a spreadsheet, BI tool, or AI pipeline without writing their own Instagram client.
📊 What Instagram story data is publicly available to scrape?
No story content on Instagram is reachable without an active, logged-in session — even a fully public account's stories redirect an anonymous visitor to a login page on the web. That's why this scraper needs your sessionId rather than working anonymously; the real gate isn't "public vs. login," it's "your session can see it, or your session can't."
| Data category | Visible via your logged-in session | Blocked regardless of session |
|---|---|---|
| Story media (photo/video URL) | Yes, for public accounts and private accounts your session follows | Private accounts your session doesn't follow |
| Caption and sticker text | Yes | Private accounts your session doesn't follow |
| Posting and expiry timestamps | Yes | Private accounts your session doesn't follow |
| Paid-partnership flag | Yes | Private accounts your session doesn't follow |
| Music sticker metadata | Yes, when a music sticker is attached | Not applicable if no sticker exists |
| Co-author tags | Yes, when the story is a collab | Not applicable if there are no co-authors |
| Who viewed the story | Not returned by this Actor | Instagram limits story-viewer lists to the story owner's own account |
| Story replies sent to the owner | Not returned by this Actor | Private to the owner's inbox |
Instagram Story Details Scraper only returns what your own Instagram session can already see — nothing behind a privacy wall it doesn't already have access to, and nothing anonymous browsing could ever reach.
🗂️ What data can I extract with Instagram Story Details Scraper?
The Actor returns one row per story, covering identity fields, media renditions, and timing/context fields — 18 documented keys in total, with null filled in for any field that doesn't apply to a given story rather than the key being dropped.
| Field | Description |
|---|---|
pk | Story item ID. |
id | Composite media ID ("<pk>_<owner_pk>"). |
code | Shortcode used in the story's public URL. |
media_type | 1 = image, 2 = video. |
product_type | Instagram product type, e.g. "story". |
user | Story owner object: pk, username, full_name, profile_pic_url, is_verified, is_private. |
image_versions2 | Available image renditions — candidates[].url, width, height. |
video_versions | Available video renditions, only present on video stories. Each candidate is enriched with url_expiration_timestamp_us when it can be derived from the CDN URL's expiry parameter. |
video_duration | Video length in seconds — video stories only. |
has_audio | Whether a video story has audio — video stories only. |
original_width | Media width in pixels. |
original_height | Media height in pixels. |
taken_at | Unix timestamp the story was posted. |
expiring_at | Unix timestamp the story is scheduled to expire. |
caption | Caption object, or null if the story has no caption. |
is_paid_partnership | Whether the story is tagged as a paid partnership. |
music_metadata | Attached music track info — read directly from the story, or derived from a music sticker if present. null if no music. |
coauthor_producers | Co-authors on a collaborative story, if any. |
🧑🤝🧑 Story identity fields
pk, id, code, media_type, product_type, user — what the story is, its type, and who posted it.
🎞️ Media fields
image_versions2, video_versions, video_duration, has_audio, original_width, original_height — the actual renditions and dimensions of the story's photo or video.
⏱️ Timing and context fields
taken_at, expiring_at, caption, is_paid_partnership, music_metadata, coauthor_producers — when the story was posted, when it expires, and what's attached to it.
🤖 Add-on: Need additional Instagram data?
Story details cover what's currently live on a profile — pair it with Instagram Profile Post Scraper for pinned and recent feed posts, or Instagram Posts Scraper With Creator Profiles if you also want the creator's bio, follower count, and business details attached to each post row.
🛠️ Why not build this yourself?
Instagram's story endpoints aren't documented for third-party use, and getting a reliable request through means more than sending a GET call. This Actor's session layer fetches a CSRF token from a warm-up request, visits /explore/ before touching the story endpoint, and impersonates a real Chrome TLS fingerprint on every request — all before it resolves a single username. When a response comes back looking blocked (a 401/403/429 status, or a body containing a checkpoint, challenge, or login-page marker), it retries with a fresh proxy IP up to three times rather than failing the profile outright. Maintaining that detection-and-retry logic against Instagram's changing anti-bot behavior, plus paying for proxy IPs, is the ongoing cost a self-built scraper would carry that this Actor already absorbs.
🚀 How to use Instagram Story Details Scraper
Instagram Story Details Scraper runs on Apify — no separate signup or API key beyond your Apify account.
- Open the Actor's page in the Apify Console and go to the Input tab.
- Add one or more entries to
urls— full profile URLs or plain usernames. - Paste your Instagram
sessionIdcookie value (required — the run won't start without it). - Leave
proxyConfigurationon its residential default, or adjust it for your setup. - Start the run and watch rows appear in the Output tab as each story is collected, or export the finished dataset as JSON or CSV.
📦 How to scale to bulk story extraction
urls is an array — add as many profile URLs or usernames as you want checked in a single run, no separate run per profile required. There's no input parameter capping how many stories come back per profile; the Actor returns however many active story items your session can see for that account. To keep a single session from looking like a bot, the Actor pauses 5 seconds between profiles when checking more than one — plan run time accordingly for long lists.
💡 What can you do with Instagram story data?
- 🏢 Brand and agency teams monitoring partner disclosures use
user.usernameandis_paid_partnershipto track which creators are tagging sponsored stories across a watchlist of accounts. - 📊 Social media analysts use
taken_atandexpiring_atto map posting cadence and timing patterns before the stories disappear from the platform. - 🎥 Content archivists use
image_versions2andvideo_versionsto save story media and dimensions before it's gone for good. - 🎶 Music and marketing researchers use
music_metadataandcoauthor_producersto spot which tracks and collab formats specific accounts are using in stories. - 🤖 AI engineers feed
captionandmusic_metadatatext into a monitoring agent or RAG pipeline that flags brand mentions or sentiment shifts across a list of accounts in near real time.
🛡️ How does Instagram Story Details Scraper handle rate limits and blocking?
Every request goes through the proxy you configure in proxyConfiguration — residential Apify Proxy by default, or no proxy at all if you disable it. Before hitting any story endpoint, the Actor warms the session up with a homepage visit and an /explore/ visit to collect a CSRF token, and adds a small random delay (1–2 seconds) before every request. If a response looks blocked — a 401/403/429 status, a non-200 response, or a body containing a checkpoint, challenge, or login-page marker — the Actor retries up to three more times, drawing a fresh proxy IP each attempt rather than giving up immediately. A profile that still can't be resolved, or whose stories still can't be loaded after retries, is logged and skipped so the run continues with the next profile. If the session itself is invalid or expired, the run stops immediately with a clear error rather than burning through retries on every profile.
⚠️ Proxy rotation only smooths out IP-level blocking — it doesn't remove the risk to the Instagram account behind your sessionId. Automated requests on that account are still subject to Instagram's own rate limiting and checkpoint system.
⬇️ Input
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
urls | Yes | array | Instagram profile URLs (e.g. https://www.instagram.com/username/) or plain usernames, with or without @. Add multiple entries to check several profiles in one run. | ["https://www.instagram.com/natgeo/", "kyliejenner"] |
sessionId | Yes | string | The sessionid cookie value from a logged-in instagram.com browser session. Default: "". | "YOUR_INSTAGRAM_SESSIONID_COOKIE" |
proxyConfiguration | No | object | Proxy used for all requests. Residential Apify Proxy is recommended for reliable access. | { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] } |
Example input
{"urls": ["https://www.instagram.com/natgeo/", "kyliejenner"],"sessionId": "YOUR_INSTAGRAM_SESSIONID_COOKIE","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
⬆️ Output
Each dataset item is one story, in a consistent 18-field shape — fields that don't apply to a given story (video-only fields on an image story, for example) come back as null rather than being omitted, so every row can be parsed the same way. Every row pushed to the dataset is a story that was actually collected — profiles with no active stories, or that fail to load, are only logged and skipped, so nothing you're charged for is a failed request. Export the dataset as JSON, CSV, Excel, or any other format the Apify dataset export supports.
Example output item
{"pk": "3456789012345678901","id": "3456789012345678901_987654321","code": "CxAbCdEfGhI","taken_at": 1753257600,"expiring_at": 1753344000,"media_type": 1,"product_type": "story","original_width": 1080,"original_height": 1920,"caption": null,"user": {"pk": "987654321","username": "natgeo","full_name": "National Geographic","profile_pic_url": "https://scontent.cdninstagram.com/v/profile.jpg","is_verified": true,"is_private": false},"image_versions2": {"candidates": [{ "url": "https://scontent.cdninstagram.com/v/story.jpg", "width": 1080, "height": 1920 }]},"video_versions": null,"video_duration": null,"has_audio": null,"is_paid_partnership": false,"music_metadata": null,"coauthor_producers": []}
⚙️ How does it work?
Instagram Story Details Scraper uses your sessionId cookie to authenticate directly against Instagram's own web endpoints — the same ones your browser calls when you view stories, reached here with the curl_cffi client impersonating a real Chrome TLS fingerprint instead of a headless browser. It resolves each username to a numeric user ID, then fetches that ID's active stories, routing every request through your configured Apify Proxy. When a response looks blocked, it retries with a fresh connection before giving up on a profile. The raw story payload is projected onto a fixed, documented set of fields before it's written to the dataset, so the output schema stays the same shape run after run regardless of what else Instagram's app payload contains. Only stories your session is already allowed to see are ever returned.
🔌 Integrations
Instagram Story Details Scraper runs on Apify, so it's reachable anywhere you can make an HTTP call or use an Apify client library.
Calling Instagram Story Details Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("instagram-story-details-scraper").call(run_input={"urls": ["https://www.instagram.com/natgeo/"],"sessionId": "<YOUR_INSTAGRAM_SESSIONID_COOKIE>",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
No-code tools (n8n, Make)
In n8n, use the Apify integration node (or a generic HTTP Request node) pointed at this Actor's run endpoint to trigger a run and pull the resulting dataset into your workflow. In Make, the Apify app's "Run Actor and get dataset items" module does the same, so story rows can feed straight into a spreadsheet, Slack alert, or CRM update without custom code.
⚖️ Is it legal to scrape Instagram stories?
Scraping publicly visible data is generally lawful, but Instagram story content includes personal data about identifiable people — usernames, names, photos, and video of the account holder — so GDPR and CCPA considerations apply to how you store and use it, not just how you collect it. Instagram Story Details Scraper only returns what the Instagram account behind your sessionId can already see through normal browsing; it doesn't bypass privacy settings or view anything that account isn't already permitted to view. Running automated requests on your own Instagram account is also governed by Instagram's Terms of Service, separately from data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.
❓ Frequently asked questions
What Instagram story fields does Instagram Story Details Scraper return?
It returns image_versions2/video_versions (media renditions), caption, taken_at/expiring_at (timing), user (owner info), and is_paid_partnership, among 18 fields total — see What data can I extract above for the full list.
Does Instagram Story Details Scraper require an Instagram account or login?
Yes. The sessionId input is required and must be the sessionid cookie value from a real, logged-in instagram.com browser session — there's no anonymous mode, since Instagram's story endpoints require authentication for any viewer.
How many Instagram profiles can I check in one run?
There's no input parameter capping the number of profiles — urls accepts as many entries as you add. The Actor pauses 5 seconds between profiles to keep request pressure on a single session low, so total run time scales with the size of your list.
What happens if a profile has no active stories or is private?
If a profile has no currently active stories, the Actor logs it and moves on without writing a row for that profile — no charge for an empty result. If a profile can't be resolved at all (invalid username, or private and not visible to your session), it's logged as skipped and the run continues with the next profile rather than failing the whole run.
Can I scrape multiple Instagram profiles at once?
Yes. Add multiple URLs or usernames to the urls array and they're processed in the same run, one after another with a 5-second pause between each.
Does Instagram Story Details Scraper work with Claude, ChatGPT, and other AI agent tools?
It isn't exposed through an MCP server today. It's callable as a standard HTTP endpoint through the Apify API, so any agent framework that can make an authenticated HTTP request — including custom Claude or ChatGPT tool integrations — can trigger a run and read back the results.
What makes this Instagram story scraper different?
It keeps the full raw field set rather than a trimmed summary — 18 documented fields including music sticker metadata, co-author tags, and CDN expiry timestamps derived from the media URL itself, not just captions and media links. Every story is pushed to the dataset the instant it's collected, so results are visible mid-run, not only after the whole list finishes.
Does Instagram Story Details Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across every run — no HTML parsing, no CSS selectors. Pass it directly to an LLM prompt, index it into a vector store, or feed it to an agent tool.
What happens when Instagram changes its layout or anti-bot system?
The Actor is maintained, and the output schema is designed to stay stable across Instagram-side changes — the field projection step keeps the dataset shape fixed even if Instagram's underlying payload changes.
Can I use Instagram Story Details Scraper without managing proxies or browser infrastructure?
Yes. There's no headless browser to run or maintain — requests go out through Apify Proxy, which you configure with a single input field, and the Actor handles session warm-up, retries, and TLS fingerprinting internally.
Which Instagram story fields work best for AI training data and RAG indexing?
For RAG, index caption and music_metadata — the highest-information text fields. For training data, pk, taken_at, media_type, and user.username are the most consistently structured fields across every record, and all fields return as typed primitives or nested objects, never as raw HTML.
🔗 Related scrapers
| Scraper | What it extracts |
|---|---|
| Instagram Profile Post Scraper | Instagram profile posts, including pinned-post handling and recent comments |
| Instagram Posts Scraper With Creator Profiles | Instagram posts enriched with the author's bio, follower count, and business details |
| Snapchat User Stories Scraper | Public Snapchat stories and highlights, with per-snap media URLs and timestamps |
| TikTok User Profile Scraper With Engagement Analytics | TikTok profile stats with engagement tiers and cross-run growth deltas |
💬 Your feedback
Found a bug or missing a field? Open an issue on this Actor's Issues tab in Apify Console, or reach out through the contact link on the store listing — reports like these go straight into what gets fixed next.