Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
Instagram Hashtag Scraper icon

Instagram Hashtag Scraper

Scrape Instagram hashtags at scale for $0.40 per 1,000 posts. Captions, likes, comments, image and video URLs, owner and timestamp.

5 from 1 review on Apify 350 runs on Apify $0.0004 per post ($0.4 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust hashtags, startUrls, resultsLimit (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0004 per post = $0.4 per 1,000

You are charged forWhenPrice
Post returnedCharged per post returned. Failed/empty runs not charged.$0.0004

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-23, and they are what you are actually charged.

Inputs

FieldWhat it doesType
hashtagsHashtags (with or without #) to scrape top & recent posts from.array
startUrlsOr paste /explore/tags/ URLs.array
resultsLimitMax posts per hashtag. Charged per post.integer
notionConnectorOptional Notion delivery.string
notionParentIdOptional Notion data-source id.string
sessionCookiesOptional, and normally not needed — runs work with no cookie at all. Supply your own Instagram account cookie here to run on your own account's rate limit, and to reach feeds the no-setup route does not cover. In Chrome: F12 -> Application -> Cookies -> https://www.instagram.com -> copy the sessionid value. Use an account you own and are authorized to automate. Cookie values are never logged or written to output.array

What you get

A structured dataset — each result includes fields like:

ownerUsernamecaptionlikesCountcommentsCounturl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

15 ready-to-run use cases

Monitor a branded hashtag campaign

Monitor a branded hashtag campaign. Runs on #justdoit — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Track crypto conversation by hashtag

Track crypto conversation by hashtag. Runs on #bitcoin and #ethereum — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Scrape #fashion Instagram Posts

Scrape #fashion Instagram Posts. Runs on #fashion — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Scrape #fitness Instagram Posts

Scrape #fitness Instagram Posts. Runs on #fitness — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Scrape #foodporn Instagram Posts

Scrape #foodporn Instagram Posts. Runs on #foodporn — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Track gaming hashtags for community research

Track gaming hashtags for community research. Runs on #gaming and #esports — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Build an ad-creative swipe file from a hashtag

Build an ad-creative swipe file from a hashtag. Runs on #adcreative and #marketingtips. No login needed.

Track pet-niche hashtags for brand partnerships

Track pet-niche hashtags for brand partnerships. Runs on #dogsofinstagram and #catsofinstagram. No login needed.

Collect real-estate listings posted to hashtags

Collect real-estate listings posted to hashtags. Runs on #realestate and #justlisted. No login needed.

Scrape #skincare Instagram Posts

Scrape #skincare Instagram Posts. Runs on #skincare — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Discover tattoo artists by style hashtag

Discover tattoo artists by style hashtag. Runs on #tattooartist and #finelinetattoo. No login needed.

Scrape #travel Instagram Posts

Scrape #travel Instagram Posts. Runs on #travel — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Find UGC under a branded hashtag to repost

Find UGC under a branded hashtag to repost. Runs on #sharecoke and #myamex — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Find wedding vendors posting under industry hashtags

Find wedding vendors posting under industry hashtags. Runs on #weddingphotographer and #weddingflorist. No login needed.

Detect weekly movement in a hashtag

Detect weekly movement in a hashtag. Runs on #trending — captions, likes, comments, media URLs, owner and timestamp. No login needed.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos or users and export clean rows: stars, forks, language, topics, license, plus user bio, company, location and follower count.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tags. Get structured questions with score, answers, views, tags, author, and link as JSON or CSV.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata - version, license, repo, keywords, and npm download counts. Search by keyword or look up exact names. No API key needed.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv and get clean JSON: titles, abstracts, authors, categories, DOI, dates and PDF links. No API key. Sort by relevance or date; push to Notion.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers by keyword. Get titles, authors, venue, year, citations, concepts, OA links and full abstracts as structured JSON. No API key.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ scholarly works on Crossref and export DOI, authors, journal, citation count, and abstracts as JSON or CSV. Filter by type and date.

2 use cases

See all Developer & Research Tools →

⚡ Instagram Hashtag Scraper — Posts by Hashtag

Pull posts from any Instagram hashtag and get back clean, flat records — caption, like & comment counts, media URLs, owner, hashtags, mentions and timestamp. Feed it a list of hashtags (or /explore/tags/ URLs), set a cap, and export to JSON, CSV or Excel, hit it from the API, or have results delivered straight to Notion. Just $0.40 per 1,000 posts — billed only for posts actually returned.

> Instagram serves hashtag feeds only to a signed-in caller — there is no logged-out route to them at any address or fingerprint. This actor reads them through a licensed data source, so a run works out of the box: no login, no cookie, no app review, nothing to paste. Your own account cookie is optional — see Coverage, cookies and rate limits.

What you need to know before you run it

Hashtag feeds work out of the box. You supply nothing, and the run returns posts.

Out of the box you get the tag's top feed. This is the one real limitation and it is worth knowing before you start. Instagram has been retiring the chronological recent tag feed: our no-setup route returns an empty list for it on every tag we tested, so runs read the top feed and page through it. If you supply your own cookie in sessionCookies the run also *requests* the recent tab — but Instagram restricts that feed heavily now, so treat any newest-first coverage as a bonus rather than something to build on.

Why this scraper wins

  • 🔓 Nothing to set up — the login the hashtag feed requires is handled for you by a licensed data source. No cookie, no bearer token, no app, no business API approval. An empty sessionCookies is the normal way to run this actor.
  • 🌐 No proxy to configure — default runs need none. When you do supply your own cookie, the actor rotates Apify datacenter addresses and hops on every block, included in the run cost; no metered per-gigabyte proxy to pay for. Leave the default and it just works.
  • 💸 Flat $0.40 / 1,000 posts — charged per post returned, with no volume tiers. Empty or blocked runs cost nothing.
  • 🧹 Clean, flat output — one tidy record per post, ready for spreadsheets, dashboards or LLM pipelines. No raw nested soup.
  • 🔁 Auto-dedupe — the same post is never returned (or charged) twice in a run.
  • 📬 Built-in delivery — optionally push every run straight into Notion via Apify connectors, zero extra code.
  • 🚦 Honest errors — if a tag returns nothing or a request is refused, you get a clearly labeled diagnostic row (RATE_LIMITED, BLOCKED, NOT_FOUND, SERVER_ERROR, NO_RESULTS, PARTIAL) explaining what happened, instead of silent emptiness. Diagnostic rows are never charged.

What you can scrape

ModeInputNotes
Hashtag feedhashtags (with or without #)Top feed out of the box; with a cookie the run also tries the recent tab, which Instagram now restricts
Hashtag URLsstartUrls (/explore/tags/<tag>/)Same as above, paste-friendly

Input

  • hashtags — list of hashtags to scrape, e.g. nature, travel (the # is optional).
  • startUrls — or paste https://www.instagram.com/explore/tags/<tag>/ URLs instead.
  • resultsLimit — max posts per hashtag (default 50, up to 2000). You pay per post.
  • sessionCookies *(optional)* — normally left empty. Paste your own throwaway-account sessionid cookie(s) here, one per line, to run on your own account's quota and to let the run also try the recent tab. See Coverage, cookies and rate limits.
  • proxyConfiguration — leave the default (rotating Apify datacenter addresses). You can paste your own proxy servers instead and they are used as-is; metered residential groups are not offered by this actor.
  • notionConnector / notionParentId — optional, deliver results to a Notion data source.

Output (one record per post)

{

  "ok": true,

  "type": "image",

  "shortCode": "C1aBcDeFgHi",

  "url": "https://www.instagram.com/p/C1aBcDeFgHi/",

  "caption": "Golden hour over the fjord 🏔️ #nature #travel",

  "hashtags": ["nature", "travel"],

  "mentions": [],

  "likesCount": 18423,

  "commentsCount": 204,

  "videoViewCount": null,

  "displayUrl": "https://instagram.fxxx.fna.fbcdn.net/v/....jpg",

  "videoUrl": null,

  "images": ["https://instagram.fxxx.fna.fbcdn.net/v/....jpg"],

  "isVideo": false,

  "dimensions": { "height": 1080, "width": 1080 },

  "ownerUsername": "wanderlust",

  "ownerId": "1789456123",

  "timestamp": "2026-06-21T07:14:02.000Z",

  "hashtag": "nature"

}

Records look the same whichever lane produced them, and the same post is never delivered — or charged — twice in a run.

Coverage, cookies and rate limits

Runs work out of the box: the hashtag feed needs a signed-in caller, and this actor reads it through a licensed paid data source, so there is nothing for you to set up and nothing to keep alive.

Supply your own Instagram account cookie in sessionCookies when you want either of these:

  • the recent tab — the chronological feed, which the paid lane does not cover;
  • your own quota — a cookie run reads Instagram directly on your own account's rate limit, unaffected by this actor's per-run data-source budget (see Pricing).

When you supply a cookie it is used on its own — nothing else is mixed in — so the throughput you get is entirely yours. If Instagram refuses your cookie and the run collects nothing with it, the run falls back to the licensed source rather than handing you an empty dataset.

Getting the cookie (about a minute): log in to instagram.com on a throwaway accountF12ApplicationCookies → copy the sessionid value → paste it into sessionCookies, one per line. Never use an account you care about: automated reading can get an account rate-limited or checkpointed, and Instagram invalidates sessions on its own schedule.

Cookie values, proxy URLs and request headers are never written to the log or the dataset. Logs carry counts, retry reasons and result totals only.

Pricing

$0.40 per 1,000 posts ($0.0004 each). Flat rate — no volume tiers, no plan gates — and you are charged only for posts actually returned.

That flat $0.40 is charged on every Apify plan, including the free one — tier-priced actors advertise the rate a top-plan account pays, not the one a new account lands on. Duplicates are removed before charging, and failed, blocked or empty runs cost nothing. Diagnostic rows — including the one that explains a run stopping early — are never charged.

Each run also carries its own budget at the licensed data source. A very large resultsLimit can reach it: when that happens the run delivers everything it already collected, adds one uncharged PARTIAL row saying it stopped and why, and finishes cleanly. Re-run to continue.

> From 19 August 2026: the per-post price stays at $0.0004, and a $0.001 run-start fee is charged once per run.

FAQ

Do I need to supply sessionid cookies? No. Instagram's hashtag feed is login-gated — there is no keyless path to it — but the actor reads it through a licensed data source, so runs work with an empty sessionCookies.

When is it worth supplying my own? When you want the run to read on your own account's quota instead of this actor's per-run data-source budget. It also lets the run try the chronological recent tab, though Instagram now restricts that feed and it frequently returns nothing.

Do I need to configure a proxy? No. Default runs need no proxy at all. If you supply your own cookie, the actor rotates its own exit addresses and hops on every block, and that is included in the run cost — or paste your own proxy servers in proxyConfiguration and they will be used exactly as given.

It returned an errorCode row — why? That's the actor telling you exactly what happened (RATE_LIMITED, BLOCKED, NOT_FOUND, SERVER_ERROR, NO_RESULTS, PARTIAL) instead of failing silently. Those rows are free. Retry, lower the volume, or check that the tag exists.

My run stopped before my limit — what happened? It reached the run's data-source budget. The posts already delivered are complete and correct, one uncharged row tells you it stopped, and a re-run continues from there.

Can I deliver to Notion? Yes — set notionConnector and notionParentId and every run lands in your Notion data source automatically.

What does a 2,000-post run cost? $0.80 for 2,000 posts returned. From 19 August 2026, $0.801 — the extra $0.001 is the run-start fee, charged once per run however many posts come back.