Instagram Brand Audit & 30-Day Content Plan
Pricing
from $4.00 / 1,000 post analyseds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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
- 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.
- 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.
- 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:
- 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.
- 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.
- 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):
{"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
| 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.