monitoring-instagram-brand-mentions

Monitors Instagram for brand mentions and tagged posts using apidojo's Instagram scraper on Apify. Triggers when the user asks to: track Instagram mentions of a brand or product, m…

API Dojo

@apidojo-io

Install

$ openclaw skills install @apidojo-io/monitoring-instagram-brand-mentions

Monitoring Instagram Brand Mentions

Tracks all public Instagram posts mentioning a brand — via branded hashtags, @mentions, or product name keywords. Classifies mentions by sentiment and type (UGC, complaint, press coverage, competitor comparison).

Prerequisites

  • APIFY_TOKEN environment variable set
  • Optional: Apify MCP server installed

Inputs

ParameterTypeRequiredDefaultNotes
startUrlsarray[]Instagram URLs — profiles, hashtags, locations, audio pages, reels
untilstringOptionalScrape posts until this date (YYYY-MM-DD)
maxItemsnumberOptionalUnlimitedMaximum posts to return
customMapFunctionstringOptionalJavaScript function to transform each output object

Workflow

Progress:
- [ ] Step 1: Build hashtag and keyword list
- [ ] Step 2: Run instagram-scraper for each hashtag
- [ ] Step 3: Classify mention type and sentiment
- [ ] Step 4: Identify top advocates and critics
- [ ] Step 5: Deliver brand health report

Step 1 & 2: Run instagram-scraper

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_TOKEN must be set in environment or .env file.

If Apify MCP is available:

Tool: apify:run-actor
Actor: "apidojo~instagram-scraper"
Input:
{
  "keywords": ["#[BRAND]", "#[BRAND]review", "#[BRAND]community"],
  "maxItems": 100
}

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 '{"keywords": ["#[brand]", "#[brand]review"], "maxItems": 100}'

Run for each hashtag cluster. Merge results and deduplicate by postUrl.

Step 2: Classify Mentions

Mention type:

UGC = post contains product photo + brand mention; author is not verified
COMPLAINT = caption contains negative indicators: "broken", "disappointed", "scam", "refund", "terrible", "never again"
POSITIVE_REVIEW = caption contains: "love", "amazing", "best", "recommend", "obsessed"
PRESS/EDITORIAL = author is verified OR follower_count > 100K
COMPETITOR_COMPARISON = caption mentions competitor brand alongside this brand

Sentiment: Apply same lexical classification as Twitter sentiment skill (positive/negative/neutral indicators).

Step 3: Score Reach

mention_reach = likes + comments * 5 + (followers_of_author / 100)

Step 4: Edge Cases

  • Official brand account's own posts in results: Drop posts where ownerUsername = brand's own handle
  • Hashtag is overloaded (> 1M posts): Use long-tail branded hashtags instead; or filter by date
  • Sentiment misclassified for complex posts: Flag posts with both positive and negative indicators as MIXED; report count
  • Foreign language mentions dominant: Report language distribution; flag non-English mentions separately

Output Format

# Instagram Brand Mention Monitor: [BRAND]
Posts collected: [N] | Period: [DATE_RANGE] | Date: [DATE]

## Mention Type Distribution
UGC: [N] | Positive Reviews: [N] | Complaints: [N] | Press: [N] | Comparisons: [N]

## Sentiment Summary
Positive: [X%] | Negative: [X%] | Neutral: [X%]
Weighted by reach: Positive [X%] | Negative [X%]

## Top UGC Posts (Most Liked)
| Creator | @Handle | Likes | Type | Caption Excerpt | Post URL |
|---------|---------|-------|------|----------------|---------|

## Complaints to Address
| Creator | Likes | Complaint Summary | Post URL |
|---------|-------|------------------|---------|

## Top Brand Advocates (Most Frequent Positive Posters)
1. @[handle] — [N] positive posts | [N] avg likes

Troubleshooting

Hashtag returns generic posts: The brand hashtag may be ambiguous (e.g. "#apple"). Use #[brand]official or #[brand][product] for precision. Mostly competitor posts: This may indicate your brand is being used in comparison posts — analyze COMPETITOR_COMPARISON category for positioning insights. Sentiment skewed by a single viral negative post: Check weighted sentiment vs. raw sentiment; one viral post can shift the raw numbers.

Top skills in this category