Instagram Scraper β€” Profiles, Posts, Reels, Comments Β· No Login avatar

Instagram Scraper β€” Profiles, Posts, Reels, Comments Β· No Login

Pricing

from $1.50 / 1,000 post or reels

Go to Apify Store
Instagram Scraper β€” Profiles, Posts, Reels, Comments Β· No Login

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

Richard Feng

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

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?

🧲 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's audioUrl
  • 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

  1. Create a free Apify account πŸ™‹
  2. Open this Actor and paste a link β€” a profile, a post or a Reel πŸ‘‡
  3. (Optional) turn on Include comments πŸ’¬
  4. Save & Start, then download the dataset as JSON, CSV or Excel πŸ“¦
{
"startUrls": [{ "url": "https://www.instagram.com/natgeo/" }],
"maxPostsPerProfile": 12
}
Paste thisAnd 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 natgeoSame 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

FieldTypeDefaultDescription
Start URLsarrayβ€”Profile, post or Reel addresses to read.
Usernamesarrayβ€”Extra accounts, with or without @. Equivalent to profile URLs.
Max media per profileinteger24How 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 tabbooleantrueAlso read the Reels tab. It is the only read that returns play counts, and it is where Reel-only content is found.
Include commentsbooleanfalseRead each media's comments, up to the cap below.
Max comments per postinteger24Upper bound on comments stored with each post or Reel (0–500).
Media per pageinteger12How many posts one page asks for (1–50).
Max concurrencyinteger3How many requests run at once.
Max requests per runinteger(API only)Hard stop after this many requests. Not shown in the form; set it through the JSON input or the API.
Proxy configurationobjectResidentialApify 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

FieldTypeNotes
typestringprofile
sourceobject{id, canonicalUrl, crawlUrl?, username}
idstringInstagram's numeric id
usernamestring
fullNamestring
biographystring
isPrivate / isVerifiedboolean
followerCount / followingCount / mediaCountintegerAbsent rather than 0 when Instagram does not return it
profilePicUrlstring
bioLinksarrayexternalUrl is the first one
hasReelsboolean
scrapedAtstringISO 8601

πŸ–ΌοΈ Post / Reel record

FieldTypeNotes
typestringpost
sourceobject{id, canonicalUrl, crawlUrl?, username} β€” canonicalUrl is the public page
kindstringpost Β· reel Β· igtv
id / shortcodestring
ownerobject{id, username, fullName, isVerified}
takenAtstringISO 8601
captionstring
hashtags / mentionsarrayParsed from the caption, without # / @
formatstringimage Β· video Β· carousel
productTypestringInstagram's own value (clips, feed, …)
isVideo / isReelboolean
durationSecondsnumberFrom the Reels tab, or from a carousel child
width / heightinteger
carouselCountintegerChild count when it's a carousel. Each child's image, video and audio track is in medias[]
likeCount / commentCountinteger
playCountintegerReels tab only
hasAudiobooleanWhether any asset of the post carries an audio track
viewCountinteger
mediasarray{type: "Image", url, width, height} and/or {type: "Video", videoUrl, audioUrl, width, height}
hasAudio / audioTitleboolean / string
accessibilityCaptionstringInstagram's own description of the media
taggedUsersarray{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
coauthorsarray{username, id, fullName?} β€” the other accounts a collab is credited to
topicsarrayInstagram's topic tags
locationobject{id?, name}
commentsReadintegerHow many comments this record holds
commentsarray{id, authorUsername, authorId, authorIsVerified, text, likeCount, replyCount, parentCommentId, createdAt}
scrapedAtstringISO 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"
}

πŸ”— crawlUrl tells 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 URLThe single most useful field for anyone building transcripts: ~0.4 MB instead of a multi-megabyte video, ~10Γ— less to move and transcribe.
🏷️ Topic tagsInstagram's own categorization of the post, returned as topics[]. A ready-made grouping key.
πŸ”– Hashtags and mentions, parsedClean arrays out of the box β€” no caption regex in your pipeline.
πŸ‘₯ Co-authors and tagged usersThe collaboration graph that most Instagram tools drop.
πŸ”“ No login, no account, no session to rotatePublic data only. Nothing to leak, nothing that can get an account banned.
πŸ”— Canonical public URLsEvery record points at the page a human would open, so joins and audits are trivial.
🎯 Predictable run sizePer-profile caps and a hard request cap β€” you decide how big a run gets.
πŸ“… Live dataRead 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.

EventFreeStarterScaleBusiness 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 Reels
2. Take medias[].audioUrl where type == "Video" β†’ ~0.4 MB audio file
3. Send it to Whisper / Deepgram / Groq / any STT β†’ transcript
4. 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.
  • 🎞️ playCount and durationSeconds come 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, image url) 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:

ActorWhat it's for
Instagram Transcript ScraperThe spoken words of the Reels this Actor finds, as text with timestamps β€” same accounts, same input
Shopify Store LeadsShopify brands that link an Instagram account, with their store size and apps β€” the accounts to read here
Bluesky ScraperPosts, profiles, feeds and interactions
TikTok Subtitle & Transcript ScraperTikTok 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.