Instagram Post & Reel Details Scraper avatar

Instagram Post & Reel Details Scraper

Pricing

Pay per event

Go to Apify Store
Instagram Post & Reel Details Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldMeaning
shortcodeStable shortcode from the supplied URL
postIdInstagram media identifier
contentTypepost, reel, or carousel
captionPublic caption text
timestampPublication time in ISO 8601 format
authorCreator ID, username, name, profile URL, photo, and verification
likesCountVisible like count, or null when hidden
commentsCountVisible comment count, or null when hidden
viewsCountVisible view count when exposed
playsCountVisible Reel play count when exposed
displayUrlPrimary image or thumbnail URL
videoUrlPrimary video URL when exposed
mediaImage/video assets, including carousel children
locationPublic location ID, name, and coordinates when tagged
hashtagsHashtags parsed from the caption
mentionsUsernames mentioned in the caption
taggedUsersUsernames tagged on the media
coauthorsCollaborating creator usernames
musicTrack or original-audio metadata
scrapedAtExtraction time

Instagram can hide individual engagement or media fields. Such fields are returned as null instead of fabricated values.

How to get started

  1. Open the Actor input page.
  2. Add one or more public Instagram post or Reel URLs.
  3. Keep Apify Proxy enabled for the most stable access.
  4. Optionally lower maxItems to test only part of a saved list.
  5. Click Start.
  6. Open the Dataset tab when the run finishes.
  7. 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 recordsApproximate 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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.