Pricing
from $1.50 / 1,000 results
Instagram Posts/Reels Scraper - No Cookies
The Instagram Posts & Reels Scraper extracts posts, reels, and carousel media from any public instagram profile โ no login or cookies required. Simply provide a username, select your scrape type, and receive clean, structured JSON data for every post or reel.
Pricing
from $1.50 / 1,000 results
Rating
5.0
(1)
Developer
Actor stats
6
Bookmarked
757
Total users
183
Monthly active users
25 days
Issues response
18 days ago
Last modified
Categories
Share
Instagram Posts & Reels Scraper
๐ Overview
The Instagram Posts & Reels Scraper extracts posts, reels, and carousel media from any public Instagram profile โ no login or cookies required. Simply provide a username, select your scrape type, and receive clean, structured JSON data for every post or reel.
๐ Features
- No authentication required โ works with public profiles only โ
- Flexible scraping โ extract posts (feed content) or reels (short-form videos)
- Rich metadata โ captures captions, engagement metrics, location data, and more
- Carousel support โ handles multi-image and multi-video posts
- Pagination โ scrape hundreds or thousands of items
- Resume capability โ use cursor to continue from where you left off (paid users)
- Two output modes โ clean (essential fields) or extended (full details)
- Free tier available โ try before you subscribe
๐ง How It Works
- Enter a public Instagram username
- Choose scrape type:
posts(feed content) orreels(short videos) - Set a max items limit (optional, default: 12)
- Select output mode:
cleanorextended(optional, default: clean) - Optionally provide a cursor to resume a previous scrape
- The scraper fetches pages of results and returns structured JSON
- Paid users receive a final cursor record to resume in future runs
๐ฅ Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
username | String | โ Yes | โ | Public Instagram username to scrape (without the @ symbol) |
scrape_type | String | โ Yes | posts | Either "posts" (feed content) or "reels" (short-form videos) |
max_items | Integer | โ No | 12 | Maximum number of posts or reels to return (minimum: 12) |
output_mode | String | โ No | clean | Either "clean" (essential fields) or "extended" (full metadata) |
cursor | String | โ No | โ | Pagination cursor from a previous run to resume scraping from that point |
Example Input
{"username":"qoqsik1","scrape_type":"reels","max_items":50,"output_mode":"clean"}
๐ค Output Data Structure
Each item in the dataset represents one post or reel from the target profile.
๐ค Common Fields (Both Clean & Extended)
| Field | Type | Description |
|---|---|---|
id | String | Unique Instagram media ID |
shortcode | String | Instagram shortcode (used in post URLs) |
url | String | Direct link to the post on Instagram |
taken_at | Integer | Unix timestamp of when the post was created |
scraped_at | String | ISO 8601 timestamp of when the post was scraped |
product_type | String | clips (reels), carousel_container (multi-image), or other |
media_type | String | video (reel/video), carousel, or image |
author | Object | Profile information of the post creator |
caption | String | Post caption/description text |
hashtags | Array | List of hashtags in the caption |
mentions | Array | List of @mentioned usernames in the caption |
caption_is_edited | Boolean | Whether the caption has been edited since posting |
carousel_media_count | Integer | Number of items in carousel (null if single post) |
like_count | Integer | Total number of likes |
comment_count | Integer | Total number of comments |
play_count | Integer | Total video plays (for reels/videos) |
ig_play_count | Integer | Instagram platform plays |
reshare_count | Integer | Number of times reshared |
media_repost_count | Integer | Number of reposts |
is_paid_partnership | Boolean | Whether the post is a paid partnership/sponsored |
can_viewer_reshare | Boolean | Whether viewers can reshare this post |
location | Object | Location metadata (if tagged) |
๐ค Author Object
| Field | Type | Description |
|---|---|---|
id | String | Instagram user ID of the post creator |
username | String | Username of the post creator |
full_name | String | Display name of the post creator |
is_verified | Boolean | Whether the account is Instagram verified |
is_private | Boolean | Whether the account is private |
follower_count | Integer | Number of followers at scrape time |
account_type | String | Account type: personal, business, or creator |
๐ฌ Audio Object (Extended Mode)
| Field | Type | Description |
|---|---|---|
title | String | Audio track title (if applicable) |
artist | Array | Artist name(s) |
type | String | original_sounds or music library |
is_explicit | Boolean | Whether audio contains explicit content |
original_audio_title | String | Title of original audio track |
is_trending | Boolean | Whether the audio is trending |
๐ Location Object
| Field | Type | Description |
|---|---|---|
name | String | Location name |
short_name | String | Abbreviated location name |
address | String | Full address (if available) |
city | String | City name |
lat | Float | Latitude coordinate |
lng | Float | Longitude coordinate |
external_source | String | Source (typically facebook_places) |
has_viewer_saved | Boolean | Whether viewer has saved this location |
๐ฆ Example Output Item (Clean Mode)
{"id":"3857585607866680160","shortcode":"DWI5awHjYNg","url":"https://www.instagram.com/reel/DWI5awHjYNg/","taken_at":1774080143,"scraped_at":"2026-04-11T18:08:40.784130+00:00","product_type":"clips","media_type":"video","author":{"id":"56114511320","username":"qoqsik1","full_name":"Oksana S","is_verified":true,"is_private":false,"follower_count":2759534,"account_type":"business"},"caption":"Language barrier is super funny sometimes ๐น","hashtags":[],"mentions":[],"caption_is_edited":false,"carousel_media_count":null,"like_count":265642,"comment_count":1037,"play_count":9279118,"ig_play_count":9279118,"reshare_count":20970,"media_repost_count":2576,"is_paid_partnership":false,"can_viewer_reshare":true,"location":{"name":"Warsaw, Poland","short_name":"Warsaw","lat":52.25,"lng":21,"address":"","city":"","external_source":"facebook_places","has_viewer_saved":false}}
๐ฆ Example Output Item (Extended Mode)
{"id":"3857585607866680160","shortcode":"DWI5awHjYNg","url":"https://www.instagram.com/reel/DWI5awHjYNg/","taken_at":1774080143,"scraped_at":"2026-04-11T18:08:40.784130+00:00","product_type":"clips","media_type":"video","author":{"id":"56114511320","username":"qoqsik1","full_name":"Oksana S","is_verified":true,"is_private":false,"follower_count":2759534,"account_type":"business"},"caption":"Language barrier is super funny sometimes ๐น","hashtags":[],"mentions":[],"caption_is_edited":false,"carousel_media_count":null,"like_count":265642,"comment_count":1037,"play_count":9279118,"ig_play_count":9279118,"fb_play_count":null,"fb_comment_count":null,"reshare_count":20970,"media_repost_count":2576,"like_and_view_counts_disabled":false,"share_count_disabled":false,"video_url":"https://scontent-lax3-1.cdninstagram.com/o1/v/t16/f2/m69/...","thumbnail_url":"https://scontent-lax7-1.cdninstagram.com/v/t51.82787-15/...","duration_seconds":15.23,"original_width":720,"original_height":1280,"has_audio":true,"audio":{"title":null,"artist":[],"type":"original_sounds","is_explicit":false,"original_audio_title":"Original audio","is_trending":null},"is_paid_partnership":false,"commerciality_status":null,"can_viewer_reshare":true,"location":{"name":"Warsaw, Poland","short_name":"Warsaw","address":"","city":"","external_source":"facebook_places","lat":52.25,"lng":21,"has_viewer_saved":false},"usertags":null,"coauthor_producers":[]}
๐ Final Cursor Record (paid users only)
The last record in the dataset contains pagination metadata:
{"cursor":"QVFCNkNFMEF0U3dtbjkxRDhwNi1ibFlNWHE3bEVpaUI3YlVwdXZNb1Y5Ul9hZHM3aDdDVUdsSldkNHEybXhFa1U2SjZQdzFvVHJmeUxvSURJRnVUb3FYZA==","total_scraped":12}
Use this cursor in a future run to resume from where you left off.
๐ Resuming a Scrape
Paid users can resume an interrupted scrape by pasting the cursor from the final dataset record:
- Run the scraper and note the
cursorvalue from the final record - Start a new run with the same username and your target
scrape_type - Paste the cursor in the Resume Cursor field
- The scraper will continue from that exact point
Example: If you scraped 50 reels but want 200 total, run again with max_items: 200 and the cursor from your first run.
๐ณ Free vs Paid
| Feature | Free | Paid |
|---|---|---|
| Max items per run | ~12 | Up to max_items |
| Output modes | Clean | Clean + Extended |
| Cursor returned | โ | โ |
| Resume support | โ | โ |
| Video URLs & metadata | Limited | Full |
Free users will see the message:
๐ Upgrade your subscription to scrape more posts/reels.
โ๏ธ Notes & Limitations
Scope
- Only public profiles can be scraped โ private accounts cannot be accessed
- Scrapes only publicly visible content โ no private stories or restricted posts
Performance
- The Actor will retry failed requests up to 3 times automatically
max_itemsdefaults to12if not provided; free tier is capped at ~12 items- Pagination is handled automatically โ set
max_itemshigher to fetch more
Data Integrity
play_countreflects video views; may be null for image-only postslocationis null if not tagged on the postcarousel_media_countis null for single-image or single-video posts- Deleted or restricted posts may be skipped during scraping
Scrape Type Differences
Posts (posts)
- Returns carousel posts (multi-image), static images, and regular videos from the feed
- Includes all engagement metrics
- Suitable for content analysis and archival
Reels (reels)
- Returns short-form vertical videos (Instagram Reels)
- Includes video duration, resolution, and audio metadata
- Suitable for trend analysis and content strategy
๐ง Use Cases
- Content auditing โ analyze historical posts and performance trends
- Influencer profiling โ research creator content strategy and engagement patterns
- Competitor analysis โ monitor competitor post frequency and messaging
- Content research โ discover trending topics, hashtags, and formats
- Data archival โ backup public Instagram content for reference
- Audience insights โ understand content performance across different post types
- Engagement benchmarking โ compare your posts against industry standards
๐ก SEO Keywords
- Instagram Posts Scraper
- Instagram Reels Extractor
- Scrape Instagram Feed
- Instagram Content Analyzer
- Instagram Data Extraction API
- No-Login Instagram Scraper
- Instagram JSON Export
- Reel Downloader
- Instagram Analytics Tool
๐ Data & Privacy
This scraper accesses only publicly available data โ content visible to any visitor on Instagram's website without authentication. The developer assumes no liability for misuse or violation of Instagram's Terms of Service.
โ FAQ
Q: Can I scrape private accounts?
A: No. This scraper only works with public profiles. Private account content is not accessible without following and explicit permission.
Q: How many items can I scrape?
A: Free users are limited to ~12 items per run. Paid users can set max_items to any value (performance may vary on very large datasets).
Q: What's the difference between "Clean" and "Extended" mode?
A: Clean mode returns essential fields (captions, likes, comments, author info). Extended mode includes video URLs, all resolutions, full audio metadata, and raw API fields for advanced integrations.
Q: Can I get video downloads?
A: Extended mode provides video_url fields that point directly to Instagram's CDN. These are public, temporary links. Use them programmatically to download, but respect copyright and Instagram's ToS.
Q: How do I resume a scrape?
A: Copy the cursor value from the final record of your previous run and paste it into the Resume Cursor field. This is a paid feature only.
Q: Why are some fields null?
A: Fields may be null if not applicable to that post type (e.g., play_count for image posts, location if not tagged, carousel_media_count for single media).
Q: What if Instagram rate-limits me?
A: The scraper retries automatically up to 3 times. Very large scrapes may need to be split into multiple runs with cursor-based resumption.
๐ Getting Started
- Enter username: Type a public Instagram username (e.g.,
qoqsik1) - Choose scrape type: Select
postsfor feed content orreelsfor short videos - Set max items: Enter your desired limit (default: 12)
- Pick output mode: Choose
clean(recommended) orextended - Run: Click start and wait for the dataset
- Export: Download as JSON, CSV, or integrate via API
๐ง Support & Feedback
For issues, feature requests, or feedback, contact support or use the feedback form. Your input helps improve the scraper!
๐ Start scraping Instagram posts and reels โ fast, clean, structured data without cookies!
