Instagram Scraper (Pay-Per-Event) avatar

Instagram Scraper (Pay-Per-Event)

Pricing

Pay per event

Go to Apify Store
Instagram Scraper (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

Arnas

Maintained by Community

Actor 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) and takenAtIso (ISO 8601). Every row has scrapedAt. Hashtags and mentions parsed from the caption are exposed as arrays. No missing-field surprises — fields that don't apply are null, 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

  1. Open the Actor in Apify Console.
  2. Click New input and pick what to scrape:
    • For a specific profile: set directUrls: ["https://www.instagram.com/<username>/"] or username: ["<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).
  3. Choose resultsType: posts (default), details, hashtag, or comments.
  4. Set resultsLimit — max rows per source.
  5. Click Start and watch results land in the dataset.

Input

FieldTypeDescription
directUrlsarrayInstagram URLs — profile / post / reel / hashtag.
usernamearrayBare profile usernames (no @).
resultsTypeenumposts (default), details, hashtag, comments.
resultsLimitintMax rows per source. Default 30.
searchstringSearch query. # prefix forces hashtag context.
searchTypeenumhashtag (default), profile, user.
searchLimitintMax search hits to expand. Default 10.
onlyPostsNewerThanstringYYYY-MM-DD or relative (3 days, 2 months).
addParentDataboolAttach originating profile/hashtag as parentData.
maxRequestRetriesintPer-request retry limit (1-10). Default 5.
proxyConfigurationobjectApify 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

FieldPostsDetailsHashtagComments
idyesyesyesyes
shortCodeyes
type (Image / Video / Sidecar)yes
captionyes
commentsCount / likesCountyes
takenAt / takenAtIsoyes
displayUrl / videoUrl / images[] / videos[]yes
hashtags[] / mentions[]yes
ownerUsername / ownerFullName / ownerIdyes
locationName / locationIdyes
isSponsoredyes
username / fullName / biography / externalUrlyes
followersCount / followingCount / postsCountyes
isVerified / isBusinessAccount / businessCategoryNameyes
profilePicUrl / profilePicUrlHdyespartial
name / postsCount / topPostsCountyes
text / createdAt / createdAtIso / repliesCountyes
postShortCode / postUrlyes
scrapedAtyesyesyesyes

Pricing

Pay-per-event — you only pay for what successfully lands in the dataset.

EventSlugPricePer 1,000
Actor start (one-time per run)actor-start$0.005
Post scrapedpost-scraped$0.0013$1.30
Profile scrapedprofile-scraped$0.0013$1.30
Hashtag scrapedhashtag-scraped$0.0013$1.30
Comment scrapedcomment-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

GoalApprox 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 proxyConfiguration is already { useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"] }.
  • Set resultsLimit low while testing. A resultsLimit: 5 smoke test costs less than a penny and proves the input shape.
  • Combine directUrls and username to 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 / places result 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.