analyzing-competitor-instagram-content-strategy

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Analyzing Competitor Instagram Content Strategy

分析竞争对手的Instagram内容策略

Reverse-engineers a competitor's Instagram content strategy by analyzing their last 50+ posts. Identifies what content formats, themes, and posting patterns drive their highest engagement.
通过分析竞争对手最近50+条帖子,逆向解析其Instagram内容策略。识别出哪些内容格式、主题和发布模式能带来最高的互动量。

Prerequisites

前提条件

  • APIFY_TOKEN
    environment variable set
  • Optional: Apify MCP server installed
  • 已设置
    APIFY_TOKEN
    环境变量
  • 可选:已安装Apify MCP服务器

Inputs

输入参数

ParameterTypeRequiredDefaultNotes
startUrls
array
[]
Instagram URLs — profiles, hashtags, locations, audio pages, reels
until
stringOptionalScrape posts until this date (YYYY-MM-DD)
maxItems
numberOptionalUnlimitedMaximum posts to return
customMapFunction
stringOptionalJavaScript function to transform each output object
参数类型是否必填默认值说明
startUrls
数组
[]
Instagram链接 — 主页、话题标签、地点、音频页面、Reels
until
字符串可选爬取截止日期(格式:YYYY-MM-DD)
maxItems
数字可选无限制返回的最大帖子数量
customMapFunction
字符串可选用于转换每个输出对象的JavaScript函数

Workflow

工作流程

Progress:
- [ ] Step 1: Scrape competitor's recent posts
- [ ] Step 2: Classify content types
- [ ] Step 3: Calculate engagement metrics per content type
- [ ] Step 4: Analyze posting patterns
- [ ] Step 5: (Optional) Compare to your account
- [ ] Step 6: Deliver strategy report
Progress:
- [ ] Step 1: Scrape competitor's recent posts
- [ ] Step 2: Classify content types
- [ ] Step 3: Calculate engagement metrics per content type
- [ ] Step 4: Analyze posting patterns
- [ ] Step 5: (Optional) Compare to your account
- [ ] Step 6: Deliver strategy report

Step 1: Scrape Competitor Profile

步骤1:爬取竞争对手主页

Recommended — run_actor.js (handles waiting, output, and file saving automatically):
bash
undefined
推荐方式 — 使用run_actor.js(自动处理等待、输出和文件保存):
bash
undefined

Quick answer (prints table to chat)

Quick answer (prints table to chat)

node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'

Save as CSV

Save as CSV

node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
--output YYYY-MM-DD_results.csv --format csv
node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
--output YYYY-MM-DD_results.csv --format csv

Save as JSON

Save as JSON

node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
--output YYYY-MM-DD_results.json --format json
> `APIFY_TOKEN` must be set in environment or `.env` file.

**If Apify MCP is available:**
Tool: apify:run-actor Actor: "apidojo~instagram-scraper" Input: { "usernames": ["[COMPETITOR_HANDLE]"], "maxItems": 50 }

**REST API fallback:**
```bash
curl -X POST   "https://api.apify.com/v2/acts/apidojo~instagram-scraper/runs?token=$APIFY_TOKEN"   -H "Content-Type: application/json"   -d '{"usernames": ["competitor_handle"], "maxItems": 50}'
node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
--output YYYY-MM-DD_results.json --format json
> `APIFY_TOKEN`必须在环境变量或`.env`文件中设置。

**若Apify MCP可用:**
Tool: apify:run-actor Actor: "apidojo~instagram-scraper" Input: { "usernames": ["[COMPETITOR_HANDLE]"], "maxItems": 50 }

**REST API备选方案:**
```bash
curl -X POST   "https://api.apify.com/v2/acts/apidojo~instagram-scraper/runs?token=$APIFY_TOKEN"   -H "Content-Type: application/json"   -d '{"usernames": ["competitor_handle"], "maxItems": 50}'

Step 2: Content Classification

步骤2:内容分类

For each post, classify:
content_type:
  PRODUCT = post primarily shows product
  LIFESTYLE = product in context / aspirational
  EDUCATIONAL = tips, how-to, facts (carousel with text)
  SOCIAL_PROOF = testimonial, user tag, press feature
  ENTERTAINMENT = meme, trending audio, humor
  PROMOTIONAL = sale, discount, CTA-heavy
  BEHIND_SCENES = team, office, process
Format:
IMAGE
|
VIDEO
|
CAROUSEL
对每条帖子进行分类:
content_type:
  PRODUCT = post primarily shows product
  LIFESTYLE = product in context / aspirational
  EDUCATIONAL = tips, how-to, facts (carousel with text)
  SOCIAL_PROOF = testimonial, user tag, press feature
  ENTERTAINMENT = meme, trending audio, humor
  PROMOTIONAL = sale, discount, CTA-heavy
  BEHIND_SCENES = team, office, process
格式:
IMAGE
|
VIDEO
|
CAROUSEL

Step 3: Calculate Metrics

步骤3:计算指标

engagement_rate = (likes + comments) / follower_count * 100

per_type_avg_engagement = avg(engagement_rate for all posts of that type)

content_type_share = count(posts of type) / total_posts * 100
Top performing post: highest
(likes + comments * 3)
— comments weighted higher as active signal.
Posting cadence:
posts_per_week = total_posts / (date_range_days / 7)
best_day = day_of_week with highest avg engagement
best_hour = hour_of_day with highest avg engagement (use post `timestamp`)
engagement_rate = (likes + comments) / follower_count * 100

per_type_avg_engagement = avg(engagement_rate for all posts of that type)

content_type_share = count(posts of type) / total_posts * 100
表现最佳的帖子:
(点赞数 + 评论数 × 3)
得分最高 — 评论被赋予更高权重,因为它是更活跃的互动信号。
发布节奏:
posts_per_week = total_posts / (date_range_days / 7)
best_day = day_of_week with highest avg engagement
best_hour = hour_of_day with highest avg engagement (use post `timestamp`)

Step 4: Edge Cases

步骤4:边缘情况

  • Competitor has very few posts (< 20): Report available data; note low sample size; extend to 180-day window
  • Engagement rate << 1%: Account may have bot followers or inactive audience; note this as "audience quality concern"
  • All posts are product/promo: This competitor is over-indexed on promotional content — opportunity for content that educates or entertains
  • Carousel shows as single image: Some scrapers return first image only; note when
    type = CAROUSEL
    for accurate content type count
  • 竞争对手帖子极少(<20条):报告现有数据;注明样本量不足;可将时间窗口扩展至180天
  • 互动率远低于1%:该账号可能存在机器人粉丝或不活跃受众;需注明这是“受众质量问题”
  • 所有帖子均为产品/促销内容:该竞争对手过度侧重促销内容 — 这是创作教育或娱乐类内容的机会
  • 轮播帖显示为单张图片:部分爬虫仅返回第一张图片;需标注
    type = CAROUSEL
    以确保内容类型统计准确

Output Format

输出格式

undefined
undefined

Competitor Instagram Strategy: @[COMPETITOR_HANDLE]

Competitor Instagram Strategy: @[COMPETITOR_HANDLE]

Posts analyzed: [N] | Followers: [N] | Overall Eng Rate: [X%] | Date: [DATE]
Posts analyzed: [N] | Followers: [N] | Overall Eng Rate: [X%] | Date: [DATE]

Content Mix

Content Mix

Type% of PostsAvg Eng RateBest Post Example
Product[X%][X%][post excerpt]
Lifestyle[X%][X%]
Educational[X%][X%]
Type% of PostsAvg Eng RateBest Post Example
Product[X%][X%][post excerpt]
Lifestyle[X%][X%]
Educational[X%][X%]

Format Distribution

Format Distribution

Images: [X%] | Carousels: [X%] | Videos/Reels: [X%] Best format by engagement: [FORMAT] ([X%] eng rate)
Images: [X%] | Carousels: [X%] | Videos/Reels: [X%] Best format by engagement: [FORMAT] ([X%] eng rate)

Top 5 Posts (by Engagement)

Top 5 Posts (by Engagement)

#TypeFormatLikesCommentsEng RateCaption Preview
#TypeFormatLikesCommentsEng RateCaption Preview

Posting Cadence

Posting Cadence

Frequency: [X] posts/week | Best day: [Day] | Best hour: [HH:00]
Frequency: [X] posts/week | Best day: [Day] | Best hour: [HH:00]

Key Observations

Key Observations

  1. [Pattern observation — e.g. "Carousel educational posts get 2× engagement of product posts"]
  2. [Observation]
  3. [Opportunity gap]
undefined
  1. [Pattern observation — e.g. "Carousel educational posts get 2× engagement of product posts"]
  2. [Observation]
  3. [Opportunity gap]
undefined

Troubleshooting

故障排除

Scraper returns only recent 12 posts: Instagram limits API access to recent posts. For 50-post analysis, run scraper and note actual count returned. Engagement rate seems wrong: Verify
follower_count
is current — scraper may return the follower count at time of scrape, which could differ from post-date count for historical posts. Competitor has very high engagement: Distinguish between genuine engagement and pods/bought engagement — genuine engagement shows variety in commenters; pod engagement shows the same accounts commenting repeatedly.
爬虫仅返回最近12条帖子:Instagram限制了API对近期帖子的访问权限。若要分析50条帖子,运行爬虫并记录实际返回的数量。 互动率看起来有误:验证
follower_count
是否为最新数据 — 爬虫返回的可能是爬取时的粉丝数,对于历史帖子,该数据可能与发布时的粉丝数不同。 竞争对手互动率极高:区分真实互动与互助群组/购买的互动 — 真实互动的评论者具有多样性;互助群组的互动则会出现相同账号反复评论的情况。