Instagram Story Details Scraper avatar

Instagram Story Details Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Instagram Story Details Scraper

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

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

4 days ago

Last modified

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 categoryVisible via your logged-in sessionBlocked regardless of session
Story media (photo/video URL)Yes, for public accounts and private accounts your session followsPrivate accounts your session doesn't follow
Caption and sticker textYesPrivate accounts your session doesn't follow
Posting and expiry timestampsYesPrivate accounts your session doesn't follow
Paid-partnership flagYesPrivate accounts your session doesn't follow
Music sticker metadataYes, when a music sticker is attachedNot applicable if no sticker exists
Co-author tagsYes, when the story is a collabNot applicable if there are no co-authors
Who viewed the storyNot returned by this ActorInstagram limits story-viewer lists to the story owner's own account
Story replies sent to the ownerNot returned by this ActorPrivate 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.

FieldDescription
pkStory item ID.
idComposite media ID ("<pk>_<owner_pk>").
codeShortcode used in the story's public URL.
media_type1 = image, 2 = video.
product_typeInstagram product type, e.g. "story".
userStory owner object: pk, username, full_name, profile_pic_url, is_verified, is_private.
image_versions2Available image renditions — candidates[].url, width, height.
video_versionsAvailable 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_durationVideo length in seconds — video stories only.
has_audioWhether a video story has audio — video stories only.
original_widthMedia width in pixels.
original_heightMedia height in pixels.
taken_atUnix timestamp the story was posted.
expiring_atUnix timestamp the story is scheduled to expire.
captionCaption object, or null if the story has no caption.
is_paid_partnershipWhether the story is tagged as a paid partnership.
music_metadataAttached music track info — read directly from the story, or derived from a music sticker if present. null if no music.
coauthor_producersCo-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.

  1. Open the Actor's page in the Apify Console and go to the Input tab.
  2. Add one or more entries to urls — full profile URLs or plain usernames.
  3. Paste your Instagram sessionId cookie value (required — the run won't start without it).
  4. Leave proxyConfiguration on its residential default, or adjust it for your setup.
  5. 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.username and is_paid_partnership to track which creators are tagging sponsored stories across a watchlist of accounts.
  • 📊 Social media analysts use taken_at and expiring_at to map posting cadence and timing patterns before the stories disappear from the platform.
  • 🎥 Content archivists use image_versions2 and video_versions to save story media and dimensions before it's gone for good.
  • 🎶 Music and marketing researchers use music_metadata and coauthor_producers to spot which tracks and collab formats specific accounts are using in stories.
  • 🤖 AI engineers feed caption and music_metadata text 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

ParameterRequiredTypeDescriptionExample value
urlsYesarrayInstagram 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"]
sessionIdYesstringThe sessionid cookie value from a logged-in instagram.com browser session. Default: ""."YOUR_INSTAGRAM_SESSIONID_COOKIE"
proxyConfigurationNoobjectProxy 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 ApifyClient
client = 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.

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.

ScraperWhat it extracts
Instagram Profile Post ScraperInstagram profile posts, including pinned-post handling and recent comments
Instagram Posts Scraper With Creator ProfilesInstagram posts enriched with the author's bio, follower count, and business details
Snapchat User Stories ScraperPublic Snapchat stories and highlights, with per-snap media URLs and timestamps
TikTok User Profile Scraper With Engagement AnalyticsTikTok 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.