🔥Instagram Profile Posts Scraper
Pricing
from $0.49 / 1,000 results
🔥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
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_countandplay_countwhen 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_countandview_countwhen available. - Normalizes URL fields: uses
urlas the canonical public media URL (reel/post) and keepsfrom_urlas source profile URL. - Provides crawl metadata: includes
crawled_atin 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
nullor omitted consistently, which helps downstream schema handling.
Need other Instagram data?
Use dedicated Actors for other Instagram data types:
- Fast Instagram Profile Posts Scraper
- Instagram Profile Scraper
- Instagram Profile Tagged Scraper
- Instagram Profile Reels Scraper
How to run it in the Apify Console
- Open the Actor page and click Try for free / Run.
- In Input, paste one or more Instagram profiles (usernames or profile URLs).
- Set how many profile posts to scrape per profile (
postsPerProfile). - 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.
| Field | Type | Description |
|---|---|---|
id | string | number | null | Instagram media ID (id if available, otherwise fallback from pk). |
pk | string | number | null | Instagram media PK (pk if available, otherwise fallback from id). |
shortcode | string (optional) | Shortcode used to build the public URL. |
url | string | null | Public media URL (/reel/{shortcode}/ or /p/{shortcode}/). |
from_url | string | Source profile URL used for this crawl task. |
image | string (optional) | Best-effort cover/thumbnail image URL. |
dimensions | object | null | Media dimensions from dimensions ({width,height}); null when missing. |
is_video | boolean | Media type hint normalized by the actor. |
video_url | string | null | Best playable video URL when available. |
has_audio | boolean | null | Audio flag for video media. |
video_duration | number | null | Video duration in seconds. |
accessibility_caption | string | null | Accessibility caption provided by Instagram. |
caption | string | Post caption text (best effort, may be empty). |
hashtags | string[] | #hashtags extracted from caption. |
mentions | string[] | @mentions extracted from user tags + caption. |
tagged_user | array<object> | Simplified tagged users list. |
comments | array<object> (optional) | Parent comments extracted from post-detail query when available. |
comment_count | number | null | Comment count when available. |
like_count | number | null | Like count when available. |
play_count | number | null | Video play count when available. |
view_count | number | null | Video view count when available. |
taken_at | string | null | Post publish time in UTC ISO-8601 (...Z). |
crawled_at | string | Crawl timestamp in UTC ISO-8601 (...Z). |
location | object | string | null | Media location payload when available. |
product_type | string (optional) | Instagram product type (for example clips). |
clips_music_attribution_info | object (optional) | Music attribution payload for clips/reels. |
owner | object (optional) | Media owner object; includes normalized post_count and followers when source data exists. |
coauthor_producers | array<object> (optional) | Co-author producer accounts when available. |
is_ad | boolean | null | Whether Instagram marks the media as ad content. |
is_affiliate | boolean | null | Affiliate flag when provided by Instagram. |
is_paid_partnership | boolean | null | Paid partnership flag when provided. |
is_published | boolean | null | Publication flag when provided. |
Notes:
optionalfields are omitted when Instagram does not return them.- Counter/time fields may be
nulldepending 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.
