Instagram Profile Posts Scraper avatar

Instagram Profile Posts Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Instagram Profile Posts Scraper

Instagram Profile Posts Scraper

Collect posts, reels, and carousel media from public Instagram profiles or post links. Export captions, like and comment counts, media links, publish times, and author details.

Pricing

from $1.50 / 1,000 results

Rating

5.0

(1)

Developer

Rush

Rush

Maintained by Community

Actor stats

6

Bookmarked

478

Total users

56

Monthly active users

4.1 hours

Issues response

16 hours ago

Last modified

Security

Limited permissions

Share

Collect public Instagram posts, reels, and carousel media from profile pages or individual post links. The dataset includes captions, hashtags, mentions, engagement counts, publish time, media links, and useful post metadata.

Use it for social listening, content research, competitor monitoring, creator discovery, and building Instagram datasets for your analytics workflow.

What You Get

  • Public profile posts, reels, and carousel posts
  • Image, video, and carousel media links
  • Captions, hashtags, and mentioned usernames
  • Like and comment counts, and video duration
  • Publish time, post link, shortcode, location, tagged users, music name, and coauthors when the post has them
  • Reel view counts for reels collected from a profile, when available
  • Optional date filtering and pinned-post exclusion

How to Use

  1. Add Instagram usernames, profile links, or post and reel links (up to 10).
  2. Choose how many posts to collect per profile, and optionally a date limit or pinned-post exclusion.
  3. Start the run.
  4. Open the Output tab to view the posts or download them as JSON, CSV, Excel, or another format.

Input

Add Instagram usernames, profile links, or post and reel links. The example below shows the format; its reel link is a placeholder, so use a real one.

{
"usernames": [
"natgeo",
"https://www.instagram.com/nasa/",
"https://www.instagram.com/reel/ABC123xyz/"
],
"maxPosts": 25,
"postsNewerThan": "1 month",
"excludePinnedPosts": false
}

Input Settings

SettingRequiredDefaultDescription
usernamesYes-Instagram usernames, profile links, or post and reel links, one per entry. Up to 10 entries per run. Blank lines, and entries holding more than one link or name, are reported and skipped. A link to one of an account's tabs, such as its reels or tagged tab, collects that account's posts, the same as its profile link. A share link (with /share/ in it) may not open; it is then reported, so use the post's own link instead.
maxPostsNo50Maximum posts to collect per profile, from 1 to 1000. This does not apply to individual post or reel links.
postsNewerThanNo-For profile targets, collect posts on or after a date such as 2026-01-15 (read as midnight UTC), or a relative period such as 7 days, 2 weeks, or 1 month. Input sent through the API or as JSON can also use a date and time with a time zone, such as 2026-01-15T08:00:00Z or 2026-01-15T08:00:00+01:00. Individual post and reel links are not filtered.
excludePinnedPostsNofalseFor profile targets, skip posts pinned to the top of that profile. Top posts whose pinned status cannot be determined are kept. Individual post and reel links are not filtered.

Output

Each dataset item represents one Instagram post or reel. The illustrative example below uses placeholder links and values, not a captured post; the Full Details view lists every available field, including author, dimensions, tagged users, location, music, and co-authors.

{
"username": "natgeo",
"postUrl": "https://www.instagram.com/reel/XYZ789abc/",
"mediaDownloadUrl": "https://scontent.cdninstagram.com/.../video.mp4",
"mediaType": "video",
"caption": "Example caption with #travel and @natgeo",
"hashtags": ["travel"],
"mentions": ["natgeo"],
"likes": 5230,
"comments": 187,
"timestamp": "2026-02-18T14:30:00.000Z",
"shortcode": "XYZ789abc",
"videoViewCount": 84500,
"videoDuration": 143.1,
"isPinned": false
}

For carousel posts with slide data, mediaDownloadUrl is an array of media items, each with type, url, width, and height, so you can access each slide.

Every Field

FieldWhat it is
usernameRequested profile, or the author for an individual post link
authorObserved post author, when available; may differ for collaboration posts
postUrlLink to the post or reel
mediaDownloadUrlDirect media link; an array of items for a carousel
displayUrlPreview image link: the image itself for a single-image post, the cover image for a video or carousel
videoUrlDirect video file link
mediaTypeimage, video, carousel, or unknown when the type is unavailable
isVideo / hasAudioWhether the post is a video, and whether it has sound
captionCaption text, including hashtags and mentions. Runs of line breaks or tabs become one space, and surrounding whitespace is removed.
hashtags / mentionsHashtags and mentioned accounts taken from the caption, as written there. One mentioned twice appears twice.
titleThe opening of the caption, up to 200 characters
descriptionInstagram's written description of the image, or the opening of the caption
likes / commentsEngagement counts
commentsDisabledWhether comments are turned off
videoViewCount / videoDurationViews (reels collected from a profile) and length in seconds, for video posts
timestampWhen the post was published (ISO 8601)
scrapedAtWhen this row was collected (ISO 8601)
indexPosition within the requested profile's results (1, 2, 3…). Individually requested post or reel links use 1.
shortcodeInstagram's identifier for the post
ownerIdInstagram's numeric id for the post's author (the author account)
isPinnedWhether the post is pinned to the top of the profile; empty when it cannot be told
dimensionsWidth and height of the original media in pixels. A linked file can be a smaller copy.
locationNameTagged location, when the post has one
taggedUsersAccounts tagged in the media (different from caption mentions)
musicNameTrack and artist for reels
coauthorsCo-authors of a collaboration post

What Instagram Publishes

Instagram does not publish every detail for every post, so a few columns are filled in only where it does. They are left empty rather than filled with a stand-in value, so an empty cell means the value was unavailable for this run or does not apply to this post, not a measured zero. List columns such as hashtags hold an empty list when there is nothing to list.

ColumnWhen it is filled in
videoViewCountWhen a reel count is available for this run. Empty for images and carousels and for videos without a usable count, and may be empty for individual post and reel links. If a connection issue or a timeout left a count empty, a new run may get it.
isPinnedFilled in for a profile's top posts when the Actor can tell whether they are pinned. Posts below the top three are not pinned. Empty for a top post whose status cannot be determined (for example, a collaboration post that may be pinned only by the partner account), and for individual post links.
commentsDisabledOnly when Instagram states it, so it is usually empty.
likes / commentsWhen Instagram returns a usable count; hidden or unavailable counts stay empty.
locationName, musicName, taggedUsers, coauthorsOnly when the post actually has them.

Dataset Views

  • Overview: username, post type, pinned status, engagement, publish time, and post link
  • Media Downloads: media links and preview images
  • Full Details: all available fields

Run Summary

The Run Summary output reports saved posts, incomplete targets, and why collection stopped. A target is one entry of your list: an account, a post or reel link, or an entry that could not be used; the same account or post entered more than once counts once. If storage cannot confirm the saved count, savedPosts is null rather than an estimate. Results already saved remain available. A run that saved posts ends as SUCCEEDED even when some targets were not finished, and so does a run that found no matching posts. Check savedPosts and the lists in the run summary: a target with an issue is listed with its reason; a target with no matching posts is not listed and counts in completedTargets. FAILED means a problem kept the run from saving posts, or the run could not finish normally.

FieldWhat it is
savedPostsPosts saved by the run, or null when storage could not confirm the count
requestedTargetsTargets in the input: each account, post, or reel link counted once, plus any entry that could not be used
completedTargetsTargets that finished without an issue, or null when collection stopped early
stoppedReasonWhy collection stopped early (see the table below), or null
failedItemsTargets that could not be collected, each with its reason
partialItemsTargets that were collected only in part, each with its reason
unusableItemsEntries that are not a username, a profile link, or a post or reel link (for example a blank line, or a link to another Instagram page), each with its reason

These lists name a target as @account for an account, by its shortcode for a post or reel link, and as Entry 3 for the third entry of your list when it could not be used.

The same account entered more than once (for example nasa, @nasa, and its profile link) is collected once, and a post already saved for a profile in a run is not written again for that profile. A post or reel link whose post was already saved for one of the requested profiles is not saved a second time; its row is under that profile.

When Collection Stops Early

When stoppedReason is set, collection stopped before the run finished. Saved results stay in the dataset, and targets the run did not finish are listed in failedItems or partialItems. When collection ends, the run summary lists each target that had an issue, with its reason. When the input was refused, no entry could be used, or a run's input was changed, the run ends before collecting, the run summary stays empty, and the status message names the problem. The summary is written when collection ends, so a run you stop, or one that reaches its time limit, has no summary, and a run whose status message begins "Collection could not finish…" may have none either. What it saved stays in the dataset; resurrect the run to continue it.

stoppedReasonThe status message beginsWhat to do
collection_limit"Collection stopped at this run's collection limit…"A run can stop at this limit before it reaches Max Posts Per Profile. Resurrect the run to continue it: the posts it saved stay and are not collected again.
charge_limit"Collection stopped at the run charge limit…" or "The run charge limit was reached…"Resurrect the run with a higher Maximum cost per run to continue it: the posts it saved stay and are not collected again.
storage_failure"Collection stopped because results could not be saved…"Resurrect the run later to continue it: the posts it saved stay and are not collected again.

Resurrected Runs

To resurrect a run, open it in Apify Console, choose Actions > Resurrect, and stay on the Resurrect tab; Maximum cost per run is under Options there. The run continues: the posts it saved stay in the dataset and are not collected again, and a relative date such as 7 days still counts from when the run first started. An account that has not reached Max Posts Per Profile can be read again, so posts published since can be added. A target reported as collected only in part stays marked when it already has the posts you asked for and is not read again. Changing a run's original input stops further collection: the status message says "This run was started with different input…". Start a new run to change input settings.

Tips

  • Start with one or two profiles to confirm the output format before running a larger batch.
  • Use postsNewerThan when you only need recent content.
  • Media links can expire, so download or process media soon after the run finishes.
  • Input settings must use the documented types and limits. Invalid settings stop the run before collection.
  • Invalid links and private or missing accounts are reported and skipped so other eligible entries can be attempted. An entry Instagram does not answer for is reported, and the next entry is still tried.
  • Some public profiles may be temporarily unavailable. Affected targets are reported in the run summary, while successfully collected posts remain available.

FAQ

Can a date include a time?
Yes, when the input is sent through the API or as JSON: use a date and time with a time zone, such as 2026-01-15T08:00:00Z or 2026-01-15T08:00:00+01:00. A time with no time zone is not accepted. A date such as 2026-01-15 is read as midnight UTC, and a relative period such as 7 days also works.

Can it scrape private profiles?
No. It only collects data that is publicly available.

Can I mix profile links and post links in one run?
Yes. You can combine usernames, profile links, and post or reel links in the same input list.

How does pinned-post exclusion work?

Instagram keeps pinned posts, up to three, at the top of a profile. With excludePinnedPosts on, a top post the Actor identifies as pinned is skipped. A top post whose status cannot be determined is kept and isPinned is left empty, for example a collaboration post that may be pinned only by the partner account. If an account moved an older post to the top without pinning it, that post can be treated as pinned. Individual post and reel links are still collected as requested.

Why does the same post appear under two profiles?
When two of the profiles you requested published the same collaboration post, it is saved under each of them, so each profile's list is complete and numbered from 1. The username column shows which requested profile a row belongs to.

Why did I get fewer posts than requested?
The profile may have fewer public posts available, your date filter may exclude older posts, or Instagram may not return more public results during that run. If an account moved a recent post below older posts in its grid, the date filter can miss it. The Actor also checks only so many posts for one profile. If that limit is reached before all posts can be checked, the run summary marks the profile incomplete with the reason "reached the limit of posts checked for one profile"; a narrower date filter or a smaller Max Posts Per Profile makes that limit less likely to be reached. A run can also stop before later entries are processed. Check the Run Summary, when the run has one, for the stopping reason. Profiles a stopped run did not reach may still have matching posts.

Why is a column empty for some rows?
Instagram publishes different details for different posts. See What Instagram Publishes above for the columns that vary most. An empty cell means the value was unavailable for this run or does not apply to this post. It does not mean zero.

What happens if one entry in my list is wrong?
An invalid link, a blank line, a post link that is not available, or a private or missing account is reported in the run summary and skipped, and the other entries are still collected. Apart from a run you stop, one that reaches its time limit, or one that could not finish, collection stops early only when the run reaches its collection limit or charge limit, or results cannot be saved reliably; entries it did not reach are listed in the run summary.

Does it scrape comments or followers?
No. This Actor focuses on profile posts, reels, and carousel media. The comments column is a count, not the comment text.

Responsible Use

Use this Actor only for lawful purposes and respect Instagram's terms, privacy rights, and applicable data protection laws. Results depend on publicly available data at the time of the run.

Disclaimer

This tool collects publicly available data for research and analysis. You are responsible for ensuring your use complies with Instagram's Terms of Service and all applicable laws.

  • Instagram controls what it publishes publicly and can change it at any time, so the number of posts available for a profile varies and can differ between runs
  • The developers are not responsible for consequences arising from use of this tool, including data loss or legal liability
  • Extracted data should be handled in line with applicable data protection regulations

More Actors

Looking for other Instagram data? Explore more scrapers by futurizerush — comments, followers, hashtags, and user posts.

Instagram scraper, Instagram posts scraper, Instagram reels scraper, Instagram carousel scraper, Instagram analytics, social media monitoring, influencer research, competitor analysis, Apify, Claude Code, OpenClaw, Gemini, Antigravity, Codex, ChatGPT