Install
openclaw skills install @apidojo-io/analyzing-competitor-instagram-content-strategyAnalyzes a competitor's Instagram content strategy and performance using apidojo's Instagram scraper on Apify. Triggers when the user asks to: analyze what a competitor posts on Instagram, benchmark a competitor's Instagram engagement, see what content types perform best for a competitor on Instagram, reverse-engineer a competitor's Instagram content calendar, identify content gaps vs. a competitor on Instagram, compare posting frequency or content themes, or understand why a competitor's Instagram is growing. Returns post frequency, content type mix, top-performing posts, hashtag strategy, and engagement benchmarks. Ideal for social media managers, brand strategists, and content marketing teams.
openclaw skills install @apidojo-io/analyzing-competitor-instagram-content-strategyReverse-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.
APIFY_TOKEN environment variable set| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | ✅ | [] | Instagram URLs — profiles, hashtags, locations, audio pages, reels |
until | string | Optional | — | Scrape posts until this date (YYYY-MM-DD) |
maxItems | number | Optional | Unlimited | Maximum posts to return |
customMapFunction | string | Optional | — | JavaScript function to transform each output object |
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
Recommended — run_actor.js (handles waiting, output, and file saving automatically):
# Quick answer (prints table to chat)
node scripts/run_actor.js \
--actor "apidojo~instagram-scraper" \
--input '{"param": "value"}'
# Save as CSV
node scripts/run_actor.js \
--actor "apidojo~instagram-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# Save as JSON
node scripts/run_actor.js \
--actor "apidojo~instagram-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.json --format json
APIFY_TOKENmust be set in environment or.envfile.
If Apify MCP is available:
Tool: apify:run-actor
Actor: "apidojo~instagram-scraper"
Input:
{
"usernames": ["[COMPETITOR_HANDLE]"],
"maxItems": 50
}
REST API fallback:
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}'
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
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`)
type = CAROUSEL for accurate content type count# Competitor Instagram Strategy: @[COMPETITOR_HANDLE]
Posts analyzed: [N] | Followers: [N] | Overall Eng Rate: [X%] | Date: [DATE]
## Content Mix
| Type | % of Posts | Avg Eng Rate | Best Post Example |
|------|-----------|-------------|------------------|
| Product | [X%] | [X%] | [post excerpt] |
| Lifestyle | [X%] | [X%] | |
| Educational | [X%] | [X%] | |
## Format Distribution
Images: [X%] | Carousels: [X%] | Videos/Reels: [X%]
Best format by engagement: [FORMAT] ([X%] eng rate)
## Top 5 Posts (by Engagement)
| # | Type | Format | Likes | Comments | Eng Rate | Caption Preview |
|---|------|--------|-------|----------|----------|----------------|
## Posting Cadence
Frequency: [X] posts/week | Best day: [Day] | Best hour: [HH:00]
## Key Observations
1. [Pattern observation — e.g. "Carousel educational posts get 2× engagement of product posts"]
2. [Observation]
3. [Opportunity gap]
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.