Instagram Hashtag Scraper - Posts & Reels, $0.40/1k
Pricing
Pay per event
Instagram Hashtag Scraper - Posts & Reels, $0.40/1k
Hashtags in, posts out: caption, like and comment counts, image and video URLs, owner, mentions, timestamp and which tag produced the row. Instagram gates hashtag feeds behind a login, so runs go through a data provider we pay for. Nothing needed from you. $0.40 per 1,000 posts.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
23
Total users
12
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Hashtag Scraper — posts by tag
Hashtags in, posts out. One flat row per post: caption, like and comment counts, image and video
URLs, owner, hashtags, mentions and timestamp. /explore/tags/ URLs work too if that's what you
already have.
You don't need a login, a cookie, an app review or a business API approval. That needs explaining, because Instagram doesn't hand hashtag feeds to signed-out callers.
Where the data comes from
Instagram serves hashtag feeds only to a signed-in caller. There's no logged-out route to them, at any address or with any fingerprint.
So if you put a cookie in sessionCookies, the run uses yours. Most people don't, and then the run
goes through a licensed data provider we pay per request instead. No login is needed from
you, but this isn't a keyless scrape and it would be dishonest to call it one. Something is signed
in somewhere. We're the ones paying for it.
Your own cookie buys you a rate limit nobody else draws on. That's the only reason to bother.
What you get
A real row, trimmed for length:
{"ok": true,"type": "image","shortCode": "DcSuVkYONIE","url": "https://www.instagram.com/p/DcSuVkYONIE/","caption": "Details 🤍✨ ...","hashtags": ["flatlayinspiration", "visualcrush", "flatlayart"],"mentions": [],"likesCount": 3,"commentsCount": 36,"videoViewCount": 0,"displayUrl": "https://scontent-iad3-2.cdninstagram.com/...","videoUrl": null,"images": ["https://scontent-iad3-2.cdninstagram.com/..."],"isVideo": false,"dimensions": { "height": 1350, "width": 1080 },"ownerUsername": "…","ownerId": "…","timestamp": "2026-08-19T14:02:11.000Z","accessibilityCaption": "…","hashtag": "coffee"}
type is image, video or carousel. hashtag tells you which of your input tags produced the
row. Hashtags and mentions are parsed out of the caption for you.
Input
{"hashtags": ["coffee", "latteart"],"resultsLimit": 50}
| Field | Default | Notes |
|---|---|---|
hashtags | — | With or without #. |
startUrls | — | Or /explore/tags/… URLs. |
resultsLimit | 50 | Posts per run, capped at 2,000. This is your spend cap. |
sessionCookies | — | Optional. Your own Instagram cookie, to run on your own rate limit. Stored as a secret. |
proxyConfiguration | Apify datacenter | Leave the default. Rotating datacenter addresses are included in the run cost and the actor hops on every block. Your own proxy servers are used exactly as given if you'd rather. |
notionConnector / notionParentId | — | Optional: write each post into a Notion database too. |
Limits
- A hashtag feed is a sample, not an archive. Instagram returns the top and recent sections it chooses to show, which is nowhere near every post ever tagged. No scraper changes that.
- Paging stops at 12 pages per tab.
resultsLimitis what actually bounds a run. - Media URLs expire. The CDN links are signed and time-limited. Download what you want to keep.
- The provider lane has a per-run request budget. If a run reaches it, the run stops early with a diagnostic row saying so. Posts already delivered are complete and correct, and the diagnostic row is free.
- If nothing usable is available, the run still succeeds and returns one clearly labelled
_samplerow so you can see the output shape. No per-post fee is charged for it. - No comments. This returns posts. Comments are a separate scraper.
Billing
$0.0004 per post ($0.40 per 1,000), plus $0.001 when a run starts. Flat on every Apify plan, no volume tiers.
Charged per post actually delivered. Posts are deduplicated across tags and lanes before charging, so the same post is never billed twice. Diagnostic rows, sample rows, provider-budget stops and empty runs cost nothing beyond the start fee. That one goes by run memory, one event per gigabyte, so it's $0.001 at the default 1 GB.