Instagram Post Scraper avatar

Instagram Post Scraper

Pricing

from $6.75 / 1,000 results

Go to Apify Store
Instagram Post Scraper

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

TrueFetch

Maintained by Community

Actor stats

1

Bookmarked

32

Total users

3

Monthly active users

a day ago

Last modified

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 username and one max_results limit.
  • 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:

  1. Open the Actor and enter nasa as the bare username.
  2. Set max_results to 1.
  3. Start the run and wait for a terminal status.
  4. 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:

GroupFieldsMeaning
Identity and ownerpost_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_urlNormalized and source identifiers plus public owner context
Caption and timecaption, caption_created_at, caption_is_edited, accessibility_caption, hashtags, mentions, published_at, published_timestampCaption material, ASCII-letter/digit/underscore hashtags, extracted mentions, and publication timestamps
Engagement and media summarylike_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_audioCollection-time counts and normalized media indicators
Relationships and placelocation_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_commentsOptional location, viewer, collaboration, sponsor, and comment-sample signals
Audioaudio_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_countOptional licensed-music or original-audio metadata
Media and provenancemedia_items, processor, processed_atNested 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?

FieldTypeRequiredValidation and effect
usernamestringYesOne bare Instagram username, up to 30 characters, using letters, numbers, periods, or underscores
max_resultsintegerYesMaximum 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?

CapabilityPractical benefit
One 62-field contract across post formatsLoad mixed images, videos, Reels, and carousels into one downstream model
Explicit source and normalized type fieldsPreserve source context while grouping comparable formats
Timestamped engagement and provenanceSeparate collection-time observations from permanent facts
Nested media, relationship, place, comment, and audio fieldsAvoid flattening important source structure into ambiguous strings
Result-event billing tied to published rowsReconcile 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 os
from apify_client import ApifyClient
client = 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.

TierActor StartActor Usage unitResult
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 limitExplanation and next step
No rowsConfirm the bare username is correct and the account is publicly available; review the terminal status and log
Fewer rows than requestedThe 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 fieldsThe public response did not expose them; do not replace null with zero or an invented default
Missing or expired media URLPost 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 runsEngagement and comments are collection-time snapshots; compare timestamps before interpreting change
Unexpected field behaviorReproduce 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.

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.

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.

Test one public post · Open the integration reference