Instagram Scraper β Profiles, Posts, Reels, Comments Β· No Login
Pricing
from $1.50 / 1,000 post or reels
Instagram Scraper β Profiles, Posts, Reels, Comments Β· No Login
Scrape public Instagram profiles, posts and Reels by username or URL, no login: captions, hashtags, mentions, topic tags, tagged users, co-authors, engagement counts, video and audio-only URLs, and optional comments. A 24-post profile in about a minute. Pay per result, no Instagram API needed.
Pricing
from $1.50 / 1,000 post or reels
Rating
0.0
(0)
Developer
Richard Feng
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
πΈ Instagram Scraper β Profiles, Posts, Reels & Comments Β· No Login
This Instagram scraper reads any public account by username or URL β no Instagram account, no login, no browser.
Posts, Reels and carousels with captions, hashtags, mentions, the audio-only track of every video that has one, Instagram's own topic tags, tagged users, co-authors, engagement numbers and comments.
| π No login, no account | ποΈ Audio-only track wherever a video has one |
| π·οΈ Hashtags Β· Mentions Β· Topics | π₯ Tagged users & co-authors |
| πΌοΈ Posts Β· Reels Β· Carousels | π¬ Comments, optional |
| β‘ A 24-post profile in about a minute | π Any public account |
π Table of contents
- What can this Actor do?
- What data can I extract?
- Quick start
- Input reference
- Output reference
- Output example
- Why choose this Actor?
- How much does it cost?
- Recipe: Reels β transcripts
- Automation & AI agents
- FAQ
- Notes and limitations
- Other Actors by autofacts
β¨ What can this Actor do?
| π§² Collect | βοΈ Built in |
|---|---|
| π€ Profiles β bio, full name, followers, following, verified, private, bio links, avatar | π Read a profile's latest posts and its Reels tab |
| πΌοΈ Posts & carousels β caption, hashtags, mentions, likes, comment count, and every carousel child's image and video links | π― Per-account caps, so a run's size is predictable |
| ποΈ Reels β everything above plus play counts and duration | π¬ Optional comments with author, text, likes and replies |
| π¬ Media β the still image, the video, and the audio-only track | π¦ Hard request cap and concurrency control |
| π¬ Comments β author, text, likes, reply count, timestamp | π Canonical public URLs for joining and filtering |
| π·οΈ Context β topic tags, tagged users, co-authors, location | π Apify Proxy residential by default |
Point it at a profile, a post or a Reel. That's the whole interface.
π What data can I extract?
π€ Profiles
Who is behind the account: username, fullName, biography, followerCount, followingCount,
isVerified, isPrivate, bioLinks, externalUrl, profilePicUrl, hasReels, mediaCount.
πΌοΈ Posts, Reels and carousels
Everything around one piece of content, in one record:
- Content β
caption,hashtags[],mentions[],audioTitle,accessibilityCaption - Identity β
id,shortcode,kind(post/reel/igtv),takenAt,productType,format - Engagement β
likeCount,commentCount,playCount,viewCount - Media β
medias[]: the image, the video, and the video'saudioUrl - Context β
topics[](Instagram's own topic tags),taggedUsers[],coauthors[],location - Comments (optional) β
comments[]with author, text, likes, replies, timestamp
π·οΈ Hashtags and mentions
Instagram does not return hashtags or mentions as fields β they live inside the caption. This Actor
parses them out for you into clean arrays, so #PerpetualPlanet and @Rolex arrive as data, not as text
you have to regex. π‘
π― Topic tags β and why they matter
Instagram files every post under topic pills (black rain frog, apollo mission, astronomy).
This Actor returns them in topics[]. They are a ready-made, platform-assigned category for grouping,
clustering, search and trend work β no keyword guessing.
ποΈ The audio-only track
Every video and Reel record carries medias[].audioUrl: the audio-only rendition, roughly 0.4 MB
where the video is several megabytes. It is the small, correct input for speech-to-text β see the
transcript recipe.
π Quick start
- Create a free Apify account π
- Open this Actor and paste a link β a profile, a post or a Reel π
- (Optional) turn on Include comments π¬
- Save & Start, then download the dataset as JSON, CSV or Excel π¦
{"startUrls": [{ "url": "https://www.instagram.com/natgeo/" }],"maxPostsPerProfile": 12}
π What links can I paste?
| Paste this | And you get |
|---|---|
instagram.com/natgeo/ | The profile plus its latest posts and Reels |
instagram.com/p/DAbc123XyZ/ | That one post, in full |
instagram.com/reel/DeeUUHNAqQj/ | That one Reel, in full |
@natgeo or natgeo | Same as the profile link |
π‘ Post and Reel links need no extra step β the link itself carries the post id. π‘ Mix and match: profiles in Start URLs, extra accounts in Usernames.
β¬οΈ Input reference
| Field | Type | Default | Description |
|---|---|---|---|
| Start URLs | array | β | Profile, post or Reel addresses to read. |
| Usernames | array | β | Extra accounts, with or without @. Equivalent to profile URLs. |
| Max media per profile | integer | 24 | How many posts and how many Reels to read in full per profile. The posts list and the Reels tab are counted separately, so a profile yields at most this many of each. Lower it to control cost. |
| Include the Reels tab | boolean | true | Also read the Reels tab. It is the only read that returns play counts, and it is where Reel-only content is found. |
| Include comments | boolean | false | Read each media's comments, up to the cap below. |
| Max comments per post | integer | 24 | Upper bound on comments stored with each post or Reel (0β500). |
| Media per page | integer | 12 | How many posts one page asks for (1β50). |
| Max concurrency | integer | 3 | How many requests run at once. |
| Max requests per run | integer | (API only) | Hard stop after this many requests. Not shown in the form; set it through the JSON input or the API. |
| Proxy configuration | object | Residential | Apify Proxy's RESIDENTIAL group, selected in the form and used when the field is left out: Instagram answers logged-out readers far more readily from residential addresses. |
β¬οΈ Output reference
One record per profile and one per post or Reel, in the same dataset.
π€ Profile record
| Field | Type | Notes |
|---|---|---|
type | string | profile |
source | object | {id, canonicalUrl, crawlUrl?, username} |
id | string | Instagram's numeric id |
username | string | |
fullName | string | |
biography | string | |
isPrivate / isVerified | boolean | |
followerCount / followingCount / mediaCount | integer | Absent rather than 0 when Instagram does not return it |
profilePicUrl | string | |
bioLinks | array | externalUrl is the first one |
hasReels | boolean | |
scrapedAt | string | ISO 8601 |
πΌοΈ Post / Reel record
| Field | Type | Notes |
|---|---|---|
type | string | post |
source | object | {id, canonicalUrl, crawlUrl?, username} β canonicalUrl is the public page |
kind | string | post Β· reel Β· igtv |
id / shortcode | string | |
owner | object | {id, username, fullName, isVerified} |
takenAt | string | ISO 8601 |
caption | string | |
hashtags / mentions | array | Parsed from the caption, without # / @ |
format | string | image Β· video Β· carousel |
productType | string | Instagram's own value (clips, feed, β¦) |
isVideo / isReel | boolean | |
durationSeconds | number | From the Reels tab, or from a carousel child |
width / height | integer | |
carouselCount | integer | Child count when it's a carousel. Each child's image, video and audio track is in medias[] |
likeCount / commentCount | integer | |
playCount | integer | Reels tab only |
hasAudio | boolean | Whether any asset of the post carries an audio track |
viewCount | integer | |
medias | array | {type: "Image", url, width, height} and/or {type: "Video", videoUrl, audioUrl, width, height} |
hasAudio / audioTitle | boolean / string | |
accessibilityCaption | string | Instagram's own description of the media |
taggedUsers | array | {username, id, fullName?, x?, y?} β x/y place the tag on a photo, as fractions of its width and height; a video's tags have none |
coauthors | array | {username, id, fullName?} β the other accounts a collab is credited to |
topics | array | Instagram's topic tags |
location | object | {id?, name} |
commentsRead | integer | How many comments this record holds |
comments | array | {id, authorUsername, authorId, authorIsVerified, text, likeCount, replyCount, parentCommentId, createdAt} |
scrapedAt | string | ISO 8601 |
π¦ Output example
{"type": "post","source": {"id": "instagram","canonicalUrl": "https://www.instagram.com/reel/DeckcQnA23l/","crawlUrl": "https://www.instagram.com/natgeo/","username": "natgeo"},"kind": "reel","id": "4007238040107052517","shortcode": "DeckcQnA23l","owner": { "id": "787132", "username": "natgeo", "fullName": "National Geographic", "isVerified": true },"takenAt": "2026-10-13T19:35:03.000Z","caption": "Presented by @Rolex. Black rain frogs spend most of their livesβ¦","hashtags": ["Rolex", "PerpetualPlanet", "AfricaEarthsWildHome"],"mentions": ["Rolex", "DisneyPlus", "hulu"],"format": "video","isVideo": true,"isReel": true,"likeCount": 17427,"commentCount": 76,"medias": [{ "type": "Image", "url": "https://β¦jpg", "width": 1080, "height": 1920 },{ "type": "Video", "videoUrl": "https://β¦mp4", "audioUrl": "https://β¦m4a", "width": 1080, "height": 1920 }],"hasAudio": true,"audioTitle": "Original audio","taggedUsers": [],"coauthors": [],"topics": ["black rain frog", "south africa wildlife", "fossorial animals", "nature documentary"],"commentsRead": 0,"comments": [],"scrapedAt": "2026-10-14T14:45:20.949Z"}
π
crawlUrltells you where the record was found β here natgeo's profile page β when that differs from the canonical URL.
β Why choose this Actor?
| ποΈ Audio-only track, not just a video URL | The single most useful field for anyone building transcripts: ~0.4 MB instead of a multi-megabyte video, ~10Γ less to move and transcribe. |
| π·οΈ Topic tags | Instagram's own categorization of the post, returned as topics[]. A ready-made grouping key. |
| π Hashtags and mentions, parsed | Clean arrays out of the box β no caption regex in your pipeline. |
| π₯ Co-authors and tagged users | The collaboration graph that most Instagram tools drop. |
| π No login, no account, no session to rotate | Public data only. Nothing to leak, nothing that can get an account banned. |
| π Canonical public URLs | Every record points at the page a human would open, so joins and audits are trivial. |
| π― Predictable run size | Per-profile caps and a hard request cap β you decide how big a run gets. |
| π Live data | Read at run time, never a stale cache. |
π° How much does it cost?
You pay per result written to the dataset β pay-per-event. No subscription, no minimum, and nothing is charged for a record the Actor could not read.
| Event | Free | Starter | Scale | Business and up |
|---|---|---|---|---|
| π Post / Reel, per 1,000 stored | $2.00 | $1.80 | $1.60 | $1.50 |
| π€ Profile, per 1,000 stored | $2.00 | $1.80 | $1.60 | $1.50 |
| π¬ Comment, per 1,000 stored with a post | $0.50 | $0.40 | $0.30 | $0.30 |
| βΆοΈ Actor start, per run | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
For comparison, the official Instagram Scraper charges $2.70 per 1,000 results on the Free plan, falling to $1.50 on Gold, $0.90 on Platinum and $0.50 on Diamond, and the official comment scraper $2.60 per 1,000 comments on Free. Every one of our tiers is below the official Free price.
π‘ A worked example. A profile with 24 posts, Reels tab off, comments off, on the Free plan: 1
profile + 24 posts β $0.002 + 24 Γ $0.002 + $0.00005 β $0.05. The Reels tab is on by default and
counted separately, so leaving it on can add up to another 24 records (β +$0.048; a Reel that is also in the
posts list is stored and charged once). Turning comments on adds one charge per comment stored: with the
default 24 per post, 24 posts' 576 comments β +$0.29.
Cost levers: β¬οΈ lower Max media per profile, β¬ leave comments off or lower Max comments per post, ποΈ turn off the Reels tab, π¦ set Max requests per run (and Apify's own maximum cost per run β the Actor stops starting new work when it is reached; a request already in flight finishes).
The event price includes the platform usage this Actor generates β compute and proxy. Apify bills usage on top only if the publisher has switched to "pay per event + usage"; the Actor's page shows which applies.
ποΈ Recipe: Reels β transcripts
The whole reason audioUrl exists:
1. Run this Actor on the profiles you care about β dataset of Reels2. Take medias[].audioUrl where type == "Video" β ~0.4 MB audio file3. Send it to Whisper / Deepgram / Groq / any STT β transcript4. Join on source.canonicalUrl β transcript + engagement in one table
Feeding a speech-to-text model the full video instead costs roughly 10Γ the bandwidth for the same words. π―
π€ Automation & AI agents
- π Apify API β start a run and read the dataset from any language
- π§© No-code β Make, n8n, Zapier and the Apify integrations
- π€ MCP / LLM agents β the Actor is callable as an MCP tool from Claude, ChatGPT or any agent that speaks MCP; every field is plain JSON with stable names
- π€ Exports β JSON, CSV, Excel and XML straight from the dataset
Connect over MCP
https://mcp.apify.com?tools=autofacts/instagram-scraper
In a client that reads an mcpServers configuration block:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=autofacts/instagram-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
The agent reads this Actor's parameters and their descriptions straight from the input schema, and the hosted server infers the result field types from the dataset schema β so a model knows what to send and what comes back before it ever calls anything.
Or call the API directly
curl -X POST "https://api.apify.com/v2/acts/autofacts~instagram-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"usernames": ["natgeo"], "maxPostsPerProfile": 12, "includeReels": false}'
The response body is the dataset records described above: one profile, then its posts.
β FAQ
Do I need an Instagram account? π No. Nothing is logged in; no account cookies exist to send. Requests carry only the anonymous cookies Instagram sets on a logged-out visit, as any visitor's browser does.
Is it legal to scrape Instagram? βοΈ This Actor reads only what Instagram shows any logged-out visitor, and it never logs in. In Meta v. Bright Data (2024) a US court found that collecting public Instagram data while logged out did not breach Meta's terms. Whether your use is lawful still depends on what you collect and what you do with it β profiles and comments can be personal data under laws such as the GDPR β so check with your own counsel.
Is this an alternative to the Instagram API? π For reading public data, yes. Instagram's official API is built for managing your own professional account: it needs a Meta app, a business or creator account and app review, and it reaches other accounts only through a limited business-discovery endpoint. This Actor reads any public profile, post or Reel without any of that, and you call it through the Apify API.
Can I use it from Claude, ChatGPT, n8n or Make? π€ Yes. It is an MCP tool for AI agents and an ordinary API call for automation tools; see Automation & AI agents above.
Can I export Instagram comments to Excel or CSV? π€ Yes. Turn Include comments on and each post
carries its comments in comments[]. Download JSON to keep them nested under their post; CSV and Excel
spread them across columns (comments/0/text, comments/1/text, β¦).
Can it read Stories or followers? β No. Instagram only serves those to logged-in users, and this Actor deliberately stays logged out.
Can it search hashtags or keywords? β No β same reason. It reads the accounts you point it at.
topics[] and hashtags[] are there so you can group and filter what you collect.
Why is playCount missing on some posts? ποΈ Play counts only come from the Reels tab. Leave
Include the Reels tab on (it's on by default) and Reels will carry them.
Why do some records have no audioUrl? πΌοΈ Only videos carry audio. An image has none, and a carousel has one wherever a child is a video β every child's assets are in medias[].
How fresh is the data? β±οΈ Read live, at the moment you run.
How do I keep runs small? π― Lower Max media per profile, keep comments off, and set Max requests per run.
A run returned 0 items β why? π€ Usually the account is private, the link is wrong, or the profile has no posts. The run log says which. If every request fails, the Actor's own start-up check stops the run with a clear message instead of returning empty results.
Which Instagram URL forms work? β
In Start URLs: https://www.instagram.com/<user>/,
β¦/p/<code>/, β¦/reel/<code>/, β¦/reels/<code>/ and β¦/tv/<code>/ (also with the account in front, as in
β¦/<user>/p/<code>/, and on m.instagram.com or instagr.am). Start URLs must be full addresses: Apify
refuses the whole input when one has no https://. In Usernames: natgeo, @natgeo or
instagram.com/natgeo. A share link (instagram.com/share/β¦ or instagram.com/s/β¦) carries a code that is
not the post's own: open it and paste the address it leads to. The run log names every link it could not
use, and why.
β οΈ Notes and limitations
- π Reads publicly visible Instagram data only, without logging in.
- π« Not available without a login, and therefore not implemented: Stories, highlights, followers, following, hashtag pages, keyword search, business contact details.
- ποΈ
playCountanddurationSecondscome from the Reels tab node, so posts read from the timeline don't carry them. - β³ Instagram changes its surface from time to time. The Actor runs a start-up check and fails loudly rather than returning empty results; if that happens it needs an update from the maintainer.
- πΌοΈ Media URLs (
videoUrl,audioUrl, imageurl) are signed links that expire β download or transcribe them soon after the run. - π Records are a snapshot of the moment you ran it; run again for fresh numbers.
π§° Other Actors by autofacts
Apify only auto-recommends Actors in the same category, so here are the ones that actually pair with this scraper:
| Actor | What it's for |
|---|---|
| Instagram Transcript Scraper | The spoken words of the Reels this Actor finds, as text with timestamps β same accounts, same input |
| Shopify Store Leads | Shopify brands that link an Instagram account, with their store size and apps β the accounts to read here |
| Bluesky Scraper | Posts, profiles, feeds and interactions |
| TikTok Subtitle & Transcript Scraper | TikTok captions and transcripts, for the same creators on another platform |
All of them: apify.com/autofacts
π¬ Feedback and support
Found a bug, or a field you need that isn't here? Open an issue on the Actor's page β it's read, and it's what decides what gets built next.