Instagram Post Scraper
Pricing
from $6.75 / 1,000 results
Instagram Post Scraper
Instagram account post archive for one public profile. Download images and videos and return 64 fields with captions, engagement, owner, tags, location, audio, attribution, and notices.
Pricing
from $6.75 / 1,000 results
Rating
4.0
(2)
Developer
TrueFetch
Maintained by CommunityActor stats
2
Bookmarked
45
Total users
4
Monthly active users
5 days ago
Last modified
Categories
Share
Instagram Post Scraper is an instagram account post archive that turns one public profile timeline into 64-field records with downloaded images, videos, covers, avatars, and audio artwork, built for developers and data teams.
- One profile per run: use a username,
@handle, or complete Instagram profile URL. - 64 documented fields: Reels, feed images, and image, video, or mixed carousels share one top-level contract.
- Stored media included: required post assets are downloaded and uploaded before a Result row is published.
- Measured prefill: the
nasa, two-result example completed in 28.9 seconds with two non-empty Dataset rows on August 12, 2026.
Run a one-result test · View API
The smallest useful test requests one row: $0.01390 on the FREE tier — a $0.01 Actor Start plus one $0.00390 Result. Downloaded media is stored at no separate charge.
What does Instagram Post Scraper do?
Instagram Post Scraper reads the visible timeline of one known public Instagram account and publishes one record per usable post. A row can represent a Reel, feed image, or image, video, or mixed carousel without forcing downstream code to maintain separate schemas for each format.
Each row combines post and owner identity, caption text, hashtags, mentions, publication time, engagement snapshots, dimensions, stored media, optional location, tagged users with coordinates, coauthors, sponsors, audio, original-content attribution, wearable capture attribution, and public content notices. The Actor downloads required post assets before publication, so media_items[].media_url points to Actor storage rather than an expiring source CDN URL.
The Actor begins with a profile identity. It does not accept individual post URLs, discover accounts by keyword, search hashtags, read private profiles, collect Stories, or return a complete comment archive. It is independently operated and is not affiliated with, endorsed by, or sponsored by Instagram or Meta.
How do I run Instagram Post Scraper?
Start with the prefilled nasa account and reduce max_results to 1 for the smallest test:
{"username": "nasa","max_results": 1}
- Open the Actor Input tab and enter one username,
@handle, or profile URL. - Set
max_resultsto a positive integer; it is a ceiling on saved rows, not a guaranteed count. - Start the run and wait for a terminal status.
- Open the default Dataset and inspect
post_url,post_type,media_items, and the storage URLs. - Export JSON, CSV, Excel, XML, or another supported Dataset format, or read the Dataset through the API.
A valid run can return fewer rows than requested when a profile is private or unavailable, the visible timeline ends, a candidate lacks required identity, or a required media file cannot be downloaded and stored.
What data does Instagram Post Scraper return?
Every successfully published Dataset row has 64 top-level fields:
| Group | Fields | Meaning |
|---|---|---|
| Identity | platform, post_id, shortcode, post_url, post_type, product_type, media_type | Stable post identity and normalized/source classifications |
| Owner | owner_id, owner_username, owner_name, owner_url, owner_verified, owner_avatar | Public owner context and downloaded avatar |
| Caption | caption, caption_edited, caption_lang, alt_text, hashtags, mentions, published_at | Text, source language, accessibility, references, and publish time |
| Engagement | like_count, comment_count, play_count, duration, counts_hidden | Collection-time counts and video duration |
| Media summary | width, height, cover_url, media_count, image_count, video_count, is_carousel, has_video, has_audio | Dimensions, stored cover, and post composition |
| Place and people | location_id, location_name, location_lat, location_lng, location_address, tagged_users, coauthors | Optional place, people tags with coordinates, and collaborators |
| State and attribution | comments_disabled, is_branded, sponsors, is_pinned, is_downloadable, is_remixable, content_notice, attributions, capture_info | Public post state, partnerships, notices, and original/capture context |
| Audio | audio_type, audio_title, artist_name, audio_id, canonical_id, audio_ms, artwork_url, sound_owner, audio_reusable, audio_trending, mashup_count | Licensed or original-audio identity and availability |
| Assets and provenance | media_items, processor, processed_at | Ordered stored media and Actor processing provenance |
Abbreviated item; a real row contains all 64 top-level fields, and a carousel can contain several media_items:
{"platform": "instagram","post_id": "3961434691382135949_528817151","shortcode": "Db519z8vcyN","post_url": "https://www.instagram.com/p/Db519z8vcyN/","post_type": "feed_image","owner_username": "nasa","caption": "A public NASA post caption","published_at": "2026-08-01T12:00:00+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,"media_items": [{"position": 1,"media_type": "image","media_url": "https://api.apify.com/v2/key-value-stores/example/records/image.jpg","width": 1080,"height": 1080,"has_audio": null}],"processor": "https://apify.com/truefetch/instagram-post-scraper","processed_at": "2026-08-12T12:00:00+00:00"}
Null means the public source did not provide a usable value. Empty arrays mean no matching public elements were present. Counts and state flags are snapshots, not independent verification.
What inputs can I configure?
Instagram Post Scraper exposes exactly two required inputs in this order:
| Input | Type | Constraints | Prefill |
|---|---|---|---|
username | string | Username, @handle, or one-segment Instagram profile URL; foreign hosts, post routes, explicit ports, spaces, and invalid characters are rejected | nasa |
max_results | integer | Positive ceiling on successfully published rows | 2 |
username controls both profile resolution and paginated feed requests. max_results stops after that many rows have passed identity checks, formatting, media download, storage upload, deduplication, and Dataset publication. Neither input is a hidden filter, and there are no public proxy or concurrency controls.
What platforms and markets does Instagram Post Scraper cover?
The Actor covers public Instagram profile timelines. It does not apply a country, language, or market filter; a run follows the account identified by username and preserves available source language and location signals in the row.
Supported post shapes are Reels, feed images, and image, video, or mixed carousels. Current video timeline items commonly arrive as Reels. Private profiles, Stories, direct messages, follower lists, hashtag results, Explore discovery, and account search are outside the contract.
Why use Instagram Post Scraper?
- Stable row shape: compare post types without joining format-specific tables.
- Stored post assets: keep Actor storage URLs for required media instead of source CDN links that can expire.
- Public context in one record: combine owner, caption, engagement, location, tags, coauthors, sponsors, audio, attribution, and notices.
- Partial-run resilience: one unavailable candidate does not discard usable rows already published.
- Centralized output accounting: normalized duplicates are ignored, the result ceiling is enforced before push, and a Result is charged only when the row is saved.
Use the Actor when a known account and post-level records are the correct starting point. Choose a profile lookup when biography and follower totals are the unit, Explore collection when discovery is the goal, or transcript extraction when spoken words are the required output.
Who is Instagram Post Scraper for?
Developers can feed structured rows into APIs, databases, webhooks, or media pipelines. Analysts can compare formats, captions, engagement, tags, locations, and audio across snapshots. Brand and research teams can schedule small runs for recent content monitoring and reconcile results by post_id.
It is not a fit for private-content access, follower or audience discovery, complete historical archives, legal rights clearance, full comments, account-owned publishing, or a workflow that must start from individual post URLs.
How can I use Instagram Post Scraper through the API or MCP?
The immutable Actor ID is 694ZurZD4xBPBM6oc; truefetch/instagram-post-scraper is the readable name form.
Run synchronously and return Dataset items over HTTP:
curl -X POST "https://api.apify.com/v2/acts/694ZurZD4xBPBM6oc/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"username":"nasa","max_results":1}'
Use the Python client:
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("694ZurZD4xBPBM6oc").call(run_input={"username": "nasa", "max_results": 1})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["post_url"], item["media_items"])
For MCP, add 694ZurZD4xBPBM6oc to the Actor allowlist of the Apify MCP server, keep the token in the server environment, and ask the connected client to run the Actor with username=nasa and max_results=1. The API page provides generated JavaScript, Python, CLI, OpenAPI, HTTP, and MCP examples.
How much does Instagram Post Scraper cost?
Pricing is pay per event, and there are exactly two. The FREE tier charges $0.01 for Actor Start and $0.00390 per Result; downloaded media carries no separate event.
| Event | Billing unit | FREE | BRONZE | SILVER | GOLD / PLATINUM / DIAMOND |
|---|---|---|---|---|---|
| Result | One complete post row, stored media included | $0.00390 | $0.00351 | $0.00312 | $0.00293 |
| Actor Start | Once per run, memory-scaled | $0.01000 | $0.01000 | $0.01000 | $0.01000 |
One returned row costs $0.01390; two cost $0.01780. Unavailable candidates do not generate a Result event. Set a maximum total charge when a hard run-level ceiling matters, and check the Pricing tab before budgeting a future run.
How does Instagram Post Scraper compare with alternatives?
Instagram Post Scraper is intentionally narrow: one known public account, post-level rows, and stored media. A broader social collector can cover more discovery modes but introduces a larger input and output surface. A profile API is better for biography and audience totals, while an Explore collector is better for discovering content beyond a known account.
For account-owned, permissioned integrations, compare the workflow with Meta's official Instagram API documentation. Manual review remains simpler for one visual check. A custom Actor is appropriate when a different input, legal boundary, storage policy, or Dataset contract is mandatory.
What are the limits and troubleshooting steps?
- Public timelines only: private, removed, empty, or blocked accounts cannot return public posts.
max_resultsis a ceiling; source exhaustion and unavailable candidates can reduce output.- Required post media must download and upload before publication. Optional avatar or artwork failures become null.
- Counts, verification, partnership, reuse, and notice fields reflect the source at collection time.
- The Actor does not collect Stories, full comments, follower lists, search results, private content, or individual post URLs.
- If a run returns zero rows, retry the prefilled
nasaaccount withmax_results=1. Then verify the target profile is public and inspect the terminal status and logs. - If a scheduled run returns fewer items than the prior snapshot, treat availability and timeline order as source state rather than deleting earlier stored records automatically.
Frequently asked questions
How do I archive Instagram posts from username input?
Provide the account as username, set a positive max_results, and run the Actor. Each publishable row includes stored post media and a stable post_id for downstream archive deduplication.
Is Instagram Post Scraper an instagram account post archive for a full history?
It is an archive-building input, not a guarantee of complete history. The Actor follows the currently visible public timeline until max_results, feed exhaustion, or the run boundary.
Does Instagram Post Scraper collect only Reels?
No. It normalizes Reels, feed images, and image, video, or mixed carousels into the same 64-field contract.
Can I pass a profile URL or @handle?
Yes. The runtime normalizes bare usernames, @handles, scheme-less instagram.com/<username> URLs, and complete HTTP or HTTPS profile URLs. Individual post URLs and foreign hosts are rejected.
Are likes, comments, and plays live values?
They are collection-time snapshots. Instagram can change counts after the run, and play_count remains null on formats where the source does not expose it.
Does a successful run guarantee max_results rows?
No. A successful terminal status can accompany fewer rows when the source timeline ends or individual candidates are unavailable.
Does the Actor permanently host downloaded media?
The Actor uploads media to the run's Apify Key-Value Store and returns its public storage URLs. Retention and access then follow the storage and account settings that apply to that run.
Can I schedule Instagram account monitoring?
Yes. Save the input as an Apify Task, attach a Schedule, request a small recent window, and deduplicate downstream by post_id while retaining processed_at for snapshot time.
Are branded, verified, reusable, or content-notice flags independently checked?
No. They are source-provided signals. Use them as evidence for review, not as legal, identity, rights, or partnership verification.
Related TrueFetch Actors
These three TrueFetch Actors extend the account-content workflow without duplicating its post archive unit.
- Instagram Profile API — collect biography, audience totals, links, and recent profile context instead of full post rows.
- Instagram Explore Post — discover content from Instagram Explore rather than starting from a known account.
- Instagram Video Transcript — convert speech from a known Instagram video into transcript output.
Support
Use the Store page for the product overview, the API page for generated integrations, the Issues page for reproducible bugs, and the TrueFetch community for usage questions. Include the run ID and exact non-secret input when reporting a problem.
Start with one public post · Open the API reference
Last Updated: August 12, 2026