# Instagram Reels Analytics: Insights Export Analyzer (`privatex/instagram-reels-intelligence`) Actor

Analyze your own Instagram Reels insights export (CSV/JSON): top and weak posts versus your baseline, hook and format patterns, creative briefs and a 14-day test plan. Graph API token optional. Free demo mode. Works on accounts you own; no scraping.

- **URL**: https://apify.com/privatex/instagram-reels-intelligence.md
- **Developed by:** [PRIVATEX](https://apify.com/privatex) (community)
- **Categories:** Social media, Marketing
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 88.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 account analyses

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?

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 Reels Intelligence

Learn **which of your Reels worked, which did not, and what to test next** – from your own Instagram insights.

Two ways to feed it, both fully permitted: a **CSV/JSON export** of your post performance (Meta Business Suite) or the **official Instagram Graph API** with your own access token. It never logs in, scrapes, or touches accounts that did not authorise you.

### Who is it for

Social media managers, creators and small agencies who already download Instagram insights and want a clear "what worked, what to test next" report instead of a spreadsheet.

### Quick start

1. Press **Start** with the pre-ticked **Demo mode**: you get a full report on a *fabricated* account. Every row is labelled `SYNTHETIC DEMO` and **demo runs are never charged**.
2. For your own account, export your Reels performance from **Meta Business Suite > Insights > Content** (use the export/download option; exact menu names change between app versions) and paste the CSV text into **Performance export (CSV text)**.
3. Press **Start** again. Provided data always wins over Demo mode, so you can leave it ticked.
4. Open **Output** for the structured rows, and the **Key-value store** for `REPORT_WEEKLY_MD` (weekly report) and `findings.csv`.

**Example input**

```json
{
  "dataCsv": "Post ID,Permalink,Publish time,Post type,Description,Views,Reach,Likes,Comments,Shares,Saves\n...",
  "accountName": "My Brand",
  "timezoneOffsetMinutes": 180
}
```

**Example output row** (SAMPLE - synthetic, illustrative values; not from a real account)

```json
{
  "recordType": "account_summary",
  "platform": "instagram",
  "account": "My Brand",
  "postsAnalysed": 48, "postsScored": 45,
  "medianValue": 5120,
  "billing": { "charged": true, "event": "account-analyzed" },
  "synthetic": false
}
```

### Pricing

**$0.25 per account analysed.** The charge is made once per account, only when at least **6 posts could be scored** (published at least `minAgeDays` ago with views or likes). Too little data = the results are still delivered, **but not billed** (`billing.charged: false` explains why). The billed summary is written last, after all detail rows. Demo runs are free.

Pay-per-event. Platform usage (compute, storage) is included in the price - there is no separate Apify usage bill for you. A negligible Actor-start event ($0.00005 per GB of memory, minimum one) also applies. You can cap spending with Apify's "Maximum charged results / cost per run" setting; the Actor stops cleanly at your limit.

### What is verified, and what is not

- CSV/JSON export analysis (column matching, dates, hooks, baselines, weekly report, 14-day plan) is covered by automated tests using synthetic exports, including English, **Turkish** (; delimiter, Yayınlanma zamanı, 29.10.2026 14:30, 12.345 counts), Spanish and Portuguese headers. Real Meta/TikTok export files from other languages were not available, so an unusual header may need one line from you to be supported.
- **Not verified with live credentials:** the Instagram Graph API mode has only been tested against recorded/synthetic API-shaped responses. It has not been exercised with a real authorised account token. Use the export path for guaranteed behaviour.
- The Graph API needs your own token with the `instagram_manage_insights` permission for a professional account you control (Meta app review applies to other people's accounts).

### Limitations

- Works on data you own or are authorised to use. It never logs in, scrapes or reads other accounts.
- Findings are correlations inside your own history, not proof of cause; confidence is shown on every pattern.
- At least 6 posts older than 3 days are needed for baselines; otherwise the Actor says so instead of scoring.
- No competitor scraping: competitor analysis only covers data you provide.
- Hook classification is rule-based and English-centred with partial ES/TR/PT.
- Retention curves, audience demographics and watch time are not part of the media insights used here.

Built by **PRIVATEX**. Questions or a data-format that does not parse? Open an issue on the Actor page and include the (anonymised) column headers or first lines.

### What you get

- **Top and weak Reels** – ratio versus your own median of comparable Reels, with the comparison size. Weak posts list *possible* factors (correlations, labelled as such).
- **Pattern table** – opening-line style (question, number list, how-to, story, call-out…), caption length, numbers, hashtags, duration, weekday/hour, with sample size and confidence. Anything within ±15% of baseline is hidden as uninformative.
- **Creative briefs and a 14-day test plan** – built from your best topics and hook styles, with A/B hooks, a publish slot only if the data supports one, a success rule, and links to the posts they are based on.
- **Weekly performance report** – this week versus last week, best and weakest scored post.
- **Account comparison** – cadence, duration and hook mix across accounts, using only data you supply.
- JSON dataset + CSV + Markdown. No AI API: everything is deterministic.

### Data sources and official API scope

- **Export mode** (no setup): paste the CSV; columns such as *Publish time, Description, Post type, Views, Reach, Likes, Comments, Shares, Saves* are matched flexibly.
- **API mode**: Instagram Graph API media endpoint plus media insights (`views, reach, saved, shares, total_interactions`). Needs a professional account and the `instagram_manage_insights` permission. For other people's accounts your Meta app needs App Review. Insight data can lag up to 48 hours and counts organic activity only; the Actor therefore ignores posts younger than 3 days by default.

### Input

| Field | Meaning |
| --- | --- |
| `dataCsv` / `dataUrl` / `dataRows` | Your performance export. |
| `accessToken`, `accountId` | Optional API mode (token is a secret, used only for graph.facebook.com). |
| `reelsOnly` | Default on. |
| `additionalAccounts` | More accounts as your own data, for comparison. |
| `demoMode` | Fabricated account, labelled SYNTHETIC. |

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USER~instagram-reels-intelligence/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{"dataUrl":"https://example.com/insights.csv"}'
```

# Changelog

This Actor's version history is a separate document: https://apify.com/privatex/instagram-reels-intelligence/changelog.md

# Actor input Schema

## `demoMode` (type: `boolean`):

Pre-ticked so the Actor works on first click with FABRICATED example data (every output row is labelled SYNTHETIC DEMO and is never charged). It is ignored as soon as you provide your own data or token, so you can leave it ticked.

## `dataCsv` (type: `string`):

Paste the CSV exported from Meta Business Suite (Insights > Content > Export) or any table with columns like Publish time, Description, Post type, Views, Reach, Likes, Comments, Shares, Saves. Column names are matched flexibly.

## `dataUrl` (type: `string`):

URL of a CSV or JSON file with your post performance (e.g. from your own storage).

## `dataRows` (type: `array`):

Alternative to CSV: array of row objects with the same columns.

## `accessToken` (type: `string`):

Optional. A token for YOUR professional account (or an account that authorised your Meta app) with the instagram_manage_insights permission. Used only for requests to graph.facebook.com, stored encrypted, never written to output. Without it, use an export. NOT VERIFIED WITH LIVE CREDENTIALS: this mode has only been tested with synthetic API-shaped responses, never with a real token. The export (CSV/JSON) path is the tested one.

## `accountId` (type: `string`):

Numeric id of the Instagram professional account the token belongs to.

## `accountName` (type: `string`):

Name shown in the report.

## `additionalAccounts` (type: `array`):

Each item: {"name": "Brand B", "csv": "<csv text>"} or {"name": "...", "url": "\<csv/json url>"}. Analysed and compared using only the data you give here.

## `maxPosts` (type: `integer`):

Most recent posts fetched through the official API.

## `timezoneOffsetMinutes` (type: `integer`):

For weekday and hour patterns. UTC+3 = 180.

## `asOf` (type: `string`):

Reference time. Empty = now. Set when analysing an older export.

## `minAgeDays` (type: `integer`):

Fresh posts are still collecting views and are not scored. Platform insight data can lag up to 48h.

## `reelsOnly` (type: `boolean`):

Analyse only Reels (rows whose post type contains "reel" in exports; REELS media in API mode).

## Actor input object example

```json
{
  "demoMode": true,
  "dataRows": [],
  "additionalAccounts": [],
  "maxPosts": 100,
  "timezoneOffsetMinutes": 0,
  "minAgeDays": 3,
  "reelsOnly": true
}
```

# Actor output Schema

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

No description

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

No description

## `csv` (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 = {
    "demoMode": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("privatex/instagram-reels-intelligence").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 = { "demoMode": True }

# Run the Actor and wait for it to finish
run = client.actor("privatex/instagram-reels-intelligence").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 '{
  "demoMode": true
}' |
apify call privatex/instagram-reels-intelligence --silent --output-dataset

```

## MCP server setup

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

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/gyeArPZuNiUhQofov/builds/6JBGnaceAdZ5ToIL9/openapi.json
