Instagram Hashtag Scraper - Posts, Reels & Media
Pricing
$0.40 / 1,000 post returneds
Instagram Hashtag Scraper - Posts, Reels & Media
Scrape any Instagram hashtag for top & recent posts and reels: captions, likes, comments, media URLs, owner & timestamp. Bulk hashtags, clean flat records, pay per post (failed runs free), export JSON/CSV/Excel or deliver to Notion.
Pricing
$0.40 / 1,000 post returneds
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
β‘ Instagram Hashtag Scraper β Posts by Hashtag
Pull top & recent posts under any Instagram hashtag and get back clean, flat records β caption, like & comment counts, media URLs, owner, hashtags, mentions and timestamp. Feed it a list of hashtags (or /explore/tags/ URLs), set a cap, and export to JSON, CSV or Excel, hit it from the API, or have results delivered straight to Notion. Just $0.40 per 1,000 posts β billed only for posts actually returned.
Instagram gates hashtag feeds behind a login. This actor handles that the same way every paid IG service does β you supply one or more throwaway-account
sessionidcookies and it rotates the account pool + residential IPs for you. No app, no bearer token, no business API approval.
Why this scraper wins
- πͺ Account-pool rotation β add several throwaway
sessionidcookies and the actor cycles accounts and fresh residential IPs every few hops, so one flagged session never sinks the run. - π Residential by default β Instagram hard-blocks datacenter IPs, so the actor forces Apify RESIDENTIAL proxy out of the box. Leave it as-is and it just works.
- πΈ Cheaper, pay-per-result β $0.40 / 1,000 posts, charged per post returned. Empty or blocked runs cost nothing.
- π§Ή Clean, flat output β one tidy record per post, ready for spreadsheets, dashboards or LLM pipelines. No raw nested soup.
- π Auto-dedupe β the same post is never returned (or charged) twice in a run.
- π¬ Built-in delivery β optionally push every run straight into Notion via Apify connectors, zero extra code.
- π¦ Honest errors β if Instagram blocks or returns nothing, you get a clear
errorCodediagnostic row (RATE_LIMITED,BLOCKED,NO_RESULTS) instead of silent emptiness.
What you can scrape
| Mode | Input | Notes |
|---|---|---|
| Hashtag feed | hashtags (with or without #) | Top and recent posts under each tag |
| Hashtag URLs | startUrls (/explore/tags/<tag>/) | Same as above, paste-friendly |
Input
hashtagsβ list of hashtags to scrape, e.g.nature,travel(the#is optional).startUrlsβ or pastehttps://www.instagram.com/explore/tags/<tag>/URLs instead.resultsLimitβ max posts per hashtag (default50, up to2000). You pay per post.sessionCookies(required) β one or more logged-insessionidcookies from throwaway accounts; the actor rotates them. From a logged-ininstagram.com: F12 β Application β Cookies β copy thesessionidvalue. Paste one per line.proxyConfigurationβ Residential is preconfigured and required; leave the default.notionConnector/notionParentIdβ optional, deliver results to a Notion data source.
Output (one record per post)
{"ok":true,"type":"image","shortCode":"C1aBcDeFgHi","url":"https://www.instagram.com/p/C1aBcDeFgHi/","caption":"Golden hour over the fjord ποΈ #nature #travel","hashtags":["nature","travel"],"mentions":[],"likesCount":18423,"commentsCount":204,"videoViewCount":null,"displayUrl":"https://instagram.fxxx.fna.fbcdn.net/v/....jpg","videoUrl":null,"images":["https://instagram.fxxx.fna.fbcdn.net/v/....jpg"],"isVideo":false,"dimensions":{"height":1080,"width":1080},"ownerUsername":"wanderlust","ownerId":"1789456123","timestamp":"2026-06-21T07:14:02.000Z","hashtag":"nature"}
Pricing
$0.40 per 1,000 posts ($0.0004 per post, pay-per-event). You are charged only for posts actually returned β failed, blocked or empty runs cost nothing.
FAQ
Why do I need sessionid cookies? Instagram's hashtag feed is login-gated β there is no keyless path. This is exactly how every paid IG hashtag service works. Use throwaway accounts and add several for resilience.
How many cookies should I add? More is better. The actor rotates accounts every few IP hops, so 3β5 throwaway sessions keep success rates high on sustained runs.
Why is residential proxy required? Instagram hard-blocks datacenter IP ranges. Residential is preconfigured so runs actually return data β leave the default.
It returned an errorCode row β why? That's the actor telling you exactly what happened (RATE_LIMITED, BLOCKED, NO_RESULTS) instead of failing silently. Add more sessions, lower volume, or retry.
Can I deliver to Notion? Yes β set notionConnector and notionParentId and every run lands in your Notion data source automatically.
