# Instagram Brand Audit & 30-Day Content Plan (`seasons-ai/instagram-brand-audit`) Actor

Audit your brand's Instagram vs competitors from an Instagram scraper run: what over-performs, best days and times, share of voice, then a 30-day content plan.

- **URL**: https://apify.com/seasons-ai/instagram-brand-audit.md
- **Developed by:** [Seasons AI](https://apify.com/seasons-ai) (community)
- **Categories:** AI, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 analysed posts

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 Brand Audit: Competitors, Share of Voice and a 30-Day Content Plan

Turn an Instagram scraper run on your brand and your competitors into a **content audit** that shows what beats each account's normal engagement, and a **30-day content plan** for your brand built on those patterns.

This Actor is for **brand and business accounts** only, such as your own account and competitor brands. It is not built for personal profiles. Personal or private accounts in the input are skipped and you are not charged for them.

### What you can do

- See the **content mix** of every account: images, carousels, reels and videos, plus content pillars (product, promo, education, behind the scenes, UGC, and others).
- Compare **posting cadence**, **best posting days and hours** (in your time zone) and **share of voice** against competitors.
- Find out **what over-performs**: format, content pillar, caption hook style, call to action, caption length, emoji and hashtag use, image type (product shot, lifestyle, UGC style, text overlay, people in shot), posting day and time.
- Find **hashtag clusters** that go with higher engagement.
- Get a **30-day content plan** for your brand: date, time, format, pillar, hook, caption draft, hashtags and a visual brief for every post.

### How to use

1. Run the [Instagram Scraper](https://apify.com/apify/instagram-scraper) (results type **Posts**) or the [Instagram Profile Scraper](https://apify.com/apify/instagram-profile-scraper) on your brand account and 1–5 competitor brand accounts. 20–50 posts per account give useful medians.
2. Open this Actor and pick that run's dataset in **Instagram scraper dataset**. Enter **your handle** as it appears in the data. Every other account counts as a competitor. Add a **brand brief** if you like.
3. Start the run. The Actor reads the dataset, checks the maximum price against your run's cost limit, and only then begins.

Run it soon after the scrape. Instagram image links expire after some hours or days. A post with an expired image is still analysed (and charged) from its caption alone, and its row says so in `note`.

If you have no dataset, paste posts in **Items** (Instagram Scraper JSON format), or give a link to a JSON or CSV export in **Items URL**. The CSV needs these columns: post URL, type, caption, hashtags, likes, comments, timestamp, image URL, account. The prefilled input is a 6-post synthetic demo of two fictional shops, so the form runs as-is.

### How it works

For each post:

1. Measures the **performance index**: the post's likes + comments divided by **that account's own median**. 1.0 is a typical post, 2.0 is twice its usual engagement, so big and small accounts compare fairly. Accounts that hide like counts are scored on comments.
2. Labels the caption with AI: topic, content pillar, hook style of the first line, call to action and tone. Caption length, emoji count and hashtag count are measured in code.
3. Labels the **first image only** (the photo, the first carousel slide or the video cover): image type, product shot, lifestyle, UGC style, text overlay, and whether people are present (yes/no). **People are never identified.** The labels describe composition only, never who someone is.

Then it groups everything per account and across accounts, and writes the plan. The plan writer gets only labels, numbers and hashtags, never competitor captions. Every plan post is checked against all competitor captions: a draft that shares any **6-word sequence** with a competitor caption, or names a competitor brand, is rewritten once and dropped if it still matches.

### Input

| Field | Required | Notes |
|---|---|---|
| `datasetId` | one of these three | Dataset of an Instagram Scraper (posts) or Instagram Profile Scraper run. Use the picker in Console; through the API pass the run's `defaultDatasetId`. Read-only access |
| `items` | | Posts as JSON: `url`, `type` (Image / Sidecar / Video), `caption`, `hashtags`, `likesCount`, `commentsCount`, `timestamp`, `displayUrl` or `images`, `ownerUsername` |
| `itemsUrl` | | Link to a JSON array or CSV export |
| `ownAccount` | for the plan (or `brandBrief`) | Your handle as it appears in the data, without @ |
| `brandBrief` | no | Brand, products, audience, tone, goals, things to avoid (up to 4,000 characters). Without it the plan learns your voice from your own captions |
| `maxPosts` | no | Default 300, max 1,000. With more posts in the input, the newest of each account are taken in turn |
| `analyzeImages` | no | Default on. Off = caption-only labels, same price |
| `includePinned` | no | Default off: pinned posts are often old all-time hits that distort medians |
| `timezone` | no | IANA name, e.g. `Europe/Berlin`. Default `UTC` |
| `createPlan` | no | Default on. Off = audit only |
| `planStartDate` | no | `YYYY-MM-DD`, default tomorrow |
| `postsPerWeek` | no | 1–7. Default: your current cadence (2–7), or 4 |
| `language` | no | Language of the plan and takeaways. Default English |

Example (API):

```json
{
  "datasetId": "<defaultDatasetId of your Instagram Scraper run>",
  "ownAccount": "mybrand",
  "brandBrief": "Small skincare brand, vegan, ships in the EU. Audience 25-40. Tone: calm, expert, no hype.",
  "timezone": "Europe/Berlin",
  "postsPerWeek": 4
}
```

### Output

**Dataset**: one row per post.

```json
{
  "status": "analyzed",
  "account": "brand_account",
  "isOwnAccount": true,
  "url": "https://www.instagram.com/p/DfC6pysm80h/",
  "format": "carousel",
  "postedAt": "2026-10-28T16:58:55.000Z",
  "postingDay": "Wed",
  "postingHour": 12,
  "likes": 991,
  "comments": 20,
  "carouselSlides": 8,
  "engagement": 1011,
  "performanceIndex": 0.53,
  "performance": "under",
  "captionFirstLine": "The holidays are nigh. Don't worry, we promise you'll get through them.",
  "captionLengthBucket": "short (<125)",
  "emojiUse": "none",
  "hashtagUse": "none",
  "topic": "Holiday stress stages",
  "contentPillar": "entertainment-meme",
  "hookStyle": "story-open",
  "ctaType": "none",
  "tone": "playful",
  "imageType": "graphic-text-design",
  "productShot": false,
  "lifestyle": false,
  "ugcStyle": false,
  "textOverlay": true,
  "peoplePresent": true,
  "imageDescription": "A graphic with the text 'stages of a meltdown' in the centre, surrounded by four small images.",
  "priceUsd": 0.004
}
```

**Key-value store**

| Record | Content |
|---|---|
| `audit.md` | The audit: key takeaways, accounts and share of voice, content mix, per-account cadence, best days and times, what over-performs, pattern tables, hashtag clusters, top posts, and the full plan |
| `plan.json` | The 30-day plan. Each post has date, weekday, time, format, contentPillar, hookStyle, ctaType, topic, hook, captionDraft, hashtags, visualBrief, whyThisWorks and the pattern evidence behind it. Also includes the takeaways |
| `accounts.json` | Account summaries (followers when the profile scraper is used, cadence, medians, format and pillar mix, best days and times, over-performers, top hashtags, top posts, share of voice), pattern statistics and hashtag clusters |
| `OUTPUT` | Counts, amount charged and links to the files above |

Content pillars: product-feature, promotion-offer, education-tips, behind-the-scenes, community-ugc, testimonial-social-proof, brand-story-values, announcement-launch, event, collaboration-partnership, seasonal-holiday, entertainment-meme, inspiration-lifestyle, other.
Hook styles: question, bold-claim, statistic-number, how-to-promise, list, story-open, announcement, direct-address, quote, humor-wordplay, emoji-lead, product-name-lead, plain-description, none.
Image types: product-shot, lifestyle, ugc-style, graphic-text-design, people-focused, behind-the-scenes, meme-illustration, other.

### Pricing

You pay per event. Posts that are skipped or fail are free, and so is an incomplete plan.

| Event | Price |
|---|---|
| Post analysed | $0.004 |
| 30-day content plan | $0.20 |

Examples:

- 100 posts (your account plus 3 competitors) and a plan: 100 × $0.004 + $0.20 = **$0.60**
- 300 posts and a plan: **$1.40**
- 300 posts, audit only: **$1.20**

Before any work starts, the Actor computes the maximum price. If your run's maximum cost is lower, it stops without charging you.

Available on paid Apify plans.

### Limits and good to know

- On the free Apify plan the Actor returns a short preview with an example result and prices instead of running.
- Up to 1,000 posts per run (default 300). The plan covers 30 days at 1–7 posts per week.
- Only the first image of each post is analysed. For a video, that is its cover frame; the video itself is not watched.
- All numbers (medians, indexes, lift, cadence, share of voice) are computed in code from the scraper's counts, not by the AI. With few posts per pattern, results are only hints: the report shows the sample size and a confidence level.
- Share of voice covers only the accounts in your input. If any account hides its like counts, engagement is compared on comments for everyone.
- Labels come from an AI model reading the caption and one image, so they can be wrong on unusual posts. Text on images can be misread.
- Caption drafts are starting points. Check facts, offers and dates before you post. The writer is told not to invent prices, discounts or claims your brief does not support.
- Only account-level and post-level data is read and output. Comments, commenter names, tagged users and mentions are dropped on read, and @handles in the caption first line are masked.
- Use it on public brand content you are allowed to analyse, and follow Instagram's terms. Images are only held in memory for the analysis and are never stored or re-hosted.

# Actor input Schema

## `datasetId` (type: `string`):

Pick the dataset of your Instagram Scraper run (apify/instagram-scraper, results type Posts) or Instagram Profile Scraper run (apify/instagram-profile-scraper) on your brand account and your competitors' brand accounts. Through the API, pass the run's defaultDatasetId. The Actor only reads it. Leave empty to use Items or Items URL instead.

## `items` (type: `array`):

Posts as JSON in the Instagram Scraper format (url, type Image / Sidecar / Video, caption, hashtags, likesCount, commentsCount, timestamp, displayUrl or images, ownerUsername). Used when no dataset is picked. The prefill is a 6-post synthetic demo of two fictional shops.

## `itemsUrl` (type: `string`):

Link to a JSON or CSV export of an Instagram Scraper or Instagram Profile Scraper dataset (columns: post URL, type, caption, hashtags, likes, comments, timestamp, image URL, account). Used when neither a dataset nor items are given.

## `ownAccount` (type: `string`):

Your own account as it appears in the dataset (e.g. mybrand, without @). Every other account is treated as a competitor. The content plan is written for this account.

## `brandBrief` (type: `string`):

Who you are, what you sell, audience, tone of voice, goals and anything to avoid (up to 4,000 characters). Optional when your own account is in the dataset; the plan then learns your voice from your captions. Required for the plan when it is not.

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

Cap on posts analysed in this run. When the input has more, the newest posts of each account are taken in turn so every account is represented. Each analysed post is one charge.

## `analyzeImages` (type: `boolean`):

Labels the first image (photo, first carousel slide or video cover): product shot, lifestyle, UGC-style, text overlay, people present yes/no. People are never identified. Off = caption-only labels (same price).

## `includePinned` (type: `boolean`):

Pinned posts are often old all-time hits and distort medians, so they are left out by default (not charged).

## `timezone` (type: `string`):

IANA time zone for best posting days and hours and for plan times, e.g. Europe/Berlin, America/New_York.

## `createPlan` (type: `boolean`):

A 30-day plan for your brand: date, time, format, content pillar, hook, caption draft, hashtags and visual brief per post, built from the winning patterns. One charge per plan. Off = audit only.

## `planStartDate` (type: `string`):

First day of the 30-day plan (YYYY-MM-DD). Default: tomorrow in your time zone.

## `postsPerWeek` (type: `integer`):

How many posts per week the plan schedules. Empty = your current cadence (between 2 and 7), or 4 when your account is not in the data.

## `language` (type: `string`):

Language of the plan, caption drafts and takeaways, e.g. English, German, Spanish.

## Actor input object example

```json
{
  "items": [
    {
      "shortCode": "demo1",
      "url": "https://example.com/demo/demo1",
      "type": "Image",
      "ownerUsername": "demo_plant_shop",
      "caption": "Meet Fern, our easiest plant yet 🌿 Thrives on a shelf, forgives a missed watering. Tap the link in bio to bring one home. #houseplants #easyplants",
      "hashtags": [
        "houseplants",
        "easyplants"
      ],
      "likesCount": 420,
      "commentsCount": 18,
      "timestamp": "2026-10-14T17:05:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367"
    },
    {
      "shortCode": "demo2",
      "url": "https://example.com/demo/demo2",
      "type": "Sidecar",
      "ownerUsername": "demo_plant_shop",
      "caption": "Dark flat? These 3 plants don't mind. Save this for your next shop trip 👇 #houseplants #lowlightplants #plantcare",
      "hashtags": [
        "houseplants",
        "lowlightplants",
        "plantcare"
      ],
      "likesCount": 1310,
      "commentsCount": 64,
      "timestamp": "2026-10-17T18:30:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM"
    },
    {
      "shortCode": "demo3",
      "url": "https://example.com/demo/demo3",
      "type": "Image",
      "ownerUsername": "demo_plant_shop",
      "caption": "New in: the self-watering pot. Fill it once, forget it for two weeks. #easyplants #plantcare",
      "hashtags": [
        "easyplants",
        "plantcare"
      ],
      "likesCount": 510,
      "commentsCount": 22,
      "timestamp": "2026-10-21T12:10:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq"
    },
    {
      "shortCode": "demo4",
      "url": "https://example.com/demo/demo4",
      "type": "Sidecar",
      "ownerUsername": "demo_leafy_corner",
      "caption": "Why do my leaves turn yellow? Four reasons and a quick fix for each. Which one is yours? Tell us below. #plantcare #plantproblems",
      "hashtags": [
        "plantcare",
        "plantproblems"
      ],
      "likesCount": 2240,
      "commentsCount": 190,
      "timestamp": "2026-10-15T18:00:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM"
    },
    {
      "shortCode": "demo5",
      "url": "https://example.com/demo/demo5",
      "type": "Image",
      "ownerUsername": "demo_leafy_corner",
      "caption": "Weekend drop: hand-glazed pots in three colours. Shop now while stock lasts. #ceramics #plantpots",
      "hashtags": [
        "ceramics",
        "plantpots"
      ],
      "likesCount": 880,
      "commentsCount": 21,
      "timestamp": "2026-10-18T09:00:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq"
    },
    {
      "shortCode": "demo6",
      "url": "https://example.com/demo/demo6",
      "type": "Image",
      "ownerUsername": "demo_leafy_corner",
      "caption": "Our studio this morning. Coffee, soil and a lot of repotting. #behindthescenes #plantpots",
      "hashtags": [
        "behindthescenes",
        "plantpots"
      ],
      "likesCount": 960,
      "commentsCount": 30,
      "timestamp": "2026-10-22T08:45:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367"
    }
  ],
  "ownAccount": "demo_plant_shop",
  "brandBrief": "Leafline is a small online shop for easy-care houseplants and pots, shipping across the EU. Audience: renters aged 22-35 in small, dark flats. Tone: warm, practical, no plant jargon. Goal: followers and visits to the shop. Avoid: fear tactics, discount spam.",
  "maxPosts": 300,
  "analyzeImages": true,
  "includePinned": false,
  "timezone": "UTC",
  "createPlan": true,
  "language": "English"
}
```

# Actor output Schema

## `posts` (type: `string`):

No description

## `audit` (type: `string`):

No description

## `plan` (type: `string`):

No description

## `accounts` (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 = {
    "items": [
        {
            "shortCode": "demo1",
            "url": "https://example.com/demo/demo1",
            "type": "Image",
            "ownerUsername": "demo_plant_shop",
            "caption": "Meet Fern, our easiest plant yet 🌿 Thrives on a shelf, forgives a missed watering. Tap the link in bio to bring one home. #houseplants #easyplants",
            "hashtags": [
                "houseplants",
                "easyplants"
            ],
            "likesCount": 420,
            "commentsCount": 18,
            "timestamp": "2026-10-14T17:05:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367"
        },
        {
            "shortCode": "demo2",
            "url": "https://example.com/demo/demo2",
            "type": "Sidecar",
            "ownerUsername": "demo_plant_shop",
            "caption": "Dark flat? These 3 plants don't mind. Save this for your next shop trip 👇 #houseplants #lowlightplants #plantcare",
            "hashtags": [
                "houseplants",
                "lowlightplants",
                "plantcare"
            ],
            "likesCount": 1310,
            "commentsCount": 64,
            "timestamp": "2026-10-17T18:30:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM"
        },
        {
            "shortCode": "demo3",
            "url": "https://example.com/demo/demo3",
            "type": "Image",
            "ownerUsername": "demo_plant_shop",
            "caption": "New in: the self-watering pot. Fill it once, forget it for two weeks. #easyplants #plantcare",
            "hashtags": [
                "easyplants",
                "plantcare"
            ],
            "likesCount": 510,
            "commentsCount": 22,
            "timestamp": "2026-10-21T12:10:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq"
        },
        {
            "shortCode": "demo4",
            "url": "https://example.com/demo/demo4",
            "type": "Sidecar",
            "ownerUsername": "demo_leafy_corner",
            "caption": "Why do my leaves turn yellow? Four reasons and a quick fix for each. Which one is yours? Tell us below. #plantcare #plantproblems",
            "hashtags": [
                "plantcare",
                "plantproblems"
            ],
            "likesCount": 2240,
            "commentsCount": 190,
            "timestamp": "2026-10-15T18:00:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM"
        },
        {
            "shortCode": "demo5",
            "url": "https://example.com/demo/demo5",
            "type": "Image",
            "ownerUsername": "demo_leafy_corner",
            "caption": "Weekend drop: hand-glazed pots in three colours. Shop now while stock lasts. #ceramics #plantpots",
            "hashtags": [
                "ceramics",
                "plantpots"
            ],
            "likesCount": 880,
            "commentsCount": 21,
            "timestamp": "2026-10-18T09:00:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq"
        },
        {
            "shortCode": "demo6",
            "url": "https://example.com/demo/demo6",
            "type": "Image",
            "ownerUsername": "demo_leafy_corner",
            "caption": "Our studio this morning. Coffee, soil and a lot of repotting. #behindthescenes #plantpots",
            "hashtags": [
                "behindthescenes",
                "plantpots"
            ],
            "likesCount": 960,
            "commentsCount": 30,
            "timestamp": "2026-10-22T08:45:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367"
        }
    ],
    "ownAccount": "demo_plant_shop",
    "brandBrief": "Leafline is a small online shop for easy-care houseplants and pots, shipping across the EU. Audience: renters aged 22-35 in small, dark flats. Tone: warm, practical, no plant jargon. Goal: followers and visits to the shop. Avoid: fear tactics, discount spam."
};

// Run the Actor and wait for it to finish
const run = await client.actor("seasons-ai/instagram-brand-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 = {
    "items": [
        {
            "shortCode": "demo1",
            "url": "https://example.com/demo/demo1",
            "type": "Image",
            "ownerUsername": "demo_plant_shop",
            "caption": "Meet Fern, our easiest plant yet 🌿 Thrives on a shelf, forgives a missed watering. Tap the link in bio to bring one home. #houseplants #easyplants",
            "hashtags": [
                "houseplants",
                "easyplants",
            ],
            "likesCount": 420,
            "commentsCount": 18,
            "timestamp": "2026-10-14T17:05:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367",
        },
        {
            "shortCode": "demo2",
            "url": "https://example.com/demo/demo2",
            "type": "Sidecar",
            "ownerUsername": "demo_plant_shop",
            "caption": "Dark flat? These 3 plants don't mind. Save this for your next shop trip 👇 #houseplants #lowlightplants #plantcare",
            "hashtags": [
                "houseplants",
                "lowlightplants",
                "plantcare",
            ],
            "likesCount": 1310,
            "commentsCount": 64,
            "timestamp": "2026-10-17T18:30:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM",
        },
        {
            "shortCode": "demo3",
            "url": "https://example.com/demo/demo3",
            "type": "Image",
            "ownerUsername": "demo_plant_shop",
            "caption": "New in: the self-watering pot. Fill it once, forget it for two weeks. #easyplants #plantcare",
            "hashtags": [
                "easyplants",
                "plantcare",
            ],
            "likesCount": 510,
            "commentsCount": 22,
            "timestamp": "2026-10-21T12:10:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq",
        },
        {
            "shortCode": "demo4",
            "url": "https://example.com/demo/demo4",
            "type": "Sidecar",
            "ownerUsername": "demo_leafy_corner",
            "caption": "Why do my leaves turn yellow? Four reasons and a quick fix for each. Which one is yours? Tell us below. #plantcare #plantproblems",
            "hashtags": [
                "plantcare",
                "plantproblems",
            ],
            "likesCount": 2240,
            "commentsCount": 190,
            "timestamp": "2026-10-15T18:00:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM",
        },
        {
            "shortCode": "demo5",
            "url": "https://example.com/demo/demo5",
            "type": "Image",
            "ownerUsername": "demo_leafy_corner",
            "caption": "Weekend drop: hand-glazed pots in three colours. Shop now while stock lasts. #ceramics #plantpots",
            "hashtags": [
                "ceramics",
                "plantpots",
            ],
            "likesCount": 880,
            "commentsCount": 21,
            "timestamp": "2026-10-18T09:00:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq",
        },
        {
            "shortCode": "demo6",
            "url": "https://example.com/demo/demo6",
            "type": "Image",
            "ownerUsername": "demo_leafy_corner",
            "caption": "Our studio this morning. Coffee, soil and a lot of repotting. #behindthescenes #plantpots",
            "hashtags": [
                "behindthescenes",
                "plantpots",
            ],
            "likesCount": 960,
            "commentsCount": 30,
            "timestamp": "2026-10-22T08:45:00.000Z",
            "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367",
        },
    ],
    "ownAccount": "demo_plant_shop",
    "brandBrief": "Leafline is a small online shop for easy-care houseplants and pots, shipping across the EU. Audience: renters aged 22-35 in small, dark flats. Tone: warm, practical, no plant jargon. Goal: followers and visits to the shop. Avoid: fear tactics, discount spam.",
}

# Run the Actor and wait for it to finish
run = client.actor("seasons-ai/instagram-brand-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 '{
  "items": [
    {
      "shortCode": "demo1",
      "url": "https://example.com/demo/demo1",
      "type": "Image",
      "ownerUsername": "demo_plant_shop",
      "caption": "Meet Fern, our easiest plant yet 🌿 Thrives on a shelf, forgives a missed watering. Tap the link in bio to bring one home. #houseplants #easyplants",
      "hashtags": [
        "houseplants",
        "easyplants"
      ],
      "likesCount": 420,
      "commentsCount": 18,
      "timestamp": "2026-10-14T17:05:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367"
    },
    {
      "shortCode": "demo2",
      "url": "https://example.com/demo/demo2",
      "type": "Sidecar",
      "ownerUsername": "demo_plant_shop",
      "caption": "Dark flat? These 3 plants don'\''t mind. Save this for your next shop trip 👇 #houseplants #lowlightplants #plantcare",
      "hashtags": [
        "houseplants",
        "lowlightplants",
        "plantcare"
      ],
      "likesCount": 1310,
      "commentsCount": 64,
      "timestamp": "2026-10-17T18:30:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM"
    },
    {
      "shortCode": "demo3",
      "url": "https://example.com/demo/demo3",
      "type": "Image",
      "ownerUsername": "demo_plant_shop",
      "caption": "New in: the self-watering pot. Fill it once, forget it for two weeks. #easyplants #plantcare",
      "hashtags": [
        "easyplants",
        "plantcare"
      ],
      "likesCount": 510,
      "commentsCount": 22,
      "timestamp": "2026-10-21T12:10:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq"
    },
    {
      "shortCode": "demo4",
      "url": "https://example.com/demo/demo4",
      "type": "Sidecar",
      "ownerUsername": "demo_leafy_corner",
      "caption": "Why do my leaves turn yellow? Four reasons and a quick fix for each. Which one is yours? Tell us below. #plantcare #plantproblems",
      "hashtags": [
        "plantcare",
        "plantproblems"
      ],
      "likesCount": 2240,
      "commentsCount": 190,
      "timestamp": "2026-10-15T18:00:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post2.jpg?signature=hjx7NHRmE7ZtAb5BMtqM"
    },
    {
      "shortCode": "demo5",
      "url": "https://example.com/demo/demo5",
      "type": "Image",
      "ownerUsername": "demo_leafy_corner",
      "caption": "Weekend drop: hand-glazed pots in three colours. Shop now while stock lasts. #ceramics #plantpots",
      "hashtags": [
        "ceramics",
        "plantpots"
      ],
      "likesCount": 880,
      "commentsCount": 21,
      "timestamp": "2026-10-18T09:00:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post3.jpg?signature=18TTpy2MUWKZUJFQlW5Yq"
    },
    {
      "shortCode": "demo6",
      "url": "https://example.com/demo/demo6",
      "type": "Image",
      "ownerUsername": "demo_leafy_corner",
      "caption": "Our studio this morning. Coffee, soil and a lot of repotting. #behindthescenes #plantpots",
      "hashtags": [
        "behindthescenes",
        "plantpots"
      ],
      "likesCount": 960,
      "commentsCount": 30,
      "timestamp": "2026-10-22T08:45:00.000Z",
      "displayUrl": "https://api.apify.com/v2/key-value-stores/5XtbUYaOtYXHaEUdK/records/post1.jpg?signature=Lpk5LeJBzYKygxxyf367"
    }
  ],
  "ownAccount": "demo_plant_shop",
  "brandBrief": "Leafline is a small online shop for easy-care houseplants and pots, shipping across the EU. Audience: renters aged 22-35 in small, dark flats. Tone: warm, practical, no plant jargon. Goal: followers and visits to the shop. Avoid: fear tactics, discount spam."
}' |
apify call seasons-ai/instagram-brand-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seasons-ai/instagram-brand-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/0WIghC0DqcjchMqMH/builds/GcSxiV8lrFkNmP62Y/openapi.json
