Daily Competitor Monitor — N8N Workflow Design

Purpose

Automated daily scraping of competitor social content → content angle suggestions → Telegram notification → Steven reviews → feeds into /social-media-content.

Output Location

outputs/research/competitor-monitor-[YYYY-MM-DD].md per client folder

Trigger

Cron: 0 8 * * * (daily 8am HK = 0am UTC)


Architecture

┌─────────────────────────────────────────────────────────────┐
│ CRON TRIGGER (daily 8am HK)                                 │
└─────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ READ CLIENT LIST                                            │
│ Source: Google Sheet "active-clients" OR hardcoded loop    │
│ Fields: client_slug, competitor_urls[], keywords[]          │
└─────────────────────────────────────────────────────────────┘
                        │
                        ▼ (loop over each client)
┌─────────────────────────────────────────────────────────────┐
│ FOR EACH CLIENT:                                            │
│   ├── Scrape competitor social URLs                         │
│   │   Tools: Apify IG scraper, FB posts scraper, etc.       │
│   │   Apify Actors already configured in MCP               │
│   └── Keyword search for new competitors                    │
│       Tools: Tavily search + filter social URLs             │
└─────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ EXTRACT CONTENT via Blotato MCP                             │
│   blotato_create_source with sourceType=url                 │
│   For each found post/video                                 │
│   Poll blotato_get_source_status until done                 │
└─────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ AI ANALYSIS (Claude Haiku via MCP or API)                   │
│   Prompt: "Given these competitor posts from today,         │
│    identify:                                                │
│    1. Top 3 trending angles                                 │
│    2. Hook patterns working                                 │
│    3. Content gaps this client can exploit                  │
│    4. 3 suggested post angles for tomorrow"                 │
└─────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ SAVE REPORT                                                 │
│ Path: /home/claude/projects/clients/{slug}/outputs/research │
│   /competitor-monitor-{YYYY-MM-DD}.md                       │
└─────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ TELEGRAM NOTIFY STEVEN                                      │
│ Chat: 8319718417                                            │
│ Message:                                                    │
│   📊 [Client X] 今日情報已 ready                           │
│   Top angle: [one line]                                     │
│   3條建議 post angles 已 log 好                            │
│   想出 posts?回覆 /social-media-content {client}          │
└─────────────────────────────────────────────────────────────┘

N8N Workflow Nodes

Required N8N Nodes

  1. Schedule Trigger (cron: daily 8am HK)
  2. HTTP Request — read client list from Google Sheet OR hardcoded
  3. Split In Batches — loop each client
  4. Apify Actors — scrape competitor IG/FB/LinkedIn posts
  5. HTTP Request — call Blotato MCP endpoint (authenticated)
  6. HTTP Request — poll Blotato source status
  7. HTTP Request — call Claude API for analysis (or via n8n-mcp)
  8. Write File — save report to local FS
  9. Telegram — send notification

Client List Schema (Google Sheet or JSON)

clients:
  - slug: winni-xxx
    competitor_urls:
      - https://instagram.com/competitor1
      - https://instagram.com/competitor2
    keywords:
      - fitness coach HK
      - personal trainer hong kong
    active: true
    tz: Asia/Hong_Kong

Skills Integration

After Steven gets the Telegram notification:

  1. Steven reads the daily report
  2. Steven sees angles he likes
  3. Steven runs /social-media-content [client]
  4. Skill reads:
    • outputs/strategy/strategy-[client]-v1.md (fixed)
    • context/social-pillars.md (fixed)
    • outputs/research/competitor-monitor-{today}.md (NEW — fresh daily data)
  5. Skill weaves today’s insights into the post batch

This is the closing of the loop: daily data → AI-curated → Steven decides → posts


Rollout Plan

Phase 0 — Manual Test (first week)

  • Run the flow manually for 1 client (e.g. Winni)
  • Validate Blotato create_source handles IG/FB URLs cleanly
  • Verify report format is useful

Phase 1 — N8N Deployment (week 2)

  • Build in n8n.remarkable-marketing.hk
  • Start with 1 client
  • Test for 3 days

Phase 2 — Scale (week 3+)

  • Add more clients to list
  • Add more platforms
  • Tune AI prompt based on learnings

Cost Estimate

Per client per day:

  • Apify scrapes: ~$0.05-0.10
  • Blotato create_source: included in subscription
  • Claude Haiku analysis: ~$0.01
  • Total: ~3/client/month

For 60 clients: ~$180/month


Risks & Mitigations

RiskMitigation
Apify scrape rate limitsStagger clients across cron hours, use batches
Competitor removes postsGracefully skip, don’t fail the whole flow
Blotato source extraction failsRetry 2x, log failure, don’t block other clients
Telegram spam (60 messages/day)Aggregate into 1 daily digest if >5 clients
Claude API cost creepCap prompt size, use Haiku not Opus

Not Yet Built

This is design only. To actually deploy:

  1. Create the N8N workflow (build in UI or via n8n-mcp)
  2. Set up client list (Google Sheet)
  3. Test Phase 0 manually first
  4. Then activate cron

Decision deferred until Steven tests the manual flow with /social-media-content + Blotato integration.