Instagram Scraper - Posts, Reels, Profiles & Followers
Pricing
from $2.30 / 1,000 results
Instagram Scraper - Posts, Reels, Profiles & Followers
Scrape public Instagram in 14 modes: profile posts, Reels and tagged posts, profiles with bio and business contacts, comments and replies, followers, following, post likers, hashtag, location and audio feeds, search, stories and highlights. Flat JSON, no login or cookies needed.
Pricing
from $2.30 / 1,000 results
Rating
0.0
(0)
Developer
Silkline
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Scraper extracts public Instagram data as clean, flat JSON. List the posts, Reels and tagged posts of any public profile, read profile details, post details, comments and replies, collect the posts of a hashtag, location or audio, search accounts, posts, Reels, hashtags, locations and audios, and list followers, following, post likers, similar accounts, stories and highlights. Every post comes with likes, plays, comments, caption, hashtags, mentions, location, music, carousel slides and the owner's name, ID and verified flag. No Instagram account, API keys, proxies or cookies are needed.
What data can you get?
The Actor has 14 modes. Post modes share one flat post output, so one pipeline handles them.
Modes
| Mode | Give it | You get |
|---|---|---|
userPosts | usernames | the latest posts of each public profile, pinned posts first |
profiles | usernames | one full profile record per username: bio, links, counts, business details, related accounts, latest posts |
userReels | usernames | the Reels of each profile |
taggedPosts | usernames | the posts each profile is tagged in |
postDetails | post or Reel links | one full post record per link |
comments | post or Reel links, optional commentSort, includeReplies | the comments of each post, optionally with replies |
postLikers | post or Reel links | the accounts that liked the post (as many as Instagram lists) |
hashtagPosts | hashtags, optional hashtagFeed (top, recent, reels) | the posts under each hashtag |
locationPosts | location IDs or links | the posts at each location |
audioPosts | audio IDs or links | the Reels that use each audio |
search | keywords, searchType | accounts, posts, Reels, hashtags, locations or audios found for each keyword |
followers | usernames, followType | the accounts that follow each profile, or that it follows |
similarAccounts | usernames | the accounts Instagram suggests as similar |
stories | usernames, storyType | current stories, the highlight reels, or the stories inside each highlight reel |
Post fields (post modes, search posts and Reels, stories)
| Field | What it is |
|---|---|
postId, shortCode, url | Instagram ID, shortcode and link of the post |
postType | Image, Video or Sidecar (carousel) |
productType | feed, clips (Reel), carousel_container, igtv or story |
caption, hashtags, mentions | Caption as published, and the hashtags and @mentions in it |
createdAt | Publish time, ISO 8601 UTC |
likeCount, commentCount | Likes (null when hidden) and comments |
playCount, viewCount | Plays and views of a video or Reel |
shareCount, repostCount, saveCount | Shares, reposts and saves, when Instagram shows them |
durationSeconds, width, height | Video length and size |
displayUrl, videoUrl | Image and video file links (temporary) |
altText | Accessibility caption, when present |
isVideo, isPinned, isSponsored, commentsDisabled, likesHidden | Flags; null when the source does not say |
ownerId, ownerUsername, ownerFullName, ownerVerified, ownerPrivate, ownerProfilePicUrl | The account that posted |
taggedUsers, coauthors | Usernames tagged in the post and co-authors of collab posts |
locationId, locationName | The tagged location |
musicId, musicTitle, musicArtist, isOriginalAudio | The audio of a Reel |
childPosts | Slides of a carousel: postId, postType, displayUrl, videoUrl, width, height, durationSeconds |
sourceInput | The input that produced the item |
type | post (stories: story; they also have expiresAt, highlightId, highlightTitle) |
Profile fields (mode profiles)
userId, username, url, fullName, biography (as published, with any contact details), externalUrl, externalUrls (every link in the bio), followerCount, followingCount, postCount, igtvVideoCount, highlightReelCount, isVerified, isPrivate, isBusinessAccount, isProfessionalAccount, businessCategory, categoryName, businessEmail, businessPhone, businessAddress, hasClips, hasChannel, isJoinedRecently, pronouns, fbId, profilePicUrl, relatedProfiles (identity fields of suggested accounts), latestPosts (post items), type = profile.
Comment fields (mode comments)
commentId, text, createdAt, likeCount, replyCount, isPinned, parentCommentId and postId (replies), ownerId, ownerUsername, ownerFullName, ownerVerified, ownerPrivate, ownerProfilePicUrl, mentions, hashtags, sourceInput, type = comment.
Account fields (followers, following, post likers, similar accounts, account search)
userId, username, url, fullName, isVerified, isPrivate, profilePicUrl, relation (follower, following, liker or similar), sourceInput; type is user, or searchUser for account search.
Other records
Highlight reels (type highlight): itemId, title, mediaCount, createdAt, updatedAt, coverUrl, isPinned. Hashtags (hashtag): itemId, name, mediaCount, url, profilePicUrl. Locations (location): itemId, name, address, city, latitude, longitude, url. Audios (audio): itemId, audioId, title, artist, durationSeconds, isExplicit, coverUrl, previewUrl.
How to use Instagram Scraper
- Open Instagram Scraper in Apify Console.
- Choose a Mode.
- Fill in the list that belongs to the mode:
usernames,postUrls,hashtags,keywords,locationsoraudios, plus the mode option if it has one. - Set
maxResults, the limit for each input. - Start the run, then export the dataset as JSON, CSV or Excel, or read it through the API.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
mode | string | One of the 14 modes above | userPosts |
usernames | array | nasa, @nasa or a profile link | nasa |
postUrls | array | Post or Reel links, or shortcodes | a sample post |
hashtags | array | nasa, #nasa or an explore/tags link | nasa |
keywords | array | Search keywords | travel |
locations | array | Location IDs or explore/locations links | a sample location |
audios | array | Audio IDs or reels/audio links | a sample audio |
followType | string | followers or following | followers |
searchType | string | users, posts, reels, hashtags, locations or audio | users |
storyType | string | stories, highlights or highlightStories | stories |
hashtagFeed | string | top, recent or reels | top |
commentSort | string | recent or popular | recent |
includeReplies | boolean | Also fetch replies of comments with two or more | false |
maxResults | integer | Items per input, 1 to 5000. Ignored by profiles and postDetails | 20 |
An empty input {} lists 20 posts of nasa. At most 50 inputs are used per run in the listing modes (1,000 in profiles and postDetails); extra ones are ignored without a warning.
{"mode": "userPosts", "usernames": ["nasa", "https://www.instagram.com/natgeo/"], "maxResults": 50}
{"mode": "comments", "postUrls": ["https://www.instagram.com/p/DeTUk4sDSp-/"], "commentSort": "popular", "includeReplies": true, "maxResults": 200}
{"mode": "search", "searchType": "reels", "keywords": ["travel"], "maxResults": 50}
Output example
Values are illustrative.
{"type": "post","postId": "4000000000000000001","shortCode": "Dexample01","url": "https://www.instagram.com/reel/Dexample01/","postType": "Video","productType": "clips","caption": "Launch day #space","hashtags": ["space"],"mentions": [],"createdAt": "2026-10-10T15:15:02Z","likeCount": 7190,"commentCount": 71,"playCount": 105090,"durationSeconds": 43.766,"ownerUsername": "sample.account","ownerVerified": true,"taggedUsers": [],"coauthors": [],"musicTitle": "Original audio","isOriginalAudio": true,"childPosts": [],"sourceInput": "sample.account"}
How much does it cost?
The Actor uses pay-per-event pricing:
| Event | Price | When it is charged |
|---|---|---|
Start fee (run-start) | $0.0025 | For each input of the listing modes (and once per run in profiles and postDetails). The first one is charged when the first request to the data source succeeds. Each further one is charged before that input's first request and is kept even if that input returns nothing. |
Result (result) | $0.0023 | For each post, story, comment, reply, profile, highlight, hashtag, location, audio or account-search hit returned. |
Account (user) | $0.0007 | For each follower, following, post liker or similar account returned. |
The start fee is not charged when the data source fails from the start or your spending limit cannot cover it.
Worked examples:
- 100 posts of one profile cost $0.0025 + 100 x $0.0023 = $0.2325.
- 1,000 followers of one profile cost $0.0025 + 1,000 x $0.0007 = $0.7025.
- 20 profile records cost $0.0025 + 20 x $0.0023 = $0.0485.
On the free Apify plan, every run returns a sample dataset: a real result of this Actor's prefilled input, captured on the date shown in the run status, so you can see exactly what the output looks like. Your own input is not used and nothing is charged. To run your own queries, use any paid Apify plan.
You never pay for more than maxResults items per input, and the run stops by itself if your spending limit is reached. An input that returns nothing (an account that does not exist, a hashtag with no posts) still costs its start fee. If the data source is down for the whole run, nothing is charged.
Use cases
- Influencer research: pull profiles with followers, bio, business category and contact details, then their latest posts and Reels.
- Competitor and brand monitoring: track posts tagging a brand, hashtag feeds and location feeds with likes, plays and comments.
- Audience analysis: list followers, following and post likers, and read comment text with commenter profiles.
- Trend research: search Reels and audios by keyword, then list the Reels that use a trending audio.
- Lead generation: search accounts by keyword and read business email, phone and links from their profiles.
- AI and data projects: captions, hashtags and counts as clean rows for classification and dashboards.
Integrations and API
Start runs through the Apify API, schedule them in Apify Console, and connect the dataset to Apify integrations and your own tools. Results can be downloaded as JSON, CSV or Excel.
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("clover_folktale/instagram-scraper").call(run_input={"mode": "userPosts","usernames": ["nasa"],"maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Tips and limits
- Pages are small. Profile posts and Reels come about 12 per request, comments about 15, followers 30 to 50. Large limits take many requests.
- Thin pages end a listing. A page that brings too few new items to pay for its own request ends the listing, so a listing can end before
maxResults. - Highlights with one story are skipped in
highlightStories; list them withhighlightsif you need them. - Stories expire after 24 hours.
storiesreturns what is live at the time of the run. - Likers and some follower lists are partial. Instagram lists only part of a very large audience;
postLikersreturns what Instagram shows. - Location, audio and hashtag inputs must exist. Find location IDs with
searchandsearchTypelocations. Audio IDs are the number in the audio page link. - Links are temporary. Image, video, audio and profile picture links expire; download what you need soon after the run.
- Numbers are a snapshot. Counts are what Instagram shows at the time of the run; hidden like counts are null.
- Often-empty fields:
viewCount,shareCount,saveCountandrepostCountonly exist for some post types;commentsDisabledandisSponsoredare null when the source does not say;taggedPosts, hashtag and location items from the secondary source have fewer fields. - Free plan. Every run on the free Apify plan returns a stored sample dataset (a real result of the prefilled input); your own input is not used and nothing is charged.
FAQ
Do I need an Instagram account or login?
No. No account, API keys, proxies or cookies are needed. Private profiles are not readable.
Is it legal to scrape Instagram?
The Actor returns only public information: posts, counts, public profiles with their bio, public comments and public account lists. It does not return private messages or anything behind a login. Bios are returned as published, including contact details the account owner wrote there. You are responsible for how you use the data and for following the laws that apply to you.
How fresh is the data?
It is read live during the run.
Why are some fields empty?
Fields Instagram does not send are null; lists such as hashtags are empty []. Some counts only exist for some post types.
How many results can I get?
Up to 5,000 items per input, with up to 50 inputs per run in the listing modes.
Can I schedule runs and export the data?
Yes, in Apify Console or through the API, as JSON, CSV or Excel.
What if a username, post or hashtag does not exist?
It returns nothing and still costs its start fee, because the request was made. Missing a field or a mode? Open an issue from the Actor page.