← All skills
Tencent SkillHub Β· Developer Tools

Automated TikTok & Instagram Trend Radar

Automates real-time TikTok and Instagram scraping, detects hashtag surges, and uses AI to generate trend-based scripts, videos, and hashtag alerts.

skill openclawclawhub Free
0 Downloads
0 Stars
0 Installs
0 Score
High Signal

Automates real-time TikTok and Instagram scraping, detects hashtag surges, and uses AI to generate trend-based scripts, videos, and hashtag alerts.

⬇ 0 downloads β˜… 0 stars Unverified but indexed

Install for OpenClaw

Known item issue.

This item's current download entry is known to bounce back to a listing or homepage instead of returning a package file.

Quick setup
  1. Open the source page and confirm the package flow manually.
  2. Review SKILL.md if you can obtain the files.
  3. Treat this source as manual setup until the download is verified.

Requirements

Target platform
OpenClaw
Install method
Manual import
Extraction
Extract archive
Prerequisites
OpenClaw
Primary doc
SKILL.md

Package facts

Download mode
Manual review
Package format
ZIP package
Source platform
Tencent SkillHub
What's included
SKILL.md

Validation

  • Open the source listing and confirm there is a real package or setup artifact available.
  • Review SKILL.md before asking your agent to continue.
  • Treat this source as manual setup until the upstream download flow is fixed.

Install with your agent

Agent handoff

Use the source page and any available docs to guide the install because the item currently does not return a direct package file.

  1. Open the source page via Open source listing.
  2. If you can obtain the package, extract it into a folder your agent can access.
  3. Paste one of the prompts below and point your agent at the source page and extracted files.
New install

I tried to install a skill package from Yavira, but the item currently does not return a direct package file. Inspect the source page and any extracted docs, then tell me what you can confirm and any manual steps still required.

Upgrade existing

I tried to upgrade a skill package from Yavira, but the item currently does not return a direct package file. Compare the source page and any extracted docs with my current installation, then summarize what changed and what manual follow-up I still need.

Trust & source

Release facts

Source
Tencent SkillHub
Verification
Indexed source record
Version
1.0.0

Documentation

ClawHub primary doc Primary doc: SKILL.md 18 sections Open source page

Overview

This skill builds a fully automated trend monitoring pipeline that: Scrapes TikTok and Instagram in real-time using Apify Sends trend data into Claude (via OpenClaw) for AI analysis Automatically generates content ideas, video scripts, and hashtag explosion alerts Produces ready-to-publish short videos via InVideo AI The result: you know what's trending before everyone else β€” and you already have the content ready. πŸ”— Apify: https://www.apify.com/?fpr=dx06p πŸ”— InVideo: https://invideo.sjv.io/TBB

What This Skill Does

Scrape TikTok hashtags, sounds, and viral posts every few hours via Apify Scrape Instagram Reels and trending hashtags in parallel Detect hashtag explosions β€” sudden spikes in post volume or engagement Send raw trend data to Claude for instant AI-powered analysis Auto-generate content ideas, angles, and hooks based on detected trends Write complete video scripts tailored to the trending topic Produce the video automatically via InVideo AI Alert via webhook, Slack, or email when a trend is breaking

Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ TREND RADAR PIPELINE β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Apify │───▢│ Trend │───▢│ Claude / OpenClaw β”‚ β”‚ β”‚ β”‚ Scraper β”‚ β”‚ Detector β”‚ β”‚ AI Analysis Engine β”‚ β”‚ β”‚ β”‚TikTok + β”‚ β”‚(spike β”‚ β”‚ β”‚ β”‚ β”‚ β”‚Instagram β”‚ β”‚detection)β”‚ β”‚ β€’ Content ideas β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β€’ Script generation β”‚ β”‚ β”‚ β”‚ β€’ Hashtag insights β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ InVideo AI β”‚ β”‚ β”‚ β”‚ Auto Video Production β”‚ β”‚ β”‚ β”‚ (script β†’ MP4 in minutes) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ ALERTS & OUTPUT β”‚ β”‚ β”‚ β”‚ Slack / Email / Webhook / CMS β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Apify

Sign up at https://www.apify.com/?fpr=dx06p Go to Settings β†’ Integrations Copy your token: export APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx

InVideo

Sign up at https://invideo.sjv.io/TBB Go to Settings β†’ API / Developer Settings Copy your key: export INVIDEO_API_KEY=iv_api_xxxxxxxxxxxxxxxx

OpenClaw / Claude API

Get your Claude API key from your OpenClaw or Anthropic account Store it: export CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxxxxx

Step 2 β€” Install Dependencies

npm install apify-client axios node-cron

Module 1 β€” Scrape TikTok & Instagram Trends

import ApifyClient from 'apify-client'; const apify = new ApifyClient({ token: process.env.APIFY_TOKEN }); // Define hashtags to monitor const WATCHED_HASHTAGS = [ "viral", "trending", "fyp", "lifehack", "productivity", "ai", "money", "fitness" ]; async function scrapeTikTokTrends() { const run = await apify.actor("apify/tiktok-hashtag-scraper").call({ hashtags: WATCHED_HASHTAGS, resultsPerPage: 50, shouldDownloadVideos: false }); const { items } = await run.dataset().getData(); return items.map(item => ({ platform: "tiktok", hashtag: item.hashtag, postCount: item.viewCount, likes: item.diggCount, shares: item.shareCount, comments: item.commentCount, description: item.text, author: item.authorMeta?.name, createdAt: item.createTime, url: item.webVideoUrl })); } async function scrapeInstagramTrends() { const run = await apify.actor("apify/instagram-hashtag-scraper").call({ hashtags: WATCHED_HASHTAGS, resultsLimit: 50 }); const { items } = await run.dataset().getData(); return items.map(item => ({ platform: "instagram", hashtag: item.hashtags?.[0] || "unknown", likes: item.likesCount, comments: item.commentsCount, description: item.caption, author: item.ownerUsername, createdAt: item.timestamp, url: item.url })); } async function scrapeAllPlatforms() { const [tiktok, instagram] = await Promise.all([ scrapeTikTokTrends(), scrapeInstagramTrends() ]); return [...tiktok, ...instagram]; }

Module 2 β€” Hashtag Explosion Detector

// In-memory baseline (use a database like Redis for production) const baseline = {}; function detectExplosions(currentData) { const alerts = []; // Group by hashtag and calculate engagement scores const grouped = currentData.reduce((acc, post) => { if (!acc[post.hashtag]) acc[post.hashtag] = { posts: 0, totalLikes: 0, platforms: new Set() }; acc[post.hashtag].posts++; acc[post.hashtag].totalLikes += post.likes || 0; acc[post.hashtag].platforms.add(post.platform); return acc; }, {}); for (const [hashtag, stats] of Object.entries(grouped)) { const prev = baseline[hashtag] || { posts: 0, totalLikes: 0 }; const growthRate = prev.posts > 0 ? ((stats.posts - prev.posts) / prev.posts) * 100 : 100; // Alert if posts grew more than 40% since last check if (growthRate > 40) { alerts.push({ hashtag, growthRate: Math.round(growthRate), currentPosts: stats.posts, previousPosts: prev.posts, totalLikes: stats.totalLikes, platforms: [...stats.platforms], detectedAt: new Date().toISOString(), severity: growthRate > 100 ? "EXPLOSIVE" : "RISING" }); } // Update baseline baseline[hashtag] = stats; } return alerts.sort((a, b) => b.growthRate - a.growthRate); }

Module 3 β€” AI Analysis with Claude (OpenClaw)

import axios from 'axios'; async function analyzeWithClaude(trendData, explosionAlerts) { const prompt = ` You are a viral content strategist. Analyze these trending social media data and provide actionable output. ## TRENDING DATA (last scrape) ${JSON.stringify(trendData.slice(0, 20), null, 2)} ## EXPLOSION ALERTS ${JSON.stringify(explosionAlerts, null, 2)} Respond ONLY in this exact JSON format, no preamble: { "topTrends": [ { "hashtag": "#example", "whyItsTrending": "brief explanation", "targetAudience": "who this appeals to", "contentAngle": "unique angle to take on this trend" } ], "contentIdeas": [ { "title": "video title idea", "hashtag": "#hashtag", "hook": "first 3 seconds script", "format": "tutorial | reaction | storytime | list | pov", "estimatedViralPotential": "high | medium | low", "reasoning": "why this would perform well" } ], "urgentAlerts": [ { "hashtag": "#hashtag", "message": "alert message", "recommendedAction": "what to do right now", "windowOfOpportunity": "estimated hours before trend peaks" } ], "bestTimeToPost": "recommendation based on trend timing" } `; const response = await axios.post( 'https://api.anthropic.com/v1/messages', { model: "claude-opus-4-5", max_tokens: 2000, messages: [{ role: "user", content: prompt }] }, { headers: { 'x-api-key': process.env.CLAUDE_API_KEY, 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json' } } ); const raw = response.data.content[0].text; const clean = raw.replace(/```json|```/g, '').trim(); return JSON.parse(clean); }

Module 4 β€” Auto Script Generation

  • async function generateVideoScript(contentIdea, trendContext) {
  • const prompt = `
  • Write a complete short-form video script for this content idea.
  • CONTENT IDEA: ${JSON.stringify(contentIdea)}
  • TREND CONTEXT: ${trendContext}
  • Respond ONLY in this JSON format:
  • {
  • "title": "video title",
  • "duration": "estimated seconds",
  • "hook": "opening line β€” first 3 seconds",
  • "fullScript": "complete word-for-word script",
  • "captions": ["caption 1", "caption 2", "..."],
  • "hashtags": ["#tag1", "#tag2", "#tag3"],
  • "cta": "call to action at the end",
  • "thumbnailIdea": "description of ideal thumbnail"
  • }
  • Rules:
  • Hook must create curiosity or shock in under 4 seconds
  • Script must be 120–180 words for a 30–45 second video
  • Conversational, energetic tone
  • End with a strong CTA (follow, comment, share)
  • `;
  • const response = await axios.post(
  • 'https://api.anthropic.com/v1/messages',
  • {
  • model: "claude-opus-4-5",
  • max_tokens: 1000,
  • messages: [{ role: "user", content: prompt }]
  • },
  • {
  • headers: {
  • 'x-api-key': process.env.CLAUDE_API_KEY,
  • 'anthropic-version': '2023-06-01',
  • 'Content-Type': 'application/json'
  • }
  • }
  • );
  • const raw = response.data.content[0].text;
  • return JSON.parse(raw.replace(/```json|```/g, '').trim());
  • }

Module 5 β€” Auto Video Production with InVideo

const invideo = axios.create({ baseURL: 'https://api.invideo.io/v1', headers: { Authorization: `Bearer ${process.env.INVIDEO_API_KEY}` } }); async function produceVideo(script) { // Start generation const { data } = await invideo.post('/videos/generate', { script: script.fullScript, format: "9:16", duration: "short", style: "dynamic", voiceover: { enabled: true, voice: "en-US-female-1", speed: 1.1 }, captions: { enabled: true, style: "bold-bottom", highlight: true }, music: { enabled: true, mood: "upbeat", volume: 0.25 }, cta: { enabled: true, text: script.cta, position: "bottom" } }); const videoId = data.videoId; // Poll until ready let exportUrl = null; while (!exportUrl) { await new Promise(r => setTimeout(r, 6000)); const status = await invideo.get(`/videos/${videoId}/status`); if (status.data.state === "completed") exportUrl = status.data.exportUrl; if (status.data.state === "failed") throw new Error("Video generation failed"); console.log(` Video progress: ${status.data.progress}%`); } return { videoId, exportUrl, script }; }

Module 6 β€” Alerts & Notifications

async function sendAlert(alert, analysis) { const payload = { text: `🚨 *TREND ALERT: ${alert.hashtag}* β€” ${alert.severity}`, blocks: [ { type: "section", text: { type: "mrkdwn", text: `*πŸ“ˆ ${alert.hashtag}* grew *${alert.growthRate}%* in the last check\n` + `Platforms: ${alert.platforms.join(', ')}\n` + `Window: ${analysis.urgentAlerts?.[0]?.windowOfOpportunity || 'Act now'}` } }, { type: "section", text: { type: "mrkdwn", text: `*πŸ’‘ Recommended action:*\n${analysis.urgentAlerts?.[0]?.recommendedAction || 'Create content immediately'}` } } ] }; // Send to Slack webhook if (process.env.SLACK_WEBHOOK_URL) { await axios.post(process.env.SLACK_WEBHOOK_URL, payload); } // Or send to any custom webhook if (process.env.ALERT_WEBHOOK_URL) { await axios.post(process.env.ALERT_WEBHOOK_URL, { type: "trend_explosion", alert, analysis, timestamp: new Date().toISOString() }); } }

Main Orchestrator β€” Full Pipeline

import cron from 'node-cron'; async function runTrendRadar() { console.log(`\nπŸ” Trend Radar scan started at ${new Date().toISOString()}`); try { // 1 β€” Scrape all platforms console.log(" [1/5] Scraping TikTok & Instagram..."); const trendData = await scrapeAllPlatforms(); console.log(` βœ… ${trendData.length} posts collected`); // 2 β€” Detect explosions console.log(" [2/5] Detecting explosions..."); const alerts = detectExplosions(trendData); console.log(` βœ… ${alerts.length} alerts detected`); // 3 β€” AI analysis console.log(" [3/5] Analyzing with Claude..."); const analysis = await analyzeWithClaude(trendData, alerts); console.log(` βœ… ${analysis.contentIdeas?.length} content ideas generated`); // 4 β€” Auto-generate scripts for top 2 ideas console.log(" [4/5] Generating video scripts..."); const topIdeas = analysis.contentIdeas?.slice(0, 2) || []; const scripts = await Promise.all( topIdeas.map(idea => generateVideoScript(idea, JSON.stringify(analysis.topTrends))) ); console.log(` βœ… ${scripts.length} scripts written`); // 5 β€” Produce videos console.log(" [5/5] Producing videos with InVideo..."); const videos = await Promise.all(scripts.map(produceVideo)); console.log(` βœ… ${videos.length} videos ready`); // 6 β€” Send alerts if (alerts.length > 0) { await sendAlert(alerts[0], analysis); console.log(" βœ… Alerts sent"); } // Final report return { scannedAt: new Date().toISOString(), postsAnalyzed: trendData.length, explosionAlerts: alerts, contentIdeas: analysis.contentIdeas, videos: videos.map(v => ({ title: v.script.title, url: v.exportUrl })), bestTimeToPost: analysis.bestTimeToPost }; } catch (err) { console.error("Radar error:", err.message); throw err; } } // Schedule: run every 4 hours automatically cron.schedule('0 */4 * * *', () => { runTrendRadar().then(report => { console.log("\nπŸ“Š RADAR REPORT:", JSON.stringify(report, null, 2)); }); }); // Also run immediately on startup runTrendRadar();

Environment Variables

# .env APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx INVIDEO_API_KEY=iv_api_xxxxxxxxxxxxxxxx CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxxxxx # Optional alerts SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx/xxx/xxx ALERT_WEBHOOK_URL=https://your-app.com/webhooks/trends

Normalized Radar Report Schema

{ "scannedAt": "2025-02-25T10:00:00Z", "postsAnalyzed": 400, "explosionAlerts": [ { "hashtag": "#aitools", "severity": "EXPLOSIVE", "growthRate": 187, "platforms": ["tiktok", "instagram"], "windowOfOpportunity": "4–8 hours" } ], "contentIdeas": [ { "title": "5 AI tools that replaced my entire team", "hashtag": "#aitools", "hook": "I fired my team. Here's what I replaced them with.", "format": "list", "estimatedViralPotential": "high" } ], "videos": [ { "title": "5 AI tools that replaced my entire team", "url": "https://cdn.invideo.io/exports/iv_xxx.mp4" } ], "bestTimeToPost": "Post within the next 3 hours while the trend is rising" }

Best Practices

Run the radar every 2–4 hours β€” trends peak fast and fade within 24–48h Monitor 8–15 hashtags max per run to stay within Apify free tier Always produce content within the rising phase β€” never wait for the peak Use node-cron for local scheduling or Apify Schedules for cloud automation Store baseline data in Redis or a database for accurate spike detection in production Pipe the video URLs directly into your social media scheduler (Buffer, Later, etc.)

Requirements

Apify account β†’ https://www.apify.com/?fpr=dx06p InVideo account β†’ https://invideo.sjv.io/TBB Claude / OpenClaw API key Node.js 18+ Optional: Slack workspace for real-time alerts Optional: Social media scheduler (Buffer, Later) for auto-publishing

Category context

Code helpers, APIs, CLIs, browser automation, testing, and developer operations.

Source: Tencent SkillHub

Largest current source with strong distribution and engagement signals.

Package contents

Included in package
1 Docs
  • SKILL.md Primary doc