Instagram Reels Scraper⚡ avatar

Instagram Reels Scraper⚡

Pricing

from $1.50 / 1,000 reels

Go to Apify Store
Instagram Reels Scraper⚡

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

Premium Scraper

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a month ago

Last modified

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:

FeatureDescription
👤 Multiple Input ModesFeed usernames, profile URLs, reels-tab URLs, or direct reel links
💬 Comment ExtractionCollect public comments for each reel with configurable limits
⚡ Real-Time StreamingEach reel is pushed to the dataset immediately — no waiting
📊 Progress LoggingComment progress is logged every 50 items (e.g. 50/500 complete 💬)
📦 Structured OutputRich JSON dataset with reel metadata, comments, and status fields
💸 Pay-Per-Event BillingOnly 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 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 US setting 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_count limit 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_count limit 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_details in 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 be false (or omitted) for direct links.

📄 Top-Level Reel Fields

FieldTypeDescription
numberintegerSequential index of the reel in this run (1-based)
profile_urlstringThe source profile or URL provided as input
reel_urlstringThe canonical public reel URL (e.g. https://www.instagram.com/reel/DZN0A4Mgx8-/)
post_urlstringSame as reel_url — included for compatibility
shortcodestringInstagram's unique alphanumeric reel identifier (e.g. DZN0A4Mgx8-)
media_idstringInstagram's internal numeric media ID
post_typestringAlways "video" for reels
reel_typestringAlways "video" for reels
is_pinnedbooleanWhether this reel is pinned on the profile
captionstringThe full caption text of the reel (always present, defaults to "" if empty)
caption_is_editedbooleanWhether the original caption was later edited
caption_dataobjectFull caption metadata including text, user, created_at, media_id, pk, status
like_countintegerTotal public likes on the reel
comment_countintegerTotal comments as reported by Instagram
view_countintegerTotal public view count / play count
play_countintegerSame as view_count (Instagram internal field)
ig_play_countintegerInstagram-specific play count field
share_countintegerTotal public share count (see note below; usually 0 for public profiles)
taken_atintegerUnix epoch timestamp of when the reel was posted
created_atstringISO 8601 UTC timestamp of the reel creation
product_typestringAlways "clips" for Instagram Reels
original_widthintegerOriginal video width in pixels (e.g. 1080)
original_heightintegerOriginal video height in pixels (e.g. 1920)
video_durationintegerDuration of the reel video in seconds
has_audiobooleanWhether the reel has an audio track
is_videobooleanAlways true for reels
is_dash_eligibleintegerWhether DASH adaptive streaming is available (1 = yes)
video_urlobjectAn object {"value": "..."} containing the primary MP4 download URL
video_versionsarrayArray of video quality variants — each has url, width, height, bandwidth, type, id
video_dash_manifeststringMPEG-DASH XML manifest for adaptive streaming
display_urlstringURL of the reel's full cover thumbnail image
display_uristringURL of the reel's cropped/square cover thumbnail
image_versions2objectAll available thumbnail sizes
userobjectCreator profile object — see User Object below
usertagsobjectTagged users in the reel
comments_disabledbooleanWhether the creator has disabled comments on this reel
commenting_disabled_for_viewerbooleanWhether comments are locked for the scraper session
engagement_counts_hiddenbooleanWhether like/view counts are hidden on this post
is_paid_partnershipbooleanWhether the reel is marked as a paid partnership
media_repost_countintegerNumber of public reposts
carousel_media_countintegerAlways 0 for single reels
audio_typestringThe audio type label (e.g. "ORIGINAL_SOUNDS", "LICENSED_MUSIC")
transcriptstringAuto-generated transcript or caption text when available (defaults to "")
music_infoobjectMetadata about the audio track, song title, artist, and license details
audio_reattribution_infoobjectInfo about original audio ownership
strong_idstringFull unified ID code
comment_detailsobjectNested comment data (only present when include_comments = true)

👤 User Object (user field)

The user field contains the reel creator's public profile data:

Sub-fieldTypeDescription
pk / pk_id / idstringInstagram user ID
usernamestringInstagram handle (e.g. "cristiano")
full_namestringDisplay name (e.g. "Cristiano Ronaldo")
is_verifiedbooleanWhether the account has a verification badge
is_privatebooleanWhether the account is private
account_typeintegerAccount type code (3 = creator/business)
profile_pic_urlstring150×150 profile picture URL
hd_profile_pic_urlstringFull-resolution (1080×1080) profile picture URL
hd_profile_pic_versionsarrayProfile picture in multiple sizes (320px, 640px)
fbid_v2stringFacebook cross-linked ID
third_party_downloads_enabledintegerWhether downloads are allowed by the creator

🎬 video_versions Array

Each item in video_versions represents a different quality encode:

FieldDescription
bandwidthBitrate in bits per second
width / heightVideo dimensions in pixels
typeQuality variant code (101, 102, 103...)
urlDirect MP4 download URL

💬 Comment Object Fields (inside all_comments)

FieldTypeDescription
comment_idstringUnique comment identifier (same as pk)
pkstringInstagram internal comment primary key
textstringThe full comment text
created_atintegerUnix epoch timestamp of the comment
like_countintegerNumber of likes on the comment
comment_like_countintegerDuplicate of like_count (Instagram internal)
child_comment_countintegerNumber of replies this comment has on Instagram
is_editedbooleanWhether the comment was edited after posting
is_coveredbooleanWhether the comment is hidden/covered by Instagram
did_report_as_spambooleanWhether this comment was flagged as spam
has_liked_commentbooleanAlways false (scraper has no session)
__typenamestringAlways "XDTCommentDict" for comments
userobjectCommenter'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:

EventCharged When
reelA complete reel row is successfully pushed to the dataset
commentA 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.