Instagram Reel Scraper
Pricing
from $3.51 / 1,000 results
Instagram Reel Scraper
Scrape public Instagram profile posts, reels, IGTV, and carousel media with captions, hashtags, mentions, engagement counts, timestamps, owner details, audio metadata, and optional cloud media downloads.
Pricing
from $3.51 / 1,000 results
Rating
5.0
(2)
Developer
AgentX
Maintained by CommunityActor stats
3
Bookmarked
44
Total users
8
Monthly active users
4 days ago
Last modified
Categories
Share
Instagram Reel Scraper collects up to the requested number of public posts from one bare Instagram username and returns one 62-field Dataset row for each post that is fully resolved. It covers reels, feed images, feed videos, IGTV-style records, and carousels. Counts are processing-time snapshots; source fields can be null, source media URLs can expire, and an accepted request can return fewer rows than max_results.
Use the Actor for bounded content research, account-timeline samples, creative-format analysis, and optional media archival. It combines feed discovery with per-post detail lookup so that every returned row follows the same top-level schema.
- Exactly 62 top-level fields per returned post record
- Captions, extracted hashtags and mentions, owner context, publish time, engagement snapshots, media parts, audio, location, and collaboration signals
- Optional storage of resolved covers and media, with one Media event only for each file successfully stored
- Result billing at the Dataset-row boundary, plus Actor Start and resource-based Actor Usage events
Run one recent post for instagram or call agentx/instagram-reel-scraper through the API or MCP. Always inspect the Dataset count and returned fields before scaling; a terminal successful run does not make unavailable profile history, comments, audio, location, or media files appear.
Why Choose This API
An Instagram post can be a single image, video, reel, older IGTV-style item, image carousel, video carousel, or mixed carousel. The source payloads differ across those formats. This Actor projects them into one record with a normalized post_type, a media_items array, consistent owner fields, source counts, and processing provenance.
The input is intentionally narrow: one bare username and a maximum result count. The Actor discovers posts from that account’s public feed, removes repeated media IDs across pages, and stops when the requested count or available feed ends. Each discovered post then needs a readable detail response. A deleted, restricted, blocked, or transiently unavailable post can be skipped, so max_results is an upper bound rather than an output promise.
The July 23, 2026 MCP control run requested one post for instagram with downloads disabled. Build 1.0.8 returned one reel in 29.37 seconds with 62 top-level fields: 86,903 likes, 6,083 comments, one video media item, two tagged users, one coauthor, seven returned comment samples, and a processing timestamp. Play count, view count, location, and the audio metadata group were null, demonstrating why those fields must remain source-dependent.
owner_is_verified and tagged-account verification values are raw Instagram flags. They are not independent identity, ownership, safety, sponsorship, or authenticity checks. Engagement values are snapshots, and comment samples must not be treated as a complete or stable ranking.
Quick Start Guide
Start with one post and keep downloads off while validating the schema:
- Enter one bare username such as
instagram. - Set
max_resultsto1. - Leave
downloaddisabled. - Run the Actor and inspect the default Dataset.
{"username": "instagram","max_results": 1,"download": false}
If the run succeeds with fewer rows than requested, compare the public profile state, run status, and logs. Retry only the missing scope with a small bound. Enabling downloads changes media URL semantics and cost, so test that mode separately with one post before a larger archival job.
Input Parameters
| Field | Type | Required | Validation and runtime behavior |
|---|---|---|---|
username | string | Yes | One bare Instagram username, up to 30 characters; letters, numbers, periods, and underscores only |
max_results | integer | Yes | 1–1,000,000 requested posts; output can be lower when the public feed ends or detail requests fail |
download | boolean | No | Defaults to false in runtime; when true, attempts to store resolved cover and media files |
Do not send @instagram, a profile URL, a post URL, a slash, query, fragment, or whitespace as username. The Actor rejects those formats rather than guessing the intended account.
With download: false, cover_url and nested media_items[].media_url values are source URLs and can expire. With download: true, the Actor attempts to download each resolved cover and media asset and place it in Apify storage. Successfully stored assets replace the corresponding values with stored-file URLs. Failed or unavailable files can become null; only successfully stored files produce Media events. Carousel posts may create multiple file events, and an image’s cover and media URL may resolve to one cached file.
The high schema maximum supports caller-controlled bounds; it is not evidence that one profile exposes that many public posts or that a very large run will complete. Use measured batches when source stability, cost, or freshness matters.
Output Data Schema
Every returned row has 62 top-level keys in a stable order:
| Group | Fields | Meaning |
|---|---|---|
| Identity and owner | post_id, shortcode, post_url, post_type, instagram_product_type, instagram_media_type, owner_id, owner_username, owner_full_name, owner_is_verified, owner_is_private, owner_profile_pic_url | Post and source-account identifiers and flags |
| Caption and time | caption, caption_created_at, caption_is_edited, accessibility_caption, hashtags, mentions, published_at, published_timestamp | Source text, extracted tokens, and timestamps |
| Engagement and media summary | like_count, comment_count, play_count, view_count, like_and_view_counts_disabled, cover_url, media_count, image_count, video_count, is_carousel, has_video, has_audio | Processing-time counts and normalized media indicators |
| Place and relationships | location_id, location_name, location_lat, location_lng, location_address, location_city, tagged_users, coauthors, comments_disabled, can_viewer_save, can_viewer_reshare, is_paid_partnership, sponsor_tags, top_comments | Optional source context and comment samples |
| Audio | audio_type, audio_title, audio_artist, audio_asset_id, audio_canonical_id, audio_duration_ms, audio_cover_url, audio_preview_url, audio_owner_username, audio_is_original, audio_is_reuse_allowed, audio_is_trending, audio_mashups_count | Optional music or original-audio metadata |
| Media parts and provenance | media_items, processor, processed_at | Per-image/video parts plus Actor URL and processing time |
Representative control-run structure, with long source URLs and comment text shortened:
{"post_id": "POLARIS_3946975519354428264","shortcode": "DbGeVKoSJto","post_url": "https://www.instagram.com/reel/DbGeVKoSJto/","post_type": "reel","instagram_product_type": "clips","instagram_media_type": 2,"owner_id": "25025320","owner_username": "instagram","owner_full_name": "Instagram","owner_is_verified": true,"owner_is_private": false,"owner_profile_pic_url": "https://scontent.example/owner.jpg","caption": "From inspo to final take — all from her glasses","caption_created_at": 1784736293,"caption_is_edited": false,"accessibility_caption": "Video by Instagram on July 22, 2026.","hashtags": [],"mentions": ["fujicov", "raybanmeta"],"published_at": "2026-07-22T16:04:53+00:00","published_timestamp": 1784736293,"like_count": 86903,"comment_count": 6083,"play_count": null,"view_count": null,"like_and_view_counts_disabled": false,"cover_url": "https://scontent.example/cover.jpg","media_count": 1,"image_count": 0,"video_count": 1,"is_carousel": false,"has_video": true,"has_audio": true,"location_id": null,"location_name": null,"location_lat": null,"location_lng": null,"location_address": null,"location_city": null,"tagged_users": [{"id": "243085793", "username": "fujicov", "is_verified": false}],"coauthors": [{"id": "52717654846", "username": "raybanmeta", "is_verified": true}],"comments_disabled": null,"can_viewer_save": null,"can_viewer_reshare": null,"is_paid_partnership": null,"sponsor_tags": [],"top_comments": [{"id": "example", "author_username": "viewer", "text": "❤️"}],"audio_type": null,"audio_title": null,"audio_artist": null,"audio_asset_id": null,"audio_canonical_id": null,"audio_duration_ms": null,"audio_cover_url": null,"audio_preview_url": null,"audio_owner_username": null,"audio_is_original": false,"audio_is_reuse_allowed": null,"audio_is_trending": null,"audio_mashups_count": null,"media_items": [{"position": 1, "media_type": "video", "media_url": "https://scontent.example/video.mp4", "has_audio": true}],"processor": "https://apify.com/agentx/instagram-reel-scraper?fpr=aiagentapi","processed_at": "2026-07-23T18:43:05+00:00"}
Nested objects can contain additional documented member fields. Preserve nulls and empty arrays: null means the source did not provide a scalar value, while an empty list means no entries were returned for that collection.
Integration Examples
The Actor ID is agentx/instagram-reel-scraper. Keep the Apify token in an environment secret.
REST request:
$curl -X POST "https://api.apify.com/v2/acts/agentx~instagram-reel-scraper/runs?token=$APIFY_TOKEN&waitForFinish=300" -H "Content-Type: application/json" -d '{"username":"instagram","max_results":1,"download":false}'
Python client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("agentx/instagram-reel-scraper").call(run_input={"username": "instagram", "max_results": 1, "download": False})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
MCP arguments:
{"actor": "agentx/instagram-reel-scraper","input": {"username": "instagram", "max_results": 1, "download": false},"callOptions": {"build": "latest", "memory": 256, "timeout": 600},"waitSecs": 45}
If the call returns before the run reaches a terminal state, poll the run and then fetch the default Dataset. For pipelines, retain the run ID, Dataset ID, username, requested maximum, returned post IDs, processed_at, and download mode. Deduplicate historical exports by a business key such as post ID plus observation time; reruns can create new Result events and fresh count snapshots.
Pricing & Cost Calculator
This Actor uses four event types. Actor Start is $0.01000. Actor Usage is charged in $0.00001 units according to runtime resource consumption. Each returned Dataset row creates one Result event. Each successfully stored file creates one Media event.
| Tier | Result | Media file |
|---|---|---|
| FREE | $0.00390 | $0.01800 |
| BRONZE | $0.00377 | $0.01740 |
| SILVER | $0.00364 | $0.01680 |
| GOLD | $0.00351 | $0.01620 |
| PLATINUM | $0.00351 | $0.01620 |
| DIAMOND | $0.00351 | $0.01620 |
At FREE pricing with downloads disabled, one returned row is approximately $0.01390 plus Actor Usage; 100 returned rows are approximately $0.40000 plus Actor Usage. With downloads enabled, add $0.01800 × successfully stored files at FREE pricing. A one-video post can attempt both a cover and video file, while carousels can attempt several files; failures and duplicate source URLs change the charged file count.
Use the run’s actual charge events for reconciliation. max_results bounds requested posts but does not bound files per carousel. A platform charge cap can stop further paid events and should be tested with one post before relying on it operationally.
Use Cases & Applications
Content analysts can compare format mix, posting time, captions, hashtags, mentions, likes, comments, and available play or view counts across dated snapshots. Count changes do not by themselves explain reach, engagement quality, paid distribution, or campaign impact.
Creative research teams can inspect per-item media structure, dimensions, covers, audio labels, tagged accounts, coauthors, sponsorship flags, and source locations. Optional media storage can support authorized archival, but it increases cost and does not transfer content rights.
Brand-monitoring workflows can sample recent public posts and preserve the source URL, owner, timestamp, post type, and processing time. Comment samples may contain personal data, spam, offensive language, or unstable ordering. Apply moderation, minimization, access controls, and retention rules before downstream use.
AI and data-science pipelines can build caption or format datasets from the stable 62-field contract. Models should not infer protected traits, authenticity, sentiment, sponsorship, or brand safety from isolated source flags, names, images, captions, or comments without separate validation.
FAQ
Does it scrape only reels?
No. The product name emphasizes reels, but the runtime collects public feed posts for one username and normalizes reels, feed images, feed videos, IGTV-style records, and image, video, or mixed carousels.
Does max_results guarantee that many rows?
No. It is a request ceiling. Feed exhaustion, removed or restricted posts, source blocking, and per-post detail failures can reduce the Dataset.
Are play count, view count, audio, location, and comments always available?
No. The control run returned null play/view/audio/location fields even though likes and comments were present. Comment samples and nested values depend on the detail response.
What changes when download is enabled?
The Actor attempts to store resolved cover and media files, replaces successful values with stored-file URLs, and charges one Media event per stored file. Failed assets can be null and do not create Media events.
Are verification and paid-partnership flags independently checked?
No. They are raw source flags. Confirm identity, ownership, sponsorship, and disclosure obligations separately.
Can I pass a profile URL or @handle?
No. Send one bare username. The runtime rejects URLs, @, slashes, queries, fragments, whitespace, unsupported characters, and names longer than 30 characters.
Why did a source URL stop working later?
Instagram CDN links can be temporary. Enable authorized storage when persistence is required, or consume source URLs promptly while respecting platform and content rights.
Trust & Certifications
The evidence boundary is explicit: the public Dataset schema matches the 60-field formatter plus processor and processed_at, the three inputs match runtime validation, and Result and Media billing occurs at the actual push and successful-file boundaries. The published example and nullable disclosures are grounded in a real MCP run and Dataset readback.
The Actor does not certify accounts, creators, brands, ownership, audience quality, engagement, comments, locations, sponsorships, music rights, or media rights. It does not promise full history, stable URLs, complete comments, uninterrupted source access, or a specific result count. Important decisions require current source review and independent checks.
Legal & Compliance
Review the current Instagram Terms of Use, Meta Privacy Policy, applicable intellectual-property rights, privacy laws, platform rules, and contractual restrictions before collecting, storing, or reusing data. Public visibility does not automatically authorize unrestricted copying, model training, publication, or outreach.
Collect only the fields and media needed for a documented purpose. Apply access controls, secure retention, deletion procedures, moderation for user comments, and special care around names, profile images, locations, tagged users, and coauthors. Do not bypass access controls or attempt to collect private content.
Media, captions, music, trademarks, and user comments can carry third-party rights. Optional download is a technical storage feature, not a license. Obtain qualified legal review for regulated, high-volume, cross-border, or commercial reuse.
Related Tools
Related Instagram and social research:
Optional enrichment and media workflows:
Each Actor has its own input, schema, pricing, and source limits. Validate identity and timestamps before joining records across platforms.
Support & Community
For reproducible support, include the Actor name, run ID, Dataset ID, UTC time, non-secret input, requested and returned counts, post ID or shortcode, download mode, and the exact missing or unexpected field. Never post API tokens, proxy credentials, stored personal data, or copyrighted media files in a public ticket.
Open Instagram Reel Scraper or contact AiAgentApi support.
Last updated: July 23, 2026.