Instagram Scraper (Pay-Per-Event)
Pricing
Pay per event
Instagram Scraper (Pay-Per-Event)
Scrape Instagram posts, profile details, hashtags, and comments. Drop-in compatible with apify/instagram-scraper input shape — at ~13% lower per-row cost on transparent pay-per-event pricing.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Arnas
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
4
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape Instagram posts, profile details, hashtags, and comments at pay-per-event pricing. Drop-in compatible with the popular apify/instagram-scraper input shape, at ~13% lower per-row cost.
Pure HTTP — no headless browser, no login. Hits Instagram's public web API endpoints with rotating residential proxies and conservative concurrency. Run-level deduplication by media pk means overlapping inputs (e.g. the same post appearing under multiple search queries) are charged exactly once.
What does Instagram Scraper do?
It extracts public Instagram data via four result types:
- Posts — feed of posts from a profile or hashtag (image, video, sidecar/carousel; includes caption, likes, comments count, media URLs, timestamps, owner info).
- Details — profile metadata (username, bio, follower / following / posts counts, verified flag, profile pic, business category).
- Hashtag — hashtag metadata (post count, top posts count, profile pic).
- Comments — comments on a specific post URL (text, owner, likes, replies count). Best-effort: Instagram throttles unauthenticated comments traffic aggressively.
Inputs accepted:
directUrls— list of Instagram URLs (/p/<code>/,/reel/<code>/,/<username>/,/explore/tags/<tag>/).username— list of bare profile usernames (without@).search— search query against Instagram's public topsearch endpoint, expanded into hashtag or profile follow-ups.
Try it: paste an Instagram profile URL like https://www.instagram.com/humansofny/, set resultsLimit: 30, and click Run.
Why use Instagram Scraper?
- ~13% cheaper than the reference
apify/instagram-scraper: $1.30/1,000 posts vs. $1.50/1,000; $2.00/1,000 comments vs. $2.30/1,000. - Pay-per-event billing: each result is charged only after it lands in the dataset. If you abort the run, you stop paying within a second.
- Drop-in input parity: same field names (
directUrls,resultsType,resultsLimit,searchType,searchLimit,search,onlyPostsNewerThan,addParentData) so downstream automations targeting the reference can swap actor IDs with no code change. - Run-level deduplication: each unique media
pk/ profile username / hashtag name is charged exactly once per run, even when overlapping inputs surface the same row multiple times. - Normalized output: every post row carries both raw
takenAt(epoch) andtakenAtIso(ISO 8601). Every row hasscrapedAt. Hashtags and mentions parsed from the caption are exposed as arrays. No missing-field surprises — fields that don't apply arenull, not absent.
Business use cases: brand monitoring, influencer discovery, market research, content trend analysis, lead generation from public business profiles, hashtag campaign tracking.
How to use Instagram Scraper
- Open the Actor in Apify Console.
- Click New input and pick what to scrape:
- For a specific profile: set
directUrls: ["https://www.instagram.com/<username>/"]orusername: ["<username>"]. - For a hashtag: set
directUrls: ["https://www.instagram.com/explore/tags/<tag>/"]. - For search: set
search: "#travel"(hashtag prefix sets context to hashtag automatically).
- For a specific profile: set
- Choose
resultsType:posts(default),details,hashtag, orcomments. - Set
resultsLimit— max rows per source. - Click Start and watch results land in the dataset.
Input
| Field | Type | Description |
|---|---|---|
directUrls | array | Instagram URLs — profile / post / reel / hashtag. |
username | array | Bare profile usernames (no @). |
resultsType | enum | posts (default), details, hashtag, comments. |
resultsLimit | int | Max rows per source. Default 30. |
search | string | Search query. # prefix forces hashtag context. |
searchType | enum | hashtag (default), profile, user. |
searchLimit | int | Max search hits to expand. Default 10. |
onlyPostsNewerThan | string | YYYY-MM-DD or relative (3 days, 2 months). |
addParentData | bool | Attach originating profile/hashtag as parentData. |
maxRequestRetries | int | Per-request retry limit (1-10). Default 5. |
proxyConfiguration | object | Apify proxy. Residential strongly recommended. |
Output
A simplified post row:
{"id": "3000000000000000000","shortCode": "Cz4tHR-JqXa","type": "Image","caption": "Hello from NYC #travel","url": "https://www.instagram.com/p/Cz4tHR-JqXa/","commentsCount": 12,"likesCount": 345,"videoViewCount": null,"takenAt": 1700000000,"takenAtIso": "2023-11-14T22:13:20.000Z","displayUrl": "https://cdn.example.com/image.jpg","videoUrl": null,"dimensionsHeight": 1080,"dimensionsWidth": 1080,"images": [],"videos": [],"hashtags": ["travel"],"mentions": [],"ownerUsername": "humansofny","ownerFullName": "Humans of New York","ownerId": "1234","locationName": null,"locationId": null,"isSponsored": false,"scrapedAt": "2026-05-26T15:00:00.000Z"}
Datasets can be downloaded as JSON, JSONL, CSV, Excel, HTML, RSS, or XML.
Data fields
| Field | Posts | Details | Hashtag | Comments |
|---|---|---|---|---|
id | yes | yes | yes | yes |
shortCode | yes | — | — | — |
type (Image / Video / Sidecar) | yes | — | — | — |
caption | yes | — | — | — |
commentsCount / likesCount | yes | — | — | — |
takenAt / takenAtIso | yes | — | — | — |
displayUrl / videoUrl / images[] / videos[] | yes | — | — | — |
hashtags[] / mentions[] | yes | — | — | — |
ownerUsername / ownerFullName / ownerId | yes | — | — | — |
locationName / locationId | yes | — | — | — |
isSponsored | yes | — | — | — |
username / fullName / biography / externalUrl | — | yes | — | — |
followersCount / followingCount / postsCount | — | yes | — | — |
isVerified / isBusinessAccount / businessCategoryName | — | yes | — | — |
profilePicUrl / profilePicUrlHd | — | yes | partial | — |
name / postsCount / topPostsCount | — | — | yes | — |
text / createdAt / createdAtIso / repliesCount | — | — | — | yes |
postShortCode / postUrl | — | — | — | yes |
scrapedAt | yes | yes | yes | yes |
Pricing
Pay-per-event — you only pay for what successfully lands in the dataset.
| Event | Slug | Price | Per 1,000 |
|---|---|---|---|
| Actor start (one-time per run) | actor-start | $0.005 | — |
| Post scraped | post-scraped | $0.0013 | $1.30 |
| Profile scraped | profile-scraped | $0.0013 | $1.30 |
| Hashtag scraped | hashtag-scraped | $0.0013 | $1.30 |
| Comment scraped | comment-scraped | $0.002 | $2.00 |
~13% cheaper than apify/instagram-scraper's $1.50/1,000 results and $2.30/1,000 comments. No monthly rental fee.
Cost estimation
| Goal | Approx cost |
|---|---|
| 1,000 posts from one profile | $0.005 + $1.30 = $1.305 |
| 10,000 posts across 100 hashtags | $0.005 + $13.00 = $13.005 |
| 1,000 comments from one post | $0.005 + $2.00 = $2.005 |
| 100 profile details | $0.005 + $0.13 = $0.135 |
Tips
- Use a residential proxy. Instagram blocks datacenter IPs aggressively. The default
proxyConfigurationis already{ useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"] }. - Set
resultsLimitlow while testing. AresultsLimit: 5smoke test costs less than a penny and proves the input shape. - Combine
directUrlsandusernameto dedupe the same profile under both inputs — the run-level dedup ensures you're charged once. onlyPostsNewerThan: "3 days"stops pagination early on reverse-chronological feeds, saving you both time and dollars.
Limitations
- Public data only. No login, no session cookies. Private profiles return profile metadata but no posts.
- No
stories/mentions/placesresult types in v0.1. Stories require authentication; the other two are planned. - Comments are best-effort. Instagram throttles unauthenticated comments traffic more aggressively than feed traffic. The actor surfaces partial results and never fails the run on a comments-endpoint rate limit.
- No media download. Output includes media URLs; the actor does not fetch image / video bytes.
- US-English UI default. Localization is governed by the proxy's geo.
FAQ
Is scraping Instagram legal? Public data scraping is generally permitted under recent US case law (e.g. hiQ Labs v. LinkedIn). However, you are responsible for compliance with Instagram's Terms of Service, your local laws, and applicable data-protection regulations (GDPR, CCPA). Do not store personal data without a lawful basis.
Why is my run returning zero rows?
Two common causes: (1) Instagram blocked the proxy session — try again with a fresh session, or check your proxy plan. (2) The profile is private. Private profiles return the details row but no posts.
Can I get comment replies?
v0.1 returns top-level comments only. Comment replies (the threaded responses) are deferred to a future enum value resultsType: comment-replies.
Does this work for Reels?
Yes — reels appear inside the regular profile and hashtag post feeds with type: "Video". A dedicated resultsType: reels is planned.
How does this compare to apify/instagram-scraper?
Same input shape, ~13% lower per-row cost, transparent pay-per-event billing (vs. flat PPR), run-level dedup. The reference supports stories, mentions, and places result types that this actor does not (yet).
Support
Issues and feature requests welcome on the Actor's Issues tab. For custom integrations or scaled use cases, contact us via Apify Store messaging.
Disclaimer
This actor scrapes publicly accessible Instagram content. You are responsible for complying with Instagram's Terms of Service and applicable laws (GDPR, CCPA, etc.) in your jurisdiction. The actor does not bypass authentication, solve CAPTCHAs, or access private data.