Instagram Hashtag Posts Scraper
Pricing
from $3.00 / 1,000 instagram posts
Instagram Hashtag Posts Scraper
Scrape public Instagram posts and Reels by hashtag, with co-hashtags already parsed into a list plus likes, comments, views, author and post URL. Filter by date, Reels only or minimum likes, and resume large pulls from a saved cursor.
Pricing
from $3.00 / 1,000 instagram posts
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
4
Bookmarked
651
Total users
111
Monthly active users
15 days ago
Last modified
Categories
Share
What is Instagram Hashtag Posts Scraper?
Instagram Hashtag Posts Scraper turns one or more Instagram hashtags into a clean dataset of public posts and Reels. Each row is one post with its caption, parsed co-hashtags, mentions, like and comment counts, video views, media URLs, author username and post date. Social media teams, creator agencies, brand monitors and AI agents use it to see what a hashtag is posting right now, with no Instagram login or cookies.
Why teams choose this Instagram hashtag scraper
- Co-hashtags ready to count. Every post carries
caption_hashtagsas a list, so tag co-occurrence analysis takes one line of code. - Filters that shape the dataset before you pay for it.
datePosted,mediaType(all posts or Reels only) andminimumLikeskeep each run focused on the posts you need. - Resume where the last run stopped.
startCursorcontinues a hashtag from the cursor stored in the previous summary, so large collections run in predictable chunks. - Engagement fields on each row.
like_count,comment_count,engagement_countandvideo_view_countcome back as numbers, plusauthor_follower_countandengagement_ratewhenever the source includes the creator's follower count. - Provenance for every record.
source_url,source_cursorandscraped_atshow where and when each post was collected. - Built for AI agents. Flat JSON with stable snake_case keys, available through Apify MCP and the Apify API.
Best fit for this Actor
- Start here when your starting point is a hashtag, such as
fitnessorskincare, and you want one row per public post or Reel. - Use
startUrlswhen you already have Instagram hashtag page URLs likehttps://www.instagram.com/explore/tags/fitness/. - For a creator's own posts, start with Instagram Reels Scraper, which reads profiles as well as hashtags and keywords.
- When your topic is described in words rather than a hashtag, start with Instagram Niche Influencer Finder, which returns a ranked creator shortlist.
What people and AI agents ask this Actor to do
Find the most-liked Reels under #skincare from the last week. Which hashtags appear most often next to #fitness? Track every public post that uses our campaign hashtag this month. Pull captions from #ai posts for sentiment analysis.
| Request | Input to send |
|---|---|
| Top Reels under a hashtag this week | {"hashtags": ["skincare"], "datePosted": "last-week", "mediaType": "reels", "maxPostsPerHashtag": 50} |
| Co-hashtags that travel with a tag | {"hashtags": ["fitness"], "maxPostsPerHashtag": 200}, then count caption_hashtags |
| Campaign hashtag monitoring | {"hashtags": ["yourcampaign"], "datePosted": "last-month"} |
| High-engagement posts only | {"hashtags": ["travel"], "minimumLikes": 1000} |
| Compare two hashtags | {"hashtags": ["matcha", "coffee"], "maxPostsPerHashtag": 100} |
| Captions for text analysis | {"hashtags": ["ai"], "outputMode": "compact"} |
| Sample comments on each post | {"hashtags": ["travel"], "includeComments": true} |
| Continue a previous collection | {"hashtags": ["fitness"], "startCursor": "2"} |
Example workflow: from a hashtag to a creator shortlist
A skincare brand's social team starts with the hashtag skincare and wants Reels creators for a spring campaign. They send {"hashtags": ["skincare"], "datePosted": "last-month", "mediaType": "reels", "minimumLikes": 500}. The dataset returns each Reel's post_url, like_count, comment_count, video_view_count and author_username. They sort by engagement_count, keep the top creators, then pass those author_username values to Instagram Profile Scraper for bios and contact details. Finally they export the shortlist to a spreadsheet and schedule the same input weekly to monitor new posts under the tag.
How to scrape Instagram hashtag posts
- Add one or more hashtags in Hashtags, without the
#. - Pick a Date posted window and Media type, and set Max posts per hashtag.
- Click Start. Export the dataset as JSON, CSV or Excel, or read it through the API.
Quick start input
{"hashtags": ["fitness", "streetphotography"],"datePosted": "last-week","mediaType": "all","maxPostsPerHashtag": 50,"minimumLikes": 0,"includeComments": false,"outputMode": "full"}
Input reference
| Field | Type | What it controls |
|---|---|---|
hashtags | array of strings | Hashtags to collect, with or without #. Example: ["fitness"]. |
startUrls | array of objects | Instagram hashtag page URLs, as an alternative to hashtags. |
datePosted | string | Freshness window: any, last-hour, last-day, last-week, last-month or last-year. Default last-week. |
mediaType | string | all for posts and Reels, or reels for short-form video only. Default all. |
maxPostsPerHashtag | integer | Cap on saved posts per hashtag. Default 50. |
maxProviderPages | integer | Cap on source pages read per hashtag. Default 60. |
startCursor | string | Cursor from a previous summary, to continue the same hashtag. |
minimumLikes | integer | Keep only posts with at least this many likes. Default 0. |
includeComments | boolean | Add sample public comments to each post when available. Default false. |
outputMode | string | full for every field, compact for smaller rows. Default full. |
Output: Instagram hashtag data you receive
One dataset row is one public Instagram post or Reel found under the requested hashtag. The sample below is a real row with the creator username replaced by a placeholder.
| Field | What it contains |
|---|---|
hashtag | The hashtag this post was collected from |
post_url, shortcode, post_id | Link and identifiers of the post |
caption, caption_hashtags, mentions | Caption text, hashtags parsed from it, and mentioned accounts |
like_count, comment_count, engagement_count | Public engagement numbers |
video_view_count, video_duration_secs, is_reel, media_type | Video and format details |
thumbnail_url, display_url, video_url | Media links (Instagram media links expire after a while) |
author_username, author_profile_url, author_is_verified | Creator details |
author_follower_count, engagement_rate | Filled when the source includes the creator's follower count |
posted_at, scraped_at | When the post was published and when it was collected |
source_url, source_cursor, next_cursor_at_fetch | Provenance and pagination |
{"hashtag": "fitness","post_id": "3995858915387990545","shortcode": "Dd0JIM4R2IR","post_url": "https://www.instagram.com/reel/Dd0JIM4R2IR/","caption": "4 is more important than most people think. \n\n#fitness #consistency #fitnessjourney #fitnesssimplified","caption_hashtags": ["fitness","consistency","fitnessjourney","fitnesssimplified"],"mentions": [],"like_count": 980,"comment_count": 23,"engagement_count": 1003,"video_view_count": 11493,"video_duration_secs": 73.467,"is_reel": true,"media_type": "VIDEO","author_username": "example.creator","author_follower_count": null,"engagement_rate": null,"posted_at": "2026-09-28T02:45:06.000Z","source_url": "https://www.instagram.com/explore/tags/fitness/","source_cursor": null,"scraped_at": "2026-09-29T09:57:46.246Z"}
Coverage comes from public Instagram posts that are indexed for the hashtag. Broad, popular hashtags return the most rows. For very short windows such as last-hour, widen datePosted or add a related hashtag when you want more rows.
What each run outcome means
Every run writes an OUTPUT record and a detailed RUN_SUMMARY record to the default key-value store. Read OUTPUT.outcome to branch in code or in an agent.
| Outcome | Meaning |
|---|---|
COMPLETE | All requested hashtags were processed and every collected post was saved. |
PARTIAL | Useful posts were saved and a page cap, charge cap or source interruption ended the run early. |
VALID_EMPTY | The request was valid and no public posts matched the filters. |
INVALID_INPUT | The input was rejected; OUTPUT.message shows a working format. |
UPSTREAM_FAILED | The data source was unavailable for every requested hashtag. |
CONFIG_ERROR | The Actor's own data-source configuration needs attention from the maintainer. |
RUN_SUMMARY.nextCursorsByHashtag holds the cursor to pass into startCursor next time.
Pricing
This Actor uses Pay per event plus Apify platform usage. You pay one event for each public post or Reel saved to the dataset, plus a small start event, plus the platform usage of the run. The live Pricing tab on this page shows the current event prices.
Worked examples:
- 100 saved posts = 100 post events + 1 start event + platform usage.
- 3 hashtags × 50 posts = 150 post events + 1 start event + platform usage.
minimumLikesanddatePostedfilters apply before saving, so filtered-out posts add no post events.
Formula: post event price × saved posts + start event + platform usage. Set a maximum charge per run in the run options to cap spend.
Use Instagram Hashtag Posts Scraper with AI agents (MCP)
Connect this Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask in plain language:
Collect up to 50 public Reels posted under #skincare in the last week with at least 500 likes. Return post URL, caption, like count, comment count and author username, and tell me the outcome and the cursor to continue.
Agent checklist:
- Pass hashtags in
hashtagsand setmaxPostsPerHashtagto the number of rows you need. - Narrow with
datePosted,mediaTypeandminimumLikesbefore the run so cost matches the task. - Read rows with
get-dataset-items, then readOUTPUT.outcomefor the terminal state. - Keep
post_url,source_urlandscraped_atto cite where each post came from. - Continue a hashtag later with
startCursorfromRUN_SUMMARY.nextCursorsByHashtag.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~instagram-hashtag-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"hashtags": ["fitness"], "datePosted": "last-week", "mediaType": "reels", "maxPostsPerHashtag": 25}'
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-week',maxPostsPerHashtag: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const output = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT');console.log(items.length, output.value.outcome);
Choosing the right Instagram tool
Other Actors from the same developer pick up where this one stops.
| Your starting point | Tool to use | Why it fits |
|---|---|---|
| When you start from a hashtag | This Actor | One row per public post or Reel under the tag |
When you then want creator details for an author_username | Instagram Profile Scraper | Pass author_username values to get follower counts, bios and business contact details |
| When you want to verify a creator before a partnership | Instagram Fake Follower Auditor | An explainable audience-quality score for each shortlisted creator |
When you want to pass a top post_url on for leads | Instagram Post Engagers Scraper | The people commenting on your best posts, as warm leads |
| When you want the full comment thread on a post | Instagram Comments Scraper | Every public comment for any post_url |
| When you want to follow a Reel sound after spotting it | Instagram Audio Scraper | Every Reel that uses the same audio |
| When you want a creator's own Reels | Instagram Reels Scraper | Reels from profiles, hashtags or keywords |
| When you want to discover creators by topic | Instagram Niche Influencer Finder | A ranked creator shortlist from a plain-words niche |
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A broad, popular hashtag | Set maxPostsPerHashtag to the rows you need | A steady, full dataset |
| A niche or brand-new hashtag | Widen datePosted to last-month or any | More matching posts |
| Only short-form video matters | Set mediaType to reels | Reel rows only |
| A large collection | Collect in chunks and pass startCursor | Predictable, resumable runs |
| Media files matter | Download media links soon after collection | Reliable copies of thumbnails and videos |
Builder's note
I found that most hashtag questions are really co-occurrence and engagement questions, so I parse hashtags out of every caption into caption_hashtags and keep engagement as plain numbers on each row. I learned that follower counts appear on some source posts and not others, so author_follower_count and engagement_rate are filled only when that number is present, and the rest of the row stays complete either way.
FAQ
How many posts can I get for one hashtag?
Set maxPostsPerHashtag to the number you need. Popular hashtags usually fill the cap; niche hashtags return what is publicly indexed for the chosen date window.
Do I need an Instagram account or cookies?
No. The Actor reads public hashtag data only and needs no login, password or cookies.
How much does it cost to scrape 1,000 Instagram hashtag posts?
1,000 saved posts cost 1,000 post events plus one start event and platform usage. Multiply by the post event price on the Pricing tab.
Can I get only Instagram Reels for a hashtag?
Yes. Set mediaType to reels.
How do I continue collecting the same hashtag later?
Copy the cursor from RUN_SUMMARY.nextCursorsByHashtag into startCursor and keep the same hashtag and filters.
Why are follower count and engagement rate sometimes empty?
The Actor fills author_follower_count and engagement_rate only when the source post includes the creator's follower count. For complete follower data, pass the author_username values to Instagram Profile Scraper.
Responsible use
This Actor collects publicly available Instagram data only. Results include usernames and other personal data, which laws such as the GDPR and CCPA protect. Collect and use the data only with a lawful basis, keep it no longer than you need, and respect Instagram's terms. Read Apify's guide on whether web scraping is legal for more context. Instagram is a trademark of Meta Platforms, Inc. This independent Actor is not affiliated with, associated with, or endorsed by Meta. For questions or bugs, open a ticket in the Issues tab.