Instagram Posts/Reels Scraper - No Cookies avatar

Instagram Posts/Reels Scraper - No Cookies

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Instagram Posts/Reels Scraper - No Cookies

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

0.0

(0)

Developer

Q_Alpha

Q_Alpha

Maintained by Community

Actor stats

0

Bookmarked

52

Total users

52

Monthly active users

3 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

  1. Enter a public Instagram username
  2. Choose scrape type: posts (feed content) or reels (short videos)
  3. Set a max items limit (optional, default: 12)
  4. Select output mode: clean or extended (optional, default: clean)
  5. Optionally provide a cursor to resume a previous scrape
  6. The scraper fetches pages of results and returns structured JSON
  7. Paid users receive a final cursor record to resume in future runs

📥 Input Parameters

ParameterTypeRequiredDefaultDescription
usernameString✅ YesPublic Instagram username to scrape (without the @ symbol)
scrape_typeString✅ YespostsEither "posts" (feed content) or "reels" (short-form videos)
max_itemsInteger❌ No12Maximum number of posts or reels to return (minimum: 12)
output_modeString❌ NocleanEither "clean" (essential fields) or "extended" (full metadata)
cursorString❌ NoPagination 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)

FieldTypeDescription
idStringUnique Instagram media ID
shortcodeStringInstagram shortcode (used in post URLs)
urlStringDirect link to the post on Instagram
taken_atIntegerUnix timestamp of when the post was created
scraped_atStringISO 8601 timestamp of when the post was scraped
product_typeStringclips (reels), carousel_container (multi-image), or other
media_typeStringvideo (reel/video), carousel, or image
authorObjectProfile information of the post creator
captionStringPost caption/description text
hashtagsArrayList of hashtags in the caption
mentionsArrayList of @mentioned usernames in the caption
caption_is_editedBooleanWhether the caption has been edited since posting
carousel_media_countIntegerNumber of items in carousel (null if single post)
like_countIntegerTotal number of likes
comment_countIntegerTotal number of comments
play_countIntegerTotal video plays (for reels/videos)
ig_play_countIntegerInstagram platform plays
reshare_countIntegerNumber of times reshared
media_repost_countIntegerNumber of reposts
is_paid_partnershipBooleanWhether the post is a paid partnership/sponsored
can_viewer_reshareBooleanWhether viewers can reshare this post
locationObjectLocation metadata (if tagged)

👤 Author Object

FieldTypeDescription
idStringInstagram user ID of the post creator
usernameStringUsername of the post creator
full_nameStringDisplay name of the post creator
is_verifiedBooleanWhether the account is Instagram verified
is_privateBooleanWhether the account is private
follower_countIntegerNumber of followers at scrape time
account_typeStringAccount type: personal, business, or creator

🎬 Audio Object (Extended Mode)

FieldTypeDescription
titleStringAudio track title (if applicable)
artistArrayArtist name(s)
typeStringoriginal_sounds or music library
is_explicitBooleanWhether audio contains explicit content
original_audio_titleStringTitle of original audio track
is_trendingBooleanWhether the audio is trending

📍 Location Object

FieldTypeDescription
nameStringLocation name
short_nameStringAbbreviated location name
addressStringFull address (if available)
cityStringCity name
latFloatLatitude coordinate
lngFloatLongitude coordinate
external_sourceStringSource (typically facebook_places)
has_viewer_savedBooleanWhether 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:

  1. Run the scraper and note the cursor value from the final record
  2. Start a new run with the same username and your target scrape_type
  3. Paste the cursor in the Resume Cursor field
  4. 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

FeatureFreePaid
Max items per run~12Up to max_items
Output modesCleanClean + Extended
Cursor returned
Resume support
Video URLs & metadataLimitedFull

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_items defaults to 12 if not provided; free tier is capped at ~12 items
  • Pagination is handled automatically — set max_items higher to fetch more

Data Integrity

  • play_count reflects video views; may be null for image-only posts
  • location is null if not tagged on the post
  • carousel_media_count is 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

  1. Enter username: Type a public Instagram username (e.g., qoqsik1)
  2. Choose scrape type: Select posts for feed content or reels for short videos
  3. Set max items: Enter your desired limit (default: 12)
  4. Pick output mode: Choose clean (recommended) or extended
  5. Run: Click start and wait for the dataset
  6. 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!