Instagram Post Details Scraper avatar

Instagram Post Details Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Instagram Post Details Scraper

Instagram Post Details Scraper

Instagram Post Details Scraper extracts detailed data from Instagram posts. It collects captions, hashtags, likes, comments, media URLs, timestamps, and engagement metrics. Ideal for influencer research, content analysis, audience insights, and social media monitoring.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

13 days ago

Last modified

Share

Instagram Post Scraper — Likes, Comments, Captions & Owner Data

Instagram Post Scraper extracts likes, comments, captions, post dates and thumbnails — plus the post owner's profile details (bio, follower count, verified status) — from any public Instagram post, reel or IGTV URL. Paste one link or a list of hundreds, and every URL comes back as a single structured JSON row, with no HTML parsing, no login, and no manual copy-pasting. Paste your own post URLs into the input below and start a run to see it in your dataset.

📖 What is Instagram Post Scraper?

Instagram Post Scraper is an Apify Actor that turns an Instagram post, reel or IGTV link into a structured data row: engagement counts, caption, publish date, thumbnail, and the poster's public profile stats. No Instagram account, login, or session cookie is required — the Actor reads Instagram's own public post and profile pages the way a logged-out browser would. It's built for marketers, social media analysts, researchers, and developers who need Instagram post data in a pipeline rather than a browser tab.

🔓 What Instagram post data is publicly available to scrape?

Instagram exposes a fixed set of post and profile fields to anyone visiting a public post without logging in — everything Instagram Post Scraper returns comes from that logged-out surface.

Data categoryPublicly availableRestricted behind
Caption text
Like count (Instagram's own rounded display value)
Comment count (Instagram's own rounded display value)
Post date (day-level precision)
Thumbnail / display image URL
Post owner's username, full name, bio, follower count✅ — if the owner's account is public
Full comment thread and commenter identitiesLogin
Any content from a private account's postsLogin + follow approval

Instagram Post Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.

🗂️ What data can I extract with Instagram Post Scraper?

Instagram Post Scraper returns post identity fields, engagement metrics, and a nested owner-profile object for every URL you provide.

Post identity & content fields

Field NameDescription
urlThe input URL you provided
post_idInstagram's internal numeric media ID
short_codeThe post's shortcode (the ID segment in the URL)
usernameThe poster's username
captionFull post caption text
post_datePost publish date, ISO 8601, day-level precision (time is emitted as midnight UTC — Instagram's public summary line carries no time-of-day)
display_urlThumbnail / display image URL
scrapedAtTimestamp when the row was collected, ISO 8601

Engagement fields

Field NameDescription
like_countLike count, parsed from Instagram's own display text (e.g. "305K" → 305000) — this is Instagram's rounded value, not a scraping approximation
comment_countComment count, parsed the same way

Post owner profile fields (owner object)

Field NameDescription
owner.idOwner's internal Instagram account ID
owner.usernameOwner's username
owner.full_nameOwner's display name
owner.is_verifiedtrue if the account has a verified badge
owner.is_privatetrue if the account is set to private
owner.profile_pic_urlOwner's profile picture URL
owner.biographyOwner's bio text
owner.follower_countOwner's follower count
owner.following_countOwner's following count
owner.external_urlOwner's bio link, resolved from Instagram's link-out redirect

If a post's owner profile can't be fetched (rare — e.g. the owner page itself is temporarily unreachable), owner is returned as null while the post fields are still populated.

🤖 Add-on: Need additional Instagram data?

Instagram Post Scraper is built for individual post, reel and IGTV metadata — it does not crawl a whole profile's post history or run hashtag searches. If your pipeline also touches other platforms, pair it with TikTok Scraper for video and hashtag data or Reddit Scraper for post and comment threads to build a cross-platform content-monitoring workflow.

🆚 How does Instagram Post Scraper differ from the official Instagram API?

The Instagram Graph API is scoped to accounts you own or manage, not to arbitrary public posts — Instagram Post Scraper works on any public post URL regardless of who owns it. As of the Instagram Graph API developer guide checked 2026-08-15, the Graph API requires a Business or Creator account linked to a Facebook Page, does not support personal accounts (the Basic Display API that once did was shut down on December 4, 2024), and exposes other accounts' data only through limited "Business Discovery" endpoints rather than full post detail.

FeatureInstagram Graph APIInstagram Post Scraper
Account type requiredBusiness/Creator account linked to a Facebook PageNone — no Instagram account needed
Fetching a post you don't own or manageNot supported (Business Discovery exposes limited metadata on other business accounts only)✅ any public post, reel or IGTV URL
Personal (non-business) accountsNot supported since the Basic Display API shut down Dec 4, 2024✅ supported if the account is public
App reviewRequired for public-facing appsNot applicable — no OAuth app to review
Rate limit200 requests/hour per Instagram user accountNot fixed by the API — governed by this Actor's own concurrency and proxy setup
Setup timeOAuth app registration, Facebook Page linking, Meta App ReviewPaste URLs and run

(Instagram Graph API requirements observed on Elfsight's Instagram Graph API developer guide, checked 2026-08-15.)

Use the official Graph API when you manage the account and need its own insights and publishing tools. Use Instagram Post Scraper when you need public post data from accounts you don't manage — competitor posts, influencer content, or brand mentions.

🧭 How to use Instagram Post Scraper

No signup with Instagram is needed — everything runs through the Apify platform.

  1. Open Instagram Post Details Scraper on the Apify Store or in your Apify Console.
  2. Paste one or more Instagram post, reel or IGTV URLs into the required urls field, one per line.
  3. Optionally expand Proxy Settings and enable proxyConfiguration if you're processing a large batch.
  4. Click Start to launch the run.
  5. Download the results as JSON or CSV from the run's dataset, or stream them via the Apify API.

How to scale to bulk post extraction

The urls input is an array — paste as many post, reel or IGTV links as you need in a single run, one per line, instead of looping over single runs. There's no separate bulk mode to enable; it's the same field whether you provide one URL or several hundred. Duplicate URLs in the list are automatically deduplicated before processing.

🎯 What can you do with Instagram post data?

  • 📊 Marketers tracking a campaign use like_count, comment_count and post_date to measure organic engagement per post without opening Instagram manually.
  • 🕵️ Competitor analysts monitoring rival brands use caption and owner.follower_count to benchmark messaging against audience size across accounts.
  • 🎥 Content researchers archiving influencer output use display_url and post_date to build a dated visual timeline of a creator's posts.
  • 📈 Growth and partnerships teams vetting influencers use owner.follower_count and owner.is_verified to qualify accounts before outreach.
  • 🤖 AI engineers building a RAG pipeline or agent tool index caption and owner.biography as text context alongside post_id for citation-safe retrieval, since every field returns as a typed JSON primitive with no HTML to strip.

🛡️ How does Instagram Post Scraper handle rate limits and blocking?

Every request starts direct, with no proxy, using a Chrome-131 browser TLS and header fingerprint so the request resembles ordinary browser traffic. If Instagram responds with a blocking status (401, 403, 429 or 503) or the request fails outright, the Actor escalates: it switches to your configured proxyConfiguration (or, if none is set, Apify Proxy's default pool) and rotates to a fresh proxy session on each further attempt, rather than retrying the same exit IP. Each post is retried up to 3 times with exponential backoff capped at 8 seconds between attempts; the owner-profile fetch is retried independently, up to 3 times, the same way. Up to 3 posts are processed concurrently per run, with a short randomized delay between requests.

If a post still can't be retrieved after retries, the run doesn't fail — that URL is pushed as {"url": "...", "error": "This post could not be retrieved right now."} instead, and processing continues with the rest of the list. These error rows are pushed without the row_result charged event, so they are not billed — filter them out of billed results by excluding any row that has an error key.

⬇️ Input

Instagram Post Scraper takes two input parameters, defined in the Actor's input schema.

ParameterRequiredTypeDescriptionExample Value
urlsYesarray (stringList)Instagram post, reel or TV URLs. One per line — bulk input supported. Example: https://www.instagram.com/p/ABC123/ or https://www.instagram.com/reel/XYZ456/["https://www.instagram.com/p/DMJPgPDToaE/", "https://www.instagram.com/reel/Dbn-XJhk0_-/"]
proxyConfigurationNoobject (proxy editor)Optional. Runs without a proxy by default; enable this to route requests through a proxy if you are processing a large batch of URLs.{ "useApifyProxy": false }

Example input

{
"urls": [
"https://www.instagram.com/p/DMJPgPDToaE/",
"https://www.instagram.com/reel/Dbn-XJhk0_-/"
],
"proxyConfiguration": {
"useApifyProxy": false
}
}

⬆️ Output

Every processed URL becomes one typed, normalized JSON row in the run's dataset, with a consistent schema across runs regardless of Instagram's front-end changes. Download results as JSON, CSV, Excel or the other formats available from any Apify dataset's Storage tab, or pull them with the Apify API.

Example output

{
"url": "https://www.instagram.com/p/DMJPgPDToaE/",
"post_id": "3677538756607248004",
"short_code": "DMJPgPDToaE",
"username": "natgeo",
"caption": "Great white sharks have been spotted moving closer to shore this season.",
"like_count": 88000,
"comment_count": 375,
"post_date": "2026-07-15T00:00:00.000Z",
"display_url": "https://scontent.cdninstagram.com/v/t51.29350-15/example_thumb.jpg",
"owner": {
"id": "17841400573960012",
"username": "natgeo",
"full_name": "National Geographic",
"is_verified": true,
"is_private": false,
"profile_pic_url": "https://scontent.cdninstagram.com/v/t51.2885-19/example_profile.jpg",
"biography": "Step into wonder and find your inner explorer with National Geographic",
"follower_count": 268817830,
"following_count": 194,
"external_url": "http://visitstore.bio/natgeo"
},
"scrapedAt": "2026-08-15T09:12:00.000Z"
}

If a post can't be retrieved, the row is shaped differently — just url and error — and is pushed without a charge, as described above.

⚙️ How does it work?

Instagram Post Scraper fetches Instagram's own public post page for each URL over HTTPS, using a Chrome-131 TLS and header fingerprint so the request looks like an ordinary browser visit rather than a script. It reads the page's Open Graph meta tags — the same tags Instagram serves for link previews — to pull the caption, like/comment counts, post date and thumbnail, then separately fetches the poster's public profile page and reads its server-rendered profile data to enrich the row with owner details (bio, follower count, verified status). No Instagram login or session cookie is ever used. Because extraction relies on Instagram's stable public page contract rather than a private internal API, the output schema — the same field names, the same shape — stays constant even as Instagram redesigns its front end. Only data visible to a logged-out visitor is ever returned.

🔌 Integrations

Instagram Post Scraper runs on Apify, so it works with the same tooling you already use to call any Apify Actor — the Console, the REST API, and Apify's official language clients.

Calling Instagram Post Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("YOUR_USERNAME/instagram-post-details-scraper").call(run_input={
"urls": ["https://www.instagram.com/p/DMJPgPDToaE/"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

  • n8n — use the Apify node (or an HTTP Request node pointed at Apify's run-sync-get-dataset-items endpoint) to trigger a run and pull the resulting rows straight into a workflow.
  • Make — the Apify app's "Run Actor and Get Dataset Items" module takes the same urls input and hands each row to downstream modules.
  • LangChain — the Apify integration (ApifyWrapper / ApifyDatasetLoader) can call this Actor and load the resulting dataset as documents for a retrieval chain.

Scraping data that is publicly visible without logging in is generally lawful — U.S. courts, including the Ninth Circuit in hiQ Labs v. LinkedIn, have held that accessing data a site makes available to the public does not violate the Computer Fraud and Abuse Act. Instagram Post Scraper only returns what a logged-out visitor already sees on a public post or profile — it does not log in, follow, or bypass any wall. Because the output includes personal data about the post's owner (username, full name, bio, follower count), GDPR (for EU-connected data subjects) and CCPA (for California residents) can still apply once you store or process that data — you're responsible for a lawful basis to hold it, honoring deletion requests, and not scraping content from private accounts or anything behind a login. Consult legal counsel if your use case involves bulk storage of personal data.

❓ Frequently asked questions

What Instagram post fields does Instagram Post Scraper return?

The core fields are caption, like_count, comment_count, post_date and display_url, plus a nested owner object with the poster's profile stats. See What data can I extract above for the full list.

Does Instagram Post Scraper require an Instagram account or login?

No. It reads Instagram's public post and profile pages the same way a logged-out browser does — no username, password, or session cookie is ever used.

How many Instagram posts can I extract in one run?

As many as you list in urls — it's a single array input with no separate bulk mode. Internally, up to 3 posts are processed concurrently per run.

What happens if a post is private, deleted, or the link is invalid?

That URL comes back as an error row — {"url": "...", "error": "This post could not be retrieved right now."} — instead of failing the whole run, and it isn't charged (no row_result event fires for it). Everything else in the same run keeps processing normally.

Can I scrape multiple Instagram posts at once?

Yes. Paste multiple post, reel or IGTV URLs into urls, one per line, and each one returns as its own dataset row in the same run.

Does Instagram Post Scraper work with Claude, ChatGPT, and other AI agent tools?

It's callable as a standard Apify Actor through the Apify API and the apify_client library, so any agent framework that can make an HTTP call — including LangChain and custom agent tools — can invoke it and consume the JSON output directly.

What makes Instagram Post Scraper different from scraping the pages yourself?

It combines Open Graph parsing with owner-profile enrichment in a single call, and handles the retry logic, proxy escalation and browser TLS fingerprinting needed to reach Instagram's public pages reliably — so you get a stable JSON schema per URL instead of raw HTML to parse and a blocking response to work around yourself.

Does Instagram Post Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or selectors needed. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Instagram changes its layout or anti-bot system?

The extraction logic is maintained against Instagram's public page structure, and the output schema is designed to stay stable across such updates. No specific turnaround time is promised for any given change.

Can I use Instagram Post Scraper without managing proxies or browser infrastructure?

Yes. Requests run direct by default and only escalate to a proxy — your own proxyConfiguration, or Apify Proxy's default pool if none is set — after Instagram responds with a blocking status. You don't need to run a browser or manage proxy rotation yourself.

Which Instagram post fields work best for AI training data and RAG indexing?

For RAG, index caption and owner.biography — the highest-information text fields. For training data, post_id, short_code, username and the owner object's fields carry the most consistent structure across records, and all fields return as typed primitives (strings, integers, booleans) rather than raw HTML.

ScraperWhat it extracts
TikTok ScraperProfiles, videos, reposts, hashtag and keyword search results from TikTok
Reddit ScraperPosts, comments, users, subreddits and search results from Reddit
Facebook Reviews ScraperPublic review/recommendation posts from Facebook pages
Facebook Video Transcript ExtractorSpoken-content transcripts from public Facebook videos
Snapchat Spotlight ScraperCreator, engagement and media details from Snapchat Spotlight videos

💬 Your feedback

Found a bug, or need a field this Actor doesn't return yet? Open an issue on Instagram Post Scraper's Issues tab in Apify Console, or leave a note on the Store listing — both reach the person maintaining this Actor directly. Reports like these are what keep the extraction logic current when Instagram changes its page structure.