Instagram Hashtag Posts Scraper
Pricing
from $1.40 / 1,000 per post scrapeds
Instagram Hashtag Posts Scraper
Extract posts, reels, and media data from any public Instagram hashtag. Get engagement metrics, captions, trending audio, author profiles, and location data in clean JSON β no cookies or login needed.
Pricing
from $1.40 / 1,000 per post scrapeds
Rating
0.0
(0)
Developer
PinaCode
Actor stats
0
Bookmarked
9
Total users
8
Monthly active users
a day ago
Last modified
Categories
Share
πΈ Instagram Hashtag Posts Scraper
Extract Instagram posts, reels, and media data from any hashtag β no login, no cookies, no limits.
Get likes, comments, play counts, captions, audio, location, author info, and more in clean structured JSON.
π Why This Scraper?
Whether you're tracking trends, doing influencer research, or building a content intelligence pipeline β this scraper gives you deep, structured data from Instagram hashtag feeds at scale.
- β No Instagram login or session cookies required
- β Scrape Recent (latest) or Top (highest-performing) posts
- β Full media metadata: photos, videos, reels, and carousels
- β Rich engagement metrics: likes, comments, plays, shares
- β Audio intelligence: track trending sounds and licensed music
- β Author profiling: follower count, account type, verification status
- β Location data: city, coordinates, venue name
- β Pagination cursor support β resume interrupted runs (paid users)
- β Auto-retry on failures β up to 3 retries per request
π Quick Start
- Enter a hashtag (without
#) β e.g.travel,fitness,streetphotography - Choose a scrape type:
Recentfor the latest posts orTopfor viral content - Set your max items limit
- Hit Start β results land in your dataset in seconds
π₯ Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
hashtag | String | β Yes | β | Hashtag to scrape (without #). Example: travel, fitness, reelsinstagram |
scrape_type | String | β No | recent | Feed to scrape: recent (latest posts) or top (best performing) |
max_items | Integer | β No | 24 | Maximum number of posts/reels to return. Minimum: 24 |
cursor | String | β No | β | Pagination cursor from a previous run to resume scraping |
π Example Input
{"hashtag": "streetphotography","scrape_type": "top","max_items": 100}
π€ Output Data
Each item represents one Instagram post, reel, or carousel with full metadata.
π Identity Fields
| Field | Type | Description |
|---|---|---|
id | String | Instagram internal post ID (pk) |
shortcode | String | Post shortcode (used in URL) |
url | String | Direct link to the post or reel |
taken_at | Integer | Unix timestamp of when the post was published |
taken_at_timestamp | String | ISO 8601 formatted publish datetime (UTC) |
scraped_at | String | ISO 8601 datetime when this item was scraped |
product_type | String | clips for Reels, feed for regular posts |
media_type | Integer | 1 = Photo, 2 = Video, 8 = Carousel |
π€ Author Fields (author object)
| Field | Type | Description |
|---|---|---|
id | String | Author's Instagram user ID |
username | String | Instagram handle |
full_name | String | Display name |
is_verified | Boolean | Blue checkmark verification status |
is_private | Boolean | Whether the account is private |
follower_count | Integer | Number of followers at time of scrape |
account_type | Integer | 1 = Personal, 2 = Creator, 3 = Business |
profile_pic_url | String | Profile picture URL |
π Content Fields
| Field | Type | Description |
|---|---|---|
caption | String | Full post caption text |
hashtags | Array | List of hashtags extracted from caption |
mentions | Array | List of @mentioned usernames in caption |
caption_is_edited | Boolean | Whether the caption was edited after posting |
carousel_media_count | Integer | Number of slides (carousel posts only) |
π Engagement Metrics
| Field | Type | Description |
|---|---|---|
like_count | Integer | Instagram likes |
comment_count | Integer | Instagram comments |
play_count | Integer | Video/reel play count |
ig_play_count | Integer | Instagram-specific play count |
fb_play_count | Integer | Facebook play count (cross-posted) |
fb_like_count | Integer | Facebook likes |
fb_comment_count | Integer | Facebook comments |
reshare_count | Integer | Number of reshares |
like_and_view_counts_disabled | Boolean | Whether counts are hidden by the creator |
π¬ Media Fields
| Field | Type | Description |
|---|---|---|
video_url | String | Direct URL to the highest-quality video |
thumbnail_url | String | URL to the post thumbnail image |
duration_seconds | Float | Video/reel duration in seconds |
original_width | Integer | Original media width (pixels) |
original_height | Integer | Original media height (pixels) |
has_audio | Boolean | Whether the media includes audio |
π΅ Audio Fields (audio object)
Handles all 3 Instagram audio structures: licensed music, original sounds, and audio type flags.
| Field | Type | Description |
|---|---|---|
title | String | Song/track title (licensed music) |
artist | String | Artist name 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 title for original audio |
is_trending | Boolean | Whether the audio is trending in Reels |
π Location Fields (location object)
| Field | Type | Description |
|---|---|---|
pk | String | Location ID |
name | String | Venue or place name |
address | String | Street address |
city | String | City name |
lat | Float | Latitude coordinate |
lng | Float | Longitude coordinate |
π€ Collaboration & Rights Fields
| Field | Type | Description |
|---|---|---|
is_paid_partnership | Boolean | Whether the post is a sponsored/paid partnership |
coauthor_usernames | Array | List of co-author Instagram handles |
has_tagged_users | Boolean | Whether users are tagged in the post |
can_viewer_reshare | Boolean | Whether resharing is allowed |
ig_media_sharing_disabled | Boolean | Whether media sharing is disabled |
π¦ Example Output Item
{"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}
π Final Cursor Record (paid users only)
The last item in the dataset contains pagination metadata for resuming future runs:
{"_metadata": {"cursor": "QVFDZjJmUTdQcGQ4VUluUFZMa3N...","total_scraped": 500,"unique_items": 498,"hashtag": "travel"}}
π Resuming a Scrape
Paid users can continue any scrape from where it left off:
- Copy the
cursorvalue from the_metadatarecord in your dataset - Start a new run with the same hashtag
- Paste the cursor into the Resume Cursor field
- The scraper picks up exactly where you left off β no duplicate data
π³ Free vs Paid
| Feature | Free | Paid |
|---|---|---|
| Posts per run | ~24 | Up to max_items |
| Scrape type | β Both | β Both |
| Full output fields | β Yes | β Yes |
| Pagination cursor returned | β No | β Yes |
| Resume interrupted runs | β No | β Yes |
| Priority support | β No | β Yes |
βοΈ Technical Notes
- Works with public hashtags only β content must be publicly accessible on Instagram
- Deduplication is built-in β no duplicate posts even across paginated requests
- Failed requests are automatically retried up to 3 times with exponential backoff
- The scraper handles all 3 Instagram audio data structures automatically
π§ Use Cases
π Marketing & Growth
- Track trending hashtags in your niche to identify peak engagement windows
- Monitor competitor brand hashtags for content and campaign intelligence
π― Influencer Research
- Discover emerging creators by filtering top-performing posts in a hashtag
- Analyze follower counts, account types, and verification status at scale
π Audio & Trend Intelligence
- Identify which songs and sounds are going viral in specific communities
- Track
is_trendingaudio signals before they peak
π Location-Based Insights
- Find geo-tagged content from specific cities or venues
- Build location-aware content strategies using coordinate data
π οΈ Data Pipelines & Automation
- Feed structured Instagram data into analytics tools, CRMs, or dashboards
- Schedule recurring runs to build time-series trend datasets
β οΈ Disclaimer
This Actor collects only publicly available data β the same information visible to any unlogged visitor browsing Instagram. No private data, passwords, or personal messages are accessed. Use this tool responsibly and in accordance with applicable laws and platform terms. The developer assumes no liability for misuse.
π¬ Support
Experiencing issues or need a custom feature? Use the Issues tab on this Actor's page or reach out via the Apify community forum. Paid subscribers receive priority response.
Built for marketers, researchers, and developers who need reliable Instagram data β fast.