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 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

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

142

Total users

52

Monthly active users

5 hours ago

Last modified

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

FieldExample
hashtag"fitness"
post_url"https://www.instagram.com/reel/DOOJ_zSjcnx/"
caption"Morning grind #fitness #gym"
caption_hashtags["fitness", "gym"]
like_count35854
comment_count1263
play_count593055
is_reeltrue
media_type"VIDEO"
posted_at"2025-09-05T12:51:42.000Z"
author_username"creator"
author_follower_count1369176
engagement_rate2.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.

OutcomeRun statusMeaning
COMPLETESucceededAll requested work completed and saved posts were returned.
PARTIALSucceededUseful posts were saved, but a provider error, write issue, page cap, or charge cap prevented full completion.
VALID_EMPTYSucceededA valid request ran correctly but no public posts matched.
INVALID_INPUTSucceededThe input can be corrected; check OUTPUT.message for a working format.
UPSTREAM_FAILEDFailedScrapeCreators could not return any usable data for a valid request.
CONFIG_ERRORFailedThe 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 ApifyClient
client = 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.