# Instagram Account 360 Intelligence — Posts, Reels & Carousels (`sian.agency/instagram-account-360-intelligence`) Actor

Read any public Instagram account over 7 to 90 days or its entire history. Returns every post, reel and carousel with full metadata, AI reel transcripts, on-image text from every carousel slide, top-level comments with reply counts, engagement analytics, and agent-ready soul.md and design.md briefs.

- **URL**: https://apify.com/sian.agency/instagram-account-360-intelligence.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.18 / account audit

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/platform/actors/running/actors-in-store#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 Scraper — Posts, Reels, Comments & AI Transcripts 🚀

[![Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store](https://img.shields.io/badge/Store-Instagram%20AI%20Transcript-E4405F)](https://apify.com/sian.agency/instagram-ai-transcript-extractor?fpr=sian) [![Store](https://img.shields.io/badge/Store-TikTok%20AI%20Transcript-25F4EE)](https://apify.com/sian.agency/best-tiktok-ai-transcript-extractor?fpr=sian) [![Store](https://img.shields.io/badge/Store-Facebook%20AI%20Transcript-1877F2)](https://apify.com/sian.agency/facebook-ai-transcript-extractor?fpr=sian)

#### 🎉 Reads the text burned into every image — the hook Instagram publishes nowhere as text

##### Built for marketers, agencies and content strategists who need a whole account, not one post

***

### 🔎 What is the Instagram Account Scraper — and when should you use it?

The **Instagram Account Scraper** turns a public Instagram handle into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. Point it at an account, pick a window from 7 days to the entire account, and every reel, feed post and carousel published in that span comes back in one dataset. No login, no browser automation to maintain.

**Use it when you need:** every post in a date range with captions, likes, comments, plays, hashtags, mentions, music, location and carousel slide counts. You also get reel transcripts, plus the verbatim on-image text **and** a one-line visual description for every image — each carousel slide, every single-image post and every reel cover — engagement rates benchmarked per format, best posting days and hours, and a written strategy rundown.

**Use something else when:** you already have the specific post URLs you care about and only want them transcribed. Use [Instagram AI Transcript Extractor](https://apify.com/sian.agency/instagram-ai-transcript-extractor?fpr=sian) for that — it takes URLs, this takes an account.

***

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/instagram-account-360-intelligence

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want a full content audit of an Instagram account using the Apify Actor `sian.agency/instagram-account-360-intelligence`.

Use it when I need: every reel, feed post and carousel an account published in a chosen window (7, 14, 30, 60, 90 days, or the entire account), with engagement metrics, reel transcripts, the on-image text and a visual description of every image (carousel slides, single-image posts and reel covers), and a strategy read of the whole account.

Don't use it when: I already have specific post URLs and just want them transcribed — use `sian.agency/instagram-ai-transcript-extractor` instead.

How to call it: give it `username` (a profile URL, a handle, or @handle — all accepted) and `windowDays` (7, 14, 30, 60, 90, or `all` for the entire account). Set `timeZone` to my audience's timezone so the best-day and best-hour analysis is meaningful. Toggle `includeImageText`, `includeTranscripts` and `includeRundown` to control depth.

Start with this input:
{
  "username": "nasa",
  "windowDays": "30",
  "timeZone": "America/New_York",
  "includeImageText": true,
  "includeTranscripts": true,
  "includeRundown": true
}

Ask me which account and which window, then run the Actor and summarise the results as a table sorted by engagement rate.
```

**Things you can ask your agent for:**

- *"Audit my top three competitors over the last 90 days and tell me which formats and hooks are working for each."*
- *"Pull every carousel this account posted in 60 days, read all the slides, and show me how they structure a hook."*
- *"Find this account's best posting day and hour in my timezone, and list the five posts that beat their format's median by the widest margin."*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/instagram-account-360-intelligence.md](https://apify.com/sian.agency/instagram-account-360-intelligence.md).

***

### 📋 Overview

**You give it a handle. It gives you the account.** Every post in your window, what each one said on screen and out loud, and a read of what is working.

**What you get:**

- ✅ **Every format in one run**: reels, single images and carousels come back together, from one input
- 👁️ **On-image text from every slide**: the hook, the payoff and the CTA of a carousel, extracted in slide order
- 🎙️ **Reel transcripts included**: spoken audio with timestamped segments plus ready-to-use SRT and WebVTT
- 🎯 **Engagement judged fairly**: each post is scored against the median of its own format, so a strong image is not buried by a viral reel
- 💰 **One input, whole account**: a handle and a window, instead of a list of post URLs you had to collect first
- 💎 **A written rundown**: content pillars, working hooks, posting patterns and recommendations, with the evidence cited

***

### ✨ Features

- 📅 **7 / 14 / 30 / 60 / 90-day windows, or the whole account**: pick the span, get everything published inside it
- 🧲 **All three formats**: reels, feed images and carousels in a single dataset
- 👁️ **Carousel OCR**: every slide read in order, each paired with its own image URL
- 🎙️ **AI reel transcripts**: text, timestamped segments, word-level timings, SRT and WebVTT
- 📈 **Per-format benchmarking**: engagement rate, ratio against the format median, and percentile rank
- ⏰ **Timezone-aware timing**: best days and hours calculated in the timezone you name
- \#️⃣ **Hashtag performance**: which tags you actually repeat, and how they perform
- 📌 **Pinned-post detection**: see what the account chooses to show first
- 🧬 **soul.md**: the whole account reverse-engineered into a brief another agent can rebuild from
- 🎨 **design.md**: the visual system as swappable JSON tokens — keep the structure, change the brand
- 💬 **Comments**: top-level comments with author, likes and reply counts
- 🌍 **Whole-account mode**: ignore dates and page back to the first post
- 📄 **HTML report**: a shareable summary written even when a run fails, with one-click copy for each brief
- 🧾 **50 fields per post**: captions, music, location, dimensions, owner and audio IDs and more

***

### 🎬 Quick Start

Give it a handle and a window. It resolves the account, pages the feed until it crosses your cutoff, reads the media, and writes a dataset plus a report.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~instagram-account-360-intelligence/runs?token=YOUR_TOKEN \
-d '{"username": "nasa", "windowDays": "30"}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Enter the account

Paste the profile URL straight from your browser, or type the handle. `https://www.instagram.com/nasa/`, `nasa` and `@nasa` all work.

#### Step 2: Pick your window

7, 14, 30, 60 or 90 days — or the entire account. Set your audience's timezone so posting-time advice means something.

#### Step 3: Run it

Open the dataset for the rows, or the HTML report for the read.

**That's it! In a few minutes, you'll have:**

- Every post the account published in your window
- What each one said, on screen and out loud
- Which formats, hooks, days and hashtags are actually working

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| username | string | Yes | Public Instagram account — profile URL, handle, or @handle |
| windowDays | string | No | `7`, `14`, `30`, `60`, `90`, or `all` for the entire account. Defaults to 30 |
| timeZone | string | No | IANA timezone for posting-time analysis. Defaults to UTC |
| includeImageText | boolean | No | Read on-image text from every slide. Defaults to true |
| includeTranscripts | boolean | No | Transcribe reel audio (PAID only). Defaults to true |
| includeRundown | boolean | No | Write the strategy rundown. Defaults to true |
| **includeSoul** | boolean | No | Build `soul.md`, the account rebuild brief. Defaults to **false** |
| **includeDesignSystem** | boolean | No | Build `design.md`, the visual system. Defaults to **false** |
| **includeComments** | boolean | No | Collect top-level comments. Defaults to **false** |
| **maxCommentsPerPost** | integer | No | Comments per post, max 200 (free runs: 5). Defaults to 30 |
| maxPosts | integer | No | Cap on posts collected. 0 means the whole window. Free runs: 3 newest |

The four bold options each carry their own charge, so they are off by default —
you opt into a cost, you never discover it afterwards.

**Example:**

```json
{
  "username": "nasa",
  "windowDays": "90",
  "timeZone": "Europe/Berlin"
}
```

**Metadata-only (fastest, cheapest):**

```json
{
  "username": "nasa",
  "windowDays": "30",
  "includeImageText": false,
  "includeTranscripts": false,
  "includeRundown": false
}
```

**Clone-the-account kit (both briefs + comments):**

```json
{
  "username": "nasa",
  "windowDays": "90",
  "includeSoul": true,
  "includeDesignSystem": true,
  "includeComments": true,
  "maxCommentsPerPost": 30
}
```

**Whole account, ever:**

```json
{
  "username": "nasa",
  "windowDays": "all"
}
```

Capped at 1000 posts. Above 300 posts the on-image text and transcript passes
switch themselves off to protect your bill — set either to `true` explicitly to
run it anyway.

***

### 🧬 soul.md — hand your account to an agent

Turn `includeSoul` on and the run writes **soul.md**: the account reverse-engineered
into a brief another AI agent can build from. Paste it whole into Claude, ChatGPT or
your own agent and it has everything it needs to run a comparable account.

**What's in it:** positioning and audience · exact posting cadence and the gaps to
hold · format mix, and the gap between what the account *posts* and what actually
*performs* · reel length in seconds, with the winners called out separately from
the median · carousel slide counts · caption length and formula · content pillars
read off the **outlier** posts, not the average one · the hook patterns that earn
the stop, with real examples · voice, with do and don't lists · a seeded
first-30-days calendar · anti-patterns · what to measure.

**Every number in it is measured, not written by a model.** The model is asked
only for judgement and is instructed never to write a figure; the cadence,
lengths and percentages are computed from your posts and injected by the actor.
If the run collected only part of the window, the file says so at the top rather
than letting you trust a cadence figure built on a partial sample.

### 🎨 design.md — replicate the look, keep your brand

Turn `includeDesignSystem` on and the run analyses the best-performing frames and
writes **design.md**: the account's visual system as structured JSON tokens.

```json
{
  "palette": { "background": "#000000", "accent": "#C8803C", "...": "..." },
  "typography": { "headline_style": "sans serif", "headline_case": "all caps" },
  "layout": { "structure": "Full-bleed photo is the dominant layout." },
  "brand": { "overrides": ["imagery", "dominant colors", "graphic devices"] },
  "structuralInvariants": ["contrast strategy", "slide arc", "text hierarchy"]
}
```

It separates what is **brand-specific** (colours, subjects, logos — swap these)
from what is **structural** (hierarchy, contrast, the carousel arc — keep these).
Point an image-generation agent at it, replace the `brand.overrides` keys with
your own, and you get the structure that works without copying the content.

**What it looks at, and what it doesn't.** Two passes: one cover frame from each
of your top posts, which is where the palette, type and layout come from; plus
the **full slide run of your two strongest carousels**, in order, which is where
the carousel arc comes from. An arc is a property of a sequence, so it is only
reported when a complete sequence was actually read — if the window holds no
multi-slide carousel, the file says no arc is claimed rather than inventing a
generic one. Reels contribute their **cover frame only**: Instagram's data
service exposes no video frames, so nothing in the file describes a reel's
motion, pacing or in-video text, and the file says so. The report lists exactly
how much of each post was read.

Both files appear in the HTML report inside a code panel with a **one-click
"Copy all" button**, and are saved to the key-value store as `soul.md` and
`design.md`.

***

### 📤 Output

One row per post, **50 fields** each, plus an HTML report and a JSON summary.

| Field | Type | Description |
|-------|------|-------------|
| url | string | Post permalink |
| postFormat | string | `reel`, `carousel` or `image` |
| timestamp | string | ISO 8601 publish time |
| caption | string | Full caption text |
| displayUrl | string | The post's cover image — shown as a thumbnail in the dataset view |
| images | array | One entry per image: `index`, `imageUrl`, `onImageText`, `visual`. A carousel gives one per slide, in order |
| onImageText | string | Every image's text joined in order — the searchable roll-up of `images[]` |
| transcript | string | Reel speech, with `segments`, `words`, `srtSubtitles`, `vttSubtitles` |
| engagementRate | number | (likes + comments) ÷ followers × 100 |
| performanceRatio | number | This post ÷ the median for its own format |
| percentileInFormat | integer | Rank against same-format posts, 0-100 |
| likesCount | integer | Likes |
| commentsCount | integer | Comments |
| videoPlayCount | integer | Reel plays |
| hashtags | string | Hashtags found in the caption |
| isPinned | boolean | Whether the account pins this post |
| musicSong | string | Track title where present |
| comments | array | Top-level comments: `text`, `username`, `likeCount`, `replyCount`, `createdAt`, `isPinned` |
| commentsCollected | integer | How many comments this run collected for the post |
| repliesReported | integer | Total replies those comments drew (counts only — see below) |

**Example:**

```json
{
  "url": "https://www.instagram.com/p/DbrRMHCDs4H",
  "postFormat": "carousel",
  "timestamp": "2026-08-05T14:02:11.000Z",
  "caption": "So much confusion this summer ☀️",
  "slideCount": 4,
  "displayUrl": "https://scontent.cdninstagram.com/v/t51.../cover.jpg",
  "onImageText": "SH*T THAT DOESN'T MATTER\nother people's opinions\nComparing yourself to other people",
  "images": [
    {
      "index": 0,
      "imageUrl": "https://scontent.cdninstagram.com/v/t51.../slide1.jpg",
      "onImageText": "SH*T THAT DOESN'T MATTER",
      "visual": "White background, two columns of black handwritten text"
    }
  ],
  "engagementRate": 0.126,
  "performanceRatio": 1.22,
  "percentileInFormat": 75,
  "likesCount": 14727,
  "commentsCount": 156,
  "isPinned": false
}
```

***

### 💼 Use Cases & Examples

#### 1. Competitor teardown

**An agency strategist needs to know why a rival's account is outgrowing theirs.**

**Input:** the rival's handle, 90 days
**Output:** every post, scored within its format, plus the written rundown
**Use:** a client-ready audit from a single run

#### 2. Carousel hook research

**A content creator wants to copy the structure, not the content, of carousels that work.**

**Input:** a handle known for carousels, `includeImageText` on
**Output:** slide-by-slide text in order across every carousel
**Use:** see how the best accounts open, build and close a swipe

#### 3. Posting-schedule decisions

**A social media manager is guessing at posting times.**

**Input:** their own handle, 90 days, their audience's timezone
**Output:** engagement by day and by hour, plus cadence and gap analysis
**Use:** move the calendar to the slots that actually earn engagement

#### 4. Content pillar audit

**A brand marketer suspects half their output is wasted effort.**

**Input:** the brand handle, 60 days
**Output:** pillars named and scored, with the weakest posts listed
**Use:** cut the themes that never land, double down on the ones that do

#### 5. Influencer vetting

**A partnerships lead is comparing three creators before signing one.**

**Input:** each handle, 30 days
**Output:** engagement rate normalised by follower count, consistency, and per-format breakdown
**Use:** compare creators of different sizes on the same footing

#### 6. Script and caption mining

**A copywriter needs a corpus of what actually gets said.**

**Input:** any handle, transcripts on
**Output:** reel transcripts plus captions plus on-image text
**Use:** feed a language model the account's real voice, not a paraphrase

#### 7. Launch a new account modelled on a proven one

**A founder is starting from zero and wants a system, not a guess.**

**Input:** a strong account in the niche, 90 days, `includeSoul` and `includeDesignSystem` on
**Output:** soul.md and design.md
**Use:** hand both to a content agent — one supplies the cadence, pillars and hooks, the other the look — then swap in your own brand

#### 8. Audience research from the replies

**A product marketer wants the questions buyers actually ask.**

**Input:** the brand handle, `includeComments` on
**Output:** top-level comments per post, plus how many replies each one drew
**Use:** mine objections and requests in the audience's own words, and see which posts started a real conversation

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/instagram-account-360-intelligence').call({
  username: 'nasa',
  windowDays: '30'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/instagram-account-360-intelligence').call(
    run_input={'username': 'nasa', 'windowDays': '30'}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['url'], item['engagementRate'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~instagram-account-360-intelligence/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"username": "nasa", "windowDays": "30"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: weekly schedule
2. **HTTP Request**: run the Actor for each competitor handle
3. **Process**: filter rows where `performanceRatio` is above 1.5
4. **Action**: post the winners to Slack, or append to a content-ideas sheet

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **3 posts** per run — the newest posts of your window, full metadata and on-image text
- Comments capped at 5 per post; reel transcription is a paid feature
- No credit card required — enough to see the exact output shape before a full audit

#### PAID Tier (Production Ready)

- **Unlimited** posts per run across the full 90-day window
- Every reel transcribed; every image read for its on-image text and a visual description
- Charged per successful result, never for errors — unreadable images cost nothing
- A transcribed reel's cover image is read free of charge, never billed twice

💰 **You control the depth.** Turn transcripts and image reading off for a fast metadata sweep, or leave everything on for the full audit.

🔗 [View current pricing](https://apify.com/sian.agency/instagram-account-360-intelligence?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many posts can I process?**
A: FREE tier: the 3 newest posts of your window. PAID tier: every post in the window, up to 1000 in whole-account mode.

**Q: Does it work with private accounts?**
A: No. Only public accounts can be read, and the run tells you plainly if a handle is private.

**Q: Can I get reach, impressions or saves?**
A: No, and no tool can for an account you do not own. Instagram publishes those only to the account holder. You get likes, comments, plays and everything else that is public.

**Q: Do I get comment replies?**
A: You get every top-level comment with its full text, and for each one the *number* of replies it drew. You do not get the reply text — Instagram's data service does not expose it, so rather than quietly returning empty threads the actor reports the counts and says so. `repliesReported` is still a good signal for which posts started an actual conversation.

**Q: How many comments can I get per post?**
A: Up to 200, default 30. Popular posts carry tens of thousands — one account we tested had a post with over 11,000 — so the cap keeps runs fast and bills predictable.

**Q: What is soul.md and what do I do with it?**
A: It is your account reverse-engineered into a brief another AI agent can build from — cadence, formats, reel lengths, pillars, hooks and voice, with a seeded 30-day calendar. Copy it out of the report with one click and paste it into any agent. Every number in it is measured from your posts, not written by a model.

**Q: Will design.md just clone someone else's brand?**
A: No, and that is the point of its structure. It separates the brand-specific keys (colours, subjects, logos) from the structural ones (hierarchy, contrast, slide arc). You swap the first set for your own and keep the second, so you inherit the system that works rather than the content that belongs to someone else.

**Q: What happens if I scrape a whole account with thousands of posts?**
A: The run is capped at 1000 posts. Above 300 posts the on-image text and transcript passes switch off automatically, because a full visual pass on an account that size is a very large bill. Set `includeImageText` or `includeTranscripts` to `true` explicitly and the actor takes you at your word. Whatever was skipped is reported.

**Q: What output formats are available?**
A: JSON, CSV and Excel from the dataset, plus an HTML report and a JSON summary in the key-value store.

**Q: Does it read every slide of a carousel?**
A: Yes, in order. If an image budget is reached, whole posts are skipped rather than half-read, and the report says what was left out.

**Q: What if the account posted nothing in my window?**
A: The run succeeds and says so. It does not invent a result.

**Q: How long does it take?**
A: A 30-day window on a busy account is typically a few minutes. Transcripts and image reading are the slow parts — turn them off for a fast sweep.

***

### 🐛 Troubleshooting

**"Account was not found"**

- Check the spelling. A profile URL, `nasa` and `@nasa` are all accepted; a post or reel link is not, because this Actor reads a whole account rather than one post.

**"This is a private account"**

- Private accounts are not readable. There is no setting that changes this.

**Fewer posts than expected**

- On the FREE tier runs return the 3 newest posts, and reel transcription is paid-only. Check `maxPosts` too — 0 means the whole window.

**Some images have no text**

- Plenty of posts genuinely carry no on-image copy. Photos without overlaid text return an empty string and a visual description.

**Posting-time advice looks wrong**

- Set `timeZone` to your audience's zone. It defaults to UTC, which is rarely what you want.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `username` (type: `string`):

The public Instagram account to analyse. Paste the profile URL straight from your browser (https://www.instagram.com/nasa/) or type the handle (nasa or @nasa) — all three work. Post and reel links are not accepted: this Actor reads a whole account, not a single post. Private accounts cannot be read.

## `windowDays` (type: `string`):

FREE & PAID. How far back to collect posts. Every reel, feed post and carousel published inside this window is returned. "Entire account" ignores dates and pages back to the account's first post, capped at 1000 posts. Free runs return the 3 newest posts of the window.

## `timeZone` (type: `string`):

The timezone for the best-day and best-hour posting analysis. Pick your AUDIENCE's timezone, not your own — posting-time advice in the wrong timezone is worse than none.

## `includeImageText` (type: `boolean`):

FREE & PAID. Read the text burned into every image, including each slide of every carousel, plus a description of the visual. This is where a post's hook usually lives — Instagram does not publish it as text.

## `includeTranscripts` (type: `boolean`):

PAID ONLY. AI transcript of every reel in the window, with timestamped segments and SRT/VTT subtitles. Free runs skip transcription — reels are still returned with their full metadata. Available on any paid Apify plan.

## `includeRundown` (type: `boolean`):

FREE & PAID. An AI-written read of the account: content pillars, hooks that work, what is over- and under-performing, and recommendations. Saved to the HTML report and the run summary.

## `includeSoul` (type: `boolean`):

FREE & PAID (charged once per run). Reverse-engineers the account into a brief another AI agent can build from: posting cadence, format mix, reel length, carousel length, content pillars read off the OUTLIER posts, hook patterns, voice and a seeded first-30-days calendar. Saved as soul.md and shown in the report with a one-click copy button. Every number in it is measured, not written by a model. On free runs it is built from the 3 free posts.

## `includeDesignSystem` (type: `boolean`):

FREE & PAID (charged once per run). Analyses the best-performing images and carousels and extracts the account's visual system as structured JSON tokens — palette, typography, layout, imagery treatment, recurring graphic devices and the carousel arc — plus which keys to swap for your own brand and which to keep. Saved as design.md with a one-click copy button.

## `includeComments` (type: `boolean`):

FREE & PAID (charged per comment). Adds top-level comments to every post that has them, with author, text, likes and timestamp. Each comment also reports how many replies it received (reply text is not published by Instagram's data service). Free runs are capped at 5 comments per post; paid runs use the limit below.

## `maxCommentsPerPost` (type: `integer`):

FREE & PAID. How many top-level comments to collect per post, newest and top-ranked first. Popular posts can carry tens of thousands, so this is capped at 200 to keep runs fast and bills predictable. Free runs are always capped at 5 per post.

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

Cap on how many posts the WHOLE run collects — it is not a comments setting. 0 means every post in the window. Takes effect on paid plans; free runs always return the 3 newest posts. In "Entire account" mode the run is capped at 1000 posts regardless, and above 300 posts the on-image text and transcript passes switch off unless you set them to true yourself.

## Actor input object example

```json
{
  "username": "https://www.instagram.com/nasa/",
  "windowDays": "30",
  "timeZone": "UTC",
  "includeImageText": true,
  "includeTranscripts": true,
  "includeRundown": true,
  "includeSoul": false,
  "includeDesignSystem": false,
  "includeComments": false,
  "maxCommentsPerPost": 30,
  "maxPosts": 0
}
```

# Actor output Schema

## `output` (type: `string`):

One row per post. Filter by `postFormat` (`reel`, `carousel`, `image`), sort by `engagementRate` or `performanceRatio` to find over-performers, and read `onImageText` plus `transcript` for what each post actually said.

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

HTML report: profile header, engagement KPIs, format breakdown, posting rhythm, best days and hours, top and weakest posts, hashtag performance and the written strategy rundown. Written even on fatal error.

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

The full analytics object and strategy rundown as JSON — profile, cadence, engagement, formats, posting times, hashtags and recommendations.

## `soul` (type: `string`):

The account reverse-engineered into a brief another AI agent can build from: cadence, format mix, reel and carousel length, content pillars read off the outlier posts, hook patterns, voice and a seeded first-30-days calendar. Written only when `includeSoul` is on.

## `design` (type: `string`):

The account's visual system as structured JSON tokens — palette, typography, layout, imagery, graphic devices and the carousel arc — with the brand keys to swap and the structure to keep. Written only when `includeDesignSystem` is on.

# 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 = {
    "username": "nasa",
    "windowDays": "30",
    "timeZone": "UTC",
    "includeImageText": true,
    "includeTranscripts": true,
    "includeRundown": true,
    "includeSoul": false,
    "includeDesignSystem": false,
    "includeComments": false,
    "maxCommentsPerPost": 30,
    "maxPosts": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/instagram-account-360-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 = {
    "username": "nasa",
    "windowDays": "30",
    "timeZone": "UTC",
    "includeImageText": True,
    "includeTranscripts": True,
    "includeRundown": True,
    "includeSoul": False,
    "includeDesignSystem": False,
    "includeComments": False,
    "maxCommentsPerPost": 30,
    "maxPosts": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/instagram-account-360-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 '{
  "username": "nasa",
  "windowDays": "30",
  "timeZone": "UTC",
  "includeImageText": true,
  "includeTranscripts": true,
  "includeRundown": true,
  "includeSoul": false,
  "includeDesignSystem": false,
  "includeComments": false,
  "maxCommentsPerPost": 30,
  "maxPosts": 0
}' |
apify call sian.agency/instagram-account-360-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/instagram-account-360-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/BkszBocv2mHXSqlj0/builds/fov6IXg0X7AEXBAno/openapi.json
