Instagram Reels Scraper: Likes, Views, Comments & Followers avatar

Instagram Reels Scraper: Likes, Views, Comments & Followers

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Instagram Reels Scraper: Likes, Views, Comments & Followers

Instagram Reels Scraper: Likes, Views, Comments & Followers

Scrape recent reels from public Instagram profiles to JSON: likes, views, comments, post date and URL per reel, plus follower, following and post counts. Add a date cutoff, or use enrich mode for photo and carousel posts with captions. No login; falls back to residential proxy when blocked.

Pricing

from $0.40 / 1,000 results

Rating

0.0

(0)

Developer

TicTech

TicTech

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 days ago

Last modified

Features

Limited permissions

Share

Scrape recent reels from public Instagram profile URLs into JSON: like, view/play and comment counts, shortcode and URL per reel, plus one profile row with follower, following and post counts. Bulk profile lists, no login. Blocked profiles are retried automatically on a fallback route.

What you put in: public profile URLs (e.g. https://www.instagram.com/ksi/). Direct /p/ and /reel/ URLs also work. No hashtag, place, or keyword search input — this Actor is for known profiles and posts.

Note: Only public profiles and posts. If a URL returns nothing (removed/renamed account, private account, login wall) you get one uncharged status row (media_type: "error") with the reason, and the run still completes.

Why Use This Tool?

  • Automate Instagram reporting: Replace manual screenshots with structured data.
  • Bulk creator lists: Run dozens of profile URLs in a single Apify job.
  • Profile + content together: Each profile URL scrapes profile metadata once (followers, following, post count) even when there are no new reels/posts in your date window.
  • Stack-friendly output: Snake_case JSON for Sheets, warehouses, n8n/Make, or internal APIs.
  • Lean by design: HTTP + TLS impersonation — no heavy browser farm; Apify Proxy handles anti-block.

Why Choose This Actor?

  • Reels-focused: recent reels per profile with like, view/play and comment counts
  • Always-on profile row: media_type: "profile" so account metrics stay updated
  • Date filter (until): Keep only content newer than a date for monthly monitoring
  • Soft-fail per URL: One blocked profile does not kill the bulk run, and you see why in a status row
  • Apify-native: Console, schedules, webhooks, API, Make, n8n, Zapier
  • PPE pricing: Predictable start + per-result billing

Features

  • Scrape Instagram profile URLs and direct post/reel URLs
  • Bulk start_urls in one run (deduped within a run, including after platform restarts)
  • Profile metadata scraped once per profile (followers, following, posts count, handle, display name)
  • Reel fields: shortcode, URL, likes, views/plays, comments, posted_at (from the media ID), author, handle, product type; caption when it appears in the profile grid. posted_at is filled for every reel; enrich_details: true adds the exact taken_at time, all captions, and photo/carousel posts with their counts
  • Optional until date filter (ISO / YYYY-MM-DD)
  • Apify Proxy by default with an automatic fallback: a blocked profile is retried on a fallback route, and after 2 blocks in a row the rest of the run uses that route; custom proxyUrls OK
  • enrich_details off by default — skips per-post page fetches; reels already carry likes/views/comments
  • Dataset export: JSON, CSV, Excel

Use Cases

  • Brand & competitor monitoring on Instagram
  • Influencer outreach — follower counts + recent reel performance
  • Agency dashboards — scheduled Apify runs into Sheets / Looker
  • Content archives for captions, URLs, and engagement history
  • E‑commerce / DTC social proof and creator tracking

Input Example

{
"start_urls": [
"https://www.instagram.com/ksi/",
"https://www.instagram.com/reel/DdKDOY9iWFc/"
],
"max_items": 100,
"until": "2026-09-01",
"enrich_details": false,
"useResidential": false,
"proxyConfiguration": {
"useApifyProxy": true
}
}
FieldWhat it does
start_urlsProfile and/or /p/ · /reel/ URLs (required)
max_itemsCap on dataset items (default 20; 0 = safe ceiling 5000). Free-tier tip: keep ≤ 100
untilOptional — keep reels/posts newer than this date (works without enrich_details; dates come from the media ID)
enrich_detailsOptional — fetch each post/reel page for exact date, caption, and grid photo/carousel posts with counts (default false)
emit_status_rowsDefault true — one uncharged media_type: "error" row per URL that returns nothing, with the reason
useResidentialDefault false — not needed for blocks: if a profile is blocked, it is retried on a fallback (residential) route, and after 2 blocks in a row the rest of the run uses that route. Set true to use it from the start for every profile
proxyConfigurationDefault Apify Proxy with the automatic fallback. Custom proxyUrls OK (no automatic fallback)

Output Examples

Profile metadata (one row per profile URL):

{
"id": "1234567890",
"media_type": "profile",
"platform": "instagram",
"handle": "ksi",
"author": "KSI",
"url": "https://www.instagram.com/ksi/",
"follower_count": 9500000,
"following_count": 400,
"posts_count": 1200
}

Reel / post metadata:

{
"url": "https://www.instagram.com/reel/DdKDOY9iWFc/",
"caption": null,
"posted_at": "2026-09-18T11:02:41Z",
"posted_at_source": "media_id",
"like_count": 29372,
"view_count": 1325401,
"play_count": 1325401,
"comment_count": 144,
"author": "ksi",
"handle": "ksi",
"media_type": "reel",
"platform": "instagram"
}

Status row (not charged) for a URL with no data:

{
"media_type": "error",
"input_url": "https://www.instagram.com/some.removed.account/",
"handle": "some.removed.account",
"error": "not_found",
"error_message": "Profile/post not available (removed, renamed, deactivated or never existed).",
"charged": false
}

Output field notes

FieldMeaning
media_typeprofile for the account row, reel for reels, image / carousel / video for grid posts (with enrich_details), error for uncharged status rows
product_typeInstagram's own product label for the post when exposed (e.g. clips for reels)
view_count / play_countVideo/reel views or plays as exposed by Instagram; null for photos or when not shown
posted_atFilled for every reel. posted_at_source is media_id (upload time from the Instagram media ID, usually within minutes) or taken_at (exact, with enrich_details)
captionFilled when the reel also appears in the profile grid; enrich_details fills the rest
share_countAlways null: Instagram does not show share counts to logged-out visitors
follower_countExact count from Instagram's page data. New or inactive accounts can really have 0

How to Run on Apify

  1. Open Instagram Scraper on Apify and click Try for free / Start.
  2. Paste public Instagram profile or post/reel URLs into start_urls.
  3. Set max_items (≤ 100 on free tier). Optionally set until.
  4. Keep Apify Proxy on. If a profile is blocked, the Actor retries it on a fallback route, and after 2 blocks in a row the rest of the run uses that route. Rotate/backoff is automatic on HTTP 429.
  5. Run and download the Dataset — profile row first, then reels, per profile. Check the run's status message for URLs with no data.
  6. Wire to schedules, webhooks, or Make / n8n / Zapier for recurring brand scrapes.

Run from your stack (API sketch)

curl -X POST "https://api.apify.com/v2/acts/tictechid~vanzi-instagram-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"start_urls":["https://www.instagram.com/ksi/"],"max_items":50,"proxyConfiguration":{"useApifyProxy":true}}'

Use the Actor id with a ~ in API paths: tictechid~vanzi-instagram-scraper.

Pricing

Pay-per-event (PPE):

  • actor-start — once per run
  • result — once per dataset item with data (including profile rows). Status rows (media_type: "error") and rows without any data are not charged. A run restarted by the platform is not charged a second start fee or for rows it already delivered

Current list price: $0.40 per 1,000 results plus $0.0005 per run start. Check Pricing on the Actor page for the live price.

Usage Limits

  • Free tier: Run as often as you like within your monthly Apify free platform credit — there is no Actor-side run-count cap. Tip: free tier max items per run ≤ 100.
  • Paid plans: Larger runs and higher volume, limited only by your Apify plan's credit and concurrency.

Need more credit or concurrency? See Apify Pricing.

FAQ

Do I need an Instagram login? No — public HTML only.

Do I need a residential proxy? No setting needed. If Instagram blocks a profile, the Actor retries it on a fallback (residential) route. After 2 blocks in a row, the rest of the run uses that route directly. If there is still nothing, you get a status row with the reason and the run finishes SUCCEEDED. Set useResidential to use the fallback route from the start. Custom proxyUrls are also supported.

Why was my run expensive? Per-post page fetches only happen with enrich_details: true, and until no longer needs them. Keep enrich_details off for routine monitoring.

What if there are no new reels this month? You still get the profile metadata row so follower/post counts update.

Empty dataset or missing profiles? Look at the status rows (media_type: "error") or FAILED_TARGETS in the run's key-value store. not_found means Instagram shows its "page isn't available" page for that handle (removed, renamed or deactivated: check the handle). blocked means a login wall or rate limit, so retry later. One bad URL won't fail the whole bulk run.

Why do some profiles show 0 followers? That is the number Instagram itself shows for that account (new or inactive accounts), not a parse error.

Support: Open an Issue on the Actor page or email contact@tictech.id.


For more details, contact the maintainer or email us at contact@tictech.id