Instagram Reels Scraper⚡
Pricing
from $1.50 / 1,000 reels
Instagram Reels Scraper⚡
Scrape public reels & comments. Collects play counts, views, likes, comment counts, video durations, captions, audio info, comment_details, video_versions & owner details. Fully supports profile URLs, User Names & direct reel links ✨Instagram Reels Scraper⚡
Pricing
from $1.50 / 1,000 reels
Rating
0.0
(0)
Developer
Premium Scraper
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a month ago
Last modified
Categories
Share
🎞️ Instagram Reels Scraper
Instagram Reels Scraper is a powerful, production-grade Apify actor built to extract public Instagram reels and comments at scale — without requiring a login session.
Whether you are a data analyst tracking influencer performance, a brand monitoring campaign engagement, a researcher studying social trends, or a developer integrating Instagram content into an application, the Instagram Reels Scraper delivers structured, clean, and immediate results.
✨ Key Features
The Instagram Reels Scraper offers a rich set of capabilities designed for real-world production use:
| Feature | Description |
|---|---|
| 👤 Multiple Input Modes | Feed usernames, profile URLs, reels-tab URLs, or direct reel links |
| 💬 Comment Extraction | Collect public comments for each reel with configurable limits |
| ⚡ Real-Time Streaming | Each reel is pushed to the dataset immediately — no waiting |
| 📊 Progress Logging | Comment progress is logged every 50 items (e.g. 50/500 complete 💬) |
| 📦 Structured Output | Rich JSON dataset with reel metadata, comments, and status fields |
| 💸 Pay-Per-Event Billing | Only charged for data actually returned — not for empty runs |
📥 Input Configuration
Configure the Instagram Reels Scraper through the Apify Console input form or by passing a JSON input object. All fields are optional — mix and match what you need.
👤 username — Instagram Username(s)
- Type:
string[] - Example:
["cristiano", "nba", "natgeo"] - Pass one or more Instagram usernames. The Instagram Reels Scraper converts them to profile URLs and scrapes the public reels tab automatically.
🔗 instagram_urls — Instagram URLs
- Type:
array of URL objects - Supported formats:
- Profile URL:
https://www.instagram.com/nba/ - Reels tab URL:
https://www.instagram.com/nba/reels/ - Direct reel URL:
https://www.instagram.com/reel/DYFIVfYM4ib/
- Profile URL:
- Profile and reels-tab URLs are paginated. Direct reel URLs are parsed from the public reel page.
🎞️ reels_count — Reels Per Profile
- Type:
integer| Default:10 - The maximum number of reels to collect per profile input. The Instagram Reels Scraper paginates until this limit is met or all available public reels are exhausted.
🌐 proxyCountry — Proxy Country
- Type:
string| Default:US - Choose the residential proxy exit country. Supported options include US, GB, AU, CA, DE, FR, NL, IT, ES, SE, NO, DK, FI, BE, AT, CH, IE, PL, PT, CZ, HU, RO, GR, JP, KR, SG, IN, BR, MX, AR, TR. The
USsetting is recommended for maximum Instagram public availability.
📌 skip_pinned_reels — Skip Pinned Reels
- Type:
boolean| Default:false - Why use this: Pinned reels are highlighted at the top of a profile grid and are often older content. Enabling this allows you to skip them to scan only the latest chronological reels.
- Billing: Skipped pinned reels do not count towards the requested
reels_countlimit and do NOT incur any pay-per-event charges (skipping them is completely free).
🧪 skip_trial_reels — Skip Trial Reels
- Type:
boolean| Default:false - Why use this: Trial reels are a specialized Instagram feature creators use to test content with non-followers temporarily before sharing them with their existing audience. Since these test videos are very rare, keeping this option enabled ensures you only collect permanent public reels.
- Billing: Skipped trial reels do not count towards the requested
reels_countlimit and do NOT incur any pay-per-event charges (skipping them is completely free).
📅 reels_newer_than — Extract Reels Newer Than
- Type:
string (date)| Default:null - Use the date picker to set a lower date bound. The Instagram Reels Scraper will skip any reel created before this date. Leave empty for no date filter.
💬 include_comments — Include Comments
- Type:
boolean| Default:false - Enable this to activate comment collection for each reel. The Instagram Reels Scraper fetches public comments via Instagram's GraphQL comment endpoint and nests them under
comment_detailsin the output. - ⚠️ Important: Comment scraping can take a significant amount of time, especially with higher limits. Please be patient while the scraper completes.
💬 comments_limit — Comments Limit Per Reel
- Type:
integer| Default:20 - The maximum number of public comments to collect per reel. Progress is logged every 50 comments (e.g.
collected 100/500 complete 💬). If fewer comments are available, the output clearly states how many were requested and how many were returned.
📤 Output Structure
Each row in the Apify dataset produced by the Instagram Reels Scraper represents one reel. The output is fully structured JSON based on real Instagram public data. Below is the complete, accurate field reference derived from actual output.
[!WARNING]
⚠️ Direct Reels vs. Profile Reels Differences
Depending on how a reel is scraped, Instagram's public API returns different levels of detail:
- Reels via Profile/Username (scraped from the reels tab): Includes views and play counts (
view_count,play_count,ig_play_count), verify badges, owner details, pinned markers, and internal flags.- Direct Reel Links (scraped directly from a single URL page): Instagram does not publish play counts (
play_count,ig_play_count,view_count) on the public unauthenticated single reel HTML page. These fields are therefore not available and will be pruned from the direct reel output. Pinned status (is_pinned) is also only meaningful on the profile grid and will always befalse(or omitted) for direct links.
📄 Top-Level Reel Fields
| Field | Type | Description |
|---|---|---|
number | integer | Sequential index of the reel in this run (1-based) |
profile_url | string | The source profile or URL provided as input |
reel_url | string | The canonical public reel URL (e.g. https://www.instagram.com/reel/DZN0A4Mgx8-/) |
post_url | string | Same as reel_url — included for compatibility |
shortcode | string | Instagram's unique alphanumeric reel identifier (e.g. DZN0A4Mgx8-) |
media_id | string | Instagram's internal numeric media ID |
post_type | string | Always "video" for reels |
reel_type | string | Always "video" for reels |
is_pinned | boolean | Whether this reel is pinned on the profile |
caption | string | The full caption text of the reel (always present, defaults to "" if empty) |
caption_is_edited | boolean | Whether the original caption was later edited |
caption_data | object | Full caption metadata including text, user, created_at, media_id, pk, status |
like_count | integer | Total public likes on the reel |
comment_count | integer | Total comments as reported by Instagram |
view_count | integer | Total public view count / play count |
play_count | integer | Same as view_count (Instagram internal field) |
ig_play_count | integer | Instagram-specific play count field |
share_count | integer | Total public share count (see note below; usually 0 for public profiles) |
taken_at | integer | Unix epoch timestamp of when the reel was posted |
created_at | string | ISO 8601 UTC timestamp of the reel creation |
product_type | string | Always "clips" for Instagram Reels |
original_width | integer | Original video width in pixels (e.g. 1080) |
original_height | integer | Original video height in pixels (e.g. 1920) |
video_duration | integer | Duration of the reel video in seconds |
has_audio | boolean | Whether the reel has an audio track |
is_video | boolean | Always true for reels |
is_dash_eligible | integer | Whether DASH adaptive streaming is available (1 = yes) |
video_url | object | An object {"value": "..."} containing the primary MP4 download URL |
video_versions | array | Array of video quality variants — each has url, width, height, bandwidth, type, id |
video_dash_manifest | string | MPEG-DASH XML manifest for adaptive streaming |
display_url | string | URL of the reel's full cover thumbnail image |
display_uri | string | URL of the reel's cropped/square cover thumbnail |
image_versions2 | object | All available thumbnail sizes |
user | object | Creator profile object — see User Object below |
usertags | object | Tagged users in the reel |
comments_disabled | boolean | Whether the creator has disabled comments on this reel |
commenting_disabled_for_viewer | boolean | Whether comments are locked for the scraper session |
engagement_counts_hidden | boolean | Whether like/view counts are hidden on this post |
is_paid_partnership | boolean | Whether the reel is marked as a paid partnership |
media_repost_count | integer | Number of public reposts |
carousel_media_count | integer | Always 0 for single reels |
audio_type | string | The audio type label (e.g. "ORIGINAL_SOUNDS", "LICENSED_MUSIC") |
transcript | string | Auto-generated transcript or caption text when available (defaults to "") |
music_info | object | Metadata about the audio track, song title, artist, and license details |
audio_reattribution_info | object | Info about original audio ownership |
strong_id | string | Full unified ID code |
comment_details | object | Nested comment data (only present when include_comments = true) |
👤 User Object (user field)
The user field contains the reel creator's public profile data:
| Sub-field | Type | Description |
|---|---|---|
pk / pk_id / id | string | Instagram user ID |
username | string | Instagram handle (e.g. "cristiano") |
full_name | string | Display name (e.g. "Cristiano Ronaldo") |
is_verified | boolean | Whether the account has a verification badge |
is_private | boolean | Whether the account is private |
account_type | integer | Account type code (3 = creator/business) |
profile_pic_url | string | 150×150 profile picture URL |
hd_profile_pic_url | string | Full-resolution (1080×1080) profile picture URL |
hd_profile_pic_versions | array | Profile picture in multiple sizes (320px, 640px) |
fbid_v2 | string | Facebook cross-linked ID |
third_party_downloads_enabled | integer | Whether downloads are allowed by the creator |
🎬 video_versions Array
Each item in video_versions represents a different quality encode:
| Field | Description |
|---|---|
bandwidth | Bitrate in bits per second |
width / height | Video dimensions in pixels |
type | Quality variant code (101, 102, 103...) |
url | Direct MP4 download URL |
💬 Comment Object Fields (inside all_comments)
| Field | Type | Description |
|---|---|---|
comment_id | string | Unique comment identifier (same as pk) |
pk | string | Instagram internal comment primary key |
text | string | The full comment text |
created_at | integer | Unix epoch timestamp of the comment |
like_count | integer | Number of likes on the comment |
comment_like_count | integer | Duplicate of like_count (Instagram internal) |
child_comment_count | integer | Number of replies this comment has on Instagram |
is_edited | boolean | Whether the comment was edited after posting |
is_covered | boolean | Whether the comment is hidden/covered by Instagram |
did_report_as_spam | boolean | Whether this comment was flagged as spam |
has_liked_comment | boolean | Always false (scraper has no session) |
__typename | string | Always "XDTCommentDict" for comments |
user | object | Commenter's profile — id, username, is_verified, profile_pic_url, fbid_v2 |
💸 Billing Model
The Instagram Reels Scraper uses the Apify PAY_PER_EVENT billing model. You are only charged for data that is actually returned:
| Event | Charged When |
|---|---|
reel | A complete reel row is successfully pushed to the dataset |
comment | A comment is successfully collected and included in output |
You are not charged for:
- Reels skipped due to date filters, pin settings, or trial reel filters
- Proxy retries and failed requests
❓ Frequently Asked Questions
Does the Instagram Reels Scraper require a login?
No. The Instagram Reels Scraper operates entirely on public endpoints. No login credentials are needed or used.
Why do some reels have 0 comments collected even though Instagram shows comments?
Instagram's public API comment endpoint may return fewer comments than the app displays, particularly for private accounts or accounts where comment visibility is restricted. The Instagram Reels Scraper can only access data that Instagram makes publicly available without authentication.
Can I scrape private accounts?
No. The Instagram Reels Scraper only works on public Instagram accounts and publicly visible reels. Private account data is not accessible without authentication, which this actor does not support.
Is this Instagram Reels Scraper compliant with Apify terms?
Yes. The Instagram Reels Scraper scrapes only publicly visible data, uses Apify's residential proxy infrastructure, and is designed for the Apify marketplace in full compliance with Apify's usage policies.
📞 Support
If you encounter an issue with the Instagram Reels Scraper, please open a support request through the Apify Console. Include:
- Your run ID
- A description of the issue
- The log output from the failed run
The Instagram Reels Scraper is actively maintained and updated to keep pace with Instagram's public API changes.
The Instagram Reels Scraper is built for scale, resilience, and professional-grade data collection. Deploy it today for your social media intelligence, market research, and content monitoring needs.