analyzing-competitor-instagram-content-strategy
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAnalyzing 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
前提条件
- environment variable set
APIFY_TOKEN - Optional: Apify MCP server installed
- 已设置环境变量
APIFY_TOKEN - 可选:已安装Apify MCP服务器
Inputs
输入参数
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
| array | ✅ | | Instagram URLs — profiles, hashtags, locations, audio pages, reels |
| string | Optional | — | Scrape posts until this date (YYYY-MM-DD) |
| number | Optional | Unlimited | Maximum posts to return |
| string | Optional | — | JavaScript function to transform each output object |
| 参数 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 数组 | ✅ | | Instagram链接 — 主页、话题标签、地点、音频页面、Reels |
| 字符串 | 可选 | — | 爬取截止日期(格式:YYYY-MM-DD) |
| 数字 | 可选 | 无限制 | 返回的最大帖子数量 |
| 字符串 | 可选 | — | 用于转换每个输出对象的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 reportProgress:
- [ ] 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 reportStep 1: Scrape Competitor Profile
步骤1:爬取竞争对手主页
Recommended — run_actor.js (handles waiting, output, and file saving automatically):
bash
undefined推荐方式 — 使用run_actor.js(自动处理等待、输出和文件保存):
bash
undefinedQuick answer (prints table to chat)
Quick answer (prints table to chat)
node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
node scripts/run_actor.js
--actor "apidojo~instagram-scraper"
--input '{"param": "value"}'
--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
--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
--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
--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
--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, processFormat: | |
IMAGEVIDEOCAROUSEL对每条帖子进行分类:
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格式: | |
IMAGEVIDEOCAROUSELStep 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 * 100Top performing post: highest — comments weighted higher as active signal.
(likes + comments * 3)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 for accurate content type count
type = CAROUSEL
- 竞争对手帖子极少(<20条):报告现有数据;注明样本量不足;可将时间窗口扩展至180天
- 互动率远低于1%:该账号可能存在机器人粉丝或不活跃受众;需注明这是“受众质量问题”
- 所有帖子均为产品/促销内容:该竞争对手过度侧重促销内容 — 这是创作教育或娱乐类内容的机会
- 轮播帖显示为单张图片:部分爬虫仅返回第一张图片;需标注以确保内容类型统计准确
type = CAROUSEL
Output Format
输出格式
undefinedundefinedCompetitor 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 Posts | Avg Eng Rate | Best Post Example |
|---|---|---|---|
| Product | [X%] | [X%] | [post excerpt] |
| Lifestyle | [X%] | [X%] | |
| Educational | [X%] | [X%] |
| Type | % of Posts | Avg Eng Rate | Best 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)
| # | Type | Format | Likes | Comments | Eng Rate | Caption Preview |
|---|
| # | Type | Format | Likes | Comments | Eng Rate | Caption 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
- [Pattern observation — e.g. "Carousel educational posts get 2× engagement of product posts"]
- [Observation]
- [Opportunity gap]
undefined- [Pattern observation — e.g. "Carousel educational posts get 2× engagement of product posts"]
- [Observation]
- [Opportunity gap]
undefinedTroubleshooting
故障排除
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 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.
follower_count爬虫仅返回最近12条帖子:Instagram限制了API对近期帖子的访问权限。若要分析50条帖子,运行爬虫并记录实际返回的数量。
互动率看起来有误:验证是否为最新数据 — 爬虫返回的可能是爬取时的粉丝数,对于历史帖子,该数据可能与发布时的粉丝数不同。
竞争对手互动率极高:区分真实互动与互助群组/购买的互动 — 真实互动的评论者具有多样性;互助群组的互动则会出现相同账号反复评论的情况。
follower_count