# Instagram Ad Load & Creator Momentum Analyzer (`apricot_blackberry/instagram-ad-load-analyzer`) Actor

How ad-saturated is this creator, and are they rising or cooling? One JSON row per profile: sponsored-post share (ad load), organic vs sponsored engagement gap, engagement momentum, TrueReach and posting cadence from public data. MCP-ready, no login.

- **URL**: https://apify.com/apricot\_blackberry/instagram-ad-load-analyzer.md
- **Developed by:** [Creator Fusion](https://apify.com/apricot_blackberry) (community)
- **Categories:** Social media, Marketing, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 creator analyzeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Ad Load & Creator Momentum Analyzer

**Before you pay a creator, know two things nobody's media kit will tell you: how much of their feed is already ads, and whether their audience is heating up or cooling off.**

Give this actor a list of Instagram usernames and get one structured row per creator:

- **Ad Load** — what share of their recent posts are disclosed sponsorships: explicit caption disclosures (#ad, #sponsored, "paid partnership with", international variants like #werbung/#publicidad) plus collab posts co-authored with a verified business account. Includes the engagement gap between sponsored and organic posts — a creator whose #ad posts pull 0.4× their organic engagement is a very different buy than one with no gap.
- **Momentum** — is per-post engagement trending up or down across their recent posting window? Labelled `rising` / `steady` / `cooling` with the %-per-week trend, so you can find creators on the way up before their rates follow.
- **TrueReach** — the median number of real interactions (likes + comments) a post actually gets, and what that is per follower. A floor on genuine reach that follower count can't fake.
- **Cadence** — posts per week over the analyzed window.
- **Superfan Ratio & Creator Responsiveness (experimental, opt-in)** — if Instagram exposes public comment samples for the profile, the share of commenters who show up on multiple posts and how often the creator replies. In our live testing Instagram rarely exposes these samples without login, so these fields usually report `unavailable` — they are opt-in (`includeCommentSignals`) and never guessed.

Built for brand and agency vetting workflows, influencer marketplaces, and AI agents doing creator due diligence.

### Input

```json
{
    "usernames": ["natgeo", "https://www.instagram.com/instagram/"],
    "maxPostsPerProfile": 12
}
```

Usernames, @handles, or profile URLs all work. Runs with an empty input analyze a demo profile so you can see the output shape.

### Output rows (`rowType`)

- **`creator-metrics`** — one per public profile: `adLoadPct`, `adLoadLabel` (light / moderate / heavy), `sponsoredCount`, `brandCollabCount` (posts co-authored with a verified business account), `softCommercialCount` (promo-code/affiliate language counted separately, never in the headline ad load), `sponsoredEngagementRatio` (sponsored avg engagement ÷ organic avg; below 1.0 means sponsored posts underperform), `sponsoredPosts` (URLs + which disclosure marker matched), `momentumLabel`, `momentumPctPerWeek`, `momentumRecentVsOlder`, `trueReachMedianInteractions`, `trueReachPerFollowerPct`, `avgEngagementRate`, `postsPerWeek`, `superfanRatioPct`, `creatorReplySharePct`, plus profile basics (followers, bio, external URL, verified).
- **`notice`** — invalid input, private account, or unreachable profile, with a plain-language explanation. Notice rows are never charged.

A machine-readable `SUMMARY` record (counts + failures) is written to the run's key-value store.

### Honest limits — read before you rely on it

- **Instagram exposes at most 12 recent posts without login.** All metrics are computed over that window (typically 2–8 weeks for active creators). They describe *recent* behavior, not account history.
- **Momentum is engagement momentum, not follower growth.** A single snapshot cannot observe follower change over time.
- **Ad Load counts caption disclosures and verified business collabs only — treat it as a floor.** Instagram's official "Paid partnership with…" header label is NOT exposed to anonymous clients anywhere (we verified this across the profile API, post pages, and embed pages — no login-free scraper can see it, whatever it claims). A creator who discloses only via that label and never in captions will read lower than reality; undisclosed ads are invisible to everyone.
- **Collab posts count toward ad load only when a co-author is a business account** (verified by profile lookup). Co-authored posts with other creators are not treated as sponsorships, and unverifiable co-authors are never counted.
- **Superfan and responsiveness metrics depend on Instagram exposing public comment samples, which it currently rarely does without login.** Expect `unavailable` for these two fields on most profiles; when fewer than 10 comments are sampled they also report `unavailable` rather than a made-up number. All other metrics are unaffected.
- Instagram only — TikTok/YouTube captions and comments are not exposed the same way, and this actor does not pretend otherwise.
- Private and not-found accounts return notice rows (uncharged), not errors.

### Integrations

**curl** (synchronous run, returns the dataset):

```bash
curl -X POST "https://api.apify.com/v2/acts/apricot_blackberry~instagram-ad-load-analyzer/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"usernames": ["natgeo"]}'
```

**JavaScript** (`apify-client`):

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('apricot_blackberry/instagram-ad-load-analyzer').call({ usernames: ['natgeo'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python** (`apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("apricot_blackberry/instagram-ad-load-analyzer").call(run_input={"usernames": ["natgeo"]})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

**MCP** (Claude Desktop / any MCP client):

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": ["-y", "@apify/actors-mcp-server", "--actors", "apricot_blackberry/instagram-ad-load-analyzer"],
            "env": { "APIFY_TOKEN": "your-token" }
        }
    }
}
```

**No-code:** works out of the box in Zapier, Make, and n8n via the Apify app (Run Actor → Fetch Dataset Items), or point a webhook at the run's dataset.

### Pricing

Pay per event: a small run-start fee plus a per-profile fee for each creator actually analyzed. Notice rows, private accounts, and failures are never charged.

# Actor input Schema

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

Creators to analyze — plain usernames (natgeo), @handles, or profile URLs (https://www.instagram.com/natgeo/). One result row is produced per public profile.

## `maxPostsPerProfile` (type: `integer`):

How many recent posts feed the metrics (3–12). Instagram exposes at most 12 recent posts without login; more posts = steadier metrics.

## `adDeepScan` (type: `boolean`):

Additionally fetch each post's own page looking for extra sponsorship markers and comment samples. In current testing Instagram serves these pages as empty shells to anonymous clients, so this rarely adds signal — main detection (caption disclosures + verified brand collabs) does not need it.

## `proxyConfiguration` (type: `object`):

Instagram serves profile data to residential IPs only. Leave the default (Apify residential proxy) unless you have your own residential proxies.

## Actor input object example

```json
{
  "usernames": [
    "cristiano"
  ],
  "maxPostsPerProfile": 12,
  "adDeepScan": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One row per analyzed creator - ad load, momentum, TrueReach, cadence, superfan and responsiveness signals. Notice rows explain skipped inputs.

# 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": [
        "cristiano"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("apricot_blackberry/instagram-ad-load-analyzer").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": ["cristiano"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("apricot_blackberry/instagram-ad-load-analyzer").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": [
    "cristiano"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call apricot_blackberry/instagram-ad-load-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apricot_blackberry/instagram-ad-load-analyzer"
        }
    }
}

```

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/Aa2ajpt1PbSVNDYAT/builds/8J1Tdg82u4aheGyq0/openapi.json
