🔥Instagram Profile Posts Scraper avatar

🔥Instagram Profile Posts Scraper

Pricing

from $0.49 / 1,000 results

Go to Apify Store
🔥Instagram Profile Posts Scraper

🔥Instagram Profile Posts Scraper

Instagram Profile Post Scraper. Post data: hashtags, comment_count, like_count, view_count, shortcode and etc. Scrape Instagram Posts with Ease and Speed

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Instagram Scraper

Instagram Scraper

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

7

Monthly active users

a day ago

Last modified

Share

Instagram Profile Posts Scraper

It is a reimplementation of instagram-scraper/fast-instagram-post-scraper, The goal is to keep a fast, simple scraping flow while returning richer post-level analytics.

Why this rewrite

  • runtime refactor: rewrites the actor in Python for teams that standardize on Python tooling and deployment workflows.
  • Behavior-compatible goal: keeps the same use case (public profile post scraping) and no-login operating model as the original actor.
  • Richer post metrics: collects extended counters such as view_count and play_count when Instagram returns them.
  • Analysis-ready output: normalizes commonly used fields (caption, hashtags, mentions, media metadata, owner info, timestamps) for downstream BI/ETL use.

Output differences vs original actor

Compared with the current public Apify page of the original actor (checked on 2026-03-19), this rewrite focuses on richer and more normalized output data:

  • Adds/keeps richer counters: explicitly includes play_count and view_count when available.
  • Normalizes URL fields: uses url as the canonical public media URL (reel / post) and keeps from_url as source profile URL.
  • Provides crawl metadata: includes crawled_at in UTC ISO-8601 format.
  • Returns richer media/account payloads: includes fields such as tagged_user, owner (with normalized counters), coauthor_producers, clips_music_attribution_info, and monetization flags.
  • Handles missing values explicitly: nullable/optional fields are set to null or omitted consistently, which helps downstream schema handling.

Need other Instagram data?

Use dedicated Actors for other Instagram data types:

How to run it in the Apify Console

  1. Open the Actor page and click Try for free / Run.
  2. In Input, paste one or more Instagram profiles (usernames or profile URLs).
  3. Set how many profile posts to scrape per profile (postsPerProfile).
  4. After the run finishes, open the Dataset to view results and export to JSON / CSV / Excel.

Input parameters

instagramUsernames (required)

Accepts either a plain username:

username

Notes:

  • Empty lines are ignored and inputs are de‑duplicated
  • Invalid URLs are reported in logs (they do not automatically fail the whole run)

postsPerProfile

Maximum number of profile posts to scrape per profile.

  • Minimum: 5
  • Default: 12
  • If a profile has fewer public posts (or Instagram limits access), the actual output will be lower

input json example

{
"instagramUsernames": ["youtube", "google"],
"postsPerProfile": 10
}

What you get

Each profile post (or post represented by url) is stored as one item in the Dataset.

FieldTypeDescription
idstring | number | nullInstagram media ID (id if available, otherwise fallback from pk).
pkstring | number | nullInstagram media PK (pk if available, otherwise fallback from id).
shortcodestring (optional)Shortcode used to build the public URL.
urlstring | nullPublic media URL (/reel/{shortcode}/ or /p/{shortcode}/).
from_urlstringSource profile URL used for this crawl task.
imagestring (optional)Best-effort cover/thumbnail image URL.
dimensionsobject | nullMedia dimensions from dimensions ({width,height}); null when missing.
is_videobooleanMedia type hint normalized by the actor.
video_urlstring | nullBest playable video URL when available.
has_audioboolean | nullAudio flag for video media.
video_durationnumber | nullVideo duration in seconds.
accessibility_captionstring | nullAccessibility caption provided by Instagram.
captionstringPost caption text (best effort, may be empty).
hashtagsstring[]#hashtags extracted from caption.
mentionsstring[]@mentions extracted from user tags + caption.
tagged_userarray<object>Simplified tagged users list.
commentsarray<object> (optional)Parent comments extracted from post-detail query when available.
comment_countnumber | nullComment count when available.
like_countnumber | nullLike count when available.
play_countnumber | nullVideo play count when available.
view_countnumber | nullVideo view count when available.
taken_atstring | nullPost publish time in UTC ISO-8601 (...Z).
crawled_atstringCrawl timestamp in UTC ISO-8601 (...Z).
locationobject | string | nullMedia location payload when available.
product_typestring (optional)Instagram product type (for example clips).
clips_music_attribution_infoobject (optional)Music attribution payload for clips/reels.
ownerobject (optional)Media owner object; includes normalized post_count and followers when source data exists.
coauthor_producersarray<object> (optional)Co-author producer accounts when available.
is_adboolean | nullWhether Instagram marks the media as ad content.
is_affiliateboolean | nullAffiliate flag when provided by Instagram.
is_paid_partnershipboolean | nullPaid partnership flag when provided.
is_publishedboolean | nullPublication flag when provided.

Notes:

  • optional fields are omitted when Instagram does not return them.
  • Counter/time fields may be null depending on post type, visibility, and endpoint response.

Output (Dataset)

Results are stored in the default Dataset (default). Example item (fields may vary slightly depending on Instagram responses):

{
"id": "3847167235685798934",
"pk": "3847167235685798934",
"is_video": true,
"video_url": "https://sconten..oe=69B3232F",
"has_audio": true,
"video_duration": 8.103,
"dimensions": { "width": 640, "height": 1137 },
"accessibility_caption": null,
"hashtags": [],
"mentions": ["@bts.bighitofficial"],
"tagged_user": [
{
"full_name": "BTS official",
"followed_by_viewer": false,
"id": "2274763833",
"is_verified": true,
"profile_pic_url": "https://scontent..4041&_nc_sid=d885a2",
"username": "bts.bighitofficial"
},
{
"full_name": "Google India",
"followed_by_viewer": false,
"id": "8536113897",
"is_verified": true,
"profile_pic_url": "https://scontent-l...c_sid=d885a2",
"username": "googleindia"
},
{
"full_name": "Google Indonesia",
"followed_by_viewer": false,
"id": "44378210506",
"is_verified": true,
"profile_pic_url": "https://scontent-lax7..F9&_nc_sid=d885a2",
"username": "googleindonesia"
},
{
"full_name": "Google en Español",
"followed_by_viewer": false,
"id": "48967006444",
"is_verified": true,
"profile_pic_url": "https://scontent-lax..c_sid=d885a2",
"username": "googleespanol"
},
{
"full_name": "Google Japan / グーグル・ジャパン",
"followed_by_viewer": false,
"id": "45157324866",
"is_verified": true,
"profile_pic_url": "https://scontent-lax7..NTKIIoBAAAA&ccb=7-5&oh=00_Afy7_nxWep6lYlwcDSxLpVuWSSULtqQxWpL92A-kd_F73A&oe=69B34CB7&_nc_sid=d885a2",
"username": "googlejapan"
},
{
"full_name": "Google France",
"followed_by_viewer": false,
"id": "74161638136",
"is_verified": true,
"profile_pic_url": "https://scontent-lax7...id=d885a2",
"username": "googlefrance"
}
],
"caption": "@bts.bighitofficial fans, have you seen what happens when you search “BTS” yet? 👀 Something special is waiting for you.\n\n구글에 “BTS”를 검색하면 어떤 일이 일어나는 지 알고 계시나요? 👀 특별한 경험이 기다리고 있습니다!\n\nBTS ファンの皆さん、Google で「BTS」と検索すると何が起きるか、もうチェックしましたか?👀 今なら、とっておきのサプライズが待っていますよ!",
"comment_count": 5550,
"like_count": 261079,
"play_count": 6338210,
"view_count": 1897124,
"taken_at": "2026-03-06T23:04:38Z",
"is_ad": false,
"is_affiliate": false,
"is_paid_partnership": false,
"is_published": true,
"location": null,
"from_url": "https://www.instagram.com/google/reels/",
"url": "https://www.instagram.com/reel/DVj4je6ktQW/",
"crawled_at": "2026-03-08T12:33:04.461569Z",
"comments": [
{
"id": "...",
"text": "...",
"created_at": 1529249418,
"did_report_as_spam": false,
"owner": {
"id": "...",
"is_verified": false,
"profile_pic_url": "https://scont...",
"username": ".."
},
"viewer_has_liked": false,
"like_count": 0,
"is_restricted_pending": false
}
],
"image": "https://scontent-lax..c_sid=d885a2",
"shortcode": "DVj4je6ktQW",
"product_type": "clips",
"clips_music_attribution_info": {
"artist_name": "google",
"song_name": "Original audio",
"uses_original_audio": true,
"should_mute_audio": false,
"should_mute_audio_reason": "",
"audio_id": "33977498751893623"
},
"owner": {
"id": "1067259270",
"username": "google",
"is_verified": true,
"profile_pic_url": "https://sconte..9B33AE9&_nc_sid=d885a2",
"blocked_by_viewer": false,
"restricted_by_viewer": null,
"followed_by_viewer": false,
"full_name": "Google",
"has_blocked_viewer": false,
"is_embeds_disabled": false,
"is_private": false,
"is_unpublished": false,
"requested_by_viewer": false,
"pass_tiering_recommendation": true,
"post_count": 3137,
"followers": 15742809
},
"coauthor_producers": [
{
"id": "8536113897",
"is_verified": true,
"profile_pic_url": "https://scontent-lax7-..._sid=d885a2",
"username": "googleindia"
},
{
"id": "45157324866",
"is_verified": true,
"profile_pic_url": "https://scontent-la..._nc_sid=d885a2",
"username": "googlejapan"
},
{
"id": "48967006444",
"is_verified": true,
"profile_pic_url": "https://scontent-..._nc_sid=d885a2",
"username": "googleespanol"
},
{
"id": "44378210506",
"is_verified": true,
"profile_pic_url": "https://scontent-lax7-...sid=d885a2",
"username": "googleindonesia"
}
]
}

FAQ

1) Why is the Dataset empty / much smaller than expected?

The profile has no public posts, not enough posts, or Instagram is limiting access

2) What does Restricted profile mean?

A profile can be public but still limited for anonymous (no-login) access. Instagram may gate some profile endpoints unless a logged-in session is used. When this happens, the Actor logs the restriction and skips/stops that profile.

3) How does billing work for unavailable profiles?

The Actor uses one unified charge event: restricted_profile. This event is emitted when a profile cannot return posts due to:

  • restricted/no-login access limits,
  • profile not found (dead link / non-existent profile),
  • no posts found for that profile.

Limitations & recommendations

  • Data scope: this Actor is optimized for Reel/post-level data from profile pages. It is not a full profile-metadata scraper.
  • No-login access limits: this Actor runs without an Instagram login by default. Some profile-level fields or endpoints may be unavailable in no-login mode, even for public profiles.
  • Compliance: make sure your usage complies with Instagram’s terms and your local laws, and only collect data you have the right to use.