Instagram Post Scraper
Pricing
from $6.75 / 1,000 results
Instagram Post Scraper
Scrape public Instagram profile posts, reels, and carousel media with captions, likes, comments, plays, timestamps, media URLs, and optional cloud media downloads for content analytics, influencer research, and AI workflows.
Pricing
from $6.75 / 1,000 results
Rating
5.0
(1)
Developer
TrueFetch
Maintained by CommunityActor stats
1
Bookmarked
32
Total users
3
Monthly active users
a day ago
Last modified
Categories
Share
Instagram Post Scraper collects recent public profile posts for one Instagram username and returns normalized 62-field records for developers, analysts, and data teams.
- Two required inputs: one bare
usernameand onemax_resultslimit. - Exactly 62 documented top-level fields in every successfully published Dataset row.
- One record contract for feed images, feed videos, Reels, IGTV-style media, and image, video, or mixed carousels.
- Source-aware fields: unavailable scalar values remain null, and engagement values reflect collection time.
Run a one-result test · View API
The smallest useful FREE-tier test requests one row: the predictable Actor Start and Result portion is $0.01750, plus variable Actor Usage. Set a run-level charge limit when a hard maximum matters.
What does Instagram Post Scraper do?
Instagram Post Scraper turns public posts visible for one Instagram profile into a consistent Dataset. The same top-level structure covers a single image, a feed video, a Reel, an older IGTV-style item, and a carousel containing images, videos, or both. This lets a downstream table or pipeline compare formats without maintaining a different top-level schema for each post type.
Each published row can include post identity, source classifications, owner context, caption text, extracted hashtags and mentions, publication time, engagement snapshots, media summaries, nested media parts, tagged users, coauthors, partnership signals, location, comment samples, audio metadata, and processing provenance. Values reflect what the public source exposed when the record was collected.
The Actor is not an Instagram login, private-content tool, permanent media host, complete comment archive, identity verifier, rights-clearance service, or official Meta product. It does not guarantee a full account history or a fixed result count. Instagram Post Scraper is independently operated and is not affiliated with, endorsed by, or sponsored by Instagram or Meta.
How do I run Instagram Post Scraper?
Use one public account and one requested row for the first run:
- Open the Actor and enter
nasaas the bare username. - Set
max_resultsto1. - Start the run and wait for a terminal status.
- Inspect the default Dataset and confirm the returned fields before scaling.
{"username": "nasa","max_results": 1}
max_results is a per-run ceiling on successfully published rows, not a promise that the source exposes that many usable posts. A valid request can return fewer rows when the visible timeline ends, an account is unavailable, or individual posts cannot be resolved.
What data does Instagram Post Scraper return?
Every published Dataset row uses these 62 top-level fields:
| Group | Fields | Meaning |
|---|---|---|
| Identity and owner | post_id, shortcode, post_url, post_type, instagram_product_type, instagram_media_type, owner_id, owner_username, owner_full_name, owner_is_verified, owner_is_private, owner_profile_pic_url | Normalized and source identifiers plus public owner context |
| Caption and time | caption, caption_created_at, caption_is_edited, accessibility_caption, hashtags, mentions, published_at, published_timestamp | Caption material, ASCII-letter/digit/underscore hashtags, extracted mentions, and publication timestamps |
| Engagement and media summary | like_count, comment_count, play_count, view_count, like_and_view_counts_disabled, cover_url, media_count, image_count, video_count, is_carousel, has_video, has_audio | Collection-time counts and normalized media indicators |
| Relationships and place | location_id, location_name, location_lat, location_lng, location_address, location_city, tagged_users, coauthors, comments_disabled, can_viewer_save, can_viewer_reshare, is_paid_partnership, sponsor_tags, top_comments | Optional location, viewer, collaboration, sponsor, and comment-sample signals |
| Audio | audio_type, audio_title, audio_artist, audio_asset_id, audio_canonical_id, audio_duration_ms, audio_cover_url, audio_preview_url, audio_owner_username, audio_is_original, audio_is_reuse_allowed, audio_is_trending, audio_mashups_count | Optional licensed-music or original-audio metadata |
| Media and provenance | media_items, processor, processed_at | Nested media parts and processing provenance |
This abbreviated item illustrates the same nasa, one-result scenario; the Dataset Schema is the authoritative field list:
{"post_id": "POLARIS_3950671748375397992","shortcode": "DbTmwYKFkZo","post_url": "https://www.instagram.com/p/DbTmwYKFkZo/","post_type": "feed_image","owner_username": "nasa","caption": "An illustrative public NASA caption","published_at": "2026-07-27T18:26:43+00:00","like_count": 60309,"comment_count": 589,"play_count": null,"cover_url": "https://api.apify.com/v2/key-value-stores/example/records/cover.jpg","media_count": 1,"has_video": false,"hashtags": [],"mentions": [],"top_comments": [],"audio_title": null,"media_items": [{"position": 1,"media_type": "image","media_url": "https://api.apify.com/v2/key-value-stores/example/records/image.jpg","has_audio": null}],"processor": "https://apify.com/truefetch/instagram-post-scraper","processed_at": "2026-07-28T12:00:05+00:00"}
Null means the source did not provide a scalar value in that response; an empty array means no members were returned for that collection. Engagement counts can change after collection. Comment samples are neither complete nor rank-stable. Downloaded post images, videos, and covers use run Key-Value Store URLs, while external profile or audio URLs remain source-dependent and can expire.
What inputs can I configure?
| Field | Type | Required | Validation and effect |
|---|---|---|---|
username | string | Yes | One bare Instagram username, up to 30 characters, using letters, numbers, periods, or underscores |
max_results | integer | Yes | Maximum successfully published rows for this run, from 1 to 1,000,000 |
Do not submit an @handle, profile URL, post URL, slash, query, fragment, whitespace, or unsupported character as username. The Actor rejects those formats rather than guessing. The Actor has no public download toggle: it downloads each resolved post image, video, and available cover to the run Key-Value Store automatically. Returned storage URLs follow the associated storage retention and deletion settings rather than permanent hosting.
What platforms and markets does Instagram Post Scraper cover?
The source scope is public Instagram profile content available for one username. Supported record shapes include feed images, feed videos, Reels, older IGTV-style media, and carousels. This Actor does not directly accept post URLs, hashtags, search terms, stories, private accounts, or login-only content.
No country, language, or market filter is declared. Caption language, location availability, audio metadata, viewer flags, counts, and media access depend on the public response. Country-neutral input does not imply universal source availability.
Why use Instagram Post Scraper?
| Capability | Practical benefit |
|---|---|
| One 62-field contract across post formats | Load mixed images, videos, Reels, and carousels into one downstream model |
| Explicit source and normalized type fields | Preserve source context while grouping comparable formats |
| Timestamped engagement and provenance | Separate collection-time observations from permanent facts |
| Nested media, relationship, place, comment, and audio fields | Avoid flattening important source structure into ambiguous strings |
| Result-event billing tied to published rows | Reconcile requested limits against actual Dataset output |
The main trade-off is source dependence. A broad schema improves consistency, but it cannot force Instagram to expose every field or every historical post. Critical decisions still require current source review and independent verification.
Who is Instagram Post Scraper for?
Developers and data teams can use the Dataset for account-content monitoring, timestamped research samples, format analysis, caption and hashtag studies, or ingestion into controlled analytics and AI workflows. Creative and brand analysts can compare visible posting patterns, media structure, collaboration signals, and engagement snapshots across repeated runs.
It is a poor fit for anyone who needs private data, authenticated account actions, exhaustive comments, guaranteed full history, permanent media hosting, or proof of identity, ownership, sponsorship compliance, music rights, audience quality, or brand safety.
How can I use Instagram Post Scraper through the API or MCP?
The Actor ID is truefetch/instagram-post-scraper. Keep the Apify token in a secret and use the same one-result scenario across integrations.
curl -X POST "https://api.apify.com/v2/actors/truefetch~instagram-post-scraper/runs?waitForFinish=60" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"username":"nasa","max_results":1}'
The endpoint returns a run object. If the status is not terminal after the wait period, poll the run and then read items from its defaultDatasetId. Apify recommends the Authorization header instead of placing a token in the URL.
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("truefetch/instagram-post-scraper").call(run_input={"username": "nasa", "max_results": 1})if run is None:raise RuntimeError("Actor run did not start")items = client.dataset(run.default_dataset_id).list_items().items
The hosted Apify MCP server can expose authenticated Store Actor execution through call-actor. Select truefetch/instagram-post-scraper and pass {"username":"nasa","max_results":1}. The live API page provides generated SDK and OpenAPI surfaces.
How much does Instagram Post Scraper cost?
Pricing registers Actor Start, Actor Usage, and Result events. A Result is one successfully published Dataset row. Actor Usage is a resource-dependent event measured in $0.00001 units.
| Tier | Actor Start | Actor Usage unit | Result |
|---|---|---|---|
| FREE | $0.01000 | $0.00001 | $0.00750 |
| BRONZE | $0.01000 | $0.00001 | $0.00675 |
| SILVER | $0.01000 | $0.00001 | $0.00600 |
| GOLD | $0.01000 | $0.00001 | $0.00563 |
| PLATINUM | $0.01000 | $0.00001 | $0.00563 |
| DIAMOND | $0.01000 | $0.00001 | $0.00563 |
At FREE pricing, a one-row run has a predictable $0.01000 + $0.00750 = $0.01750 Actor Start and Result portion, plus variable Actor Usage. Charges follow actual recorded events, not only max_results. Review the live Store pricing surface before a paid run because publication timing and prices can change.
How does Instagram Post Scraper compare with alternatives?
Manual profile review is reasonable for a few visual checks but does not naturally produce a repeatable 62-field Dataset. Official platform access can offer different authority and stability, but it requires its own approval, permissions, terms, and integration. A custom collection workflow offers more control while making the caller responsible for normalization, storage contracts, monitoring, and long-term maintenance.
Choose this Actor for bounded public-profile post collection with a fixed record contract. Choose Instagram Profile when account-level facts are the primary need, and choose another authorized method when private access, official permissions, or a different output boundary is required.
What are the limits and troubleshooting steps?
| Symptom or limit | Explanation and next step |
|---|---|
| No rows | Confirm the bare username is correct and the account is publicly available; review the terminal status and log |
| Fewer rows than requested | The visible timeline may end or some posts may be unavailable; preserve existing rows and retry only a small missing scope later |
| Null counts, audio, location, or viewer fields | The public response did not expose them; do not replace null with zero or an invented default |
| Missing or expired media URL | Post images, videos, and covers point to the run Key-Value Store and follow its retention or deletion state; external profile and audio URLs remain source-dependent |
| Counts differ between runs | Engagement and comments are collection-time snapshots; compare timestamps before interpreting change |
| Unexpected field behavior | Reproduce with {"username":"nasa","max_results":1} and report the run ID, Dataset ID, UTC time, expected field, and actual value without secrets |
Large limits increase runtime and exposure to source variability without guaranteeing equal output. A schema-valid input or terminal run status does not by itself prove Dataset completeness.
Frequently asked questions
Does it collect only Reels?
No. It normalizes feed images, feed videos, Reels, IGTV-style records, and image, video, or mixed carousels.
Is max_results guaranteed?
No. It is the maximum number of successfully published rows, and source availability can reduce the result.
Can I pass a profile URL, post URL, or @handle?
No. Send one bare username. Direct post URLs and search-style inputs are outside this Actor’s public contract.
Are likes, comments, plays, and views current?
They are snapshots from collection time and can change. A null value means the source did not expose that metric in the collected response.
Are comments complete?
No. top_comments is a source-provided sample, not full pagination or a stable ranking. Apply moderation and privacy controls before reuse.
Does hashtag extraction cover every writing system?
No. The current Dataset extracts hashtags made from ASCII letters, digits, and underscores. Non-Latin hashtag text can remain only in the original caption and may be absent from hashtags.
Does the Actor permanently store media files?
No. The Actor automatically downloads each resolved post image, video, and available cover to the run Key-Value Store, but those files follow the associated storage retention and deletion settings. The current public input has no download toggle.
Are verification, partnership, or sponsorship fields independently checked?
No. They preserve source signals and do not prove identity, ownership, rights, compliance, or commercial suitability.
What legal and privacy checks apply?
Review the current Instagram Terms of Use, Meta Privacy Policy, intellectual-property rights, privacy law, platform rules, and contractual restrictions. Public visibility is not blanket permission to republish, profile, train on, or contact. Use data minimization, access controls, retention limits, deletion procedures, and comment moderation.
Related TrueFetch Actors
- Instagram Profile — choose it for account-level profile facts instead of post-level records.
- Instagram Explore Post — choose it for Explore-oriented discovery rather than one profile timeline.
- Instagram Video Transcript — choose it when spoken-content transcription is the primary output.
Each Actor has its own input, output, pricing, and source limits. Validate identifiers and timestamps before joining records.
Support
Store · API · Issues · TrueFetch community · Direct support
For a reproducible report, include the Actor name, run ID, Dataset ID, UTC time, non-secret input, requested and returned counts, and the exact expected versus actual field. Never publish tokens, credentials, infrastructure URLs, personal data, or copyrighted files in a public ticket.