Instagram Post & Reel Details Scraper — Likes, Exact Time
Pricing
$1.50 / 1,000 post details
Instagram Post & Reel Details Scraper — Likes, Exact Time
Instagram posts and reels by URL: likes, comments, exact publish time, caption, hashtags, carousel parts, tagged accounts, co-authors, location, the owner's follower count, engagement rate. Reels: length, music, and the play count while a reel is among its owner's 36 newest or pinned. No login.
Pricing
$1.50 / 1,000 post details
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
13 days ago
Last modified
Categories
Share
Instagram Post & Reel Details Scraper — Likes, Views, Engagement 🚀
foXLabs Instagram series: Bulk Profile · Profile Posts · Comments · Reels
🎉 Give a list of Instagram post and reel addresses; get one row per post: likes, comment count, exact publish time, caption with hashtags & mentions, the kind, carousel parts, tagged accounts, co-authors, location and topics, and the owner's exact follower count with an engagement rate. For videos/reels also length and sound; for a reel two counters — the Reels-tab play count (when it's among the first 36 tiles) and the embed-page view count.
It reads only what a signed-out visitor sees. No login, no cookies, nothing from your own Instagram account. Not affiliated with Instagram or Meta.
🔍 What is the Instagram Post & Reel Details Scraper — and when should you use it?
Give this Actor post/reel URLs and it returns one rich row each — built for campaign reports ("what did these 300 posts do?"), following the same posts day by day, and reading a post's full content.
Use it when you need: engagement + exact time for a known list of posts/reels; a campaign performance report with engagement rate; or reel play counts and video views.
Use something else when: you want a whole profile's posts → Profile Posts; profile-level metrics → Bulk Profile; the comments themselves → Comments.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/instagram-post-details-scraper. An agent can discover it, run it and read the dataset over MCP.
Real-time Standby API. The code also runs as a small API — GET /post?url=<address> returns one post per request, with includeVideoStats and includeReelPlays as optional parameters — billed with the same post-details event.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want Instagram post/reel details using the Apify Actor`foxlabs/instagram-post-details-scraper`.Input: `postUrls` is a list of post/reel URLs, short codes or ids; `includeVideoStats` addsview count + follower count + engagement rate; `includeReelPlays` adds the Reels-tab play count.Each row has likeCount, commentCount, takenAt, ownerFollowers, engagementRate, playCount.Start with:{ "postUrls": ["https://www.instagram.com/reel/DePpLegAuKI/"] }Ask me which posts to measure, run the Actor, then summarise the engagement.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/instagram-post-details-scraper.md.
📋 Overview
Everything you need to turn a list of Instagram post/reel links into clean, structured data — engagement, exact time, full content and follower-based engagement rate — in one Actor, with no login, cookies or account.
Why teams pick this Actor:
- ✅ Engagement rate — likes + comments ÷ the owner's exact follower count.
- 🎬 Two reel counters, honestly — Reels-tab
playCountand embedvideoViewCountare different; both given, never confused. - 📅 Exact time + full content — caption, carousel parts, tags, co-authors, topics, music.
- 🎯 Honest nulls — a value Instagram didn't give is
null, never 0; every…Sourcesays where a figure came from. - 💰 Pay only for results — one
post-detailsevent per row; status rows and duplicates free. - 🤖 Agent-ready — MCP + a real-time Standby API.
✨ Features
- 🔍 Posts & reels by URL — any address form, short code or numeric id; duplicates delivered once.
- 📊 Engagement — likeCount (+ hidden flag), commentCount (+ disabled flag), ownerFollowers, engagementRate.
- ▶️ Reel counters —
playCount(Reels tab, first 36 tiles) andvideoViewCount(embed). - 🧩 Full content — caption, hashtags, mentions, co-authors, tagged users, carousel media, topics, location, video URL + music.
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~instagram-post-details-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"postUrls": ["https://www.instagram.com/reel/DePpLegAuKI/"]}'
🚀 Getting Started (3 steps)
- Paste your posts — one per line: a post/reel URL, short code or numeric id.
- Pick depth — keep
includeVideoStats/includeReelPlayson for views/plays/engagement, or off for one request per post. - Run and export — get a clean dataset as JSON, CSV or Excel.
📥 Input
| Field | Default | What it does |
|---|---|---|
postUrls | required | One post/reel per line: any address form, short code or numeric id; duplicates delivered once. |
includeVideoStats | true | Adds videoViewCount, ownerFollowers, engagementRate (one embed request per video/carousel; a photo's follower count read once per owner). |
includeReelPlays | true | Adds playCount for reels (reads the owner's Reels tab, 1–3 pages per owner). |
maxPosts | 100000 | Stop after this many rows. |
proxyConfiguration | auto | Nothing to change for normal use. |
{ "postUrls": ["https://www.instagram.com/p/DeNRLCCF4kk/", "https://www.instagram.com/reel/DdB9sMlAsb8/"] }
📤 Output
One row per post, in the order of your lines (postId unique per run). A value Instagram didn't give is null, never 0.
| Field | Meaning |
|---|---|
type, postId, shortCode, url, productType | kind, ids, address |
ownerUsername, ownerUserId, ownerFullName, ownerIsVerified | the account |
takenAt | exact publish time (UTC) |
likeCount, likesHidden, commentCount, commentsDisabled | engagement |
playCount, videoViewCount | Reels-tab plays (first 36 tiles) and embed views — different counters |
ownerFollowers, engagementRate | exact followers; (likes + comments) ÷ followers |
caption, captionIsEdited, hashtags, mentions, coauthors, taggedUsers, topics | content |
locationName/Id/Lat/Lng, carouselCount, carouselMedia | place; carousel parts |
durationSeconds, hasAudio, videoUrl, musicArtist, musicTitle, usesOriginalAudio | video/sound |
displayUrl, width, height, accessibilityCaption, isAiLabeled | media |
playCountSource, videoStatsSource, ownerFollowersSource | where each figure came from |
input, scrapedAt, error | your line; when read; reason on status rows |
{"type": "reel", "shortCode": "DePpLegAuKI", "url": "https://www.instagram.com/reel/DePpLegAuKI/","ownerUsername": "natgeo", "ownerFollowers": 268420490, "takenAt": "2026-10-08T19:05:31.000Z","likeCount": 47878, "commentCount": 163, "playCount": 983213, "videoViewCount": 228112,"engagementRate": 0.00018, "caption": "Many orphaned giant anteater pups …","durationSeconds": 9.258, "musicArtist": "natgeo", "musicTitle": "Original audio","playCountSource": "reels-tab", "videoStatsSource": "embed", "ownerFollowersSource": "embed"}
💼 Use cases
1. Campaign report — "what did these 300 posts do?" with engagement rate. Input: the campaign URLs, everything on. Output: likes/comments/views + rate. Use: one report table.
2. Daily tracking — follow the same posts on a schedule for fresh numbers. Input: the URLs, scheduled. Output: a row per run. Use: a performance timeline.
3. Reel benchmarking — compare plays and views across reels.
Input: reel URLs. Output: playCount + videoViewCount. Use: judge true reach.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/instagram-post-details-scraper').call({ postUrls: ['https://www.instagram.com/reel/DePpLegAuKI/'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/instagram-post-details-scraper').call(run_input={'postUrls': ['https://www.instagram.com/reel/DePpLegAuKI/']})for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Written for apify-client 3 for Python, where call() returns a run object; with version 1 or 2 it returns a dict — write run['defaultDatasetId'] there.
Automation (n8n / Zapier / Make): schedule → HTTP request to the Actor API with your postUrls → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay per event, one per delivered row: post-details. Free: status rows, second addresses of the same post, and a run that could not start. View current pricing.
❓ FAQ
Do I need an Instagram login or cookies? No — only what a signed-out visitor sees.
What's the difference between playCount and videoViewCount? Two counters: the Reels-tab play figure and the embed page's views (plays ran 2.2–7.7× the views in our measurements). Never report one as the other.
Why is playCount sometimes null? It's only available while a reel is among the first 36 tiles of its owner's Reels tab; older reels show null (likes/comments/views still come).
How is engagement rate computed? (likes + comments) ÷ the owner's exact follower count; ownerFollowersSource says whether that came from the embed page or the profile.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
🐛 Troubleshooting / What it does NOT do
- No share/save/repost counts, no comments (count only) — not in what a signed-out visitor gets.
- No play count below tile 36 of the owner's Reels tab →
playCount: null. - Nothing behind the login — private posts, signed-in-only posts, stories, follower lists (free status row).
- No share links (
instagram.com/share/…) — open it and use the address it leads to. - No media files —
displayUrl/videoUrl/carouselMediaare temporary addresses. - No only-new memory — every run delivers every post with fresh numbers.
- A changed Instagram query fails the run at its start-up request, before anything is read/charged.
⚠️ Trademark
Independent, third-party tool. Not affiliated with, endorsed by or connected to Instagram or Meta Platforms, Inc. "Instagram" and related marks belong to their owners and are used here for identification only.
⚖️ Is it legal to scrape this data?
Rows describe public posts but can hold personal data (owner name/id, tagged accounts, co-authors, location); you decide what to collect and are responsible for a lawful reason (GDPR and similar). The Actor infers nothing about a person, delivers no comments/commenters, and writes only to your own run's storage. Media belongs to its owners; addresses are temporary. See Apify's blog post on the legality of web scraping.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor's Issues tab — the run's
SOURCE_REPORTrecord says which road was used and why the run stopped. - 🧰 More clean data actors: Fox Labs on Apify
Changelog
0.1 — 2026-10-09
- First version: one row per post or reel from a list of addresses;
playCountfrom the owner's Reels tab (includeReelPlays),videoViewCountfrom the embed page beside it;ownerFollowers+engagementRate(photos too); free status rows for undeliverable lines; start-up check ends a run before anything is read if Instagram changed its query. Standby mode (GET /post?url=…) prepared; published in batch mode.