# Instagram Engagement Rate & Audit (`sfoln/instagram-account-audit`)

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.

- Family: Social media data
- Categories: Social media, Lead generation, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Instagram Engagement Rate & Audit (sfoln/instagram-account-audit)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/instagram-account-audit.json
- MCP: https://mcp.apify.com?tools=sfoln/instagram-account-audit
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~instagram-account-audit/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~instagram-account-audit/runs

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 per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Instagram account audit (`instagram-account-audit`) | $0.012 | $12 / 1,000 | Charged 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,000 | Charged 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,000 | Charged instead of instagram-account-audit when only the profile could be delivered (private account, no posts, or posts unavailable). |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
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 client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/instagram-account-audit"
    }
  }
}
```

Example prompt: Audit the Instagram account @nasa: engagement rate, average likes and comments, posting frequency and its best-performing recent posts.

## Input

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

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `handles` (required) | array | — | Accounts: 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. |
| `sampleSize` | integer | `12` | Posts 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). |
| `includePosts` | boolean | `false` | Include sampled posts: Add the sampled posts (url, type, likes, comments, views, date, caption, hashtags) to each record as sampledPosts. |
| `maxItems` | integer | `500` | Max accounts: Safety cap on how many accounts are processed in this run. |
| `concurrency` | integer | `3` | Concurrency: Accounts processed in parallel (1–5). |
| `itemTimeoutSecs` | integer | `300` | Per-account timeout (seconds): Time limit per account; feed paging stops early when it is near. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified profile and feed payloads under `raw` (larger output). |

Example input:

```json
{
  "handles": [
    "nasa"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The input item this record corresponds to. |
| `status` | string | Status: ok (auditType full or profile-only, charged) \| not_found (unknown account, not charged) \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `chargedEvent` | string | Charged event: Pay-per-event event charged for this record. |
| `source` | string | Source: Upstream data source (scrapecreators = ScrapeCreators, public Instagram data). |
| `fetchedAt` | string | Fetched at: ISO timestamp. |
| `error` | object | Error: code / message when status is not ok (or a partial failure). |
| `warnings` | array | Warnings: Non-fatal notes (partial data, stopped early, free-plan caps). |
| `found` | boolean | null | Found: Account exists. |
| `auditType` | string | null | Audit type: full (profile + post stats) or profile-only (private / no posts / posts unavailable). |
| `handle` | string | null | Handle: Instagram username. |
| `userId` | string | null | User id: Numeric Instagram id. |
| `profileUrl` | string | null | Profile URL: https://www.instagram.com/<handle>/. |
| `fullName` | string | null | Full name: Display name. |
| `biography` | string | null | Bio: Profile biography. |
| `externalUrl` | string | null | Website: Link in bio. |
| `bioLinks` | array | Bio links: { title, url } links in bio. |
| `followers` | integer | null | Followers: Follower count. |
| `following` | integer | null | Following: Accounts followed. |
| `posts` | integer | null | Posts: Total posts on the account (profile count, not the sample). |
| `sampledPosts` | array | Sampled posts: Only with includePosts: { shortcode, url, type, likes, comments, views, takenAt, caption, hashtags, isPinned }, newest first. |
| `isVerified` | boolean | null | Verified: Verified badge. |
| `isPrivate` | boolean | null | Private: Private account. |
| `isBusiness` | boolean | null | Business: Business account. |
| `isProfessional` | boolean | null | Professional: Professional (creator / business) account. |
| `category` | string | null | Category: Business category. |
| `businessCity` | string | null | City: Business address city. |
| `profilePicUrl` | string | null | Profile picture: HD profile picture URL. |
| `sampleSizeRequested` | integer | null | Sample size requested: Effective sampleSize (12 on the free plan). |
| `postsAnalyzed` | integer | null | Posts analyzed: Latest posts in the sample (pinned posts excluded). |
| `pinnedExcluded` | integer | null | Pinned excluded: Pinned posts left out of the stats. |
| `avgLikes` | number | null | Avg likes: Mean likes per sampled post (hidden counts excluded). |
| `avgComments` | number | null | Avg comments: Mean comments per sampled post. |
| `medianLikes` | number | null | Median likes: Median likes per sampled post. |
| `engagementRatePct` | number | null | Engagement rate %: (avgLikes + avgComments) ÷ followers × 100. |
| `postingFrequencyPerWeek` | number | null | Posts per week: Sampled posts ÷ weeks from the oldest sampled post to fetch time. |
| `sampleWindowDays` | number | null | Sample window (days): Days from the oldest sampled post to fetch time. |
| `reelsSharePct` | number | null | Reels share %: Reels + videos ÷ sampled posts × 100. |
| `contentMix` | object | null | Content mix: { reels, videos, images, carousels, unknown } counts. |
| `avgVideoViews` | integer | null | Avg video views: Mean plays over sampled reels / videos that report them. |
| `topPosts` | array | Top posts: Up to 3 posts with the most likes + comments { url, type, likes, comments, views, takenAt, caption }. |
| `topHashtags` | array | Top hashtags: Up to 10 { tag, count }: sampled posts using the hashtag. |
| `postingHoursUtc` | array | Posting hours (UTC): { hourUtc, posts, avgEngagement } for each hour with posts. |
| `bestPostingHourUtc` | integer | null | Best hour (UTC): Hour with the highest mean likes + comments (hours with ≥ 2 posts preferred). |
| `mostActivePostingHourUtc` | integer | null | Most active hour (UTC): Hour with the most sampled posts. |
| `newestPostAt` | string | null | Newest post: ISO. |
| `oldestPostAt` | string | null | Oldest sampled post: ISO. |
| `pagesFetched` | integer | null | Feed pages: Posts-feed pages fetched (0 when the embedded 12 posts sufficed). |
| `extraPagesCharged` | integer | null | Extra pages charged: Pages charged as instagram-audit-extra-page. |
| `sampleStopReason` | string | null | Sample stop reason: limit \| end \| budget \| deadline \| aborted \| empty_pages \| max_pages \| error. |

Example record:

```json
{
  "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"
}
```

## Related

- [TikTok Engagement Rate & Audit](https://www.sfoln.com/actors/tiktok-account-audit.md) (`sfoln/tiktok-account-audit`)
- [YouTube Channel Analytics & Audit](https://www.sfoln.com/actors/youtube-channel-audit.md) (`sfoln/youtube-channel-audit`)
- [Twitter (X) Account Audit – Engagement](https://www.sfoln.com/actors/x-account-overview.md) (`sfoln/x-account-overview`)
- [Instagram Posts Scraper (No Login)](https://www.sfoln.com/actors/instagram-user-posts.md) (`sfoln/instagram-user-posts`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
