Instagram Posts & Reels Scraper – No Login Required avatar

Instagram Posts & Reels Scraper – No Login Required

Pricing

from $1.50 / 1,000 result items

Go to Apify Store
Instagram Posts & Reels Scraper – No Login Required

Instagram Posts & Reels Scraper – No Login Required

Scrape public Instagram posts or reels without login. Get JSON with captions, likes, comments, views & profile stats — fast, resumable, no cookies required.

Pricing

from $1.50 / 1,000 result items

Rating

0.0

(0)

Developer

CoderX

CoderX

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Instagram Posts & Reels Scraper

📌 Overview

The Instagram Posts & Reels Scraper is a simple tool for collecting a public Instagram profile plus their recent posts or reels — no login or cookies required. Just provide a username, choose posts or reels, say how many you want, and get back structured JSON.

🚀 Features

  • Works without login or cookies ✅
  • Scrapes both feed posts and reels — your choice per run
  • Returns key profile details (name, followers/following, verification, etc.) alongside the scraped items
  • Resume a previous run exactly where it left off, with no duplicates or gaps (paid)
  • Clean, predictable JSON output every time

🔧 How It Works

  1. Enter an Instagram username.
  2. Choose posts or reels, and how many items you want.
  3. Get the profile info, then each scraped item, streamed to the dataset as structured JSON while the run is still going.
  4. (Optional) Pass the cursor from a previous run's output to continue exactly where it left off.

📥 Input Parameters

ParameterTypeRequiredDescription
usernameStringYesThe Instagram username to scrape.
contentTypeString (posts or reels)YesWhether to scrape feed posts or reels. Default: reels.
quantityIntegerYesMinimum number of items to return. The actual count may be slightly higher than requested. Default: 24.
cursorStringNoResume cursor from a previous run's output, to continue where it left off.

Example Input

{
"username": "instagram",
"contentType": "reels",
"quantity": 24
}

🔐 Usage Limits

PlanRuns per dayItems per runResume cursor
FREE1Up to 12❌ Not included
PaidUnlimited ✅As requested ✅✅ Included

Upgrade to a paid plan to remove the daily run limit, scrape more than 12 items per run, and get a resume cursor to continue exactly where you left off.

📤 Output Data

Items land in the dataset one row at a time as they're scraped, not as one big record at the end — so if a run is ever interrupted, everything already scraped (and, on a paid run, already charged) is still there. Each row has a type field telling you what it is:

typeWhen it's pushedWhat it contains
profileOnce, right after your username resolvesPublic profile details + what was requested
itemOnce per post/reel, as each is scrapedOne post or reel
summaryOnce, at the end of the runTotals, resume cursor, and any warning
errorInstead of the above, if the run couldn't proceed at allA short, safe error message

🧑‍💼 profile Row

A deliberately small, relevant set of profile fields — not the full profile record — plus the run's own settings:

FieldDescription
usernameInstagram handle
fullNameProfile display name
profilePicUrlProfile picture URL
followersCountFollower count
followsCountFollowing count
postsCountTotal posts on the profile (not the number returned by this run)
verifiedWhether the account is verified
privateWhether the account is private
user_idInstagram numeric user ID
content_typeposts or reels, echoing your input
requested_quantityWhat you asked for
quantity_capped_toPresent only if the free-tier cap reduced your requested quantity

🎬 item Rows

Each row is one post or reel, depending on contentType:

FieldDescription
idMedia ID
media_type1 = image, 2 = video/reel, 8 = carousel
product_typee.g. "clips" for reels
codeShortcode used in the post URL (instagram.com/p/<code>/)
captionCaption text
like_countNumber of likes
comments_countNumber of comments
timestampWhen it was posted (Unix epoch seconds)
play_count / ig_play_count / fb_play_countPlay/view counts by source
view_count / content_views_countAdditional view metrics, when available
impressionsBest-available view estimate
reachReach, when available
video_viewsView count for reels
share_count / reshare_count / media_repost_countShare and repost counts
share_count_disabled / like_and_view_counts_disabledWhether those counts are hidden by the creator

🔁 summary Row

FieldDescription
returned_countActual number of items returned
next_cursorResume cursor — pass back as cursor on your next run to continue (paid only)
has_moreWhether more content exists beyond what was returned
warningPresent only if scraping stopped early due to a temporary error, after some items were still collected

📦 Example Output

Three rows from a single run (an item row repeats once per scraped post/reel):

{
"type": "profile",
"username": "instagram",
"fullName": "Instagram",
"followersCount": 686294115,
"followsCount": 155,
"postsCount": 7500,
"verified": true,
"private": false,
"user_id": "25025320",
"content_type": "reels",
"requested_quantity": 24
}
{
"type": "item",
"username": "instagram",
"content_type": "reels",
"id": "3958651149055237302",
"media_type": 2,
"product_type": "clips",
"code": "DLxxxxxxxx",
"caption": "New drop 🔥",
"like_count": 45210,
"comments_count": 812,
"timestamp": 1771528094,
"video_views": 1245000
}
{
"type": "summary",
"username": "instagram",
"user_id": "25025320",
"content_type": "reels",
"returned_count": 24,
"next_cursor": null,
"has_more": true
}

Example error output (private or nonexistent account)

{
"type": "error",
"username": "someprivateaccount",
"error": "Restricted Profile"
}

⚙️ Notes & Limitations

⚠️ Free users get 1 run per day, capped at 12 items per run. Paid users get unlimited runs, full requested quantities, and resumable pagination.

  • Only works with public profiles — private or restricted accounts return an error row, not data.
  • Nonexistent or unreachable profiles return {"type": "error", "error": "Does not exist"} instead of failing the run.
  • Items are written to the dataset one by one as they're scraped, so an interrupted run still keeps everything scraped up to that point.
  • Engagement numbers reflect what's publicly visible and may differ slightly from Instagram's own app in real time.

🧠 Use Cases

  • Influencer and creator research
  • Competitive content benchmarking
  • Reels/posts performance analytics
  • Building social media dashboards

❓ FAQ

Do I need an Instagram login or cookies? No — this scraper only reads publicly visible data.

Can it scrape private accounts? No. A private account returns {"error": "Restricted Profile"} instead of data.

What happens if I request more items than the free plan allows? Your quantity is silently capped at 12; the profile row includes quantity_capped_to so you know it happened.

How do I run it more than once a day? Upgrade to a paid plan — free accounts are limited to one run per day.

How does the resume cursor work? A paid run's summary row includes a next_cursor. Pass that value back as the cursor input on your next run to continue exactly where the previous one left off — no duplicates, no gaps.

Can I scrape posts and reels in the same run? Not in a single run — set contentType to posts or reels and run it twice if you need both.

💡 Keywords

Instagram scraper, Instagram posts scraper, Instagram reels scraper, scrape Instagram without login, Instagram public data extractor, Instagram engagement data, Instagram API alternative


⚠️ Disclaimer

This tool should be used responsibly. It collects only publicly available data that is viewable without logging in — it does not access private accounts or bypass Instagram's authentication. Instagram's terms of service restrict certain scraping practices; the developer is not responsible for misuse.


🚀 Scrape Instagram posts and reels — quickly, safely, and reliably.