Instagram Hashtag Posts Scraper avatar

Instagram Hashtag Posts Scraper

Pricing

Pay per event

Go to Apify Store
Instagram Hashtag Posts Scraper

Instagram Hashtag Posts Scraper

Extract public Instagram hashtag posts with captions, timestamps, engagement metrics, creator metadata, and media links.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Extract public Instagram hashtag posts for campaign monitoring, creator discovery, UGC research, and recurring content analysis. The Actor collects post and reel URLs, captions, timestamps, visible engagement, creator metadata, media previews, hashtags, and mentions without requiring an Instagram login.

Use a hashtag such as apify, a full public hashtag URL, or several campaign tags. Results are saved as typed records that can be exported to JSON, CSV, Excel, XML, RSS, or connected to an Apify integration.

What does Instagram Hashtag Posts Scraper do?

The Actor opens each public Instagram hashtag page, discovers visible post and reel cards, and optionally visits each post to enrich the record. Detail enrichment can add the published timestamp, full caption, creator display name, likes, and comments when Instagram exposes those values publicly.

It deliberately excludes private profiles and login-only content. Missing public fields are returned as null, never guessed or converted to zero.

Who is this Instagram hashtag scraper for?

  • Social media managers monitoring campaign hashtags and public UGC.
  • Influencer marketers finding creators active in a niche.
  • Brand teams reviewing new posts under product and event tags.
  • Researchers collecting repeatable public content samples.
  • Agencies preparing hashtag reports for clients.
  • Automation teams sending fresh post records to sheets, databases, or AI tools.

Why use this Actor?

  • Accept hashtags with or without # and full Instagram hashtag URLs.
  • Process up to 20 distinct hashtags in one run.
  • Include or exclude reels.
  • Enrich public posts with timestamps and visible engagement.
  • Preserve stable shortcodes and canonical post URLs for deduplication.
  • Export structured data through the Apify API and integrations.
  • Run on a schedule for repeatable monitoring.
  • Use direct access by default and configure Apify Proxy only when needed.

What Instagram hashtag post data can I extract?

FieldDescription
hashtagNormalized hashtag that produced the record.
postUrlCanonical public post or reel URL.
shortcodeStable Instagram shortcode from the URL.
mediaTypepost or reel.
captionPublic caption text when available.
timestampPublic post timestamp in ISO 8601 format.
likesCountVisible public like count.
commentsCountVisible public comment count.
viewsCountVisible reel view count from the hashtag grid.
authorUsernamePublic creator username.
authorDisplayNamePublic creator display name when exposed.
authorProfileUrlDirect public creator profile URL.
thumbnailUrlPublic media preview image URL.
videoUrlPublic video URL when exposed during the run.
hashtagsUnique hashtags parsed from the caption.
mentionsUnique account mentions parsed from the caption.
sourceUrlHashtag page used for discovery.
scrapedAtTimestamp when the Actor discovered the result.

How much does it cost to scrape Instagram hashtag posts?

The Actor uses pay-per-event pricing: a small start charge plus one result event for each post or reel saved. BRONZE prices are $0.0022 per run and $0.00148 per saved result; the live Actor page remains the source of truth.

Saved postsBRONZE charge calculation
5One start event plus 5 × the per-result price
25One start event plus 25 × the per-result price
100One start event plus 100 × the per-result price

These examples cover Actor charges. Instagram route, proxy, and platform usage can vary. Start with a small limit, inspect the dataset, and increase it only when the output fits your workflow.

How to scrape Instagram posts by hashtag

  1. Add one or more hashtags, such as apify or webscraping.
  2. Optionally add full URLs such as https://www.instagram.com/explore/tags/apify/.
  3. Set the maximum number of posts per hashtag.
  4. Choose whether to include reels.
  5. Keep detail enrichment enabled for timestamps and engagement fields.
  6. Run the Actor and inspect the default dataset.
  7. Export the data or connect a schedule, webhook, or integration.

Input parameters

hashtags

A list of up to 20 hashtags. Values can include or omit the leading #.

["apify", "#webscraping"]

startUrls

Optional public Instagram hashtag URLs. URL inputs and hashtags are combined and deduplicated.

[{ "url": "https://www.instagram.com/explore/tags/apify/" }]

maxPostsPerHashtag

Maximum unique results saved for each hashtag, from 1 to 200. Instagram may expose fewer public cards than requested.

includeReels

When true, the Actor returns reels and regular posts. Set it to false when a campaign workflow requires only regular posts.

includeDetails

When true, each discovered public post is opened for caption, timestamp, visible engagement, and creator enrichment. Disable it for a faster URL-and-preview collection workflow.

proxyConfiguration

Optional Apify Proxy configuration. Direct access is the default. If Instagram limits a route, you can explicitly enable a datacenter or residential proxy configuration. The Actor never silently enables a paid residential fallback.

Example input

{
"hashtags": ["apify"],
"maxPostsPerHashtag": 5,
"includeReels": true,
"includeDetails": true,
"proxyConfiguration": {
"useApifyProxy": false
}
}

Example output

{
"hashtag": "apify",
"postUrl": "https://www.instagram.com/reel/DX5rTD_soy2/",
"shortcode": "DX5rTD_soy2",
"mediaType": "reel",
"caption": "I literally used Claude (and Apify and LinkedIn) to get unlimited jobs\n#ai #aitools #claude #apify #linkedin",
"timestamp": "2026-05-04T03:14:57.000Z",
"likesCount": 13000,
"commentsCount": 25000,
"viewsCount": 458000,
"authorUsername": "msbintel",
"authorDisplayName": "MSB Intel | Everything AI",
"authorProfileUrl": "https://www.instagram.com/msbintel/",
"thumbnailUrl": "https://scontent.cdninstagram.com/...jpg",
"videoUrl": null,
"hashtags": ["#ai", "#aitools", "#claude", "#apify", "#linkedin"],
"mentions": [],
"sourceUrl": "https://www.instagram.com/explore/tags/apify/",
"scrapedAt": "2026-08-02T02:10:00.000Z"
}

Public page layouts vary, so fields can be null. A null count means “not exposed,” not zero engagement.

Campaign monitoring workflow

For recurring hashtag campaign monitoring:

  1. Create one Actor task with the campaign tags.
  2. Keep shortcodes and timestamps in the output.
  3. Schedule the task hourly, daily, or weekly.
  4. Deduplicate downstream records by shortcode.
  5. Compare new rows with the previous dataset or your database.
  6. Send new creator or engagement records to a spreadsheet, Slack, or a review queue.

The Actor collects snapshots; it does not maintain a hidden cross-run history or send alerts by itself. Apify schedules, webhooks, and downstream storage provide those workflow steps.

Creator discovery workflow

Collect a focused niche hashtag, keep detail enrichment enabled, and group output by authorUsername. Use authorProfileUrl for public review and combine captions, mentions, and engagement fields to prioritize relevant creators. Do not treat one post’s engagement as a complete creator-performance metric.

Export and integrations

The default dataset works with:

  • Google Sheets and Microsoft Excel exports.
  • Make and Zapier automations.
  • Slack or Discord webhook workflows.
  • Airtable content-review queues.
  • Data warehouses and BI tools.
  • LLM classification or summarization pipelines.
  • Apify schedules, webhooks, and dataset APIs.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/instagram-hashtag-posts-scraper').call({
hashtags: ['apify'],
maxPostsPerHashtag: 5,
includeReels: true,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/instagram-hashtag-posts-scraper').call(run_input={
'hashtags': ['apify'],
'maxPostsPerHashtag': 5,
'includeReels': True,
'includeDetails': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~instagram-hashtag-posts-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"hashtags":["apify"],"maxPostsPerHashtag":5,"includeDetails":true}'

MCP setup

Use the Actor as a tool from an MCP-compatible assistant.

Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/instagram-hashtag-posts-scraper"

Claude Desktop setup

Add this JSON to Claude Desktop's MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/instagram-hashtag-posts-scraper"
}
}
}

Cursor setup

Open Settings → MCP servers, add an HTTP server named apify, and use the same Actor-specific MCP URL shown above.

VS Code setup

In an MCP-compatible VS Code assistant extension, add an HTTP server named apify with the same URL, reconnect, and confirm the Instagram Hashtag Posts Scraper tool appears.

Example prompts:

  • “Collect five public posts under #apify and summarize their captions.”
  • “Find public creators posting under #webscraping and return profile links.”
  • “Compare visible engagement for posts under #apify and #webscraping.”

Tips for reliable results

  • Begin with 3–10 posts per hashtag.
  • Prefer specific campaign tags over very broad tags.
  • Keep detail enrichment enabled only when its extra fields are needed.
  • Deduplicate downstream records by shortcode.
  • Use a proxy only after a direct route is limited.
  • Schedule small repeat runs instead of one unnecessarily large browser run.
  • Treat changing counts as snapshots collected at scrapedAt.

Limits and failure behavior

  • Only public content visible without an Instagram login is supported.
  • Private profiles and login-only posts are excluded.
  • Instagram decides which cards and fields are publicly visible.
  • The Actor can return fewer records than the requested maximum.
  • Media URLs may be temporary CDN URLs.
  • Detail enrichment may preserve grid fields when a specific detail page is unavailable.
  • If no useful public records are found for the entire run, the Actor fails instead of returning a misleading successful empty dataset.
  • Instagram layout or anti-automation changes can require an Actor update.

Responsible use and legality

Use the Actor only for lawful purposes and public data you are permitted to process. Follow Instagram’s terms, applicable privacy rules, intellectual-property requirements, and local laws. Avoid spam, harassment, surveillance, discriminatory profiling, or attempts to identify private individuals. Apply data minimization and retention controls appropriate to your use case.

FAQ

Does this Actor require an Instagram account?

No. It is designed for public hashtag pages and public post metadata visible without login.

Can it scrape private profiles?

No. Private, restricted, and login-only content is outside the supported scope.

Why are some engagement or timestamp fields null?

Instagram does not expose every field for every post, region, session, or media type. The Actor returns null rather than inventing a value.

Why did I receive fewer posts than requested?

The number is a maximum, not a guarantee. Instagram may expose fewer cards or stop loading more public results for the current route.

Should I enable a proxy?

Start with direct access. If your run is rate-limited or challenged, configure Apify Proxy explicitly and validate the output and cost for that route.

Can I monitor only new posts?

Schedule repeat runs and deduplicate by shortcode in a dataset, database, or integration. The Actor itself returns the current public snapshot and does not store a hidden historical state.

Support

If a public hashtag unexpectedly returns no records, include the Actor run ID, sanitized input, expected public hashtag URL, and whether a proxy was configured. That evidence helps distinguish an Instagram page change from a route-specific limit.