What the Apify Instagram Scraper costs, and which Actor to run
The Apify Instagram Scraper bills one flat rate per result: $2.70 per 1,000 on the free plan, $2.30 on Starter, $1.90 on Scale, $1.50 on Business. One result is one scraped item, so a comment costs exactly what a post costs. The free plan's $5 monthly credit buys about 1,850 results. Verified 2026-09-09.
apify/instagram-scraper is a pay-per-result Actor that reads the logged-out version of Instagram: posts, reels, comments, mentions, profile details, hashtag volume, and place metadata. It is not an Instagram API replacement with private-account access. It sees what an anonymous visitor sees, and it bills for every row it writes.
The number that matters is the per-result rate, because that is where budgets go wrong. Everything below is checked against api.apify.com and the Actor's own pricing tab on 2026-09-09.
What does the Apify Instagram Scraper cost per 1,000 results?โ
$2.70/1,000 results subject to change ยท verified 2026-09-09 on the free plan. The rate drops as your Apify plan goes up:
| Your Apify plan | Rate per 1,000 results | 10,000 results costs |
|---|---|---|
| Free ($0/mo, $5 credit) | $2.70 | $27.00 |
| Starter ($19/mo) | $2.30 | $23.00 |
| Scale ($199/mo) | $1.90 | $19.00 |
| Business ($999/mo) | $1.50 | $15.00 |
Source: the Actor's tiered pay-per-event schedule on api.apify.com and the pricing tab, both read 2026-09-09. Plan prices from apify.com/pricing, same day. That price entry has been live since 2026-02-20.
Correction, 2026-09-09. This page previously said $1.50 per 1,000 posts with comments at $2.30 per 1,000. Both numbers were wrong. $1.50 is the Business-plan rate, not the default, and there has never been a separate comments price on this Actor. If you budgeted from the old figure on a free or Starter account, your real bill is 1.5 to 1.8 times what this page told you.
Open the Instagram Scraper on Apify โ
Objection worth naming: pay-per-result means you cannot preview the bill before the run. The control is Results limit, which caps results per URL. Set it to 20 on the first run of any new target, confirm the fields you need are populated, then raise it. See pay-per-event billing for how the model differs from compute units.
What counts as one result?โ
One result is one row written to the dataset. A post is a result. A comment is a result. So is a profile, a hashtag record, and a place record. There is no cheaper class of row.
Two consequences that surprise people:
- Comments are the expensive content type, not because the rate is higher but because a single post can produce hundreds of rows. Scraping 200 comments on each of 50 posts is 10,000 results, or $27 on the free plan.
- Replies count separately. With
includeNestedCommentson, each reply is its own result, so the returned total exceeds yourresultsLimit. The Actor's README says so explicitly.
Which Instagram Actor is cheapest for the job?โ
Six Actors cover Instagram on Apify, and they do not cost the same. Free-plan rates, read from each Actor's pay-per-event schedule on api.apify.com on 2026-09-09:
| Actor | Billing unit | Free | Starter | Scale | Business | Extras |
|---|---|---|---|---|---|---|
| apify/instagram-scraper | result (post, reel, comment, profile, hashtag, place) | $2.70 | $2.30 | $1.90 | $1.50 | none |
| apify/instagram-search-scraper | result / live search result | $2.70 | $2.30 | $1.90 | $1.50 | none |
| apify/instagram-profile-scraper | profile | $2.60 | $2.30 | $2.00 | $1.60 | "About account" add-on +$7.00 per 1,000 on free |
| apify/instagram-followers-count-scraper | profile | $2.60 | $2.30 | $1.80 | $1.30 | $0.001 flat per run start |
| apify/instagram-api-scraper | result from a URL | $2.30 | $2.00 | $1.70 | $1.40 | search results $6.00 per 1,000; date filter +$1.30 per 1,000; $0.001 per run start |
| apidojo/instagram-scraper | post | $0.50 | $0.49 | $0.48 | $0.47 | none |
apidojo/instagram-scraper is the finding worth acting on. At $0.50 per 1,000 posts it is 5.4 times cheaper than the official Actor on the free plan, and the $5 free credit stretches to roughly 10,000 posts instead of 1,850.
The honest counterweight: it is a much smaller tool. Apify's own stats put it at 8,909 total users and 771 in the last 30 days, against 388,420 and 42,760 for apify/instagram-scraper (api.apify.com, 2026-09-09). It scrapes posts only, so comments, hashtag volume, place metadata, and search discovery are out of scope. Its tier discounts are also nearly flat, dropping only from $0.50 to $0.47, so the gap narrows as you move up plans.
Decision rules:
- Bulk posts and reels, cost-sensitive: try
apidojo/instagram-scraperfirst. - Comments, hashtag volume, places, or discovery by search:
apify/instagram-scraperis the only one of the six that does all of it. - Only follower counts on a known list of handles:
apify/instagram-followers-count-scraperat $1.30 per 1,000 on Business is the cheapest per profile, but add $0.001 for each run start. - Profile details plus join date and country:
apify/instagram-profile-scraperwith the About-account add-on. Note the add-on costs more than the profile itself, $7.00 against $2.60 per 1,000 on free.
Longer feature-level comparison lives in our Instagram scrapers roundup.
What does the Apify free plan actually cover here?โ
The free plan gives $5 of platform credit per month, and it does not roll over (apify.com/pricing, 2026-09-09). At $2.70 per 1,000 results that is about 1,850 results, in any mix of posts, comments, profiles, hashtags, and places.
Two free-plan restrictions live inside the Actor rather than the plan, both stated in its README:
- Comments are capped at one page per post, roughly 15 comments. Paid plans have no such cap.
isNewestCommentsandincludeNestedCommentsare ignored on free. Newest-first ordering and reply threads are paid-plan features.
Concurrency is genuinely unclear. apify.com/pricing lists 5 max concurrent runs on the free plan. docs.apify.com/platform/limits lists 25 for the same plan. Both pages are Apify's own and both were read on 2026-09-09. The paid figures agree (32 Starter, 128 Scale, 256 Business); only the free row conflicts. Design for 5 and you will not be surprised. More on the credit itself in our Apify free plan breakdown and the full pricing guide.
How do you run it?โ
- Open apify.com/apify/instagram-scraper and sign in. No Instagram login, no Business or Creator account, no OAuth.
- Set Content to scrape to one of
posts,reels,comments,mentions, ordetails. - Paste Instagram URLs that match that content type, or switch to a search query and pick
hashtag,profile, orplace. Do not fill in both: URLs win, silently. - Set Results limit per URL. Start at 20.
- Optionally set Filter by date with a relative value such as
1 dayor an ISO date. It is evaluated in UTC regardless of your timezone. - Click Save & Start, then watch the Log tab.
- Export from Storage as JSON, CSV, Excel, or XML, or fetch the dataset over the Apify API.
Which URL you paste drives what you get back:
| Paste this | Content types it supports |
|---|---|
| Profile URL or numeric profile ID | details, posts, reels, mentions |
| Post or reel URL (shortCode form) | details, comments |
Hashtag URL (/explore/tags/crossfit/) | posts, reels, details |
Location URL (/explore/locations/7538318/) | details |
What breaks a run?โ
Apify publishes 30-day run statistics for every public Actor. For apify/instagram-scraper, read on 2026-09-09: 16,735,691 successful runs out of 16,790,631, a 99.7% success rate. The useful part is the shape of the remainder. Timeouts (48,132) outnumber hard failures (1,246) by about 39 to 1. Your run is far more likely to run out of clock than to crash, which makes Results limit and the run timeout the two settings worth tuning first.
The documented traps, all from the Actor's README:
- One content type per run. Posts and comments together means two runs, or one run chained to the next by webhook.
- Numeric post IDs in URL form do not work for
posts,reels,mentions, ordetails. Useinstagram.com/p/DZxvMgyH8yR/, not the 19-digit ID. The numeric form works only forcomments. - Search queries are not supported for comments. Direct post or reel URLs only.
likesCountreturns-1when the creator has hidden the like count.- Counts differ from what you see logged in. Instagram hides engagement from private accounts from logged-out visitors, and the Actor is a logged-out visitor. Check in an incognito window before filing a bug.
- Private profiles are out of reach, with one exception the README calls out: if a private account is tagged as a collaborator on a post whose other collaborator is public, Instagram serves that post publicly and it lands in your dataset.
storiesappears in the input schema's enum but not in the README's list of supported content types. Treat it as unsupported until Apify documents it.
What does the output look like?โ
One dataset item per post, with the fields below. The full schema changes with the content type you selected.
| Field | Description |
|---|---|
url, shortCode, id | Canonical post URL, short identifier, numeric ID |
type | Image, Video, Sidecar (carousel) |
caption, hashtags, mentions | Post text and the entities parsed out of it |
likesCount, commentsCount | Engagement counters, -1 when hidden |
firstComment, latestComments | A preview of comments without a separate comments run |
timestamp | Publish time, ISO 8601 UTC |
displayUrl, images, childPosts | Media CDN links; carousel children |
ownerUsername, ownerFullName, ownerId | Account metadata |
isCommentsDisabled | Whether comments are turned off |
Trimmed from the Actor's own documented posts sample. Field set varies by content type.
{
"inputUrl": "https://www.instagram.com/p/DZxvMgyH8yR/",
"id": "3923124318436838545",
"type": "Image",
"shortCode": "DZxvMgyH8yR",
"caption": "In the Democratic Republic of the Congo, photographer @carstenpeter followed a team of scientists into the crater of Mount Nyiragongo...",
"hashtags": [],
"mentions": ["carstenpeter"],
"url": "https://www.instagram.com/p/DZxvMgyH8yR/",
"commentsCount": 110,
"firstComment": "runnin up that hill",
"dimensionsHeight": 718,
"dimensionsWidth": 1080,
"displayUrl": "https://scontent.cdninstagram.com/.../722859170_n.jpg",
"likesCount": 55952,
"timestamp": "2026-06-20T10:00:04.000Z",
"ownerFullName": "National Geographic",
"ownerUsername": "natgeo",
"ownerId": "787132",
"isCommentsDisabled": false
}
Note that displayUrl points at Instagram's CDN and expires. Persist the bytes yourself if you need the media later, and check licensing before you re-host anything.
When you should not use this Actorโ
- You need private accounts, stories, or DMs. No public scraper reaches them. That is a platform boundary, not an Actor limitation.
- You need one row per follower. Follower lists are not among the content types.
instagram-followers-count-scraperreturns the count, not the list. - You want to run it on your own infrastructure. A Python tool such as Instaloader is free and self-hosted, but you supply the proxy pool, the retry logic, and the maintenance when Instagram changes. Our Instagram proxy guide covers what that costs in practice, and it is usually more than $2.70 per 1,000 rows once your time is priced in.
- Your use case involves personal data at scale. Public does not mean unregulated. GDPR and CCPA can still apply to a public profile, so document your legal basis and retention period first. See our notes on web scraping legality.
Once the fields look right on a 20-result test, raise the limit and schedule it.
Run the Instagram Scraper on Apify โ
One flat rate per result, tiered by your Apify plan: $2.70 per 1,000 results on Free, $2.30 on Starter, $1.90 on Scale, $1.50 on Business. A result is any scraped item, so comments cost the same as posts. Estimate as results multiplied by the rate, divided by 1,000. Verified 2026-09-09 against the Actor's pricing tab and api.apify.com.
The free plan's $5 monthly credit buys about 1,850 results at $2.70 per 1,000, in any mix of posts, reels, comments, profiles, hashtags, or places. The credit does not roll over. Free accounts are also capped at one page of comments per post, roughly 15.
Yes, for posts only. apidojo/instagram-scraper bills $0.50 per 1,000 posts on the free plan against $2.70 for the official Actor, so the $5 credit stretches to about 10,000 posts. It is a far smaller tool (771 monthly users against 42,760) and it does not do comments, hashtag volume, places, or search discovery.
No. The Actor reads the logged-out version of Instagram, so no Instagram account, Business or Creator profile, or OAuth token is involved. That is also why private accounts, stories, and DMs are out of scope, and why engagement counts can be lower than what you see while signed in.
No. Each run produces exactly one content type, set by the Content to scrape field. Run the Actor twice, or chain the second run to the first with a webhook. Filling in both URLs and a search query does not error either: URLs silently take priority.
Apify's own pages disagree. apify.com/pricing says 5 concurrent runs on Free; docs.apify.com/platform/limits says 25 for the same plan. Both were read on 2026-09-09 and the paid-plan numbers match each other (32, 128, 256). Plan for 5 until Apify reconciles the two pages.
This is not legal advice. Public scraping still touches platform terms and privacy law, and a public profile can still be personal data under GDPR or CCPA. Apify's own position is that its Instagram Actors collect only publicly available data and never private content, and that you should have a legitimate reason for collecting it. See our scraping legality guide for the longer version.
Common mistakes and fixes
The run timed out instead of failing
Timeouts outnumber hard failures on this Actor by roughly 39 to 1 (Apify public 30-day run stats, api.apify.com, 2026-09-09). Lower Results limit per URL, split large URL lists across runs, and raise the run timeout in the Actor's Settings tab.
Dataset only has ~15 comments per post
That is the free-plan cap on this Actor: one page of comments per post. Nested replies (includeNestedComments) and newest-first ordering (isNewestComments) are paid-plan only, per the Actor's README.
Run returned nothing for a post ID URL
Numeric post IDs in URL form are not supported for posts, reels, mentions, or details modes. Use the shortCode form, for example instagram.com/p/DZxvMgyH8yR/. The numeric form works only for comments.
Likes and views do not match what I see in the app
The Actor reads the logged-out page, which hides engagement from private accounts. Open the post in an incognito window and compare there. Counts are also a snapshot from the run timestamp, not from when you check.
likesCount comes back as -1
The creator hid the like count. Instagram does not expose it publicly, so the Actor returns -1 rather than guessing.
Mixed posts and comments in one run and got only one type
Each run produces exactly one content type. Run the Actor twice, or chain the two runs with a webhook.