Instagram Hashtag Scraper
Pricing
$0.20 / 1,000 results
Instagram Hashtag Scraper
This scraper extracts users from Instagram based on a hashtag. Just enter a hashtag and set the number of usernames you need. It collects user details like usernames, IDs, and captions, making it perfect for social media analysis and research. 🚀
Pricing
$0.20 / 1,000 results
Rating
5.0
(1)
Developer
CoderX
Maintained by CommunityActor stats
5
Bookmarked
393
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Pull structured post data from any Instagram hashtag — no account, no login, no friction.
Point it at a hashtag. Get back clean JSON with every post, reel, and carousel that lives under it — engagement numbers, author profiles, audio metadata, location pins, and more. Built for analysts, marketers, and developers who need Instagram data that's actually usable.
What It Does
Instagram hashtag feeds are a goldmine of public content intelligence — trending sounds, emerging creators, geo-tagged posts, sponsored content signals. This scraper surfaces all of it in a consistent, queryable structure.
Hand it a hashtag and it returns:
- Full post and reel metadata (captions, timestamps, media URLs)
- Engagement signals: likes, comments, plays, reshares
- Author snapshots: follower count, account type, verification
- Audio context: track name, artist, trending status
- Location data: venue name, city, coordinates
- Collaboration flags: paid partnerships, co-authors, tagged users
No credentials. No cookies. No session maintenance on your end.
Input
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
hashtag | String | ✅ | — | The hashtag to scrape, without the #. E.g. travel, fitness, streetphotography |
scrape_type | String | ❌ | recent | recent for newest posts, top for highest-performing |
max_items | Integer | ❌ | 24 | How many posts to retrieve. Minimum is 24 |
cursor | String | ❌ | — | Resume token from a previous run (paid only) |
Example:
{"hashtag": "streetphotography","scrape_type": "top","max_items": 100}
Output
Each record in the dataset is one post, reel, or carousel. Here's the full field breakdown.
Core Post Fields
| Field | Type | Description |
|---|---|---|
id | String | Instagram internal post ID |
shortcode | String | Shortcode used in the post URL |
url | String | Direct link to the post |
taken_at | Integer | Publish time as Unix timestamp |
taken_at_timestamp | String | Publish time in ISO 8601 / UTC |
scraped_at | String | When this record was collected |
product_type | String | clips = Reel, feed = standard post |
media_type | Integer | 1 = Photo · 2 = Video · 8 = Carousel |
Author (author object)
| Field | Type | Description |
|---|---|---|
id | String | Instagram user ID |
username | String | Handle |
full_name | String | Display name |
is_verified | Boolean | Blue checkmark status |
is_private | Boolean | Private account flag |
follower_count | Integer | Follower count at scrape time |
account_type | Integer | 1 = Personal · 2 = Creator · 3 = Business |
profile_pic_url | String | Profile picture URL |
Content
| Field | Type | Description |
|---|---|---|
caption | String | Full caption text |
hashtags | Array | Hashtags parsed from caption |
mentions | Array | @mentions parsed from caption |
caption_is_edited | Boolean | Whether caption was edited post-publish |
carousel_media_count | Integer | Slide count (carousel posts only) |
Engagement
| Field | Type | Description |
|---|---|---|
like_count | Integer | Instagram likes |
comment_count | Integer | Instagram comments |
play_count | Integer | Total video/reel plays |
ig_play_count | Integer | Instagram-side play count |
fb_play_count | Integer | Facebook play count (cross-posts) |
fb_like_count | Integer | Facebook likes |
fb_comment_count | Integer | Facebook comments |
reshare_count | Integer | Reshare count |
like_and_view_counts_disabled | Boolean | True if creator has hidden counts |
Media
| Field | Type | Description |
|---|---|---|
video_url | String | Highest-quality video URL |
thumbnail_url | String | Post thumbnail URL |
duration_seconds | Float | Video length in seconds |
original_width | Integer | Media width in pixels |
original_height | Integer | Media height in pixels |
has_audio | Boolean | Whether audio is present |
Audio (audio object)
Handles all three Instagram audio structures automatically.
| Field | Type | Description |
|---|---|---|
title | String | Track title (licensed music) |
artist | String | Artist or original audio creator |
type | String | licensed_music, original_sound, or audio type flag |
is_explicit | Boolean | Explicit content flag |
original_audio_title | String | Custom label for original audio |
is_trending | Boolean | Whether the audio is trending in Reels |
Location (location object)
| Field | Type | Description |
|---|---|---|
pk | String | Location ID |
name | String | Venue or place name |
address | String | Street address |
city | String | City |
lat | Float | Latitude |
lng | Float | Longitude |
Collaboration & Rights
| Field | Type | Description |
|---|---|---|
is_paid_partnership | Boolean | Sponsored content flag |
coauthor_usernames | Array | Co-author handles |
has_tagged_users | Boolean | Whether users are tagged in post |
can_viewer_reshare | Boolean | Resharing allowed |
ig_media_sharing_disabled | Boolean | Sharing disabled by creator |
Sample Record
{"id": "3621480123456789012","shortcode": "DAbc1234XYZ","url": "https://www.instagram.com/reel/DAbc1234XYZ/","taken_at": 1720000000,"taken_at_timestamp": "2024-07-03T12:00:00+00:00","scraped_at": "2025-04-13T09:30:00+00:00","product_type": "clips","media_type": 2,"author": {"id": "123456789","username": "jane.travels","full_name": "Jane Wanderlust","is_verified": false,"is_private": false,"follower_count": 48200,"account_type": 2,"profile_pic_url": "https://..."},"caption": "Golden hour in Santorini 🌅 #travel #greece #sunset #reels","hashtags": ["travel", "greece", "sunset", "reels"],"mentions": [],"like_count": 4821,"comment_count": 112,"play_count": 98400,"video_url": "https://...","thumbnail_url": "https://...","duration_seconds": 14.5,"has_audio": true,"audio": {"title": "Golden Hour","artist": "JVKE","type": "licensed_music","is_explicit": false,"original_audio_title": null,"is_trending": true},"location": {"pk": "213204004","name": "Santorini, Greece","city": "Santorini","lat": 36.3932,"lng": 25.4615},"is_paid_partnership": false,"coauthor_usernames": [],"has_tagged_users": true}
Pagination & Resuming Runs (Paid)
Long scrapes can be paused and continued without data loss. The final record in every paid dataset includes a _metadata block:
{"_metadata": {"cursor": "QVFDZjJmUTdQcGQ4VUluUFZMa3N...","total_scraped": 500,"unique_items": 498,"hashtag": "travel"}}
To resume: copy the cursor value, start a new run with the same hashtag, and paste it into the Resume Cursor field. The scraper picks up from the exact point it left off — no re-scraping, no duplicates.
Free vs Paid
| Feature | Free | Paid |
|---|---|---|
| Posts per run | ~24 | Up to max_items |
| Scrape type (recent / top) | ✅ | ✅ |
| Full output fields | ✅ | ✅ |
| Pagination cursor | ❌ | ✅ |
| Resume interrupted runs | ❌ | ✅ |
| Priority support | ❌ | ✅ |
How to Use It
Trend monitoring — run it on a niche hashtag weekly and compare engagement velocity over time. Spot content formats gaining traction before they peak.
Creator discovery — filter top posts for accounts with sub-50K followers and high engagement rates. That's your emerging influencer list.
Audio tracking — is_trending on the audio object tells you which sounds are gaining velocity in Reels before the mainstream catches on.
Location intelligence — need to understand content patterns from a specific city or venue? Filter by location.city or use the lat/lng coordinates for geo-clustering.
Pipeline integration — the output is clean, flat JSON. Drop it directly into BigQuery, Airtable, a CRM enrichment flow, or any BI tool. No cleaning required.
Technical Notes
- Works on public hashtags only — content must be visible to unauthenticated Instagram users
- Deduplication is built in — safe to run overlapping time windows without getting duplicate records
- Automatic retry on failures — up to 3 attempts per request with exponential backoff
- Handles all three Instagram audio data structures without any configuration
Disclaimer
This scraper collects only publicly available content — the same data visible to anyone browsing Instagram without an account. No private data, credentials, or messages are accessed or stored. Use responsibly and in accordance with applicable laws and platform terms of service. The developer assumes no liability for misuse.
Support
Found a bug or need a custom configuration? Use the Issues tab on this Actor's page. Paid users get priority responses.