Instagram Post Details Scraper With Profile Data avatar

Instagram Post Details Scraper With Profile Data

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Instagram Post Details Scraper With Profile Data

Instagram Post Details Scraper With Profile Data

Instagram Post Details Scraper extracts public post data including captions, media URLs, timestamps, likes, comments, hashtags, mentions, and linked profile details. Build structured datasets for content research, influencer analysis, competitor monitoring, and social media insights.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Instagram Post Scraper โ€” Extract Posts, Profiles & Comments as JSON

Instagram Post Details Scraper With Profile Data pulls full detail from any Instagram post, reel or TV link โ€” likes, comments, captions, media URLs, sponsor tags โ€” and can discover a profile's own recent posts directly from a username, no link-collecting required. Every discovered post is enriched with the real owner's biography, follower count, following count and post count, plus a preview of the post's own comments. Every response is typed, normalized JSON โ€” no HTML, no selectors, no parsing. Paste a batch of post URLs, hand it a list of usernames, or mix both in one run, and get structured Instagram data back.

๐Ÿงญ What is Instagram Post Details Scraper With Profile Data?

Instagram Post Details Scraper With Profile Data is an Apify Actor that extracts structured data from public Instagram content in two ways: by direct post/reel/TV URL, or by profile discovery from a username, which auto-fetches that profile's most recent posts. No Instagram account or login is required โ€” the Actor reads Instagram's own publicly served pages. Each output row combines post detail, real owner/profile data, and a comment preview in a single record, so a workflow that would otherwise need a separate profile lookup gets it all from one run.

  • Scrape post, reel and TV detail โ€” likes, comments, captions, media links, sponsor tags
  • Scrape profile/owner data โ€” biography, follower count, following count, post count, verified/private status
  • Scrape a preview of each post's own comments
  • Export as JSON or CSV (or any format the Apify dataset supports)
  • No proxy management, no parsing โ€” Apify Proxy and retries are built in

๐Ÿ“Š What data does Instagram Post Details Scraper With Profile Data collect?

The Actor returns three distinct kinds of data on every row: the post itself, the post owner's profile, and a preview of the post's comments.

Data TypeKey FieldsJSON Field Names
Posts, reels & TVcaption, engagement counts, media URLs, post type, sponsor tagscaption, like_count, comment_count, video_view_count, video_url, post_type, sponsor_user
Profile / owner databiography, follower/following/post counts, verified & private flagsowner.biography, owner.follower_count, owner.following_count, owner.edge_owner_to_timeline_media.count, owner.is_verified
Comment previewcomment text, author, like countlatest_comments[].text, latest_comments[].owner.username, latest_comments[].edge_liked_by.count

๐Ÿ”— Need more Instagram data?

This Actor already combines direct post lookup, profile-driven discovery, and owner enrichment in a single run, so most Instagram data needs โ€” post metrics, profile bio/follower data, and comment previews โ€” are covered without switching tools. If your workflow needs data this Actor doesn't return (for example full follower/following lists or hashtag search), check the API-Empire account's other Instagram Actors on the Apify Store.

๐Ÿ†š How does Instagram Post Details Scraper With Profile Data differ from the official Instagram API?

The Instagram Graph API is built to manage accounts you own, not to look up arbitrary public posts or profiles by username โ€” this Actor is built for exactly that.

FeatureInstagram Graph APIThis Actor
Account requiredInstagram professional (business or creator) accountNone โ€” works logged out
Approval processMeta App Review + Business Verification for Advanced AccessNone โ€” start the run immediately
Scope of accessible dataYour own connected account's content, plus limited hashtag-tagged public mediaAny public post/reel/TV URL, or any public profile's recent posts, by URL or username
Third-party account accessNot supported for accounts you don't own/manage without Advanced AccessAny public profile, by username
Owner/profile enrichmentOnly for the connected accountReal bio, follower count, following count, post count for the post's actual owner
Setup timeDeveloper app, privacy policy, data-deletion path, App ReviewProvide URLs or usernames and run

Sourced from Meta's own Instagram Graph API overview documentation, checked 2026-08-15: a professional account is required, Advanced Access requires App Review and Business Verification, and "a permission only allows access to data created by the app user who granted the permission," with public access limited to hashtag-tagged media.

Use the official Graph API when you manage the Instagram account yourself and only need its own content or insights. Use this Actor when you need data from posts or profiles you don't control, without an app review process.

๐Ÿ’ก Why do developers and teams scrape Instagram?

For AI engineers and agent builders

Post captions, engagement counts and owner bios arrive as stable, typed JSON keys โ€” caption, like_count, owner.biography โ€” ready to index into a vector store or pass straight into an LLM context window without an HTML-parsing step. An agent that monitors a list of creator usernames can call this Actor on a schedule, feed each new post's caption and comment preview into a RAG pipeline, and use owner.follower_count as a feature without writing a single selector.

For marketers and brand teams

Feed a list of competitor or partner usernames into profiles, cap maxPostsPerProfile, and get each account's latest content back with engagement counts and sponsor-tag detection (is_paid_partnership, sponsor_user) in the same row. That's enough to track posting cadence, spot branded-content activity, and compare engagement across accounts without opening Instagram.

For researchers and analysts

Only public content is returned โ€” no login, no private accounts, no follower-list scraping. That scope makes the Actor suitable for academic or market research on public posting behavior: pull a sample of profiles' recent posts, or a fixed list of post URLs, and get consistent fields (post_date, like_count, comment_count, post_type) for cross-post comparison.

For developers building data products

The Actor is callable through the Apify API, so a scheduled run against a saved list of usernames can feed a dashboard or database on a recurring interval. Because every row shares the same schema whether it came from a direct URL or from profile discovery (source_mode tells you which), downstream code can treat both paths identically.

๐Ÿš€ How to scrape Instagram (step by step)

  1. Open Instagram Post Details Scraper With Profile Data on its Apify Store listing and click Try for free (or Run, if you already have it).
  2. Provide input: paste post/reel/TV links into urls, or usernames/profile URLs into profiles โ€” at least one of the two is required, or the run finds no targets and produces no rows.
  3. Tune discovery scope: set maxPostsPerProfile (how many recent posts per discovered profile) and postType (filter discovery to image, video, reel or carousel).
  4. Start the run from the Console, the Apify API, or apify_client.
  5. Download results as JSON, CSV, Excel or any other format the dataset export supports, or stream new rows as they're written.

What to do when Instagram changes its structure

The Actor is maintained: its extraction mechanism already moved once, from a hardcoded GraphQL request to reading the post/profile pages' own server-rendered data, after the earlier approach stopped returning results in live testing. Output field names and types stay stable across such changes, so downstream integrations keep working without code changes on your end. No fixed turnaround time is promised.

๐Ÿ“ฐ What changed in Instagram scraping recently?

Instagram removed native hashtag and keyword browsing from logged-out access in 2024, pushing that discovery path behind a login wall โ€” a change documented across current scraping guides (checked 2026-08-15). Instagram has also continued rotating the internal doc_id values its private GraphQL endpoint depends on, a deliberate anti-scraping measure noted by multiple scraping references as of 2026-08-15. This Actor's own build history reflects exactly that failure mode: its previous hardcoded-doc_id GraphQL request stopped returning usable data during live verification, which is why it now reads the post and profile pages' own embedded JSON instead. For DIY scripts built directly against the GraphQL endpoint, a doc_id rotation is a hard break requiring a code fix; for this Actor's users, no action is required โ€” the extraction layer is maintained independently of the output schema.

โฌ‡๏ธ Input

ParameterRequiredTypeConstraintsDescription
urlsNoarrayeditor: stringListInstagram post / reel / TV URLs, one per entry. Optional โ€” leave empty and use 'Profiles to discover' below instead. Example: https://www.instagram.com/p/ABC123/
profilesNoarrayeditor: stringListProfile URLs or bare usernames. Each profile's most recent posts are discovered automatically and fetched with the same full detail as a direct URL, plus real owner bio/follower/following/post counts. Example: nasa or https://www.instagram.com/nasa/
maxPostsPerProfileNointegermin: 0, max: 12, default: 3Maximum number of recent posts to fetch per discovered profile. Draws from that profile's most recent page of posts (newest first).
postTypeNostring (enum)default: "all" โ€” one of all (All types), image (Image posts only), video (Video posts only), reel (Reels only), carousel (Carousel/album posts only); editor: selectApplied at discovery time, before each post's detail is fetched โ€” only matching post types count toward 'Max Posts Per Profile'. Has no effect on posts supplied directly via 'Post URLs'.
proxyConfigurationNoobjecteditor: proxyProxy configuration used for every request.

No parameter is required โ€” but the run needs at least one non-empty entry in urls or profiles to produce any output.

{
"urls": ["https://www.instagram.com/p/DMJPgPDToaE/"],
"profiles": ["nasa"],
"maxPostsPerProfile": 3,
"postType": "all",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

โš ๏ธ Common pitfall: setting maxPostsPerProfile to 0 does not skip profile discovery. In the source, 0 is treated as "not provided" and the Actor falls back to fetching 12 posts for that profile โ€” the same as leaving the field empty. If you want to discover profiles without pulling extra posts, omit the profile from profiles instead of relying on a 0 value.

โฌ†๏ธ Output

Every result is a typed JSON row pushed to the dataset the moment it's collected, charged under the row_result event. A post that can't be fetched (deleted, unavailable, or a temporary error) is skipped โ€” no row is pushed and no charge occurs, so the dataset never contains a placeholder or error record for it. Export as JSON, CSV, Excel, or any other format the Apify dataset view supports.

Scraped post

{
"url": "https://www.instagram.com/p/DMJPgPDToaE/",
"post_id": "3402816627491028471",
"short_code": "DMJPgPDToaE",
"username": "nasa",
"thumbnail_url": "https://scontent.cdninstagram.com/v/t51.../small.jpg",
"is_affiliate": false,
"is_paid_partnership": false,
"is_ad": false,
"is_insights_as_brand": false,
"is_caption_edited": false,
"has_ranked_comments": true,
"like_count": 184523,
"comment_count": 1042,
"video_view_count": null,
"video_play_count": null,
"post_date": "2026-08-10T14:32:05.000Z",
"display_url": "https://scontent.cdninstagram.com/v/t51.../large.jpg",
"alt": "A photo of Earth taken from the International Space Station.",
"location": null,
"caption": "A stunning view of Earth captured this week. #nasa #earth",
"video_duration": null,
"video_url": null,
"sponsor_user": [],
"upcoming_event": null,
"owner": {
"id": "528817151",
"username": "nasa",
"is_verified": true,
"profile_pic_url": "https://scontent.cdninstagram.com/v/t51.../profile.jpg",
"full_name": "NASA",
"is_private": false,
"is_unpublished": false,
"edge_owner_to_timeline_media": { "count": 4218 },
"edge_followed_by": { "count": 98342110 },
"edge_following": { "count": 76 },
"follower_count": 98342110,
"following_count": 76,
"biography": "Exploring the universe and our home planet.",
"external_url": "https://www.nasa.gov"
},
"latest_comments": [
{
"id": "17912345678901234",
"text": "Absolutely breathtaking!",
"created_at": 1755000000,
"owner": {
"id": "9988776655",
"is_verified": false,
"profile_pic_url": "https://scontent.cdninstagram.com/v/t51.../commenter.jpg",
"username": "space_fan_22"
},
"edge_liked_by": { "count": 12 },
"edge_threaded_comments": { "count": 0 }
}
],
"post_type": "image",
"canonical_url": "https://www.instagram.com/p/DMJPgPDToaE/",
"scrapedAt": "2026-08-15T09:12:44.000Z",
"scraped_at": "2026-08-15T09:12:44.000Z",
"source_mode": "url",
"source_profile": null
}

url reflects the actual path the post was found under (/p/, /reel/, /reels/ or /tv/); canonical_url is always normalized to the /p/ form. source_mode is "url" for direct post links or "profile_discovery" for posts found via profiles, and source_profile names the profile it was discovered from (null for direct URLs). scrapedAt and scraped_at carry the same value in two casings for compatibility with either naming convention downstream.

๐Ÿ“ˆ How does Instagram Post Details Scraper With Profile Data compare to other Instagram scrapers?

FeatureThis ActorGeneric alternative
Output formatTyped, normalized JSON, stable field namesOften raw HTML or inconsistent field names
Entity coveragePost/reel/TV detail + profile enrichment + comment preview in one rowFrequently one entity type per Actor/tool
Input flexibilityDirect URLs and username-based discovery, mixed in one runUsually URL-only or username-only
Proxy / anti-bot handlingApify Proxy with automatic escalation (direct โ†’ datacenter โ†’ residential) and retry backoff built inVaries; often requires manual proxy setup
Login requirementNone โ€” works on public, logged-out dataVaries by tool

If you're building an AI agent or RAG pipeline, the output format row is the decision-maker โ€” parsing HTML inside an agent loop is a reliability failure mode, not a feature.

๐Ÿ”ข How many results can you scrape with Instagram Post Details Scraper With Profile Data?

There's no hard cap on how many urls or profiles you submit in a single run โ€” the practical ceiling is your run's time and memory budget, not a limit coded into the Actor. Per discovered profile, maxPostsPerProfile caps how many recent posts are pulled, with a schema maximum of 12. Requests run at a fixed concurrency of 3 with a short delay between them, so larger batches take proportionally longer; no specific throughput figure is published, since none has been benchmarked. postType filtering happens during discovery, before the per-profile cap is applied, so it reduces โ€” never increases โ€” how many posts count toward that cap.

๐Ÿ”Œ Integrate Instagram Post Details Scraper With Profile Data and automate your workflow

Instagram Post Details Scraper With Profile Data works with any language or tool that can send an HTTP request โ€” the Apify API sits behind every run.

REST API integration

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"urls": ["https://www.instagram.com/p/DMJPgPDToaE/"],
"profiles": ["nasa"],
"maxPostsPerProfile": 3,
"postType": "all",
}
run = client.actor("instagram-post-details-scraper-with-profile-data").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["username"], item["like_count"], item["post_type"])

Works in Python, Node.js, Go, Ruby, cURL โ€” any client that can call the Apify API with your API token.

Automation platforms (n8n, Make, LangChain)

Apify's official n8n node and Make app can call any Actor by its ID, including this one, so a run can be triggered as a step in a larger n8n workflow or Make scenario and its dataset results passed downstream. For LangChain or other agent frameworks, the Actor is reachable as a plain HTTP call through apify_client or the Apify API, with no separate SDK required.

Scraping publicly accessible Instagram data is generally lawful, but what you do with it afterward is what carries legal weight. Instagram Post Details Scraper With Profile Data returns only publicly available post, profile and comment data โ€” no login-gated or private content. Because rows include personal data (usernames, bios, comment authors), storing or reusing that data at scale can fall under GDPR (if you process EU residents' data) or CCPA (California residents), so you need a lawful basis for collection, storage and any downstream use. Instagram's own Terms of Use also apply to how scraped data may be used. Consult legal counsel for commercial use cases involving bulk personal data.

โ“ Frequently asked questions

Does Instagram Post Details Scraper With Profile Data work without an Instagram account?

Yes. The Actor reads Instagram's own publicly served post and profile pages while logged out โ€” no Instagram account, login, or session cookie is needed.

How often is the scraped data updated?

Every run performs a live fetch against Instagram at the time it runs; nothing is served from a cache. Data reflects the counts and content visible on Instagram at the moment each request completes.

What happens if a post is deleted or unavailable?

The Actor retries up to 3 times with backoff, then skips that post entirely โ€” no row is pushed for it, and it isn't charged. The run continues with any remaining targets and logs how many succeeded versus failed.

Can I scrape private Instagram profiles or posts?

No. Only publicly accessible content is returned. Profile discovery against a private account returns zero posts for that profile, and the run continues with any other targets.

Is there a limit on how many posts or profiles I can submit per run?

No fixed input-size limit is enforced by the Actor itself. The per-profile discovery cap (maxPostsPerProfile) tops out at 12, but the number of URLs or usernames you submit is bounded only by your run's resources, not by the code.

Does Instagram Post Details Scraper With Profile Data work for AI agent workflows and LLM pipelines?

Yes. It's callable as a plain HTTP endpoint through the Apify API from any agent framework. Every response is typed JSON with stable field names โ€” no HTML and no parsing step before passing it to an LLM.

How does it handle Instagram's anti-bot system?

Requests go through Apify Proxy, starting from whatever proxy configuration you supply, and automatically escalate โ€” direct โ†’ datacenter (SHADER/DATACENTER) โ†’ residential โ€” when a request is blocked (HTTP 401/403/429) or fails outright. Failed requests retry up to 3 times with exponential backoff capped at 8 seconds, and each request uses a randomized desktop user agent.

How does Instagram Post Details Scraper With Profile Data compare to other Instagram scrapers?

It combines three things many single-purpose Instagram Actors split across separate tools: direct post/reel/TV lookup, username-driven profile discovery, and real owner enrichment (bio, follower count, following count) on every discovered row โ€” in one run, one dataset schema.

Does it return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with stable field names โ€” caption, like_count, owner.biography, and the rest โ€” passes directly into an LLM context window, a vector store, or an agent tool call.

Can I use it without managing proxies?

Yes. Apify Proxy is handled automatically, including escalation to residential proxies on blocks. You can also supply your own proxyConfiguration (proxy groups or a custom proxy) if you need specific proxy behavior.

What happens when Instagram changes its structure or blocks the scraper?

The Actor is maintained, and its output schema stays stable โ€” field names and types don't change on your end even when the underlying extraction method does, as already happened once when the earlier GraphQL-based mechanism stopped working. No specific turnaround time is promised for future fixes.

๐Ÿ’ฌ Your feedback

Found a bug, or missing a field you need? We want to know. Open an issue from the Actor's Issues tab on its Apify Console page, or leave a review on the Store listing โ€” reports are how this Actor stays current against Instagram's own changes.