Instagram Profile & Posts Scraper avatar

Instagram Profile & Posts Scraper

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Instagram Profile & Posts Scraper

Instagram Profile & Posts Scraper

Scrape public Instagram profiles and their recent posts with no login: followers, following, post count, bio, links, verified flag, and up to 12 recent posts with captions, media and dates. Likes and comments need your own session cookies. Pay per profile and per post.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

The Howlers

The Howlers

Maintained by Community

Actor stats

0

Bookmarked

92

Total users

3

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Instagram Scraper

Read public Instagram profiles without logging in: follower, following and post counts, name, bio, bio links, verified and private flags, and the latest posts Instagram shows logged-out visitors (up to 12, with caption, type, image and date). Add your own session cookies to read the logged-in page as well, for more posts and like counts.

Every value comes from the profile page Instagram served. A value Instagram did not show is null, never a guess.


How it reads profiles

Without cookies the actor visits each profile the way a logged-out visitor does, using the Camoufox stealth browser through Apify residential proxy. Instagram puts the profile's public data in the first HTML document of the page, so only that document is loaded (no images, videos or scripts), one profile at a time with a short pause between profiles. A proxy session (address plus Instagram's cookies) is reused across profiles and replaced when Instagram refuses a visit.

With sessionCookies (from your own Instagram account) the actor reads the logged-in profile page and opens the posts for likes and comments. A profile the logged-in session cannot read is then read as a logged-out visitor.

Without cookiesWith your session cookies
Followers, following, post countYesYes
Name, bio, bio links, verified, privateYesYes
Latest posts (caption, type, image, date)Up to 12Up to maxPosts (50)
Likes and comments per postNo (null)Yes

Quick start

Real profiles, no login

{
"demoMode": false,
"usernames": ["natgeo", "nike"],
"maxPosts": 6
}

Sample output only

{
"demoMode": true,
"usernames": ["instagram"]
}

Demo Mode returns one labeled sample profile (demo: true with a _notice) to show the output format, and charges no profile or post events. It is on by default so a first run costs nothing; set it to false for real data.


Output

One row per profile that was read:

{
"username": "beyondwowplumbing",
"fullName": "Beyond Wow Plumbing",
"biography": "Austin-area plumbing experts\nFamily-owned since 1980\n...",
"profilePicUrl": "https://scontent...",
"followersCount": 1021,
"followingCount": 307,
"postsCount": 1123,
"isVerified": false,
"isPrivate": false,
"isBusinessAccount": null,
"externalUrl": "https://linktr.ee/beyondwowplumbing",
"bioLinks": ["https://linktr.ee/beyondwowplumbing"],
"linkedFacebookPage": { "name": "Beyond Wow Plumbing", "id": "206981846005241" },
"countsRounded": false,
"dataSource": "public_profile",
"profileUrl": "https://www.instagram.com/beyondwowplumbing/",
"latestPosts": [
{
"id": "4021627416677606383",
"shortcode": "DfPsNP2CmPv",
"url": "https://www.instagram.com/p/DfPsNP2CmPv/",
"type": "carousel",
"caption": "Skipping maintenance might feel harmless now...",
"displayUrl": "https://scontent...",
"likesCount": null,
"commentsCount": null,
"timestamp": "2026-11-02T16:02:48.901Z",
"isVideo": false,
"hook": "Skipping maintenance might feel harmless now... until your plumbing decides otherwise.",
"hookWordCount": 11,
"hasQuestion": false,
"hasCTA": true
}
],
"scrapedAt": "2026-11-03T15:30:00.000Z"
}
FieldMeaning
followersCount, followingCountFrom the profile record on the page
postsCountFrom the page summary Instagram publishes ("1,123 Posts"). countsRounded is true if a count was only shown abbreviated, such as "12.5K"
latestPostsNewest first. Without cookies: the posts Instagram shows logged-out visitors (up to 12). timestamp is the post's creation time, which Instagram encodes in the post id and also prints in the post's description
likesCount, commentsCountnull when not shown (logged-out visitors do not see them)
isBusinessAccountnull when the page did not say
dataSourcepublic_profile (logged out), logged_in_session (your cookies) or firecrawl

Profiles that could not be read are listed in the OUTPUT record of the key-value store under notScraped, with a status (not_found, blocked, invalid, error) and a message. They are not charged.


Input parameters

ParameterTypeDefaultDescription
usernamesarray-Usernames to read, with or without @, or profile URLs
maxPostsinteger12Recent posts per profile (0 to 50; at most 12 without cookies). 0 returns the profile only, with no posts
includeReelsbooleantrueInclude reels among the recent posts
includeCommentsbooleanfalseComments are not read in real runs yet (Instagram shows them only to logged-in visitors); Demo Mode samples show the format
maxCommentsPerPostinteger20Comments per post
includeReactionsbooleanfalseDetailed engagement metrics; shown in Demo Mode samples only for now
demoModebooleantrueReturn one labeled sample profile instead of reading Instagram
sessionCookiesstring-Optional. Your Instagram cookies as a JSON array (Cookie-Editor export), for the logged-in page
cookieStorageKeystring-Instead of sessionCookies: load cookies saved by the Cookie Manager actor
cookieKvStoreNamestring-Name or ID of the key-value store where Cookie Manager saved your session (its default is cookie-sessions)
useFirecrawlbooleanfalseRead profiles through the Firecrawl API instead (needs firecrawlApiKey)
firecrawlApiKeystring-Your Firecrawl API key
proxyobjectApify residentialProxy settings. Leave empty to read public profiles through Apify residential proxy; with session cookies the logged-in page uses a proxy only when one is set here
webhookUrlstring-URL to POST results to (Zapier, Make, n8n)
enableSentimentAnalysisbooleanfalseAI sentiment; shown in Demo Mode samples only for now
aiProviderstring"none"AI provider for sentiment analysis
aiApiKeystring-API key for that provider
aiModelstring-Custom model name (leave empty for the default)

Pricing

This actor uses pay-per-event billing:

EventWhen it is chargedPrice
Actor startOnce when the run starts, one event per GB of memory (minimum one). At the default 4 GB of memory a run starts at $0.40$0.10 per GB
Profile ScrapedPer profile scraped$0.02
Post ScrapedPer post scraped$0.01
ResultEach item written to the default dataset$0.00001

Profile Scraped is charged once per profile row whose counts were read, right after the row is saved. Post Scraped is charged once per post in that row's latestPosts, so maxPosts sets the most a profile can cost. With maxPosts set to 0 a profile returns no posts and costs one Profile Scraped only. Profiles that were not found or could not be read are not charged. Public profile reading needs little memory, so a run with 2 GB starts at $0.20. Demo Mode charges no profile or post events.


Troubleshooting

A profile is in notScraped with not_found

Instagram showed "Sorry, this page isn't available" on three visits from different addresses. The username is wrong, the account was renamed or deleted, or it is restricted (for example by age).

blocked

Instagram refused the visits (login page or HTTP 429) from every address tried. Run again later, or add your own session cookies.

latestPosts is empty

The account is private (isPrivate: true) or has no posts.

Likes are null

Logged-out visitors do not see like or comment counts. Add sessionCookies from your own account for them.


Built by John Rippy | Actor Arsenal