SFOLN

Catalogue / Social media data

Instagram Engagement Rate & Audit

sfoln/instagram-account-audit · Social media, Lead generation, Automation On request

Audit any public Instagram account in one row: followers, bio and links plus engagement rate, average likes and comments, posting frequency, reels share, top posts, top hashtags and best posting hour from its latest posts. $12 per 1,000 accounts.

About

What it does

Instagram Engagement Rate & Audit gives you a one-row audit of any public Instagram account: the profile (followers, following, posts, bio, links, verification, business category) plus engagement analytics computed over its latest posts — average and median likes, average comments, engagement rate, posting frequency per week, reels share and content mix, average video plays, the three best-performing posts, top hashtags and the best posting hour (UTC). Built for influencer vetting, creator marketplaces, competitor benchmarking and agency reporting.

Price

Price per delivered record

EventPricePer 1,000Charged for
Instagram account audit
instagram-account-audit
$0.012$12 / 1,000Charged once per account: profile plus engagement rate, posting frequency, content mix, top posts, top hashtags and best posting hour over its latest 12 posts.
Extra posts page
instagram-audit-extra-page
$0.007$7 / 1,000Charged per page of ~12 posts read from the posts feed when sampleSize is above 12 (24 posts = 2 pages, 36 posts = 3 pages).
Instagram profile snapshot
instagram-account-profile-only
$0.0065$6.5 / 1,000Charged instead of instagram-account-audit when only the profile could be delivered (private account, no posts, or posts unavailable).

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~instagram-account-audit/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"handles":["nasa"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/instagram-account-audit"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~instagram-account-audit/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Audit the Instagram account @nasa: engagement rate, average likes and comments, posting frequency and its best-performing recent posts.

Input

Input fields

List Instagram accounts. Each account produces one dataset record with its profile and engagement statistics over its latest posts.

FieldTypeDefaultMeaning
handles *arrayrequiredAccounts
Instagram handles (with or without @) or profile URLs (https://www.instagram.com/nasa/), one per line. Duplicates are removed. Accounts on the Apify free plan can process up to 10 accounts per run.
sampleSizeinteger12Posts to analyze
Latest posts sampled per account (6–36). The profile includes the latest 12 at no extra cost; larger samples read the posts feed, charged per page of ~12 posts (instagram-audit-extra-page). Range 6–36.
includePostsbooleanfalseInclude sampled posts
Add the sampled posts (url, type, likes, comments, views, date, caption, hashtags) to each record as sampledPosts.
maxItemsinteger500Max accounts
Safety cap on how many accounts are processed in this run. Range 1–5000.
concurrencyinteger3Concurrency
Accounts processed in parallel (1–5). Range 1–5.
itemTimeoutSecsinteger300Per-account timeout (seconds)
Time limit per account; feed paging stops early when it is near. Range 60–1800.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified profile and feed payloads under `raw` (larger output).
Example input
{
  "handles": [
    "nasa"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The input item this record corresponds to.
statusstringStatus
ok (auditType full or profile-only, charged) | not_found (unknown account, not charged) | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
Pay-per-event event charged for this record.
sourcestringSource
Upstream data source (scrapecreators = ScrapeCreators, public Instagram data).
fetchedAtstringFetched at
ISO timestamp.
errorobjectError
code / message when status is not ok (or a partial failure).
warningsarrayWarnings
Non-fatal notes (partial data, stopped early, free-plan caps).
foundboolean | nullFound
Account exists.
auditTypestring | nullAudit type
full (profile + post stats) or profile-only (private / no posts / posts unavailable).
handlestring | nullHandle
Instagram username.
userIdstring | nullUser id
Numeric Instagram id.
profileUrlstring | nullProfile URL
https://www.instagram.com/<handle>/.
fullNamestring | nullFull name
Display name.
biographystring | nullBio
Profile biography.
externalUrlstring | nullWebsite
Link in bio.
bioLinksarrayBio links
{ title, url } links in bio.
followersinteger | nullFollowers
Follower count.
followinginteger | nullFollowing
Accounts followed.
postsinteger | nullPosts
Total posts on the account (profile count, not the sample).
sampledPostsarraySampled posts
Only with includePosts: { shortcode, url, type, likes, comments, views, takenAt, caption, hashtags, isPinned }, newest first.
isVerifiedboolean | nullVerified
Verified badge.
isPrivateboolean | nullPrivate
Private account.
isBusinessboolean | nullBusiness
Business account.
isProfessionalboolean | nullProfessional
Professional (creator / business) account.
categorystring | nullCategory
Business category.
businessCitystring | nullCity
Business address city.
profilePicUrlstring | nullProfile picture
HD profile picture URL.
sampleSizeRequestedinteger | nullSample size requested
Effective sampleSize (12 on the free plan).
postsAnalyzedinteger | nullPosts analyzed
Latest posts in the sample (pinned posts excluded).
pinnedExcludedinteger | nullPinned excluded
Pinned posts left out of the stats.
avgLikesnumber | nullAvg likes
Mean likes per sampled post (hidden counts excluded).
avgCommentsnumber | nullAvg comments
Mean comments per sampled post.
medianLikesnumber | nullMedian likes
Median likes per sampled post.
engagementRatePctnumber | nullEngagement rate %
(avgLikes + avgComments) ÷ followers × 100.
postingFrequencyPerWeeknumber | nullPosts per week
Sampled posts ÷ weeks from the oldest sampled post to fetch time.
sampleWindowDaysnumber | nullSample window (days)
Days from the oldest sampled post to fetch time.
reelsSharePctnumber | nullReels share %
Reels + videos ÷ sampled posts × 100.
contentMixobject | nullContent mix
{ reels, videos, images, carousels, unknown } counts.
avgVideoViewsinteger | nullAvg video views
Mean plays over sampled reels / videos that report them.
topPostsarrayTop posts
Up to 3 posts with the most likes + comments { url, type, likes, comments, views, takenAt, caption }.
topHashtagsarrayTop hashtags
Up to 10 { tag, count }: sampled posts using the hashtag.
postingHoursUtcarrayPosting hours (UTC)
{ hourUtc, posts, avgEngagement } for each hour with posts.
bestPostingHourUtcinteger | nullBest hour (UTC)
Hour with the highest mean likes + comments (hours with ≥ 2 posts preferred).
mostActivePostingHourUtcinteger | nullMost active hour (UTC)
Hour with the most sampled posts.
newestPostAtstring | nullNewest post
ISO.
oldestPostAtstring | nullOldest sampled post
ISO.
pagesFetchedinteger | nullFeed pages
Posts-feed pages fetched (0 when the embedded 12 posts sufficed).
extraPagesChargedinteger | nullExtra pages charged
Pages charged as instagram-audit-extra-page.
sampleStopReasonstring | nullSample stop reason
limit | end | budget | deadline | aborted | empty_pages | max_pages | error.
Example record
{
  "input": "nasa",
  "found": true,
  "auditType": "full",
  "handle": "nasa",
  "userId": "528817151",
  "profileUrl": "https://www.instagram.com/nasa/",
  "fullName": "NASA",
  "biography": "Exploring the universe and our home planet.",
  "externalUrl": "https://www.nasa.gov/",
  "followers": 97000000,
  "following": 80,
  "posts": 4300,
  "isVerified": true,
  "isPrivate": false,
  "isBusiness": false,
  "category": "Government Organization",
  "sampleSizeRequested": 12,
  "postsAnalyzed": 12,
  "pinnedExcluded": 0,
  "avgLikes": 412000.5,
  "avgComments": 1830.2,
  "medianLikes": 380000,
  "engagementRatePct": 0.427,
  "postingFrequencyPerWeek": 5.6,
  "sampleWindowDays": 15,
  "reelsSharePct": 41.7,
  "contentMix": {
    "reels": 5,
    "videos": 0,
    "images": 4,
    "carousels": 3,
    "unknown": 0
  },
  "avgVideoViews": 2900000,
  "topPosts": [
    {
      "url": "https://www.instagram.com/p/DJF0p2ygMjZ/",
      "type": "carousel",
      "likes": 910000,
      "comments": 4100,
      "views": null,
      "takenAt": "2026-10-10T15:02:11.000Z",
      "caption": "Saturn's rings…"
    }
  ],
  "topHashtags": [
    {
      "tag": "nasa",
      "count": 6
    },
    {
      "tag": "space",
      "count": 4
    }
  ],
  "postingHoursUtc": [
    {
      "hourUtc": 15,
      "posts": 5,
      "avgEngagement": 520000
    },
    {
      "hourUtc": 19,
      "posts": 4,
      "avgEngagement": 330000
    }
  ],
  "bestPostingHourUtc": 15,
  "mostActivePostingHourUtc": 15,
  "newestPostAt": "2026-10-13T19:00:00.000Z",
  "oldestPostAt": "2026-09-29T15:00:00.000Z",
  "pagesFetched": 0,
  "extraPagesCharged": 0,
  "sampleStopReason": "limit",
  "status": "ok",
  "charged": true,
  "chargedEvent": "instagram-account-audit",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents