Instagram Hashtag Posts Scraper avatar

Instagram Hashtag Posts Scraper

Pricing

from $3.00 / 1,000 instagram posts

Go to Apify Store
Instagram Hashtag Posts Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

4

Bookmarked

651

Total users

111

Monthly active users

15 days ago

Last modified

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_hashtags as 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) and minimumLikes keep each run focused on the posts you need.
  • Resume where the last run stopped. startCursor continues 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_count and video_view_count come back as numbers, plus author_follower_count and engagement_rate whenever the source includes the creator's follower count.
  • Provenance for every record. source_url, source_cursor and scraped_at show 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 fitness or skincare, and you want one row per public post or Reel.
  • Use startUrls when you already have Instagram hashtag page URLs like https://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.

RequestInput 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

  1. Add one or more hashtags in Hashtags, without the #.
  2. Pick a Date posted window and Media type, and set Max posts per hashtag.
  3. 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

FieldTypeWhat it controls
hashtagsarray of stringsHashtags to collect, with or without #. Example: ["fitness"].
startUrlsarray of objectsInstagram hashtag page URLs, as an alternative to hashtags.
datePostedstringFreshness window: any, last-hour, last-day, last-week, last-month or last-year. Default last-week.
mediaTypestringall for posts and Reels, or reels for short-form video only. Default all.
maxPostsPerHashtagintegerCap on saved posts per hashtag. Default 50.
maxProviderPagesintegerCap on source pages read per hashtag. Default 60.
startCursorstringCursor from a previous summary, to continue the same hashtag.
minimumLikesintegerKeep only posts with at least this many likes. Default 0.
includeCommentsbooleanAdd sample public comments to each post when available. Default false.
outputModestringfull 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.

FieldWhat it contains
hashtagThe hashtag this post was collected from
post_url, shortcode, post_idLink and identifiers of the post
caption, caption_hashtags, mentionsCaption text, hashtags parsed from it, and mentioned accounts
like_count, comment_count, engagement_countPublic engagement numbers
video_view_count, video_duration_secs, is_reel, media_typeVideo and format details
thumbnail_url, display_url, video_urlMedia links (Instagram media links expire after a while)
author_username, author_profile_url, author_is_verifiedCreator details
author_follower_count, engagement_rateFilled when the source includes the creator's follower count
posted_at, scraped_atWhen the post was published and when it was collected
source_url, source_cursor, next_cursor_at_fetchProvenance 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.

OutcomeMeaning
COMPLETEAll requested hashtags were processed and every collected post was saved.
PARTIALUseful posts were saved and a page cap, charge cap or source interruption ended the run early.
VALID_EMPTYThe request was valid and no public posts matched the filters.
INVALID_INPUTThe input was rejected; OUTPUT.message shows a working format.
UPSTREAM_FAILEDThe data source was unavailable for every requested hashtag.
CONFIG_ERRORThe 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.
  • minimumLikes and datePosted filters 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:

  1. Pass hashtags in hashtags and set maxPostsPerHashtag to the number of rows you need.
  2. Narrow with datePosted, mediaType and minimumLikes before the run so cost matches the task.
  3. Read rows with get-dataset-items, then read OUTPUT.outcome for the terminal state.
  4. Keep post_url, source_url and scraped_at to cite where each post came from.
  5. Continue a hashtag later with startCursor from RUN_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 pointTool to useWhy it fits
When you start from a hashtagThis ActorOne row per public post or Reel under the tag
When you then want creator details for an author_usernameInstagram Profile ScraperPass author_username values to get follower counts, bios and business contact details
When you want to verify a creator before a partnershipInstagram Fake Follower AuditorAn explainable audience-quality score for each shortlisted creator
When you want to pass a top post_url on for leadsInstagram Post Engagers ScraperThe people commenting on your best posts, as warm leads
When you want the full comment thread on a postInstagram Comments ScraperEvery public comment for any post_url
When you want to follow a Reel sound after spotting itInstagram Audio ScraperEvery Reel that uses the same audio
When you want a creator's own ReelsInstagram Reels ScraperReels from profiles, hashtags or keywords
When you want to discover creators by topicInstagram Niche Influencer FinderA ranked creator shortlist from a plain-words niche

Best results

Starting situationHelpful actionExpected outcome
A broad, popular hashtagSet maxPostsPerHashtag to the rows you needA steady, full dataset
A niche or brand-new hashtagWiden datePosted to last-month or anyMore matching posts
Only short-form video mattersSet mediaType to reelsReel rows only
A large collectionCollect in chunks and pass startCursorPredictable, resumable runs
Media files matterDownload media links soon after collectionReliable 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.