

Extract public Reel data in bulk using Instagram URLs, including creator usernames, captions, hashtags, comment counts, like counts, views, play counts, engagement metrics, and more. Supports data export, API access, and third-party integrations.
Scrape Instagram Reels — and optional regular Posts — from any public profile URL into clean, structured records with inclusive UTC start-date filtering, deduplication, and streaming output.
The scraper returns one record per Reel (or Post). Every successful record carries content_type set to Reels or Posts.
| Field | Type | Description |
|---|---|---|
url | link | Canonical Instagram media URL (/reel/<shortcode>/ for Reels, /p/<shortcode>/ for Posts) |
content_type | string | Reels or Posts |
owner | object | Author account details (see below) |
description | string | Media caption text |
hashtags | array | Hashtags extracted from the caption |
num_comments | number | Comment count |
date_posted | number | Instagram publish timestamp (Unix seconds) |
likes_count | number | Like count |
video_play_count | number | Video play / view count from the first available Instagram counter |
top_comments | object | First preview comment when available (see below) |
post_id | string | Instagram media primary key (PK) |
thumbnail | image | Primary media thumbnail URL |
shortcode | string | Instagram media shortcode |
content_id | string | Compatibility content identifier (same as shortcode) |
product_type | string | Instagram product type (e.g.clips, feed) |
coauthor_producers | array | Co-author records returned by Instagram |
tagged_users | array | Users tagged in the media (see below) |
duration | string | Primary video duration when available |
video_url | link | Primary video URL |
audio_url | link | Instagram audio page URL when an audio asset is exposed |
media | array | Normalized image and video items in the post (see below) |
alt_text | string | Media accessibility text |
photos_number | number | Number of image items |
dimensions_height | number | Primary media height |
dimensions_width | number | Primary media width |
is_paid_partnership | boolean | Whether the media is a paid partnership |
error | string | Error message — only on terminal failure rows |
error_code | string | Machine-readable error code — only on terminal failure rows |
owner object fields: id, username, full_name, profile_url, profile_picture, is_verified, is_private, followers_count, following_count, posts_count. Profile-level counters (followers_count, following_count, posts_count) are filled from profile metadata when the media owner matches the requested profile.
top_comments object fields: comments (text), user_commenting (author username), likes_count, profile_picture. Empty object when no preview comment is available.
tagged_users item fields: full_name, id, is_verified, profile_pic_url, username.
media item fields: type (image or video), url, thumbnail, width, height.
hashtags, media, tagged_users, coauthor_producers) always return arrays.top_comments always returns an object.error and error_code.Each task takes one profile URL row with its own options. The url field is an array of rows (requestListSource); exactly one row is processed per task.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url | URL | yes | — | Instagram user profile URL, e.g.https://www.instagram.com/nasa/. Post, Reel, hashtag, and Explore URLs are rejected. |
include_posts | Boolean | no | false | When true, collect regular photo and carousel Posts together with Reels. |
max_results | Integer | no | 100 | Maximum combined number of successful Reel and Post records for this profile. Non-positive or invalid values fall back to the default. |
excluded_post_ids | String / Array | no | "" | Instagram media PKs or shortcodes to exclude, separated by commas or new lines, or supplied as an array. |
start_date | String (date) | no | "" | Inclusive UTC start date. Accepts DD/MM/YYYY, MM-DD-YYYY, YYYY-MM-DD, MM/DD/YYYY, and YYYY/MM/DD. |
urlThe profile URL of a public Instagram account. Only http:// and https:// URLs on instagram.com, www.instagram.com, or m.instagram.com are accepted. The path must be a single-segment username — reserved Instagram paths (accounts, direct, explore, p, reel, reels, stories, tv) are rejected. A two-segment path is also accepted when the second segment is reels or tagged (e.g. https://www.instagram.com/nasa/reels/).
✅ Recommended:
❌ Not supported (rejected):
include_postsOff by default, so the run collects Reels only. Set to true to also collect regular Posts (photos and carousels). When enabled, Reel and Post candidates are merged newest-first and deduplicated by media ID; the combined successful output never exceeds max_results.
max_resultsCaps the number of successful records returned for the profile. It is a per-profile cap, not a global cap. Non-positive or non-integer values silently fall back to 100.
✅ Recommended:
excluded_post_idsSkip media you have already collected, identified by Instagram media PK or shortcode. Accepts a comma- or newline-separated string, or a JSON array. Both PK (numeric) and shortcode (e.g. Cabc123XYZ) forms are matched.
"excluded_post_ids": "3421567890123456789,Cabc123XYZ,Cdef456UVW"
start_dateOptional inclusive UTC start date. The boundary covers the entire start calendar day in UTC. When set, media without a valid publish timestamp is excluded, and pagination can stop early once a full page is older than the start date (see Filtering and limits).
Accepted formats (any of these):
| Format | Example |
|---|---|
DD/MM/YYYY | 01/07/2026 |
MM-DD-YYYY | 07-01-2026 |
YYYY-MM-DD | 2026-07-01 |
MM/DD/YYYY | 07/01/2026 |
YYYY/MM/DD | 2026/07/01 |
Each row is one Reel or Post. Below is a sample of the columns you get; see the JSON record for the full field set.
content_type | owner.username | shortcode | likes_count | video_play_count | video_url |
|---|---|---|---|---|---|
| Reels | nasa | Cabc123XYZ | 1284000 | 5210000 | https://...mp4 |
| Posts | nasa | Cdef456UVW | 96210 | — | — |
A single successful Reel record looks like this. Every key is a real output column from the schema; values use placeholder identifiers and reserved domains.
A terminal failure row (emitted when the profile cannot be loaded or nothing matches) keeps the same shape but only carries identity and error fields:
Identity & content type — url is the canonical media URL (/reel/<shortcode>/ for Reels, /p/<shortcode>/ for Posts). content_type is Reels or Posts. post_id is the Instagram media PK; shortcode and content_id both hold the shortcode. product_type is the raw Instagram product type (e.g. clips, feed).
Author (owner) — id, username, full_name, profile_url, profile_picture, is_verified, is_private, followers_count, following_count, posts_count. Profile-level counters are populated from profile metadata when the media owner matches the requested profile.
Caption & discoverability — description is the caption text; hashtags are extracted from it. alt_text is the accessibility caption.
Engagement — num_comments, likes_count, and video_play_count are the counts Instagram exposes. top_comments holds the first preview comment — comments (text), user_commenting (author), likes_count, and profile_picture — or an empty object when none is available.
Media assets — thumbnail is the primary image URL. video_url is the primary video URL. audio_url is the Instagram audio page URL when an audio asset is exposed. duration is the primary video duration. media is the per-item breakdown for carousels and Posts, each item with type (image/video), url, thumbnail, width, and height. photos_number, dimensions_height, and dimensions_width describe the primary media.
People & sponsorship — tagged_users lists tagged accounts (full_name, id, is_verified, profile_pic_url, username). coauthor_producers lists co-author records returned by Instagram. is_paid_partnership flags paid partnerships.
Timing & errors — date_posted is the Instagram publish timestamp in Unix seconds. error and error_code are empty on success and populated only on terminal failure rows.
Capture only Reels published on or after a UTC start date. The boundary includes the full start day.
Skip media already collected in a previous run by passing its PK or shortcode. Both forms are matched, so you can mix them.
start_date boundary is computed in UTC and includes the entire start calendar day.start_date is set, media without a valid publish timestamp is excluded.start_date (so very old profiles do not get walked end-to-end). Old pinned media on the first page does not trigger this early stop.include_posts enabled, Reel and Post candidates are merged newest-first and deduplicated; the combined successful output never exceeds max_results.media/<pk>/info API, so a single endpoint gap does not lose a record.403, 408, 425, 429, 500, 502, 503, 504), or malformed-page failures, with backoff.Can I pass a single Reel or Post URL?
No. The url field accepts only Instagram profile URLs. Single Reel (/reel/...), single Post (/p/...), hashtag, and Explore URLs are rejected.
How many URLs can I process at once?
Each worker task processes exactly one profile URL row. To scrape multiple profiles, submit one task per profile, or schedule repeated runs.
Does max_results cap Reels and Posts separately?
No. max_results is a single combined cap on successful records for the profile. When include_posts is on, Reels and Posts share it after merge and dedup.
Which date formats are accepted?
DD/MM/YYYY, MM-DD-YYYY, YYYY-MM-DD, MM/DD/YYYY, and YYYY/MM/DD. start_date is optional.
What timezone does the date filter use?
UTC. The boundary includes the entire start calendar day in UTC.
Does the scraper download videos or images?
It returns the canonical asset URLs (video_url, thumbnail, and the media array) but does not download the binary files. Use the exported URLs in your own download step.
What happens when a profile is private or blocked?
The scraper emits a single terminal row with error and error_code (for example 403 when Instagram blocks the request) instead of partial data.
Can I use this as a REST API?
Yes. CoreClaw exposes the worker over the OpenAPI v2 REST API. Base URL https://openapi.coreclaw.com, all paths under /api/v2, auth Authorization: Bearer <API_KEY> (legacy api-key header and ?token= query still work). Typical flow: fetch the input schema → POST /api/v2/workers/{workerId}/runs with input under input.parameters.custom (optionally set callback_url) → store data.run_slug → GET /api/v2/worker-runs/{runId} for status → GET /api/v2/worker-runs/{runId}/result for results or /result/export for a download. You can also drive it from AI tools via the CoreClaw MCP server.
Which export formats are supported?
CSV, JSON, JSONL, XLSX, XLS, XML, HTML, and RSS — available through the CoreClaw result export.
Where do I find my API key and pricing?
API access and usage are managed on CoreClaw pricing. See the API docs for full reference.
Found a bug, missing field, or want a new feature? Open an issue in the Core-Claw GitHub organization or contact CoreClaw support.
Explore more popular scrapers from our marketplace
by CoreClaw
Extract public Instagram post data via URLs, including user info, engagement and profile details. One-click CSV/JSON export, batch scraping, no coding needed.
by CoreClaw
Instagram Comment Scraper (by Post URL) extracts comments from Instagram posts and Reels. You can use the scraped comment data for sentiment analysis, audience research, content moderation, and building engagement reports.
by CoreClaw
Enter one or more Reel URLs to extract creator details, hashtags, comments, and engagement metrics from public Instagram Reels, with support for media archiving and structured data output.
by CoreClaw
Collect public Instagram Posts and Reels data in bulk, including captions, engagement metrics, media links, and author information for account analysis, content research, and data analytics.