Instagram Post Likers Scraper — Who Liked Any Public Post avatar

Instagram Post Likers Scraper — Who Liked Any Public Post

Pricing

from $0.40 / 1,000 likers

Go to Apify Store
Instagram Post Likers Scraper — Who Liked Any Public Post

Instagram Post Likers Scraper — Who Liked Any Public Post

Scrape the accounts that liked an Instagram post or reel — username, full name, user id, profile link, picture, verified and private flags. Paste links, codes or media ids. No login. About 1,000 likers per post per read, ~2,000 at most. Re-runs never charge a liker twice. From $0.40 per 1,000.

Pricing

from $0.40 / 1,000 likers

Rating

0.0

(0)

Developer

Steadyfetch Team

Steadyfetch Team

Maintained by Community

Actor stats

0

Bookmarked

32

Total users

19

Monthly active users

3 days ago

Last modified

Share

Instagram Post Likers Scraper: paste a post or reel link and get the accounts that liked it — handle, full name, user id, profile link, picture, and the verified and private flags. No login, no cookies, no proxy to set up, nothing charged for starting a run, and a liker we could not deliver is never charged.

Using an AI agent? Pin this actor in Apify's MCP server with one link: https://mcp.apify.com?tools=steadyfetch/instagram-post-likers-scraper

  • Actor id: steadyfetch/instagram-post-likers-scraper
  • Input: { "postUrls": ["DcOX3hWFiey"] } — the one field to set. A post, reel or IGTV link, its bare code as shown, or the post's 19-digit Instagram media id.
  • Cap the bill: set maxTotalChargeUsd on the run (a run option, not Actor input), e.g. 0.50 — the run stops when it reaches it.
  • Price: from $0.40 per 1,000 likers on Gold and above, $1.00 per 1,000 on the Apify free plan. Full table below.
  • How many you get: up to ~2,000 likers per post. On a big post one read usually returns about 1,000, sometimes a few hundred more — ~2,000 is the most one read can give; the per-post status row tells you how many likes the post shows and how many likers you got.
  • Run it again later: likers your account already received from the same post come back uncharged, so the same links tomorrow pay only for the new likers.

If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.

See a real run before you spend anything: sample dataset — fifty likers of one public NASA post from one verified run with the per-post limit set to 50, unedited, and the run's own summary row last.

Unofficial. Not affiliated with, endorsed by, or sponsored by Instagram or Meta Platforms, Inc.

What you get

One row per account that liked the post, in the order Instagram listed them:

ColumnWhat it holds
username · fullName · userIdwho liked it, and Instagram's own numeric id for them
profileUrl · profilePicUrltheir profile link, and their picture
isVerified · isPrivatetheir account flags, as Instagram reports them
postShortcode · postUrlwhich of your posts they liked
source · input · sourceIndex · scrapedAtalways instagram, the exact value you typed, its place in your list, and when it was read
repeat · charged · status · statusReasonwhether your account already had this liker, whether the row was billed, and why

Each post that comes back short of your per-post limit also gets one uncharged status row with likeCount (the likes the post shows, empty when the owner hides them), likersServed (how many the read returned), likersDelivered (how many reached your dataset) and likesHidden.

Profile pictures are signed and time-limited by Instagram, so download them soon if you need them. The requesting network address is stripped out of every link before it reaches your dataset.

Up to ~2,000 likers per post — what that means

Instagram serves a post's likers as one list, and this actor reads it in one go. That list tops out at about 2,000 accounts, and on a big post one read usually returns about 1,000. It can vary from read to read: a post showing 577,212 likes gave back 1,979 one day and 999 the next, while a post with 508 likes gave back 503. So:

  • A post with a few hundred likes: you usually get close to all of them.
  • A big post: you get the likers Instagram serves in that read, usually about 1,000 — not every account that ever liked it, and this page never claims otherwise.
  • More likers than one read gives: one read returns the first ≈ 1,000; Instagram offers no further page, so a re-run on the same post returns about the same likers, not more (and the ones you already have come back uncharged).
  • The status row shows the gap on your own post, so you never have to take our word for it: likes shown, likers served, likers delivered.

Price

One charged event, liker, and it lands only on a liker that was actually delivered.

Apify planPer likerPer 1,000 likers
Free plan$0.001$1.00
Bronze$0.0008$0.80
Silver$0.0006$0.60
Gold and above$0.0004$0.40 per 1,000

Platform usage is included in that price. There is no separate compute bill, no start fee and no per-post fee. Set maxTotalChargeUsd on the run and it is a hard ceiling: the run stops cleanly under it and the last row says what is left.

What you are never charged for

Every post that comes back short of your per-post limit closes with one uncharged status row saying why (a post that filled the limit you set needs none). None of these is billed:

  • likers_list_end — Instagram's list for the post ended. You got what it shows.
  • likers_capped — the post counts more likes than one read serves. The row gives both numbers.
  • likes_hidden — the owner hides the like count. The likers the list served are still delivered (and charged); only the total is missing.
  • no_likers — the post has no likes yet, or shows none.
  • skipped.all_repeat — the read served only likers your account already has, and you switched Include likers you already have off.
  • post_not_found — a wrong link, a private account, or a deleted post.
  • stopped_at_limit — one of your limits, the run clock, your bill cap, or the Apify free plan's daily allowance stopped it. The row names which.
  • vendor_unavailable — the read did not go through. Temporary, says nothing about your post, and a re-run is the fix.
  • source_refused — Instagram refuses that link the same way every time, so a re-run cannot change it.
  • unsupported_shape — Instagram answered in a shape this actor does not read yet. That is on us; tell us on the Issues tab which post it was.
  • limit_reached — this run reached its limit. The row says whether a new run on the same links continues now.

The last row of every run is a receipt: likers delivered, posts read, what was skipped, what stopped it, and the charged-event totals. A time limit ends the collecting, never the delivering — likers already in hand are always written out.

How often this data changes

A post keeps collecting likes for days after it goes up, and the busiest hours are the first few. So the useful pattern is the same links again tomorrow, not one run.

Every run remembers which likers it delivered to your account, per post, for 90 days, in a key-value store in your own Apify account. With Include likers you already have on (the default, includeSeen), a later run hands those back marked repeat: true and uncharged, so each run gives you the post's whole current list and you pay only for the likers that are new. Switch it off and they are skipped instead — no row, no charge — and the post's status row counts them. Skip likers in this dataset (resumeFromDatasetId) carries the same memory across Apify accounts.

Run it on a schedule: save your input as a Task (Actor page → Save as a new task), then add that task to an Apify Schedule (Console → Schedules → Create) with a cron such as 0 7 * * * for daily. Each run rereads the same posts and charges only for new likers.

A run started with a scoped API token in restricted-access mode needs key-value store Read, Write and Create permission (or Actor runs set to Full access) to use that memory. Without it, the run says so on its status line and on an uncharged row, and cannot tell which likers you already have.

Use it as an API endpoint (Standby)

You can also call this actor like an API: send one Instagram post and get the accounts that liked it back in the same response, with no run to start and no dataset to read. The address is on the actor's Endpoints tab, where you can also try it from the browser.

curl -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
"https://steadyfetch--instagram-post-likers-scraper.apify.actor/?postUrl=https://www.instagram.com/p/DcOX3hWFiey/&maxLikers=100"
SettingWhat it does
postUrlThe Instagram post, reel or IGTV link, its short code, or its 19-digit Instagram media id. One post in each request.
maxLikersHow many likers to return. 2,000 if you leave it out, which is also the most one request returns (100 on the Apify free plan).

The answer is JSON: likers (each with the same fields as a row in a run's dataset), delivered, charged, notes for anything that was not returned, in plain words, and summary, the same receipt a run ends on. You are charged per liker returned, at the same per-liker price as a run. A request that returns no likers is not charged, and if the charge for a request cannot be completed, its likers are not sent and nothing is charged.

Good to know: the endpoint has no account memory, so each request returns and charges the likers it reads, even ones you collected before. For many posts at once, or to get likers you already have back uncharged, run the actor as usual.

Limits and good manners

Your settings are never refused for being too big. maxLikersPerPost is per post and tops out at 2,000; maxItems caps the whole run; maxRunSeconds runs from 30 seconds to 1 hour (600 by default). Ask for more than a limit allows, or for a clock outside that range, and the run still starts: it continues at the nearest limit and leaves one uncharged row saying what you asked for and what bound it.

On the Apify free plan this actor reads at most 10 posts per account in any 24 hours, and accounts on that plan share one daily allowance on this actor. Past either, the run keeps everything it already delivered, ships one uncharged row saying when it resets (UTC), and charges nothing past it. Paid Apify plans carry no daily allowance.

Only public posts are read. This actor may stop working if Instagram changes how the data is served; if it does, failed reads are never charged.

Reliability

There is nothing to log into and nothing to configure: no cookies, no account of yours, no proxy. When a read cannot go through, the run says so on an uncharged row and finishes successfully — a failed read is never billed and never dressed up as a post with no likers.

Support

Something off, or a column you need that is not here? Open an issue on the Issues tab — we usually reply within a couple of hours.