Instagram Post & Reel Details Scraper
Pricing
Pay per event
Instagram Post & Reel Details Scraper
Batch-enrich public Instagram post and Reel URLs with captions, authors, engagement, timestamps, media assets, locations, mentions, hashtags, and video metadata — no Instagram login required.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn a list of public Instagram post and Reel URLs into structured records for content analysis, campaign reporting, and recurring engagement snapshots.
The Actor accepts known /p/ and /reel/ URLs.
It returns one typed dataset item per successful URL.
No Instagram account or session cookie is required.
What does this Instagram scraper do?
This Actor batch-enriches supplied public Instagram URLs.
For each accessible post or Reel it can return:
- shortcode and Instagram media ID;
- canonical URL and content type;
- caption, hashtags, and mentions;
- publication timestamp;
- creator name, username, profile URL, and verification status;
- visible likes, comments, views, and plays when Instagram exposes them;
- image, carousel, and video asset URLs;
- dimensions and video duration;
- tagged users and collaborators;
- tagged location;
- music or original-audio metadata when available.
It does not discover profile feeds, hashtags, comments, or private posts. Use it when you already know the content URLs to enrich.
Who is it for?
Social media analysts can normalize campaign URLs before analysis.
Marketing teams can schedule snapshots of visible engagement.
Agencies can process mixed client post and Reel lists in one run.
Data engineers can send typed JSON into warehouses or spreadsheets.
Developers can call the Actor through the Apify API or MCP.
Why use this Actor?
- Process posts and Reels in the same input.
- Avoid managing Instagram login cookies.
- Receive one consistent schema across image, video, and carousel content.
- Preserve successful rows if one URL in a batch fails.
- See a failed run when an input is missing, private, deleted, or blocked.
- Pay only the item event for successfully emitted records.
- Export results through Apify in JSON, CSV, Excel, XML, or RSS formats.
What Instagram data is extracted?
| Field | Meaning |
|---|---|
shortcode | Stable shortcode from the supplied URL |
postId | Instagram media identifier |
contentType | post, reel, or carousel |
caption | Public caption text |
timestamp | Publication time in ISO 8601 format |
author | Creator ID, username, name, profile URL, photo, and verification |
likesCount | Visible like count, or null when hidden |
commentsCount | Visible comment count, or null when hidden |
viewsCount | Visible view count when exposed |
playsCount | Visible Reel play count when exposed |
displayUrl | Primary image or thumbnail URL |
videoUrl | Primary video URL when exposed |
media | Image/video assets, including carousel children |
location | Public location ID, name, and coordinates when tagged |
hashtags | Hashtags parsed from the caption |
mentions | Usernames mentioned in the caption |
taggedUsers | Usernames tagged on the media |
coauthors | Collaborating creator usernames |
music | Track or original-audio metadata |
scrapedAt | Extraction time |
Instagram can hide individual engagement or media fields.
Such fields are returned as null instead of fabricated values.
How to get started
- Open the Actor input page.
- Add one or more public Instagram post or Reel URLs.
- Keep Apify Proxy enabled for the most stable access.
- Optionally lower
maxItemsto test only part of a saved list. - Click Start.
- Open the Dataset tab when the run finishes.
- Export the rows or connect the dataset to another service.
A partial batch keeps useful rows but ends with a failed status. Check the log for the exact shortcode and failure reason. Failed URLs do not emit or charge an item event.
Input parameters
startUrls
Required array of public Instagram content URLs.
Supported path formats:
https://www.instagram.com/p/SHORTCODE/https://www.instagram.com/reel/SHORTCODE/- legacy public
/tv/SHORTCODE/links
Tracking query parameters are ignored. Duplicate shortcodes are processed once. Up to 2 unique URLs are accepted per run and processed concurrently.
maxItems
Optional integer from 1 to 2.
The Actor processes only the first maxItems unique URLs.
The default is 2.
proxyConfiguration
Apify Proxy is enabled by default. The default route uses a datacenter proxy and does not require residential proxy traffic.
You can disable Apify Proxy for direct access. Direct access may be less reliable from some environments.
Example input
{"startUrls": [{ "url": "https://www.instagram.com/p/DbtErSrlB2J/" },{ "url": "https://www.instagram.com/reel/Dbn-XJhk0_-/" }],"maxItems": 2,"proxyConfiguration": {"useApifyProxy": true}}
The example intentionally combines a carousel post and a Reel.
Example output
{"inputUrl": "https://www.instagram.com/reel/Dbn-XJhk0_-/","canonicalUrl": "https://www.instagram.com/reel/Dbn-XJhk0_-/","shortcode": "Dbn-XJhk0_-","postId": "3956...","contentType": "reel","caption": "Public caption text...","timestamp": "2026-08-04T16:18:15.000Z","author": {"id": "528817151","username": "nasa","fullName": "NASA","profileUrl": "https://www.instagram.com/nasa/","verified": true},"likesCount": 201386,"commentsCount": 2091,"viewsCount": null,"playsCount": null,"videoDurationSeconds": 51.4,"videoUrl": "https://scontent.cdninstagram.com/...mp4","hashtags": ["NASA"],"mentions": [],"taggedUsers": [],"coauthors": [],"scrapedAt": "2026-08-06T20:30:00.000Z"}
Counts and signed media URLs change over time. Treat the example as a shape demonstration, not a frozen result.
How much does it cost to extract Instagram post and Reel details?
Pricing uses two pay-per-event charges:
- a $0.005 start event once per run;
- an item event for each successfully emitted content record.
The current BRONZE item price is $0.001736 per record. Higher-volume Apify plan tiers receive lower item prices.
Example BRONZE totals:
| Successful records | Approximate charge |
|---|---|
| 1 | $0.006736 |
| 10 | $0.02236 |
| 2 | $0.008472 |
A failed URL has no item event. Browser runtime and proxy usage are covered by the Actor price rather than billed as a separate result type. Always check the live pricing panel for the tier attached to your Apify account.
Recurring monitoring workflow
Create an Apify Task with the campaign's URL list.
Schedule it hourly, daily, or weekly.
Each run creates a new dataset snapshot.
Compare likesCount, commentsCount, viewsCount, and playsCount by shortcode.
This Actor does not send alerts or calculate deltas itself. Use Make, Zapier, n8n, a webhook, or your data warehouse for comparisons and notifications.
Media URLs can expire. Persist the fields you need when each run completes.
Export and integrations
Dataset results can be exported as:
- JSON;
- JSONL;
- CSV;
- Excel;
- XML;
- RSS.
Common workflows include:
- append campaign metrics to Google Sheets;
- load snapshots into BigQuery or Snowflake;
- trigger a webhook after a scheduled Task;
- enrich a CRM content record by shortcode;
- join content performance to a campaign table;
- feed structured rows to an LLM for classification.
Run through the API with cURL
Replace YOUR_APIFY_TOKEN with an Apify API token.
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~instagram-post-reel-details-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.instagram.com/reel/Dbn-XJhk0_-/"}],"maxItems": 1}'
The response contains the run and default dataset IDs. Poll the run or use the synchronous dataset endpoint for small jobs.
Run through the API with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/instagram-post-reel-details-scraper').call({startUrls: [{ url: 'https://www.instagram.com/p/DbtErSrlB2J/' },],maxItems: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Run through the API with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/instagram-post-reel-details-scraper').call(run_input={'startUrls': [{'url': 'https://www.instagram.com/reel/Dbn-XJhk0_-/'},],'maxItems': 1,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/instagram-post-reel-details-scraper"
Claude Desktop, Cursor, and VS Code setup
Claude Desktop, Cursor, VS Code, and other HTTP MCP clients can use:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/instagram-post-reel-details-scraper"}}}
Example prompts:
- “Extract details for these public Instagram campaign URLs.”
- “Return caption, author, engagement, and media fields for this Reel.”
- “Compare the latest dataset with yesterday's snapshot by shortcode.”
Limits and failure behavior
Only public post and Reel URLs are supported.
Private, deleted, age-restricted, region-restricted, or unavailable content fails explicitly.
Instagram may hide likes, views, plays, locations, audio, or downloadable media.
Hidden fields remain null.
Signed CDN media URLs expire and should not be treated as permanent storage.
A source layout or anti-bot change can temporarily affect extraction. The Actor uses structured page data instead of visual CSS selectors to reduce this risk.
Up to two fresh browser pages process a batch concurrently, with one bounded retry for transient navigation failures. The 2-URL cap keeps worst-case navigation and retry time within the 600-second run timeout. Split larger lists into multiple Tasks or API calls.
Responsible use and legality
Use this Actor only for data you are authorized to collect.
Respect Instagram's terms, applicable privacy laws, intellectual-property rights, and contractual obligations.
Public availability does not automatically authorize every reuse. Avoid collecting sensitive data, profiling individuals, or republishing media without a lawful basis.
You are responsible for your input URLs, retention policy, and downstream use. This documentation is not legal advice.
Troubleshooting
Why did one URL fail while other rows were saved?
The URL may be private, deleted, restricted, malformed, or temporarily challenged. The Actor preserves successful rows but fails the run so missing inputs are visible. Inspect the log for the shortcode-specific reason.
Why is an engagement field null?
Instagram does not expose every metric for every content type or viewer context. The Actor never substitutes zero for a hidden value.
Why does a media URL no longer work?
Instagram CDN URLs are signed and temporary. Download authorized media promptly if long-term retention is required.
Should I disable Apify Proxy?
Keep it enabled unless direct access is known to work reliably in your environment. Disabling it can reduce routing overhead but may increase challenge rates.
Related Automation Lab Actors
- Instagram Profile Posts Scraper discovers posts from public profile usernames.
- Instagram Comments Scraper collects comment records when comment-level analysis is needed.
- Instagram Media Downloader focuses on downloading authorized Instagram media assets.
Choose this Actor when the input is a known post/Reel URL list and the output should be one rich content record per URL.
FAQ
Does it require an Instagram login?
No. The Actor handles supported public content without a session cookie.
Can it scrape private posts?
No. Private and login-only content is outside the product scope.
Does it discover posts from a username or hashtag?
No. Use a related discovery Actor first, then pass the resulting public URLs here.
Are likes and comments historical?
No. They are a visible snapshot at extraction time. Schedule repeated Tasks if you need a time series.
Does it download images and videos?
It returns exposed CDN asset URLs and metadata. It does not persist media files in the dataset.
Can I process more than 2 URLs?
Split the list across multiple runs or Tasks. The bounded batch size keeps retries within the run timeout and failure reporting manageable.