Instagram Story & Highlight Saver
Pricing
from $2.80 / 1,000 results
Instagram Story & Highlight Saver
Save a public Instagram account's currently-active stories and highlight media as permanent files, not just direct links that expire in about a day. Give it one or more usernames; get back every active story frame plus every highlight item, downloaded and stored. No login or cookies.
Pricing
from $2.80 / 1,000 results
Rating
0.0
(0)
Developer
The Netaji
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Save a public Instagram account's currently-active stories and its highlight media as permanent files. Give it one or more usernames and get back every story frame that's live right now, plus every photo and video pinned in that account's highlights — downloaded once, stored, and given a link that doesn't expire. No login, no cookie, no session.
Stories vanish in 24 hours. Highlights are the durable half — the reason this Actor is still worth running on any given day, story or no story.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
profiles | array | — | Required. Instagram accounts to check. |
saveMedia | boolean | true | Downloads each item and stores it permanently. Turn off to get only Instagram's direct CDN URL instead — free, but it stops working in about 34 hours. |
limit | integer | 100 | Highlights processed per account (0 = the whole tray). Doesn't limit stories — an account's active story set is always small. |
{"profiles": ["nasa", "natgeo"],"saveMedia": true,"limit": 100}
Every account is checked for both stories and highlights in the same run — there's no mode switch. Most accounts won't have an active story most of the time; that's normal, not a failure, and the run still succeeds with whatever highlight media it found.
Output
| Field | What it holds |
|---|---|
kind | "story" or "highlight" |
pk | Instagram's internal media ID |
media_type | 1 = photo, 2 = video |
taken_at | When the item was posted |
title | Highlight name, on highlight items |
highlightId | Which highlight this item came from, on highlight items |
expiresAt | When this story stops being visible on Instagram, on story items |
width / height | Resolution of the file actually saved |
savedFile | Stored file: url, bytes, sizeMb, contentType — present when saveMedia is on |
directUrl / directUrlExpiresAt | Instagram's own CDN link and its rough expiry — present only when saveMedia is off |
source_username | Which account this row came from |
{"kind": "highlight","pk": "3412987456123456789","media_type": 2,"taken_at": 1785312000,"title": "Artemis III","highlightId": "highlight:18123023338592759","width": 720,"height": 1280,"savedFile": {"url": "https://api.apify.com/v2/key-value-stores/.../records/3412987456123456789-1280p.mp4","bytes": 5680112,"sizeMb": 5.418,"contentType": "video/mp4"},"source_username": "nasa"}
Questions
Why are stories and highlights in one Actor? A story-only Actor would come back empty on most runs — stories are live for 24 hours and most accounts don't have one at any given moment. Highlights are what an account has chosen to keep permanently, so pairing the two means a run against an active account almost always returns something, and a quiet day for stories doesn't mean a quiet run.
Does a run fail when an account has no active story? No. Checking an account and finding no active story is a normal, successful result — it's the single most common outcome, not an error. The run only fails when nothing could be checked at all, or when every lookup itself broke (timed out, or came back an error) with nothing to show for it. A quiet account and a broken run are different things, and this Actor never confuses one for the other.
Does it save photos, or only video? Both. Some stories and highlight items are plain photos with no video attached — skipping those would mean silently dropping content, which reads as broken. Every item is saved at its best available quality, video or photo, whichever it actually is.
What counts as one billed item?
Every story frame and every highlight item that gets saved (or, with saveMedia off, returned as a direct link) is one row and one charge. A saved file adds a small per-megabyte charge on top, rounded up to the next whole MB — that part pays for the bandwidth the download uses, and saveMedia off skips it entirely. A run against ten accounts with no active stories and modest highlight trays might return 40 rows; a run against accounts with big highlight collections costs more because there's more to save, not because of a per-run fee.
Can highlight_id in my own systems be plugged straight in?
You don't need to — this Actor walks the tray and fetches every highlight's media itself. highlightId on the output is Instagram's own id, in its native highlight:<digits> form, there for reference and deduplication, not something you need to supply.
Can I get a private account's stories or highlights? No. Public accounts only. There's no login or cookie input, and there won't be one — a signed-in session is a banned or rate-limited account waiting to happen, and this Actor doesn't take that risk with your data.
Does a run ever finish "successful" with nothing in it? Only when every account it checked genuinely has nothing right now — no active story and no highlights — and every one of those checks itself succeeded. If a lookup breaks instead of coming back empty, the run fails instead of quietly reporting zero results.
Other Instagram Actors
| Actor | Use when |
|---|---|
| Instagram Video Downloader | You want a specific post or reel, not stories or highlights |
| Instagram Posts & Reels Scraper | You want the highlight tray as lightweight metadata (id/title/cover) instead of downloaded media |
| Instagram Post Scraper | You want a post's engagement details, not files |