Instagram Profile Scraper: Per-Post Likes & Comments
Pricing
from $4.99 / 1,000 results
Instagram Profile Scraper: Per-Post Likes & Comments
Instagram Profile Scraper extracts complete data from any public Instagram profile. Capture bios, posts, Reels, followers, following, hashtags, engagement metrics, and metadata. Ideal for research, influencer analysis, audits, and workflows needing structured Instagram profile insights.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
52
Total users
8
Monthly active users
a day ago
Last modified
Categories
Share
Instagram Profile Scraper — Extract Profiles, Post Likes & Comments
Instagram Profile Scraper: Per-Post Likes & Comments turns any public Instagram username into structured JSON: full profile data, a sample of each account's most-recent posts with their like and comment counts, and derived engagement metrics (average likes, average comments, engagement rate, follower/following ratio, posting cadence). Every response is typed, normalized JSON — no HTML, no selectors, no manual parsing. After a single run, you'll have a ready-to-use engagement snapshot for every profile you submit.
What is Instagram Profile Scraper: Per-Post Likes & Comments?
Instagram Profile Scraper: Per-Post Likes & Comments is an Apify Actor that fetches public Instagram profile data via browser automation and layers engagement analytics on top of it. It works without an Instagram account by default — it intercepts Instagram's own web_profile_info response — and accepts an optional session cookie for cases where Instagram hides post counts from logged-out requests. It is a superset of a standard Instagram profile scraper: every classic profile field is still returned, plus per-post engagement sampling.
- Scrape full public profile fields: bio, followers, following, verified/business status, external links
- Sample a configurable number of recent posts and read each post's like/comment counts
- Compute
avgLikes,avgComments,engagementRatePct,followerFollowingRatioandpostFrequencyHintautomatically - Export results as JSON, CSV, or Excel, or pull them over the Apify API
- No proxy management required — residential proxy with automatic retries is configured by default
What data does Instagram Profile Scraper: Per-Post Likes & Comments collect?
The Actor returns three layers of data per profile: the profile record itself, the full post objects behind the profile's recent grid, and a per-post like/comment sample used to derive engagement analytics.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Profile data | username, bio, followers, following, verified/business status | username, biography, followersCount, followsCount, verified, isBusinessAccount |
| Post objects | caption, hashtags, media URLs, like/comment counts, timestamp | latestPosts[].caption, latestPosts[].likesCount, latestPosts[].commentsCount, latestPosts[].displayUrl |
| Per-post engagement sample | sampled post like/comment counts, video flag | recentPosts[].likeCount, recentPosts[].commentCount, recentPosts[].isVideo |
| Engagement analytics (derived) | average likes/comments, engagement rate, follower/following ratio, posting cadence | avgLikes, avgComments, engagementRatePct, followerFollowingRatio, postFrequencyHint |
Need more Instagram data?
If you need to discover posts by hashtag rather than by profile, the Instagram Hashtag Scraper: Top Post Data covers that entity type. For a deeper look at what people are saying in the comments this Actor only counts, the Instagram Comments Scraper By Sentiment Analysis extracts and scores individual comment text.
How does Instagram Profile Scraper differ from the official Instagram Graph API?
Meta's Instagram Graph API is built for accounts you own or manage, not for looking up arbitrary public profiles — Instagram Profile Scraper: Per-Post Likes & Comments does the latter with a username as the only input.
| Feature | Instagram Graph API | Instagram Profile Scraper: Per-Post Likes & Comments |
|---|---|---|
| Account access | Only Instagram professional (business/creator) accounts the app's user owns or manages; Business Discovery is a narrow public-data exception | Any public Instagram profile, by URL or username |
| Setup | Requires a Meta developer app, an Instagram professional account linked to a Facebook Page, and App Review for third-party accounts | No developer app, App Review, or linked account — supply a username and run |
| Engagement analytics | Returns raw insights for owned accounts only; no cross-account engagement-rate calculation | Computes avgLikes, avgComments, engagementRatePct and followerFollowingRatio directly |
| Rate limits | Capped at 4,800 × the account's impressions per rolling 24 hours, per Meta's published Graph API docs | Bound by the recentPostsCount and profile list you configure, run within your Apify usage |
| Output format | Raw per-endpoint JSON that must be stitched across multiple calls | One normalized JSON row per profile |
The Graph API is the right choice when you need insights or messaging for accounts your own business manages. This Actor is the right choice when you need engagement data on public profiles you don't control — competitors, prospects, or creators.
Why do developers and teams scrape Instagram?
For marketers and brand teams
Brand and social teams use profile-level engagement data to benchmark their own accounts against named competitors without manually opening each profile and counting likes. Pulling engagementRatePct, avgLikes and postFrequencyHint for a list of competitor profileUrls turns a manual competitive audit into a repeatable dataset — useful for quarterly reporting or before a campaign to see which competitors are posting more often and getting more engagement per post.
For influencer marketing and talent teams
Before signing a creator, talent and partnerships teams check whether follower counts and engagement line up. followerFollowingRatio and engagementRatePct flag accounts whose follower count looks large but whose recent posts get comparatively few likes and comments — a common signal of purchased or inactive followers — before a contract is negotiated, rather than after a sponsored post underperforms.
For researchers and analysts
Academic and market researchers studying public discourse or brand presence on Instagram use profile and post-sampling data across many accounts to study posting cadence and engagement trends over time. Because the Actor only returns publicly accessible profile and post data, researchers can build panel datasets of public accounts (news outlets, public figures, brands) without needing platform-level API access or account credentials.
For developers building data products
Developers building monitoring dashboards or client-facing reporting tools call this Actor on a schedule to keep a set of tracked profiles' engagement metrics current, storing each run's avgLikes, avgComments and engagementRatePct as a time series. Because output fields are stable JSON keys, downstream code that reads engagementRatePct today keeps working after the next run without a parsing rewrite.
How to scrape Instagram (step by step)
- Open the Instagram Profile Scraper: Per-Post Likes & Comments listing in Apify Console.
- Provide
profileUrls— a list of Instagram profile URLs, bare usernames, or@usernamesto analyze. - Set
recentPostsCount(1–50, default 12) to control how many recent posts feed the engagement estimate, and toggleincludeAboutSectionif you also want join date and country. - Optionally paste a fresh
sessionIdcookie for logged-in fetches, and setproxyConfigurationif you need proxies other than the default residential pool. - Start the run and download results as JSON, CSV, or Excel from the run's dataset.
What to do when Instagram changes its structure
The Actor is actively maintained against Instagram's web_profile_info response format. Output field names and types stay stable on your end even when the underlying fetch logic needs updates — your integration keeps reading the same JSON keys without a rewrite.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
profileUrls | No | array | Instagram profiles to analyze. Accepts a full URL (https://www.instagram.com/username/), a bare username, or @username. The classic startUrls key is also accepted for backward compatibility. | ["https://www.instagram.com/nasa/"] |
recentPostsCount | No | integer | How many of the profile's most-recent grid posts to sample for the engagement estimate. Default 12, minimum 1, maximum 50. | 12 |
includeAboutSection | No | boolean | Also extract the profile's join date and country when Instagram exposes them. Default false. | false |
sessionId | No | string (secret) | Optional Instagram sessionid cookie value. Instagram login-walls profile data for logged-out requests since ~2026-07, so counts may return null without it. Paste a fresh sessionid (format <numericUserId>:...) to unlock real data. Leave empty to try logged-out first. | "" |
proxyConfiguration | No | object | Proxy configuration. Defaults to residential proxy with automatic retries for reliability; supply your own Apify proxy groups or custom proxy URLs here to use them instead. | { "useApifyProxy": false } |
Example JSON input:
{"profileUrls": ["https://www.instagram.com/nasa/", "https://www.instagram.com/nike/"],"recentPostsCount": 12,"includeAboutSection": false,"sessionId": "","proxyConfiguration": { "useApifyProxy": false }}
No parameter is marked required by the input schema, but the run needs at least one entry in profileUrls (or the legacy startUrls) — leaving it empty produces zero dataset rows and a logged error rather than a validation failure, which can silently pass in an unattended pipeline.
⬆️ Output
Every dataset row is typed, normalized JSON — no HTML, no selectors. Results are downloadable as JSON, CSV, or Excel. Each pushed profile row is billed as one row_result event; profiles that fail to fetch or don't resolve to a user are skipped and are not pushed or charged.
Scraped profile and engagement data
{"inputUrl": "https://www.instagram.com/nasa","url": "https://www.instagram.com/nasa","id": "528817151","username": "nasa","fullName": "NASA","biography": "Explore the universe and discover our home planet.","externalUrls": [],"externalUrl": "https://www.nasa.gov/","followersCount": 98000000,"followsCount": 79,"isBusinessAccount": true,"businessCategoryName": "Government Organization","private": false,"verified": true,"profilePicUrl": "https://scontent.cdninstagram.com/nasa_profile.jpg","profilePicUrlHD": "https://scontent.cdninstagram.com/nasa_profile_hd.jpg","postsCount": 4200,"followerFollowingRatio": 1240506.33,"avgLikes": 342000,"avgComments": 980,"engagementRatePct": 0.3499,"postFrequencyHint": "~4.2 posts/week","about": {"joinedDate": null,"country": null}}
Scraped posts (latestPosts)
{"id": "3123456789012345678","type": "Image","shortCode": "AbC123","caption": "New views of Earth from orbit. #nasa #earth","hashtags": ["nasa", "earth"],"mentions": [],"url": "https://www.instagram.com/p/AbC123/","commentsCount": 1200,"dimensionsHeight": 1080,"dimensionsWidth": 1080,"displayUrl": "https://scontent.cdninstagram.com/abc123.jpg","alt": "Photo of Earth taken from the International Space Station","likesCount": 350000,"timestamp": "2026-07-10T14:32:00.000Z","ownerUsername": "nasa","ownerId": "528817151","images": ["https://scontent.cdninstagram.com/abc123.jpg"],"childPosts": [],"taggedUsers": []}
Sampled recent posts (recentPosts)
{"shortcode": "AbC123","url": "https://www.instagram.com/p/AbC123/","likeCount": 350000,"commentCount": 1200,"isVideo": false}
likeCount and commentCount are emitted as null rather than fabricated whenever Instagram hides post counts from the request.
How many results can you scrape with Instagram Profile Scraper
There is no cap on how many entries you can list in profileUrls — the Actor processes them one at a time. recentPostsCount is clamped in code to between 1 and 50 posts per profile regardless of what value is supplied, and defaults to 12. Each profile requires its own browser fetch, so a larger profileUrls list or a higher recentPostsCount means more page loads and a longer overall run. Profiles that fail to load after three retry attempts are logged and skipped rather than aborting the whole run.
Integrate Instagram Profile Scraper and automate your workflow
Instagram Profile Scraper: Per-Post Likes & Comments works with any language or tool that can send an HTTP request, since every run is triggered through the standard Apify API.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("<YOUR_APIFY_USERNAME>/instagram-profile-scraper-per-post-likes-comments").call(run_input={"profileUrls": ["https://www.instagram.com/nasa/"],"recentPostsCount": 12,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["username"], item["engagementRatePct"])
Works in Python, Node.js, Go, Ruby, cURL.
MCP for AI agents
The Actor is reachable through Apify's hosted MCP server at https://mcp.apify.com (or locally via npx -y @apify/actors-mcp-server), which exposes Apify Actors as callable MCP tools. Compatible clients documented by Apify include Claude Desktop, Cursor, and VS Code (via Copilot's agent mode).
Automation platforms (n8n, Make)
In n8n, the official Apify node's "Run Actor" operation starts this Actor and its "Get Dataset Items" capability pulls results directly into your workflow. In Make, the official Apify app's action modules run the Actor and its search module retrieves dataset items, so results can flow straight into a Google Sheet or CRM without custom code.
Is it legal to scrape Instagram?
Scraping publicly accessible Instagram data is generally legal; Instagram Profile Scraper: Per-Post Likes & Comments only returns data a logged-out (or, with a session cookie, logged-in) visitor could already see on a public profile page — it does not access private accounts or bypass any access control. Because profile bios, usernames, and post engagement figures can constitute personal data about identifiable individuals, GDPR and CCPA still govern how you store, process, and reuse it, particularly for bulk collection. Consult legal counsel for commercial use cases involving bulk personal data.
Frequently asked questions
Does Instagram Profile Scraper work without an Instagram account?
Yes, by default it tries a logged-out fetch and needs no account or credentials. Since Instagram began login-walling profile data for logged-out requests (~2026-07), post like/comment counts may come back null without an account; supplying a sessionId cookie in the input restores real counts.
How often is the scraped data updated?
Every run performs a live fetch against Instagram at the time you run it — the Actor does not serve cached or pre-scraped data.
What happens if a profile is deleted, doesn't exist, or returns no data?
The profile is skipped: the Actor logs an error for that username and moves to the next one instead of failing the whole run. No dataset row is pushed (and no row_result event is charged) for a profile that returns no data.
Can I scrape private Instagram profiles?
No. Only publicly accessible profile and post data is returned; private accounts are not bypassed.
Does Instagram Profile Scraper work for AI agent workflows and LLM pipelines?
Yes. It's callable as a standard HTTP endpoint by any agent framework, and it's also reachable through Apify's hosted MCP server (https://mcp.apify.com) for MCP-compatible clients. Every response is typed JSON that can be passed to an LLM without a parsing step.
How does Instagram Profile Scraper handle Instagram's anti-bot system?
It fetches profiles with Playwright browser automation, intercepting Instagram's own web_profile_info response rather than scraping rendered HTML. It runs behind a residential proxy by default with automatic retries (three attempts per profile), and accepts an optional session cookie for cases where logged-out requests get login-walled.
Does Instagram Profile Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with stable field names — no HTML, no selectors, no parsing step — so it can be passed directly into an LLM context window, indexed into a vector store, or routed through an agent tool.
Can I use Instagram Profile Scraper without managing proxies?
Yes. It defaults to a residential proxy pool with automatic retries; you only need to supply your own proxyConfiguration if you specifically want different proxy groups or custom proxy URLs.
What happens when Instagram changes its structure or blocks the scraper?
The Actor is maintained against Instagram's response format, and the output schema stays stable on your end — field names and types don't change even when the underlying fetch logic is updated to match a platform change.
Your feedback
Found a bug or missing a field? We want to know. Reach out through the Actor's Issues tab on Apify Console, or contact API-Empire support through the Apify Store listing — reports like this directly shape the next update.
