Instagram Highlights API: Extract Story Highlight Content
Instagram Stories disappear after 24 hours, but Highlights persist forever. This guide shows you how to extract highlight data from any public Instagram profile.
What Are Instagram Highlights?
Highlights are curated collections of Stories that creators save to their profile. They typically contain:
- Product showcases
- FAQs and tutorials
- Behind-the-scenes content
- User testimonials
- Event coverage
Highlights API Endpoints
SociaVault offers two endpoints for highlights:
| Endpoint | Description |
|---|---|
| Highlights | Get all highlights from a profile |
| Highlight Detail | Get stories within a highlight |
Get Profile Highlights
List all highlights from an Instagram profile:
const response = await fetch(
'https://api.sociavault.com/v1/scrape/instagram/highlights?handle=jane',
{
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
}
);
const result = await response.json();
const highlights = Object.values(result.data.highlights);
You can also use user_id instead of handle for faster response times.
Response
{
"success": true,
"data": {
"success": true,
"highlights": {
"0": {
"__typename": "GraphHighlightReel",
"id": "18154582366360931",
"title": "BOB hairstyles💇‍♀️",
"cover_media": {
"thumbnail_src": "https://scontent..."
},
"cover_media_cropped_thumbnail": {
"url": "https://scontent..."
},
"owner": {
"__typename": "GraphUser",
"id": "21393171",
"username": "jane"
}
}
}
},
"credits_used": 1,
"endpoint": "instagram/highlights"
}
Key fields per highlight:
- Title:
title - ID:
id(use this with the detail endpoint) - Cover image:
cover_media_cropped_thumbnail.url - Owner:
owner.username
Get Highlight Details
Extract the stories within a specific highlight:
const response = await fetch(
'https://api.sociavault.com/v1/scrape/instagram/highlight-detail?id=18154582366360931',
{
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
}
);
const result = await response.json();
const stories = Object.values(result.data.items);
Response
{
"success": true,
"data": {
"success": true,
"id": "highlight:18067016518767507",
"reel_type": "highlight_reel",
"user": {
"pk": "21393171",
"username": "jane",
"full_name": "Jane Williamson",
"is_verified": true
},
"items": {
"0": {
"pk": "3573813516152622297",
"id": "3573813516152622297_21393171",
"code": "DGYvHVDxEzZ",
"media_type": 2,
"taken_at": 1740251781,
"video_duration": 47.883,
"has_audio": true,
"video_versions": {
"0": { "url": "https://scontent...", "width": 480, "height": 852 }
},
"image_versions2": {
"candidates": {
"0": { "url": "https://scontent...", "width": 640, "height": 1136 }
}
}
}
}
},
"credits_used": 1,
"endpoint": "instagram/highlight-detail"
}
Key fields per story item:
- Video URL:
video_versions[0].url - Thumbnail:
image_versions2.candidates[0].url - Media type:
media_type(2 = video) - Duration:
video_duration(seconds) - Timestamp:
taken_at(Unix timestamp) - Shortcode:
code
Use Cases
Content Archival
Save competitor highlight content for analysis:
async function getHighlights(handle) {
const res = await fetch(
`https://api.sociavault.com/v1/scrape/instagram/highlights?handle=${handle}`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
return res.json();
}
async function getHighlightDetail(id) {
const res = await fetch(
`https://api.sociavault.com/v1/scrape/instagram/highlight-detail?id=${id}`,
{ headers: { 'x-api-key': 'YOUR_API_KEY' } }
);
return res.json();
}
async function archiveHighlights(handle) {
const result = await getHighlights(handle);
const highlights = Object.values(result.data.highlights);
for (const highlight of highlights) {
const detail = await getHighlightDetail(highlight.id);
const stories = Object.values(detail.data.items);
for (const story of stories) {
const videoUrl = story.video_versions?.[0]?.url;
if (videoUrl) {
await downloadMedia(videoUrl, `${handle}_${highlight.title}_${story.pk}`);
}
}
}
}
Competitive Analysis
Compare highlight strategies across competitors:
async function analyzeHighlights(handles) {
const analysis = {};
for (const handle of handles) {
const result = await getHighlights(handle);
const highlights = Object.values(result.data.highlights);
analysis[handle] = {
totalHighlights: highlights.length,
categories: highlights.map(h => h.title)
};
}
return analysis;
}
Extract FAQ Content
Many brands use highlights for FAQs:
async function extractFAQs(handle) {
const result = await getHighlights(handle);
const highlights = Object.values(result.data.highlights);
const faqHighlight = highlights.find(h =>
h.title.toLowerCase().includes('faq') ||
h.title.toLowerCase().includes('questions')
);
if (faqHighlight) {
const detail = await getHighlightDetail(faqHighlight.id);
return Object.values(detail.data.items);
}
return null;
}
Related Endpoints
- Instagram Profile Scraper - Profile data
- Instagram Posts Scraper - Feed posts
- Instagram Reels API - Reels content
- Instagram Transcript - Video transcripts
Frequently Asked Questions
Can I get current Stories (not Highlights)?
No, current Stories are only available for 24 hours and require different access. The API focuses on permanent Highlights.
Are Story Highlights public?
Highlights follow the account's privacy setting. Public accounts have public highlights; private accounts restrict access.
Can I download the images and videos?
Yes, the API returns direct media URLs that you can download for archival purposes.
How many stories can be in a Highlight?
Instagram allows up to 100 stories per Highlight. The API retrieves all available stories.
Do I get viewer analytics for Highlights?
No, view counts are only available to the account owner. The API extracts the content itself.
Get Started
Sign up free and start extracting Instagram Highlights.
Documentation: /docs/api-reference/instagram/highlights
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.