Instagram Carousel Analytics: Find Your Best Slideshow Posts
Everyone chases Reels, but carousels keep quietly punching above their weight on engagement. The reason is mechanical: every swipe is a small act of commitment. A user who swipes through seven slides has spent real time and attention on your post, which is a very different signal from a thumb that flicked past a Reel in half a second. The trouble is figuring out which of your carousels actually worked and why — and that's a data problem.
This guide scrapes a profile's posts, isolates the carousels, and ranks them by engagement so you can reverse-engineer your winners. Code in JavaScript. And one honest caveat up front, because most posts on this topic get it wrong: you cannot measure "saves" from public data — saves are owner-only analytics. What you can measure publicly is likes, comments, and slide count. We'll work with what's real.
Step 1: Pull the posts
The instagram/posts endpoint takes a handle and returns recent posts under data.items.
const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = "https://api.sociavault.com/v1/scrape/instagram";
async function getPosts(handle) {
const res = await fetch(`${BASE}/posts?handle=${handle}`, {
headers: { "x-api-key": API_KEY },
});
const json = await res.json();
if (!json.success) return [];
return json.data.items || [];
}
Step 2: Isolate the carousels
Instagram encodes post type in media_type (1 = image, 2 = video/reel, 8 = carousel). Carousels also carry a carousel_media_count.
function onlyCarousels(posts) {
return posts.filter(
(p) => p.media_type === 8 || (p.carousel_media_count || 0) > 1,
);
}
Step 3: Rank and analyze
async function analyzeCarousels(handle) {
const carousels = onlyCarousels(await getPosts(handle));
if (!carousels.length) return console.log("No carousels found.");
carousels.sort((a, b) => (b.like_count || 0) - (a.like_count || 0));
console.log(`\n🏆 Top carousels for @${handle}`);
carousels.slice(0, 5).forEach((p, i) => {
const caption = (p.caption?.text || "").slice(0, 50);
console.log(`#${i + 1} ${caption}…`);
console.log(
` ❤️ ${(p.like_count || 0).toLocaleString()} 💬 ${(p.comment_count || 0).toLocaleString()} 🖼️ ${p.carousel_media_count || "?"} slides`,
);
console.log(` https://instagram.com/p/${p.code}`);
});
}
analyzeCarousels("hubspot");
Now you can spot the pattern — do your top carousels share a slide count, a topic, a hook on slide one? That's the reusable formula.
What the numbers tend to show (and the honest limits)
Across many accounts, longer carousels correlate with stronger engagement, and there's a plausible mechanism: each swipe is dwell time and an interaction, which can feed the algorithm positive signals. A 10-slide carousel might hold someone for 30–60 seconds versus a few seconds for a quick scroll.
But hold that loosely. You're measuring likes and comments on public data — not saves, not reach, not "swipe-through rate," all of which live in the post owner's private Insights. So treat this as "which of my (or a competitor's) carousels earned the most public engagement, and what do they have in common," not as a complete retention study. For your own account, cross-reference these public numbers with your native Insights (where saves and reach live) for the full picture.
Frequently Asked Questions
Can you tell which Instagram posts are carousels via the API?
Yes. Each post carries a media_type field where 8 indicates a carousel, and carousels also include a carousel_media_count for the number of slides. Filtering on those lets you isolate carousels from images and reels, as the code here does.
Can you measure Instagram saves with a scraper?
No. Saves are a private, owner-only metric in Instagram Insights and aren't part of public post data. Any analysis from scraping is based on public engagement — likes, comments, and slide count. For saves and reach you need the account owner's native Insights.
Do longer carousels really get more engagement?
The data often shows a positive correlation between slide count and engagement, likely because each swipe adds dwell time and interaction. It's a reasonable pattern to test, not a guarantee — analyze your own carousels rather than assuming a universal "more slides = more reach" rule.
What fields give me engagement on a post?
like_count and comment_count are the public engagement fields, plus caption.text for the caption and code to build the post URL. These are enough to rank carousels and spot what your best ones have in common.
Can I analyze a competitor's carousels?
Yes — point the script at any public profile. Comparing a competitor's best carousels (topics, slide counts, hooks) is a fast way to learn what resonates in your niche before you produce your own.
How many posts should I pull?
The recent posts the endpoint returns are usually enough to find your carousel patterns; page further back if a profile posts infrequently or you want a larger sample. More data smooths out the occasional viral outlier.
The bottom line
Carousels reward the swipe, and the swipe rewards you back — but only if you know which ones work. Scrape the posts, isolate the carousels, rank by public engagement, and copy your own winners. Just remember saves and reach aren't in public data, so pair this with native Insights for your own account.
Want to analyze your carousels? Start free with SociaVault with 50 credits.
Related Articles
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.