Instagram Hashtag Scraper | $0.24/1K on Starter avatar

Instagram Hashtag Scraper | $0.24/1K on Starter

Pricing

from $0.22 / 1,000 hashtag media items

Go to Apify Store
Instagram Hashtag Scraper | $0.24/1K on Starter

Instagram Hashtag Scraper | $0.24/1K on Starter

Extract recent public Instagram hashtag posts and reels for about $0.24 per 1,000 items on Starter. Choose posts, reels, or both. Supports Console, CLI, API, and integrations; no login, cookies, browser, or proxy setup.

Pricing

from $0.22 / 1,000 hashtag media items

Rating

0.0

(0)

Developer

Public Signal Labs

Public Signal Labs

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

8

Monthly active users

17 hours ago

Last modified

Share

Turn Instagram hashtags into structured posts and reels for content research, trend discovery, campaign tracking, and social media intelligence. Paid runs support up to 10,000 items per hashtag at about $0.24 per 1,000 items on Starter. Choose posts, reels, or both—no authentication or proxy setup.

What this Actor does

  • Accepts one or more actual Instagram hashtags
  • Collects recent images, feed videos, and carousels, recent reels, or both
  • Returns up to 10,000 media rows per hashtag in each paid run
  • Supports resumable single-hashtag paid exports with exact mid-page checkpoints
  • Works without Instagram credentials, cookies, session IDs, browsers, or proxy configuration
  • Separates media rows, run status, continuation metadata, and aggregate reconciliation metrics

Use it for public content discovery, campaign monitoring, creator research, trend analysis, and repeatable data pipelines where an actual hashtag is the source boundary.

Quick start

  1. Enter one or more hashtags. A single leading # is optional.
  2. Choose posts, reels, or both, then set the maximum results for each hashtag.
  3. Run the Actor, then preview or export the default dataset as JSON, CSV, or Excel.
{
"hashtags": ["artificialintelligence"],
"resultsLimit": 200,
"getPosts": true,
"getReels": true
}

Input

FieldRules
hashtagsRequired list of actual hashtags. A single leading # is optional. Letters, numbers, and underscores are accepted after Unicode normalization. URLs, spaces, and other punctuation are rejected. The schema accepts up to 50 unique hashtags; plan-specific limits are detailed in Pricing.
resultsLimitRequired integer per hashtag from 25 through 10,000. Default and Store prefill: 200. Plan-specific effective limits are detailed in Pricing.
getPostsBoolean, default true. Include recent feed images, carousels, and feed videos.
getReelsBoolean, default true. Include recent reels. At least one media toggle must be true.
continuationTokenOptional short-lived secret returned by a previous paid run. Requires the same single hashtag and the same getPosts/getReels selection. It expires after 15 minutes. Every continuation run incurs a new source event.

This Actor searches actual hashtags only. It does not accept arbitrary keywords, profile URLs, direct post URLs, or date filters.

Dataset rows

Every charged dataset item has exactly this shape:

{
"hashtag_scrape": "artificialintelligence",
"id": "1234567890123456789",
"short_code": "ExampleCode",
"url": "https://www.instagram.com/p/ExampleCode/",
"caption": "Example public caption",
"timestamp": "2026-08-25T10:00:00Z",
"media_type": "image",
"product_type": "feed",
"like_count": 125,
"comment_count": 4,
"play_count": null,
"view_count": null,
"child_media_count": 0,
"display_url": "https://...",
"video_url": null,
"owner_id": "9876543210987654321",
"owner_username": "example_creator",
"owner_full_name": "Example Creator",
"owner_is_verified": false,
"owner_profile_pic_url": "https://..."
}
FieldMeaning
hashtag_scrapeNormalized source hashtag without #
idStable Instagram media ID represented as a string
short_codeInstagram post or reel shortcode
urlPublic Instagram post or reel URL constructed from the shortcode
captionPublic caption text; empty string when absent
timestampUTC ISO-8601 publication timestamp
media_typeNormalized image, video, or carousel
product_typeNormalized Instagram product type, such as feed, clips, igtv, or carousel_container
like_countPublic like count; null when hidden or unavailable; zero remains zero
comment_countPublic comment count; null when unavailable
play_countPublic play count when available
view_countPublic view count when available
child_media_countNumber of carousel children; zero for non-carousels
display_urlSelected external image or thumbnail URL; it may expire
video_urlSelected external video URL when available; it may expire
owner_idPublic owner ID represented as a string; empty when unavailable
owner_usernameCurrent public owner username; empty when unavailable
owner_full_namePublic owner display name; empty when unavailable
owner_is_verifiedWhether the owner is verified
owner_profile_pic_urlExternal owner image URL when available; it may expire

The same media can legitimately appear once for each requested hashtag because hashtag_scrape records customer-visible provenance. Duplicate media IDs are removed within each hashtag during a run.

Pricing

Billing uses two transparent events:

  1. one hashtag source event for each hashtag successfully validated and processed in a run, including a valid hashtag with no current results;
  2. one hashtag media item event for each persisted dataset row.

The source event is $0.0015 per individual hashtag. Apify displays this normalized as $1.50 / 1,000 source events; it does not mean one hashtag costs $1.50. It covers starting and validating that hashtag extraction independently of how many rows are available. Selecting posts, reels, or both does not change the source-event price.

Validation failures and missing or rejected hashtags do not incur a source or row event. If the run reaches its spending limit, it stops before storing an uncharged row.

PlanSource eventDataset itemOne hashtag / 1,000 rows
Free$0.0015$0.00024$0.2415
Starter$0.0015$0.00024$0.2415
Scale$0.0015$0.00023$0.2315
Business$0.0015$0.00022$0.2215

Starter examples: one hashtag returning 25 rows costs $0.0075; 60 rows costs $0.0159; 100 rows costs $0.0255; 1,000 rows costs $0.2415. Multiple hashtags are priced independently. Every continuation run incurs another source event because it is a new source/run operation.

FREE demo limits

FREE Apify accounts can run this Actor up to 5 times per UTC calendar month. Each admitted FREE run accepts exactly one hashtag, returns up to 10 posts or reels, and cannot submit or receive a continuation token. Console, CLI, API, schedules, webhooks, MCP, and other Apify launch methods share the same account allowance. A run counts once admitted even when it is later aborted or unsuccessful, and resurrecting it does not start another extraction. Creating another task or API token does not reset the allowance. Paid Apify users are not subject to these demo limits.

Run summary

Run status, source charges, row counts, failures, continuation tokens, and non-sensitive FREE admission metadata are stored in the default key-value store's OUTPUT record rather than mixed into the dataset:

Allowance exhaustion and replay complete the Apify run successfully, while OUTPUT.status remains FAILED; the stable stopReason/freeTier.outcome remains machine-readable, and identity/quota verification errors still fail the platform run.

{
"status": "SUCCEEDED",
"stopReason": null,
"isPaying": true,
"requestedHashtags": 1,
"resultsLimitPerHashtag": 200,
"getPosts": true,
"getReels": true,
"deliveredCount": 200,
"chargedCount": 200,
"sourceChargedCount": 1,
"sources": [
{
"inputIndex": 0,
"hashtag": "artificialintelligence",
"status": "succeeded",
"deliveredCount": 200,
"chargedCount": 200,
"sourceCharged": true
}
],
"continuations": [
{
"inputIndex": 0,
"hashtag": "artificialintelligence",
"hasNextPage": true,
"nextContinuationToken": "<secret token>"
}
]
}

status can be SUCCEEDED, PARTIAL, FAILED, or CHARGE_LIMIT_REACHED. Inspect each source entry even when the overall run completes. Aggregate non-PII request, retry, page, duplicate, source-charge, row-charge, storage-stop, and timing metrics are stored separately in AUDIT.

Admitted FREE runs include a freeTier object with the UTC month, claimed slot, remaining allowance, effective result limit, and policy version. Rejected FREE runs use stable reasons such as free_monthly_limit, free_run_already_consumed, or free_quota_unavailable. The record never contains an Apify user ID, API token, or internal quota-storage identifier.

Resumable paid exports

When hasNextPage is true, paying users can read nextContinuationToken from OUTPUT.continuations and start another run with the same single hashtag and media-toggle selection. Tokens expire after 15 minutes and are authenticated, product-specific, hashtag-bound, and selection-bound.

{
"hashtags": ["artificialintelligence"],
"resultsLimit": 1000,
"getPosts": true,
"getReels": true,
"continuationToken": "<token from OUTPUT>"
}

Always use the newest token. A continuation can read the current page again when the previous run stopped partway through it; rows before the authenticated checkpoint are skipped. A resumed run charges one new source event and charges only newly persisted rows.

Limitations

This Actor:

  • Returns recent media ordering exposed for each hashtag, not a complete historical archive
  • Does not offer arbitrary keyword search, profiles, direct post lookups, date filtering, comments, transcripts, analytics, or media downloads
  • Does not bypass private-account or restricted-content access controls
  • Cannot guarantee stable ordering, permanent CDN URLs, or that counts hidden by Instagram will be available
  • May return fewer rows when a hashtag has little current media, a source becomes unavailable, or a run reaches its spending limit
  • Can return public media that later changes or is removed at its source

API and CLI use

Call the Actor through the standard Apify Actor Runs API. Read media from the run's default dataset and reconciliation metadata from the OUTPUT and AUDIT key-value-store records.

With the current Apify CLI:

apify actors call publicsignallabs/instagram-hashtag-scraper \
--input '{"hashtags":["artificialintelligence"],"resultsLimit":200}' \
--output-dataset

The same Actor can be called with Apify's JavaScript or Python clients, REST API, schedules, webhooks, MCP, and platform integrations. Plan-specific demo limits are detailed in Pricing.

Responsible use

Collect and use public data only where you have a lawful purpose. Respect privacy, platform rules, and applicable data-protection law. Minimize retained personal data, secure exports, and delete records when they are no longer needed.

This Actor is unofficial and is not affiliated with or endorsed by Instagram or Meta.

FAQ

Does it require an Instagram account?

No. The Actor does not require Instagram login credentials, cookies, or a session ID.

Are arbitrary keywords supported?

No. Submit actual hashtags only. Values with spaces, URLs, or punctuation other than underscore are rejected.

Are reels included?

Yes. The Actor processes the hashtag's recent post and reel surfaces, normalizes videos as media_type: "video", and uses product_type: "clips" for reels when returned.

Can one run process multiple hashtags?

The schema accepts up to 50 unique hashtags. Plan-specific FREE demo limits are detailed in Pricing. Continuation runs require one hashtag because a token is bound to that source.

How do I export the results?

Open the run's default dataset in Apify Console and choose JSON, CSV, Excel, XML, or another supported format. Programmatic workflows can read the same dataset through the API.

Support

Use the Issues tab on this Actor's Apify Store page. Include the run ID, expected result, and observed result. Never include continuation tokens, API tokens, cookies, or other credentials.