Instagram Hashtag Posts Scraper
Pricing
from $3.00 / 1,000 instagram posts
Instagram Hashtag Posts Scraper
Scrape public Instagram posts and Reels for one or more hashtags. Exports captions, engagement counts, author metadata, media URLs, comments when available, cursor metadata, and run summaries. No Instagram cookies required. MCP/API-ready.
Pricing
from $3.00 / 1,000 instagram posts
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
1
Bookmarked
142
Total users
52
Monthly active users
5 hours ago
Last modified
Categories
Share
Scrape public Instagram posts and Reels for one or more hashtags. The actor returns clean JSON with captions, public engagement counts, author metadata, media URLs, comments when available, engagement rates, pagination cursors, and a machine-readable run summary.
No Instagram username, password, session cookies, or browser login is required. The actor uses a provider-backed public-data route, so results are best-effort and depend on Google-indexed public Instagram posts.
What You Get
| Field | Example |
|---|---|
hashtag | "fitness" |
post_url | "https://www.instagram.com/reel/DOOJ_zSjcnx/" |
caption | "Morning grind #fitness #gym" |
caption_hashtags | ["fitness", "gym"] |
like_count | 35854 |
comment_count | 1263 |
play_count | 593055 |
is_reel | true |
media_type | "VIDEO" |
posted_at | "2025-09-05T12:51:42.000Z" |
author_username | "creator" |
author_follower_count | 1369176 |
engagement_rate | 2.71 |
source_cursor | "2" |
The actor also writes OUTPUT and RUN_SUMMARY key-value records with savedCount, stopReason, hashtagSummaries, nextCursorsByHashtag, provider retry/status diagnostics, and estimated PPE cost.
Input
{"hashtags": ["fitness", "streetphotography"],"datePosted": "last-week","mediaType": "all","maxPostsPerHashtag": 50,"minimumLikes": 0,"includeComments": false,"outputMode": "full"}
You can also pass Instagram hashtag URLs:
{"startUrls": [{ "url": "https://www.instagram.com/explore/tags/fitness/" }],"maxPostsPerHashtag": 25}
Date And Media Filters
datePosted supports any, last-hour, last-day, last-week, last-month, and last-year.
mediaType supports all and reels. Use reels for short-form video research.
Recent windows can return fewer results because the upstream route is based on public posts indexed by Google, not a complete Instagram-native hashtag feed. If a run returns too few records, use a broader hashtag or widen datePosted.
Pagination
Each run summary includes nextCursorsByHashtag.
To continue from a later provider page, copy a cursor into startCursor and run the same hashtag again:
{"hashtags": ["fitness"],"startCursor": "2","maxPostsPerHashtag": 50}
API Example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~instagram-hashtag-scraper/runs" \-H "Authorization: Bearer YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"hashtags": ["fitness", "gym"],"datePosted": "last-week","maxPostsPerHashtag": 100,"mediaType": "reels"}'
Common Use Cases
Influencer discovery: find creators posting under niche hashtags and rank by engagement rate.
Brand monitoring: track public posts and Reels using campaign or branded hashtags.
Content research: discover captions, co-hashtags, Reels, audio usage, and post formats in a niche.
Lead generation: identify public creators and businesses active around a topic.
AI pipelines: call the actor through Apify MCP Server and feed structured post data to Claude, ChatGPT, LangChain, Make, Zapier, n8n, or a warehouse.
Pricing
The actor charges $0.003 for each public post or Reel successfully written to the default dataset. Apify also charges its small actor-start event and underlying platform usage. Before the first provider request, the run log prints the maximum post-event cost for the input. RUN_SUMMARY.chargedEventCounts records the observed default-dataset event count for the run.
Run Outcomes And Diagnostics
Every run writes two key-value records: OUTPUT is a compact integration contract and RUN_SUMMARY contains detailed provider, pagination, filtering, and billing diagnostics.
| Outcome | Run status | Meaning |
|---|---|---|
COMPLETE | Succeeded | All requested work completed and saved posts were returned. |
PARTIAL | Succeeded | Useful posts were saved, but a provider error, write issue, page cap, or charge cap prevented full completion. |
VALID_EMPTY | Succeeded | A valid request ran correctly but no public posts matched. |
INVALID_INPUT | Succeeded | The input can be corrected; check OUTPUT.message for a working format. |
UPSTREAM_FAILED | Failed | ScrapeCreators could not return any usable data for a valid request. |
CONFIG_ERROR | Failed | The owner-managed ScrapeCreators secret or credit configuration is unavailable. |
The actor never inserts a synthetic “diagnostic post” into the dataset. Empty, invalid, and unavailable cases are represented truthfully in OUTPUT and RUN_SUMMARY, keeping exported post data clean.
JavaScript Example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/instagram-hashtag-scraper').call({hashtags: ['fitness'],datePosted: 'last-month',maxPostsPerHashtag: 25,outputMode: 'compact',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python Example
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('khadinakbar/instagram-hashtag-scraper').call(run_input={'hashtags': ['streetphotography'],'mediaType': 'reels','maxPostsPerHashtag': 25,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['post_url'], item['engagement_count'])
FAQ
Does this scrape every Instagram post for a hashtag?
No. The provider searches public Instagram posts indexed by Google, so this actor is best for public content research and monitoring rather than a complete Instagram-native archive. Widen datePosted, try related hashtags, and use the returned cursor for the next provider page when coverage is sparse.
Why did a valid request return no data?
A VALID_EMPTY outcome means the provider processed the request but found no matching public, indexed posts. It is not a successful result with hidden errors. Try a broader tag, an older date window, or mediaType: "all".
Are media URLs permanent?
No. Instagram CDN image and video URLs can expire. Save the media promptly if your workflow requires durable files.
Is this affiliated with Instagram or Meta?
No. This independent tool returns only publicly available data through a third-party provider. Use it only for lawful purposes and in accordance with the platform terms, applicable privacy laws, and your organization’s policies.
Notes
This actor returns public data only. It does not unlock private posts, private accounts, follower lists, or login-only Instagram surfaces.
Instagram CDN media URLs can expire. Download images or videos promptly if you need long-term storage.