Instagram Reel Scraper
Pricing
from $1.00 / 1,000 listings
Instagram Reel Scraper
Public Instagram reel records for the profile URLs you provide, including caption, likes, comments, plays, video, and account fields.
Pricing
from $1.00 / 1,000 listings
Rating
0.0
(0)
Developer
Farhan Ali
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Reel Scraper creates a structured dataset of public Instagram reels collected from the profile URLs you provide. Each dataset item is one reel and can include play count, like count, comment count, caption, account, video duration, dimensions, cover image, video file, and sound metadata. Query the source with one or more Instagram profile links and set reels_per_user to cap reels per profile. The default is 12 reels per profile. Retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format. The default charge is $0.001 per reel on every plan. The charge event name is listing.
Dataset at a glance
| Property | Value |
|---|---|
| Source | instagram.com |
| Record unit | One public reel |
| Input methods | Instagram profile URLs and a per-profile reel cap |
| Main identifiers | code, url |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, and other Apify dataset exports |
| Update model | Fresh records per Actor run |
| Pricing | Pay per event. listing is $0.001 per reel on every plan |
Coverage and available records
urls is required. Each entry is an Instagram profile link, for example https://www.instagram.com/kimkardashian/. The Actor reads the public reels tab for that username. reels_per_user defaults to 12 and limits how many reels are returned for each profile.
Private profiles are not supported. A reels tab that requires a login does not return reels. The Actor keeps one video version per reel, the first version available. Tagged users, when present, are a list. Sound metadata is either original sound or music info, and either can be null.
The Actor does not accept a single reel URL as the query. It does not return stories, posts that are not reels, or follower lists. It does not keep a historical like or play series. Counts are the values available at run time.
The default proxy is Apify residential.
Data dictionary
Deduplicate on code or url. code is the short id in https://www.instagram.com/reel/{code}/.
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
| code | string | no | Reel shortcode | DKALsFPpIuH |
| url | string | no | Reel URL. Built from code when missing | https://www.instagram.com/reel/DKALsFPpIuH/ |
| play_count | integer | no | Play count. 0 when missing | 12866051 |
| like_count | integer | no | Like count. 0 when missing | 620105 |
| comment_count | integer | no | Comment count. 0 when missing | 8540 |
| taken_at | string | no | Publish time serialized from the source timestamp | 2025-05-23T18:34:52 |
| video_duration | number | no | Duration in seconds. 0 when unknown | 34.933 |
| is_post_live_clips_media | boolean | no | Live-clips flag | false |
| has_audio | boolean | no | Whether the reel has audio | true |
| has_tagged_users | boolean | no | Whether tagged users are present | false |
| original_width | integer | no | Original width in pixels | 1080 |
| original_height | integer | no | Original height in pixels | 1920 |
| display_uri | string | no | Cover image URL. Empty string when missing | Image URL |
| caption | object | yes | { "text": string } | Caption text |
| user | object | no | Account object | See below |
| video_versions | array | no | One video object: url, width, height | First available version |
| clips_metadata | object | yes | music_info and original_sound_info | Original sound or null |
| usertags | array | yes | Tagged user objects, each with a user | null when none |
user fields: username (string, required), full_name (string), is_private (boolean), is_verified (boolean), profile_pic_url (string).
clips_metadata.original_sound_info can include progressive_download_url, duration_in_ms, and ig_artist. Artist objects drop internal id keys. music_info can include music_asset_info (title, cover_artwork_uri, display_artist, duration_in_ms, fast_start_progressive_download_url) and music_consumption_info.
Media URLs are long and time-limited. Treat them as current links, not permanent file storage.
Example dataset record
This reel is from a saved run for https://www.instagram.com/kimkardashian/. Cover, video, and sound download URLs are omitted here because they are long CDN links. The live record includes display_uri, video_versions, and clips_metadata.
{"play_count": 12866051,"taken_at": "2025-05-23T18:34:52","like_count": 620105,"comment_count": 8540,"is_post_live_clips_media": false,"video_duration": 34.933,"code": "DKALsFPpIuH","url": "https://www.instagram.com/reel/DKALsFPpIuH/","has_audio": true,"has_tagged_users": false,"original_width": 1080,"original_height": 1920,"caption": {"text": "Graduating class of 2025"},"user": {"full_name": "Kim Kardashian","is_private": false,"is_verified": true,"username": "kimkardashian"},"usertags": null}
reels_per_user on that run was the profile reel list. The caption text in the saved file also included emoji that are omitted above.
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
| urls | array | yes | none | Instagram profile URLs. Prefill is a JSON list of strings | Profiles whose public reels are collected |
| reels_per_user | integer | no | 12 | Integer | Maximum reels per profile |
| proxyConfiguration | object | no | Apify residential proxy | Apify proxy object | Proxy selection |
Minimal request:
{"urls": ["https://www.instagram.com/kimkardashian/"],"reels_per_user": 5}
Several profiles:
{"urls": ["https://www.instagram.com/kimkardashian/","https://www.instagram.com/instagram/"],"reels_per_user": 12,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Retrieve the data through the API
- Start
datascrapers/instagram-reel-scraperwith the JSON input. - Wait until the run finishes.
- Read items from the run’s default dataset.
- Paginate with
offsetandlimit, or export the dataset.
curl "https://api.apify.com/v2/acts/datascrapers~instagram-reel-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls":["https://www.instagram.com/kimkardashian/"],"reels_per_user":5}'
$curl "https://api.apify.com/v2/datasets/$DATASET_ID/items?clean=true&format=json&token=$APIFY_TOKEN"
Other languages are on the Actor’s API tab: https://apify.com/datascrapers/instagram-reel-scraper
Data quality and record handling
Counts default to 0 when the source omits them, so 0 can mean either a true zero or a missing count. caption is null when the reel has no caption. usertags is null when nobody is tagged. video_versions keeps only the first version.
The Actor does not deduplicate across runs. Use code. Reels from several profiles land in one dataset. There is no username input separate from the URL. A login wall on the reels tab stops that profile.
taken_at is serialized from the source timestamp. Media URLs can expire. Download files during the run if you need to keep the video.
The default proxy is Apify residential. Profiles that fail still allow the rest of urls to continue only when the run itself stays up. A login wall for a profile raises an error for that profile.
Export and pipeline examples
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL or Supabase | Dataset API or a webhook consumer | Upsert reels on code |
| Google Sheets | Apify integration | Track caption, likes, and URL |
| S3 or other cloud storage | Scheduled dataset export | Store JSON. Copy video files separately if the CDN link expires |
| Warehouse | JSON items | Join user.username to other social datasets |
Schedule a separate run per profile when each account should have its own dataset. One run with many urls mixes those profiles in a single dataset. Split downstream on user.username.
Pricing and cost examples
Billing is pay per event. The event name is listing because that is the charge name on this account. One listing event is one reel. The same price applies to Free, Bronze, Silver, Gold, Platinum, and Diamond.
| Event | Price on every plan | When it is charged |
|---|---|---|
| listing | $0.001 | One reel record. This is the primary event |
| Reels | Estimated event cost |
|---|---|
| 1,000 | $1.00 |
| 10,000 | $10.00 |
A run with 10 profiles and reels_per_user 12 charges up to 120 listing events, or $0.12 at the default price, when every profile returns 12 reels. These are the default prices set for this account. They are placeholders and can be changed in the Actor pricing settings. Estimates do not include Apify platform usage, which is billed to the user in addition to event charges.
Limitations and responsible data use
The Actor returns publicly available reel fields for the profile URLs you submit. It does not return private accounts, stories, or a full comment thread. Like, comment, and play counts can be missing or delayed. Media URLs are not a permanent archive.
Each run is a current snapshot. You are responsible for complying with privacy, contractual, and legal requirements for the records you collect and store.
Dataset questions
What does one dataset item represent?
One public Instagram reel from a profile URL in urls.
Which field should I use as a unique identifier?
Use code or url. user.username identifies the account, not the reel.
Are fields nullable or conditional?
Yes. caption, clips_metadata, and usertags can be null. Counts use 0 when the source omits them. Video and image URLs can be empty strings when missing.
Can I retrieve the records as CSV or JSON?
Yes. JSON keeps user, caption, and video_versions nested. Use JSON when you need those objects intact.
How do I paginate large datasets?
Raise reels_per_user and add more profile URLs. Page the dataset afterward with offset and limit.
Does the Actor return historical data?
No. Counts and captions are the values available at run time. It does not return a saved history of deleted reels.
What counts as a billable result?
Each reel charges one listing event at the default price of $0.001. reels_per_user caps the count per profile. Platform usage is separate.
Related datasets from Data Scrapers
- Instagram Post Scraper covers profile posts that are not limited to reels.
- Instagram Comment Scraper covers comment records that can be joined to a post or reel URL.
- Instagram Hashtag Scraper covers posts for a hashtag rather than one profile.
- TikTok Profile Scraper covers TikTok profile records for a cross-platform creator set.
- TikTok Creator Stats covers TikTok creator statistics when the comparison is account-level.
Data Scrapers support
Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.