Instagram Brand Audit & 30-Day Content Plan avatar

Instagram Brand Audit & 30-Day Content Plan

Pricing

from $4.00 / 1,000 post analyseds

Go to Apify Store
Instagram Brand Audit & 30-Day Content Plan

Instagram Brand Audit & 30-Day Content Plan

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.

Pricing

from $4.00 / 1,000 post analyseds

Rating

0.0

(0)

Developer

Seasons AI

Seasons AI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

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 (results type Posts) or the 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

FieldRequiredNotes
datasetIdone of these threeDataset 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
itemsPosts as JSON: url, type (Image / Sidecar / Video), caption, hashtags, likesCount, commentsCount, timestamp, displayUrl or images, ownerUsername
itemsUrlLink to a JSON array or CSV export
ownAccountfor the plan (or brandBrief)Your handle as it appears in the data, without @
brandBriefnoBrand, products, audience, tone, goals, things to avoid (up to 4,000 characters). Without it the plan learns your voice from your own captions
maxPostsnoDefault 300, max 1,000. With more posts in the input, the newest of each account are taken in turn
analyzeImagesnoDefault on. Off = caption-only labels, same price
includePinnednoDefault off: pinned posts are often old all-time hits that distort medians
timezonenoIANA name, e.g. Europe/Berlin. Default UTC
createPlannoDefault on. Off = audit only
planStartDatenoYYYY-MM-DD, default tomorrow
postsPerWeekno1–7. Default: your current cadence (2–7), or 4
languagenoLanguage of the plan and takeaways. Default English

Example (API):

{
"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.

{
"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

RecordContent
audit.mdThe 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.jsonThe 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.jsonAccount 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
OUTPUTCounts, 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.

EventPrice
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.