Instagram Hashtag Scraper avatar

Instagram Hashtag Scraper

Pricing

$24.99/month + usage

Go to Apify Store
Instagram Hashtag Scraper

Instagram Hashtag Scraper

This Instagram Hashtag Scraper captures posts, reels, images, and engagement details from any public hashtag. Ideal for tracking trends, analyzing competitors, and gathering visual datasets. High-speed, stable, and perfect for automation and large-volume research.

Pricing

$24.99/month + usage

Rating

5.0

(1)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

1

Bookmarked

25

Total users

5

Monthly active users

2 days ago

Last modified

Share

Instagram Hashtag Intelligence & Trend Radar

A variant of the Instagram Hashtag Scraper. The scraping core is identical โ€” same internal Instagram API (/api/v1/tags/{tag}/sections/), same session/proxy handling, same post parser. It scrapes posts & reels by hashtag exactly like the base, then adds two layers computed only from the posts it just scraped:

  1. ๐Ÿง  Intelligence โ€” one summary row per hashtag with aggregate insight.
  2. ๐Ÿ“ˆ Trend โ€” a cross-run delta: what is new for a hashtag since the last run.

No value in the added output is estimated, modeled, or hardcoded. Every field is either a raw scraped value or a transparent count / average / median / set-diff of scraped values.


Relationship to the base scraper

Base (instagram-hashtag-scraper)This variant
Scraping coreinternal IG API + impit + proxy ladderidentical (verbatim)
Post output rowsโค๏ธ likes, ๐Ÿ’ญ comments, caption, hashtags, mentions, owner, media, music โ€ฆidentical, byte-for-byte, still charged as row_result
Section header rowsfree divider row per hashtagidentical
Extra outputโ€”one free hashtagReport row per hashtag (intelligence + trend)
Purposecollect postscollect posts and profile the hashtag over time

Every base input key is kept with the same name, meaning and default. The variant only adds opt-in keys. If you set only the base keys and turn the two feature toggles off, you get base-equivalent output.


Input

All base keys are unchanged:

KeyTypeDefaultNotes
startUrlsarray["webscraping"]Hashtags, hashtag URLs, or keywords (with keywordSearch).
sessionidstring (secret)โ€”Required. Instagram sessionid cookie.
contentTypeposts | reelsposts
keywordSearchbooleanfalseResolve a keyword to its matching hashtag.
resultsLimitinteger 1โ€“100020Posts collected per hashtag.
proxyConfigurationobject{ useApifyProxy: false }

Variant-only additive keys:

KeyTypeDefaultNotes
emitIntelligencebooleantrueEmit the per-hashtag intelligence summary row.
trackTrendsbooleantruePersist seen post IDs and report the cross-run delta.
topNinteger 1โ€“5010How many items to keep in each ranked list.

Output

Post rows โ€” identical to the base

Each scraped post is pushed as its own dataset row with the base schema (id, type, shortCode, caption, hashtags, mentions, url, commentsCount, likesCount, timestamp, ownerUsername, videoUrl, musicInfo, childPosts, โ€ฆ). These are the billable row_result rows.

hashtagReport row โ€” one per hashtag (free)

Marked with isReport: true, type: "hashtagReport". Fields (all derived from the scraped posts of that hashtag):

Intelligence (emitIntelligence)

  • postsAnalyzed, likesKnownFor (coverage, e.g. "18/20" โ€” likes hidden by the author are counted as unknown, never faked to 0)
  • totalLikes, avgLikes, medianLikes, totalComments, avgComments, medianComments
  • mediaTypeBreakdown โ€” {Image, Video, Sidecar, Reel} counts
  • coHashtags โ€” [{tag, count}] other hashtags co-occurring in the captions
  • topMentions โ€” [{username, count}]
  • audioTrends โ€” [{title, artist, audioId, uses}] from each post's musicInfo
  • postingHoursUtc, postingWeekdaysUtc โ€” histograms from each post's timestamp
  • topCreators โ€” [{username, posts, totalLikes, totalComments}]
  • topPosts โ€” top topN by (likes + comments)

Trend (trackTrends)

  • trendIsFirstRun โ€” true when this hashtag has no prior state
  • trendNewCount โ€” posts not seen in any previous run
  • trendNewSincePrevRunAt โ€” timestamp of the previous run (null on first run)
  • trendTotalKnownIds โ€” size of the persisted seen-ID set
  • trendEmergingCoHashtags โ€” [{tag, count}] among the NEW posts only
  • trendRisingCreators โ€” [{username, newPosts}]
  • trendObservedNewPerHour โ€” new posts รท hours since previous run (observed in the scraped sample; null on the first run)

Two dataset views are provided: Scraped Posts (base view) and Hashtag Intelligence & Trend.


How the trend state works

Seen post IDs are stored per hashtag in a named key-value store (instagram-hashtag-trend-state) that persists across runs โ€” the per-run default store would reset every time. Each run reads the previous ID set, diffs it against the IDs scraped this run to compute what's new, then writes the union back (bounded to the most recent 100k IDs per hashtag). Delete the store to reset a hashtag's history.

Data-provenance guarantee

Every field in the report traces to a scraped value:

  • counts/averages/medians โ†’ the posts' own likesCount / commentsCount
  • coHashtags / topMentions โ†’ the posts' hashtags / mentions arrays
  • audioTrends โ†’ each post's musicInfo object
  • posting histograms โ†’ each post's timestamp
  • trend deltas โ†’ set-diff of scraped post ids + date math against the stored run time

Nothing is pulled from a constant table, an assumed default, or a proprietary model.

Billing

Post rows are charged as row_result (pay-per-event), identical to the base. Section headers and the hashtagReport rows are free metadata (not charged). The row_result event must be configured in the Console (Publication โ†’ Monetization) for charging to take effect; until then the platform logs an "ignored attempt to charge" no-op.