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
3
Total users
2
Monthly active users
12 days ago
Last modified
Categories
Share
The Actor downloads a public Instagram account's currently active stories and its highlight media, and stores each item as a permanent file. One or more usernames resolve to every story frame currently live on the account, together with every photo and video pinned across its highlights, each downloaded once and returned with a link that does not expire. Only public accounts are read, and no Instagram session is used.
Stories disappear after 24 hours; highlights are the durable half of an account's story activity, which is why a run against any account on any given day still has something worth returning even when no story is currently live.
Accepted input
| Field | Type | Default | Description |
|---|---|---|---|
profiles | array of strings | — | Required. Instagram accounts to check. |
saveMedia | boolean | true | Downloads each item and stores it permanently. When disabled, only Instagram's direct CDN URL is returned; that link stops working after approximately 34 hours. |
limit | integer | 100 | Highlights processed per account (0 processes the whole tray). Does not 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 within the same run; there is no mode switch. Most accounts do not have an active story at any given time, which is a normal outcome rather than a failure, and the run succeeds with whatever highlight media was found regardless.
Response fields
| Field | Contents |
|---|---|
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 enabled. |
directUrl / directUrlExpiresAt | Instagram's own CDN link and its approximate expiry. Present only when saveMedia is disabled. |
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"}
Behaviour on partial results
Checking an account and finding no active story is a normal, successful outcome; it is the single most common result, not an error. A run fails only when nothing could be checked at all, or when every lookup itself failed — timed out or returned an error — with nothing to show for it. A quiet account and a broken run are distinct outcomes and are never reported as the same thing.
A run is reported successful only when every account it checked genuinely returned nothing at the time it was checked, meaning no active story and no highlights, and every one of those checks itself completed without error. A lookup that fails outright causes the run to fail rather than complete with a quiet zero.
Frequently asked questions
Why do stories and highlights share one Actor? A story-only Actor would return empty on most runs, since stories remain live for only 24 hours and most accounts do not have one active 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 does not produce a quiet run.
Are photos saved, or only video? Both. Some stories and highlight items are photos with no video attached; skipping those would silently drop content. Every item is saved at its best available quality, whether that is a photo or a video.
What counts as one billed item?
Every story frame and every highlight item that is saved, or, with saveMedia disabled, 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 megabyte, covering the bandwidth the download uses; disabling saveMedia skips that charge entirely. A run against ten accounts with no active stories and modest highlight trays might return around 40 rows; a run against accounts with larger highlight collections costs more because there is more to save, not because of any per-run fee.
Can a highlightId from another system be supplied directly?
That is unnecessary; the Actor walks the highlight tray and fetches every highlight's media itself. highlightId on the response is Instagram's own identifier, in its native highlight:<digits> form, provided for reference and deduplication rather than as required input.
Can a private account's stories or highlights be fetched? No. Only public accounts are read. No login or cookie input exists, and none is planned; a signed-in session would risk the account being banned or rate-limited.
Related Actors
| Actor | Purpose |
|---|---|
| Instagram Video Downloader | A specific post or reel, rather than stories or highlights |
| Instagram Posts & Reels Scraper | The highlight tray as lightweight metadata (id/title/cover) instead of downloaded media |
| Instagram Post Scraper | A post's engagement details, rather than files |