# Instagram Engagement Rate & Fake Followers: Influencer Audit (`vant47/instagram-influencer-audit`) Actor

Audit Instagram influencers: engagement rate, fake followers risk and influencer earnings estimates for fitness or beauty campaigns. About $0.04 per account. Last 6 posts: grade, likes, comments, public views and limited audience-quality estimates. No login.

- **URL**: https://apify.com/vant47/instagram-influencer-audit.md
- **Developed by:** [fortbrand](https://apify.com/vant47) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $32.00 / 1,000 account audits

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Instagram Engagement Rate & Fake Followers: Influencer Audit

For agencies, brands and creator teams comparing Instagram accounts before a campaign. About **$0.04 per account audited**: a shortlist of 20 accounts costs about **$0.80**, plus Apify's small start charge. No login. The default checks one account, based on the last 6 posts available from its public embed.

Get a readable engagement verdict, a grade against a follower-size benchmark, public audience-quality signals, available video views and a sponsored-post planning estimate. Download the account rows, read the free run summary, or open `REPORT.html` to review the shortlist and its underlying posts.

**“Fake followers” means a limited audience-quality estimate from public engagement signals.** This Actor does not list followers, identify fake accounts, estimate a fake-follower percentage or prove that anyone bought engagement. A low rate can reflect content, timing, audience interests, inactive followers or platform distribution. Treat flags as questions to investigate before paying a creator.

### What you get

| Output | Meaning |
|---|---|
| `verdict` | Plain-language finding first, explicitly based on the last 6 posts by default |
| `username`, `profileUrl`, `checkedAt` | Account identity, public source link and UTC collection time |
| `followers`, `posts`, `verified` | Public follower total, total posts and verification indicator |
| `engagementRate` | Mean of likes plus comments per measurable post, divided by followers, as a percentage |
| `medianEngagementRate` | Median post interactions divided by followers; used for the grade |
| `medianLikes`, `medianComments` | Typical public likes and comments in the measured sample |
| `meanLikes`, `meanComments` | Averages, useful for seeing the effect of unusually successful posts |
| `sizeTier`, `engagementNormForSize`, `engagementGrade` | Creator-size reference, reference percentage and A-E comparison grade |
| `postsRequested`, `postsSampled`, `postsAnalyzed` | Requested size, returned sample and usable engagement records |
| `sampleDescription` | Exact sample-size explanation, including excluded counts |
| `medianReelViews`, `viewsPerFollower` | Median available video views and that median divided by followers |
| `videosSampled`, `videosWithViews` | Coverage counts so missing views cannot look like zero views |
| `postingFrequencyPerWeek`, `sampleWindowDays`, `lastPostDate` | Observed recent cadence, observation span and newest returned post |
| `audienceQualityEstimateScore` | Transparent 0-100 screening score, not audience authenticity or a probability |
| `audienceQualityRedFlags` | Each measured signal, its explanation and score deduction |
| `commentToLikeRatioPct`, `engagementSpikeRatio` | Comment-to-like percentage and largest post relative to the median |
| `sponsoredPostSharePct` | Share with a public paid-partnership label or recognized caption disclosure |
| `topHashtags` | Hashtags ranked by the number of sampled posts containing them |
| `sponsorPriceLowUsd`, `sponsorPriceMidUsd`, `sponsorPriceHighUsd` | Gross planning estimate for one sponsored post, in US dollars |
| `sponsorPriceNiche`, `sponsorPriceMethod`, `sponsorPriceSource` | User-selected niche, reproducible calculation and reference |
| `recentPosts` | Source links, dates, captions, likes, comments, available views and disclosure evidence |
| `limitations`, `status`, `error` | Coverage caveats and reasons an account could not be audited |

Following counts, category, bio contact details, generic or repeated comment text and follower-growth history are unavailable from the reliable embed source. Their corresponding fields are `null`, including `following`, `category`, `businessEmail`, `website`, `followerFollowingRatio`, `followerGrowthSpike`, `genericCommentSharePct` and `repeatedCommentSharePct`. They are never filled with guesses or zeros.

### When to use it

Compare a fitness creator shortlist, review beauty campaign candidates, check the typical engagement behind a large follower count, or revisit a partner's public performance before another campaign. The price estimate gives a consistent starting point for budget discussions when you do not yet have a rate card.

Brand accounts can also be measured, but the grade's reference population is creators. A retailer, institution or product brand may have a different engagement pattern. Use direct competitors and comparable content formats for important decisions.

### Start in three steps

1. Add Instagram handles to `usernames`, or profile links to `urls`. The prefill is a small working example.
2. Keep `postsToAnalyze` at 6. Select a niche only if you want to specify the assumptions behind the sponsored-post estimate. Set your maximum run charge.
3. Run the Actor, then open the verdict dataset, the activity or pricing view, and `REPORT.html`. Export JSON, CSV or Excel through Apify as needed.

### Input reference

| Input | Default | Example and behavior |
|---|---|---|
| `usernames` | Prefilled example in the console | `["blogilates", "@gymshark"]`; public handles or profile links |
| `urls` | Empty | `["https://www.instagram.com/blogilates/"]`; merged with usernames |
| `postsToAnalyze` | `6` | From 3 to 6; values outside this range are adjusted with a summary note |
| `niche` | `general` | `general`, `fitness`, `beauty`, `fashion`, `food`, `travel`, `technology` or `finance` |
| `saveRawData` | `false` | Save decoded source evidence in the run's `RAW` record for verification |

For integrations, `handles`, `query`, `queries` and `startUrls` are accepted aliases. `startUrls` can contain strings or objects with a `url` property. Comma-separated or newline-separated text works through string aliases. Input case, leading `@`, URL query strings and duplicate accounts are normalized. A maximum of 1,000 input entries is processed in one run; split larger lists into batches.

```json
{
  "usernames": ["blogilates", "thebodycoach"],
  "postsToAnalyze": 6,
  "niche": "fitness"
}
```

Post URLs are not account inputs. Invalid links, empty inputs and inaccessible embeds produce clear free notes. The Actor cannot determine from an unavailable embed alone whether an account is private, missing, has disabled embedding or is temporarily refusing access.

### A real cloud example

On 14 October 2026, a cloud audit of `blogilates` returned 3,147,757 followers, six measurable posts, mean engagement of 0.4504%, and median video views of 107,651.5. Views were available for all six sampled videos. A two-account exploratory audit finished in 59.1 seconds; the console prefill uses one account to keep the first run smaller.

```json
{
  "username": "blogilates",
  "followers": 3147757,
  "engagementRate": 0.4504,
  "engagementGrade": "B",
  "postsSampled": 6,
  "postsAnalyzed": 6,
  "videosSampled": 6,
  "videosWithViews": 6,
  "medianReelViews": 107651.5
}
```

### Calculation and interpretation

The main engagement rate is `100 * sum(likes + comments) / measured_posts / followers`. Hidden or missing engagement counts exclude a post from this calculation. At least three posts with visible likes and comments, and a positive follower count, are required for a paid audit. True zero counts remain zero.

Grades use the median post engagement to reduce the influence of a viral post. The reference is [HypeAuditor's September 2026 worldwide creator benchmark](https://blog.hypeauditor.com/fr/taux-d-engagement-instagram-definition-calcul-et-benchmarks-par-tier/), read on 14 October 2026. The follower bands and median percentages are 1K-10K: 2.11%; 10K-50K: 0.62%; 50K-100K: 0.37%; 100K-500K: 0.34%; 500K-1M: 0.33%; and 1M+: 0.32%. Bands use an inclusive lower boundary and exclusive upper boundary. Accounts below 1K have no grade.

The Actor's own grade thresholds are explicit: A is at least twice the reference, B is at least the reference, C is at least half, D is at least a quarter, and E is below a quarter. These letters are a comparison aid, not a validated fraud classification. The headline mean can be high while the typical-post grade is lower.

Audience screening starts at 100. Median engagement below 25% of the size reference deducts 35 points; below 50% deducts 20 instead. A very low comment-to-like ratio below 0.05%, or a high ratio above 20%, deducts 15 when the minimum interaction thresholds are met. A post with at least 1,000 interactions and eight times the median deducts 10. Exact reasons appear in each flag. Giveaways, keyword campaigns and organic viral posts can explain these signals. Unavailable checks do not count as passed checks, and a score of 100 is not verification of a real audience.

Cadence uses the time between the oldest and newest sampled posts, not a complete month of activity. Sponsored share counts explicit paid-partnership evidence and standalone `#ad`, `#advert`, `#advertisement`, `#sponsored` or `#paidpartnership` tags. Unlabeled commercial content can be missed. Video views may be available for only part of the sample; inspect coverage before comparing them.

### Sponsored-post planning estimates

The estimate follows an engagement-based budgeting approach described in [Shopify's influencer-pricing guide](https://www.shopify.com/blog/influencer-pricing). It multiplies followers by median engagement as a fraction, then by an assumed dollar value per interaction. General assumptions are $0.05-$0.08; beauty and fashion use $0.10-$0.15. The midpoint is halfway between the low and high values. Other listed niches currently use the general assumption.

Niche is supplied by you, not inferred from a biography. The calculation uses typical organic engagement, which may differ from sponsored performance. These are gross planning figures, not actual influencer earnings, a quotation or expected profit. Production minimums, usage rights, exclusivity, location, agency fees and taxes can substantially change the negotiated amount. Compare the estimate with a creator's media kit and campaign evidence.

### Price and spending limits

| Useful accounts audited | Standard account charge |
|---|---:|
| 1 | $0.04 |
| 20 | $0.80 |
| 50 | $2.00 |
| 100 | $4.00 |

Apify's start charge is $0.00005 at the default memory. Bronze account audits cost $0.038, Silver $0.036, and Gold or higher $0.032. Failed account lookups, duplicates, invalid inputs, insufficient measurable posts and the summary carry no account audit charge. The start fee still applies. Platform usage is included in the Actor's pricing.

The Actor checks the remaining maximum charge before fetching another account. It stops cleanly when another useful audit would not fit. A cloud test with a $0.041 maximum delivered one useful account from a three-account list and stopped. A $0.001 maximum produced no account charge and did not fetch an account. There are no external paid APIs and no special cap for free-plan users.

### API and AI agents

Use the same input through Apify's API. Keep the token in your own environment:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/vant47~instagram-influencer-audit/run-sync-get-dataset-items?maxTotalChargeUsd=0.10" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"usernames":["blogilates"],"postsToAnalyze":6}'
```

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("vant47/instagram-influencer-audit").call(
    run_input={"usernames": ["blogilates"], "niche": "fitness"},
    max_total_charge_usd=0.10,
)
accounts = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items()
            if r.get("status") == "audited"]
```

With an AI agent connected to [Apify MCP](https://mcp.apify.com), ask: “Audit this Instagram influencer shortlist using the last six public posts, compare engagement by account size, and show audience-quality caveats.” Provide the handles and a spending limit. The agent can inspect the input schema, run the Actor and read its dataset or summary. Filter `recordType == "account"` for account rows; the final `recordType == "summary"` row is free.

Apify schedules, webhooks, Make, Zapier, n8n and Google Sheets integrations can consume the same output. Scheduled runs are independent snapshots. The Actor does not create a private cross-customer history or infer follower growth from one snapshot.

### FAQ

**Why only six posts?** The reliable signed-out profile embed returns up to six recent posts. The default verdict, sample description and report say they are based on the last 6 posts. Requesting twelve does not manufacture twelve records; it is capped and noted.

**Does this detect fake followers?** It estimates audience-quality concerns from public engagement. It cannot inspect follower identities or prove fraud. Review source posts, creator analytics and campaign results before drawing a conclusion.

**Why is a public account unavailable?** Public profiles can disable embedding or temporarily refuse requests. Some are private, renamed or missing. Such accounts are free notes, with no invented engagement figures.

**Why are comments or views missing?** Hidden engagement is excluded; unavailable video views stay null. Comment text is not collected, so repeated or generic comment detection is unavailable. A comment count is not a comment-text sample.

**Can I use the grade for brands?** The arithmetic works, but the benchmark describes creators and excludes brands. Treat the grade as context, not a universal performance target.

**Are the price figures actual earnings?** No. They are a disclosed gross budgeting model for one sponsored post. They do not measure contracts, past revenue, net income or future sales.

**Do I need a login or cookies?** No. Only public signed-out embed endpoints are used. The Actor does not accept account credentials or solve CAPTCHAs. Availability remains subject to Instagram's public interfaces and terms.

**Where is the report?** Open the output link for `REPORT.html`. The free `SUMMARY` record and summary dataset row explain completed accounts, skipped duplicates, input adjustments and any spending-limit stop.

# Actor input Schema

## `usernames` (type: `array`):

Public Instagram handles, e.g. @blogilates or gymshark. $0.04 per useful account audit. Based on the last 6 posts. Fake followers means a limited audience-quality estimate, not a follower list or verified fraud result. Accounts without usable embeds, hidden counts, duplicates and invalid inputs are free.

## `urls` (type: `array`):

Profile links, e.g. https://www.instagram.com/blogilates/. Combined and deduplicated with usernames. Post links are not profile inputs.

## `postsToAnalyze` (type: `integer`):

Default 6: based on the last 6 posts returned by the public embed. Values are clamped to 3-6. Hidden or missing engagement counts are excluded, never treated as zero. Price stays $0.04 per account.

## `saveRawData` (type: `boolean`):

Save the decoded public embed data in a RAW key-value record for your own checks. Off by default. This does not change the price.

## `niche` (type: `string`):

Your campaign/creator niche. Only beauty and fashion use a higher per-interaction assumption; every other niche uses the general range. This is user input, not scraped category. Estimates are gross planning values, not actual influencer earnings or quotes.

## Actor input object example

```json
{
  "usernames": [
    "blogilates"
  ],
  "postsToAnalyze": 6,
  "saveRawData": false,
  "niche": "general"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `signals` (type: `string`):

No description

## `activity` (type: `string`):

No description

## `report` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `pricing` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "usernames": [
        "blogilates"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vant47/instagram-influencer-audit").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "usernames": ["blogilates"] }

# Run the Actor and wait for it to finish
run = client.actor("vant47/instagram-influencer-audit").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "usernames": [
    "blogilates"
  ]
}' |
apify call vant47/instagram-influencer-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vant47/instagram-influencer-audit"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/U26VUoyhygHkIv8pM/builds/V4P5HPCU8NQgtpI8G/openapi.json
