Instagram Hashtag Scraper avatar

Instagram Hashtag Scraper

Pricing

from $1.50 / 1,000 post scrapeds

Go to Apify Store
Instagram Hashtag Scraper

Instagram Hashtag Scraper

Scrape top or recent Instagram posts for any hashtag without a login. Give a list of tag names and get back each post with its permalink, owner (username, name, verified), media type, like, comment and view counts, caption, and post date. Pagination is walked up to your chosen limit per hashtag.

Pricing

from $1.50 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Goutam Soni

Goutam Soni

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

3 days ago

Last modified

Share

Instagram Hashtag Scraper - Top & Recent Posts, Engagement, Owners

Scrape top or recent Instagram posts for any hashtag. Get each post's permalink, the account that published it (username, full name, verified badge), media type, likes, comments, view counts, full caption, and post date, without an Instagram API key, login, or cookies.

What this Instagram hashtag scraper does

Pass a list of tag names (with or without the #, full tag links work too) and the actor returns one clean JSON row per post. Choose top posts to surface the highest-engagement content for a tag, or recent posts to get the freshest content in reverse-chronological order. Pagination is walked automatically until it hits the cap you set or the tag runs out of posts.

Perfect for trend research, creator discovery, campaign tracking, competitor analysis, and content dataset building on Instagram at scale.

Why use this Instagram hashtag scraper

  • No API key, no login, no cookies. Works on any public hashtag.
  • Top or recent, your choice. Top is engagement-ranked, recent is newest first. Same fields either way, only the ordering changes.
  • Creator discovery built in. Every row carries the posting account's username, display name, numeric ID and verified badge, so a hashtag run doubles as a prospect list.
  • Deep pagination. Ask for hundreds or thousands of posts per tag and the scraper walks page after page until your cap is reached.
  • Media type on every row. Photo, video or carousel, plus a play count where the post is a video or reel.
  • Several hashtags at once, processed in parallel.
  • Residential proxies built in with rotating IPs.
  • Clean, flat JSON. Every field is always present, with null where a value genuinely does not exist, so CSV exports never shift columns.

What data you get per post

FieldTypeDescription
typestringRecord type, always "post"
hashtagstringThe tag this post was found under, without the #
shortcodestringURL slug (instagram.com/p/{shortcode})
urlstringPermalink to the post
ownerUsernamestringUsername of the account that published the post
ownerFullNamestringDisplay name of the publishing account
ownerIdstringNumeric Instagram user ID of the publishing account
ownerIsVerifiedbooleanVerified badge on the publishing account
mediaTypestring"photo", "video", or "carousel"
isVideobooleanConvenience flag, true for videos and reels
likeCountintegerNumber of likes
commentCountintegerNumber of comments
viewCountintegerPlay count for videos and reels, null for photos and carousels
captionstringFull caption text, with hashtags, mentions and emojis
takenAtstringWhen the post was published (ISO 8601 UTC)
displayUrlstringFull-resolution image URL
scrapedAtstringWhen the row was scraped (ISO 8601 UTC)

How to use the Instagram Hashtag Scraper

  1. Click Try for free on the actor page.
  2. Enter tag names in the hashtags input, without the #. A full tag link works too.
  3. Pick resultType: top (highest engagement) or recent (freshest first). Default is top.
  4. Set maxPostsPerHashtag (default 100, up to 5,000) to cap how many posts come back per tag.
  5. Tune concurrency (default 5, up to 20) if you are scraping many tags at once.
  6. Click Save & start. Download in JSON, CSV, Excel, XML or HTML, or stream via API.

Example input

{
"hashtags": ["travel", "foodphotography"],
"resultType": "top",
"maxPostsPerHashtag": 500,
"concurrency": 5
}

Example output

{
"type": "post",
"hashtag": "travel",
"shortcode": "CabcdEFghij",
"url": "https://www.instagram.com/p/CabcdEFghij/",
"ownerUsername": "example_user",
"ownerFullName": "Jane Doe",
"ownerId": "100000001",
"ownerIsVerified": false,
"mediaType": "video",
"isVideo": true,
"likeCount": 735,
"commentCount": 196,
"viewCount": 72961,
"caption": "Sunset over the old town #travel",
"takenAt": "2026-01-18T14:32:00.000Z",
"displayUrl": "https://example.com/media.jpg",
"scrapedAt": "2026-01-20T09:00:00.000Z"
}

Top use cases

  • Trend research. Track how a topic moves over time by scraping the same tag on a schedule and charting engagement.
  • Creator discovery. Pull the top posts for a niche tag and you have a ranked shortlist of accounts already producing content in that space.
  • Campaign and branded-hashtag tracking. Measure how much content your campaign tag is generating and who is generating it.
  • Competitor analysis. See who dominates the tags your brand cares about and what their posts look like.
  • Content strategy. Compare caption style, media type and posting time against engagement across hundreds of posts.
  • Market research. Map an interest or product category through the tags people actually use.
  • Content dataset building. A clean, structured corpus of captions and engagement metrics for analysis or model training.

Integrations

Apify API

$curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json"

Python

from apify_client import ApifyClient
from collections import Counter
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("goat255/instagram-hashtag-scraper").call(run_input={
"hashtags": ["travel", "foodphotography"],
"resultType": "top",
"maxPostsPerHashtag": 200,
})
posts = list(client.dataset(run["defaultDatasetId"]).iterate_items())
# Which accounts appear most often across the tag?
top_creators = Counter(p["ownerUsername"] for p in posts if p.get("ownerUsername"))
for username, count in top_creators.most_common(10):
print(f"@{username}: {count} posts")

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('goat255/instagram-hashtag-scraper').call({
hashtags: ['travel', 'foodphotography'],
resultType: 'top',
maxPostsPerHashtag: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const videos = items.filter((p) => p.isVideo);
console.log(`${videos.length} of ${items.length} top posts are videos`);

No-code integrations

Stream results to Google Sheets, Slack, Zapier, Make, Amazon S3, HubSpot, or any webhook via Apify Integrations.

Pricing

Pay per result. No subscription. No per-run start fee. You only pay for the posts you actually receive.

EventPrice
Post scraped (primary)$0.0015

Apify's $5 platform free credit applies on first use, which is roughly 3,300 free posts to start.

FAQ

Do I need an Instagram account or API key?

No. The scraper works on any public hashtag without a login, cookies, or the Instagram Graph API.

What is the difference between top and recent?

resultType changes the ordering, not the fields. Top posts are engagement-ranked by Instagram, so they skew toward larger accounts and older high-performing content. Recent posts are newest first and are the right choice for live campaign monitoring.

Why did I get fewer posts than I asked for?

The tag ran out. Ask for 500 posts on a small niche tag and you get however many exist, not 500 padded rows. The run log states the count per tag.

Why is viewCount empty on some rows?

Play counts only exist for videos and reels. Photos and carousels have no play count, so the field is null on those rows. Use isVideo to filter to rows where a play count is meaningful.

Should I include the # in my input?

You do not need to. Plain tag names work, and a full tag link is accepted and cleaned automatically.

Can I scrape several hashtags in one run?

Yes. Pass as many as you like in the hashtags array. They are processed in parallel and every row carries a hashtag field, so results are easy to group and filter.

Can I export to CSV, Google Sheets or Excel?

Yes. JSON, CSV, Excel, XML and HTML are all supported, plus direct integrations to Google Sheets, Zapier, Make, Slack and S3.

What happens if a hashtag cannot be reached?

The run does not fail. The actor emits a row with ok: false and a generic reason for that tag, then carries on with the rest of your list. A post whose owner has since gone private or been removed simply drops out of the grid, so the actor returns what the tag currently exposes.

Support

Found a bug or a missing field? Open an issue on the actor page. Reviews are read and replied to.

Privacy

To improve our actors we collect anonymized usage telemetry (run stats and input patterns). No personal account data is collected.