Instagram Profile & Content Intelligence avatar

Instagram Profile & Content Intelligence

Pricing

from $4.00 / 1,000 profile checks

Go to Apify Store
Instagram Profile & Content Intelligence

Instagram Profile & Content Intelligence

Extract public Instagram profiles, posts, reels and engagement metrics.

Pricing

from $4.00 / 1,000 profile checks

Rating

0.0

(0)

Developer

Akatra

Akatra

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Extract public Instagram profiles, posts, reels and engagement metrics.

Instagram Scraper for profiles, posts and reels, by Akatra. Give usernames or links and get public profiles, their newest posts and reels with likes, comments and reel plays in one clean schema, plus engagement metrics you can trust: engagement rate by followers, medians, top content and posting frequency, always over the exact sample that was collected. Add a monitor key and later runs tell you which profiles changed (followers, bio, link, verification, profile picture) and which content is new, with only the changes written if you want.

Pay per result · No login, no cookies · Public data only · Structured output for AI agents (MCP)

🛠️ What does Instagram Profile & Content Intelligence do?

  • 👤 Public profiles. Username, name, bio, verified badge, link in bio, followers, following, number of posts, profile picture, numeric user id.
  • 🖼️ Newest posts and reels in one schema. Photos, carousels, videos and reels with caption, publication time, likes, comments, reel plays, hashtags, mentions, location, paid-partnership flag and collaborators. One row per post: a carousel stays one row with its photos in mediaItems.
  • 📈 Engagement metrics without guesswork. engagementTotal, engagementRateByFollowers, playsToFollowers and commentsToLikes per item; averages, medians, top post by likes and comments, top reel by plays, content-type mix, hashtag frequency and posts per week per profile. A metric whose inputs are missing is null, nothing is divided by zero, and every summary states its sample size and date window.
  • 🔁 Change tracking. With a monitor key the first run stores a baseline; later runs report FOLLOWERS_CHANGED, FOLLOWING_CHANGED, POST_COUNT_CHANGED, BIO_CHANGED, EXTERNAL_URL_CHANGED, VERIFICATION_CHANGED, PROFILE_IMAGE_CHANGED, DISPLAY_NAME_CHANGED, USERNAME_CHANGED and NEW_CONTENT.
  • 🧹 Only what changed. With onlyChanged, unchanged profiles and known content are not written; known content is not charged.
  • 🔗 Post and reel links. Paste links and get the full record of each public post or reel.
  • 🔒 Public data only. No login, no cookies, no private accounts, no DMs, no follower or following lists, no comment texts or comment authors.

What people use it for

  • Competitor and brand tracking. Follower growth, posting frequency and the best-performing content of a list of brands, week by week.
  • Creator vetting. Median likes, comments and engagement rate over the newest content, with the sample stated.
  • Campaign monitoring. New posts and reels of partner accounts with likes, comments and plays.
  • AI agents. "Which profile gained followers since last week?", "which reel of this brand has the most plays?" are answered by plain fields.

📊 What data can you extract?

Every row has a recordType: profile, content or error.

GroupFields
Profileusername, profileUrl, instagramUserId, displayName, biography, profileImageUrl, isVerified, isPrivate, externalUrl, followersCount, followingCount, postsCount
Profile analytics (over the collected sample)sampleSize, sampleWindowStart, sampleWindowEnd, averageLikes, medianLikes, averageComments, medianComments, averageReelPlays, medianEngagementRate, postsPerWeek, analytics (content-type mix, top content, top reel, hashtag frequency)
ContentcontentId, shortcode, contentUrl, contentType (post, carousel, reel, video), ownerUsername, ownerUserId, coauthors, caption, publishedAt, likeCount, likesHidden, commentCount, viewCount, playCount, mediaCount, mediaItems, hashtags, hashtagCount, mentions, thumbnailUrl, displayUrl, videoDurationSeconds, locationName, isPaidPartnership
Content metricsengagementTotal, engagementRateByFollowers, playsToFollowers, commentsToLikes
ErrorserrorCode (not_found, private_profile, login_required, blocked, rate_limited, timeout, parse_error, unsupported_url, temporary_failure), errorMessage, input
Changes (with a monitor key)monitorStatus, changeTypes, changes, previousFollowersCount, firstSeenAt, lastSeenAt, changedAt
Provenancesource, sourceUrl, scrapedAt

A field Instagram does not show is null. Nothing is guessed.

🚀 How to use it

  1. Add usernames (nike, @natgeo) or profile links, and optionally post or reel links.
  2. Choose what to collect: profile rows, posts (up to 12 per account) and reels (up to 12 per account).
  3. Optional: set a monitor key and turn on Only changed records, then schedule the Actor.
  4. Run it.
  5. Download the results as JSON, CSV or Excel, or read them through the API.

⬇️ Input examples

Profiles with their newest posts and reels:

{
"usernames": ["nike", "natgeo", "bluebottle"],
"maxPostsPerProfile": 12,
"maxReelsPerProfile": 12
}

Daily competitor tracking, only changes:

{
"usernames": ["nike", "adidas", "puma"],
"monitorKey": "sportswear-daily",
"onlyChanged": true,
"followersChangeThresholdPercent": 1
}

Single posts and reels:

{
"postUrls": [{"url": "https://www.instagram.com/p/Dd7YYNtn-9H/"}],
"reelUrls": [{"url": "https://www.instagram.com/reel/Dd9Etk7R91I/"}],
"includeProfile": false
}

⬆️ Output examples

A profile row from a live run with 4 posts and 3 reels per profile (shortened):

{
"recordType": "profile",
"username": "bluebottle",
"profileUrl": "https://www.instagram.com/bluebottle/",
"instagramUserId": "354032059",
"displayName": "Blue Bottle Coffee",
"isVerified": true,
"isPrivate": false,
"externalUrl": "https://bluebottlecoffee.com/us/eng/monthofjazz",
"followersCount": 517948,
"followingCount": 806,
"postsCount": 2588,
"sampleSize": 5,
"sampleWindowStart": "2026-09-16T15:53:33+00:00",
"sampleWindowEnd": "2026-09-30T21:40:31+00:00",
"averageLikes": 1724.6,
"medianLikes": 444,
"averageComments": 9.4,
"medianComments": 4,
"averageReelPlays": 48424.33,
"medianEngagementRate": 0.000859,
"postsPerWeek": 3.4,
"analytics": {
"contentTypeDistribution": {"carousel": 2, "reel": 3},
"topReelByPlays": {"shortcode": "DdWpu4yMpxk", "contentUrl": "https://www.instagram.com/reel/DdWpu4yMpxk/", "contentType": "reel", "playCount": 102805}
},
"monitorStatus": "baseline",
"source": "instagram",
"scrapedAt": "2026-10-03T23:34:57Z"
}

A reel row from the same run (shortened):

{
"recordType": "content",
"username": "bluebottle",
"contentId": "3987558062057757796",
"shortcode": "DdWpu4yMpxk",
"contentUrl": "https://www.instagram.com/reel/DdWpu4yMpxk/",
"contentType": "reel",
"ownerUsername": "bluebottle",
"publishedAt": "2026-09-16T15:53:33+00:00",
"likeCount": 7034,
"commentCount": 34,
"playCount": 102805,
"mentions": ["shuyakyotojazz"],
"engagementTotal": 7068,
"engagementRateByFollowers": 0.013646,
"playsToFollowers": 0.198485,
"commentsToLikes": 0.004834
}

🔁 Change tracking

  • First run of a key: every profile and content row is the baseline (monitorStatus = baseline). Nothing is reported as a change.
  • Later runs: profiles are unchanged, changed or new; content is unchanged or new (NEW_CONTENT). A profile you add to the list later, or one that could not be read in an earlier run, starts with its own baseline, so its existing posts are never reported as new. With Only changed records, only changed, new and baseline rows (and error rows) are written.
  • Follower noise is filtered. Large accounts gain followers every minute. A follower or following change is reported when it reaches followersChangeThresholdPercent (default 1, 0 = any change) of the last reported value, so small moves still add up.
  • Likes, comments and plays of known content are refreshed in the row but not reported as changes; they move all the time.
  • No false removals. Removal is not reported: the public view shows only the newest items, so an item leaving the list is not proof of deletion, and a blocked, rate-limited or unreadable page is never treated as one.
  • A renamed account keeps its history (it is tracked by its numeric id) and reports USERNAME_CHANGED. Two accounts with the same display name are never merged.
  • Keys are isolated. History is stored per monitor key in a key-value store of your own account (instagram-monitor), only with the values needed for comparison.

🤖 For AI agents, MCP and the API

Call the Actor through the Apify API, the Apify MCP server or any Apify integration. Dataset views profiles, content and changes give ready-made column sets; the SUMMARY record lists profiles and content read, errors by code, changes, requests and bytes per proxy type.

💲 Pricing: pay per result

You pay per public profile checked and per post or reel row written to the dataset. See the Pricing tab for the current prices.

  • Profile check: one per public profile that was read successfully. It is also charged in a monitoring run where nothing changed and no row is written for the profile, because the profile was still checked. Turning off the profile row does not avoid it when posts or reels of that profile are read.
  • Content result: one per post or reel row written. Content that Only changed records suppresses is not written and not charged.
  • Private profiles, accounts or links that do not exist, refused or unreadable pages and error rows are not charged.
  • There is no start fee. You can cap a run with the maximum charge setting: the run reads only as many profiles as the cap pays for and stops writing content at the cap.

🚦 Run status and messages

A run ends as failed only when the input is invalid. Everything else ends as succeeded with a message such as:

MessageMeaning
Saved N row(s): P profile(s), C content item(s)Done
N input(s) could not be read (not_found 1, rate_limited 2)Error rows in the dataset say which input and why
monitor baseline createdFirst run of a monitor key
N changed or new, M unchanged not repeatedMonitoring run with only changed records
Stopped early: the run's maximum charge was reachedThe saved rows are complete; the rest was not written

ℹ️ Good to know

  • Public data only. Private accounts return only their identity (isPrivate: true) and a private_profile error row; their content is never read.
  • The 12 newest items. Instagram shows visitors who are not logged in the 12 newest posts and the 12 newest reels of an account. Pinned posts and reels are skipped, so "newest" means newest (read a pinned post through its link). Pinned items are recognised by a heuristic (an item older than the ones after it), not by a flag Instagram shows logged-out visitors; in rare cases, such as a post whose date is far out of order, it can be taken for a pinned one and skipped. Older content is available through post and reel links. Profile summaries are over the content each profile listed in the run, never lifetime statistics; a post shared by two of your profiles counts for both. postsPerWeek is measured on the sampled posts (on the reels when posts are not collected).
  • Fields Instagram does not show to logged-out visitors are not included: business category, business or creator account flags, contact buttons (email, phone), follower and following lists, comment texts, share and save counts.
  • Reel plays come from the account's reels tab; a reel read only from a link has playCount: null. Video duration is rarely given and is then null.
  • Personal contact data is masked. Email addresses and phone numbers written in bios and captions are replaced with [email removed] and [phone removed]; a link in bio that is a phone, WhatsApp or email link is not returned. Tagged people are not collected.
  • Media links are signed and expire. This is not a media downloader.
  • Access. Profile pages are read through residential proxies (Instagram refuses cloud IPs for them); post and reel details go out directly. Instagram can refuse single requests at any time; such inputs come back as error rows and are not charged.
  • Monitoring is not real-time. Changes are found when the Actor runs.
  • Limits per run: 200 profiles, 1,000 post or reel links.

📝 Changelog

  • 1.0 (October 2026). First version: public profiles, newest posts and reels, post and reel links, deterministic engagement metrics, change tracking with only-changed output.

The Actor reads only what Instagram shows publicly to visitors who are not logged in. It does not log in, does not use cookies or accounts, does not bypass any access control and never reads private accounts, direct messages, follower or following lists, comment authors or tagged people. You are responsible for using the data in line with Instagram's terms and the laws that apply to you. This Actor is not affiliated with Instagram or Meta.