{
  "schemaVersion": "1.0",
  "item": {
    "slug": "social-media-extractor",
    "name": "Social Media Data Extractor",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/g4dr/social-media-extractor",
    "canonicalUrl": "https://clawhub.ai/g4dr/social-media-extractor",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/social-media-extractor",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=social-media-extractor",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/social-media-extractor"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/social-media-extractor",
    "agentPageUrl": "https://openagent3.xyz/skills/social-media-extractor/agent",
    "manifestUrl": "https://openagent3.xyz/skills/social-media-extractor/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/social-media-extractor/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "This skill enables Claude to extract public data from Instagram, TikTok, and Reddit\nfor trend analysis, content research, competitor monitoring, and audience insights —\npowered by the Apify platform.\n\n🔗 Sign up for Apify here: https://www.apify.com/?fpr=dx06p"
      },
      {
        "title": "What This Skill Does",
        "body": "Extract public posts, hashtags, and profiles from Instagram\nScrape trending videos, comments, and creator stats from TikTok\nPull posts, threads, comments, and subreddit data from Reddit\nAggregate data across platforms for unified trend analysis\nOutput structured JSON data ready for analysis, dashboards, or export"
      },
      {
        "title": "Step 1 — Get Your Apify API Token",
        "body": "Go to https://www.apify.com/?fpr=dx06p and create a free account\nOnce logged in, navigate to Settings → Integrations\n\nDirect link: https://console.apify.com/account/integrations\n\n\nCopy your Personal API Token — format: apify_api_xxxxxxxxxxxxxxxx\nStore it as an environment variable:\nexport APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx\n\nFree tier includes $5/month of free compute — enough for regular trend monitoring runs."
      },
      {
        "title": "Step 2 — Install the Apify Client",
        "body": "npm install apify-client"
      },
      {
        "title": "Instagram",
        "body": "Actor IDPurposeapify/instagram-scraperScrape posts, hashtags, profiles, reelsapify/instagram-hashtag-scraperExtract posts by hashtagapify/instagram-comment-scraperPull comments from a specific post"
      },
      {
        "title": "TikTok",
        "body": "Actor IDPurposeapify/tiktok-scraperScrape videos, profiles, hashtag feedsapify/tiktok-hashtag-scraperTrending content by hashtagapify/tiktok-comment-scraperComments from a specific video"
      },
      {
        "title": "Reddit",
        "body": "Actor IDPurposeapify/reddit-scraperPosts and comments from subredditsapify/reddit-search-scraperSearch Reddit by keyword"
      },
      {
        "title": "Extract Instagram Posts by Hashtag",
        "body": "import ApifyClient from 'apify-client';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\nconst run = await client.actor(\"apify/instagram-hashtag-scraper\").call({\n  hashtags: [\"trending\", \"viral\", \"fyp\"],\n  resultsLimit: 50\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { id, shortCode, caption, likesCount, commentsCount,\n//   timestamp, ownerUsername, url, hashtags[] }\n\nconsole.log(`Extracted ${items.length} posts`);"
      },
      {
        "title": "Extract TikTok Trending Videos by Hashtag",
        "body": "const run = await client.actor(\"apify/tiktok-hashtag-scraper\").call({\n  hashtags: [\"trending\", \"lifehack\"],\n  resultsPerPage: 30,\n  shouldDownloadVideos: false\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { id, text, createTime, authorMeta, musicMeta,\n//   diggCount, shareCount, playCount, commentCount }"
      },
      {
        "title": "Scrape a Subreddit for Trend Analysis",
        "body": "const run = await client.actor(\"apify/reddit-scraper\").call({\n  startUrls: [\n    { url: \"https://www.reddit.com/r/technology/\" },\n    { url: \"https://www.reddit.com/r/worldnews/\" }\n  ],\n  maxPostCount: 100,\n  maxComments: 20,\n  sort: \"hot\"\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { title, score, upvoteRatio, numComments, author,\n//   created, url, selftext, subreddit, comments[] }"
      },
      {
        "title": "Multi-Platform Trend Aggregation",
        "body": "const [igRun, ttRun, rdRun] = await Promise.all([\n  client.actor(\"apify/instagram-hashtag-scraper\").call({\n    hashtags: [\"aitools\"], resultsLimit: 30\n  }),\n  client.actor(\"apify/tiktok-hashtag-scraper\").call({\n    hashtags: [\"aitools\"], resultsPerPage: 30\n  }),\n  client.actor(\"apify/reddit-search-scraper\").call({\n    queries: [\"AI tools 2025\"], maxItems: 30\n  })\n]);\n\nconst [igData, ttData, rdData] = await Promise.all([\n  igRun.dataset().getData(),\n  ttRun.dataset().getData(),\n  rdRun.dataset().getData()\n]);\n\nconst aggregated = {\n  instagram: igData.items,\n  tiktok: ttData.items,\n  reddit: rdData.items,\n  totalPosts: igData.items.length + ttData.items.length + rdData.items.length,\n  extractedAt: new Date().toISOString()\n};"
      },
      {
        "title": "Using the REST API Directly",
        "body": "const response = await fetch(\n  \"https://api.apify.com/v2/acts/apify~tiktok-scraper/runs\",\n  {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"Authorization\": `Bearer ${process.env.APIFY_TOKEN}`\n    },\n    body: JSON.stringify({\n      hashtags: [\"viral\"],\n      resultsPerPage: 25\n    })\n  }\n);\n\nconst { data } = await response.json();\nconst runId = data.id;\n\n// Poll for completion\nconst resultRes = await fetch(\n  `https://api.apify.com/v2/actor-runs/${runId}/dataset/items`,\n  { headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}` } }\n);\n\nconst posts = await resultRes.json();"
      },
      {
        "title": "Trend Analysis Workflow",
        "body": "When asked to analyze trends, Claude will:\n\nIdentify the target platform(s) and keywords/hashtags\nRun the appropriate Apify actor(s) in parallel when multi-platform\nCollect all posts with engagement metrics (likes, views, comments, shares)\nSort & rank content by engagement rate or volume\nIdentify patterns — recurring hashtags, peak posting times, top creators\nReturn a structured report with top trends, key metrics, and actionable insights"
      },
      {
        "title": "Output Data Structure (Normalized)",
        "body": "{\n  \"platform\": \"tiktok\",\n  \"id\": \"7302938471029384\",\n  \"text\": \"This AI tool is insane #aitools #viral\",\n  \"author\": \"techreviewer99\",\n  \"engagement\": {\n    \"likes\": 142300,\n    \"comments\": 4820,\n    \"shares\": 9100,\n    \"views\": 2300000\n  },\n  \"hashtags\": [\"aitools\", \"viral\"],\n  \"publishedAt\": \"2025-02-18T14:32:00Z\",\n  \"url\": \"https://www.tiktok.com/@techreviewer99/video/7302938471029384\"\n}"
      },
      {
        "title": "Best Practices",
        "body": "Always scrape only public content — never attempt to access private profiles\nSet reasonable resultsLimit values (50–200) to stay within your Apify quota\nFor recurring analysis, schedule actor runs using Apify Schedules in the console\nStore results in Apify Datasets for persistent access and historical comparison\nUse sort: \"hot\" on Reddit and trending endpoints on TikTok for most relevant data\nAdd a proxyConfiguration block when scraping at scale to avoid rate limits:\nproxyConfiguration: { useApifyProxy: true, apifyProxyGroups: [\"RESIDENTIAL\"] }"
      },
      {
        "title": "Error Handling",
        "body": "try {\n  const run = await client.actor(\"apify/tiktok-scraper\").call(input);\n  const dataset = await run.dataset().getData();\n  return dataset.items;\n} catch (error) {\n  if (error.statusCode === 401) throw new Error(\"Invalid Apify token\");\n  if (error.statusCode === 429) throw new Error(\"Rate limit hit — reduce request frequency\");\n  if (error.message.includes(\"timeout\")) throw new Error(\"Actor timed out — try a smaller batch\");\n  throw error;\n}"
      },
      {
        "title": "Requirements",
        "body": "An Apify account → https://www.apify.com/?fpr=dx06p\nA valid Personal API Token from Settings → Integrations\nNode.js 18+ for the apify-client package\nNo platform API keys required — Apify handles all platform access"
      }
    ],
    "body": "Social Media Data Extraction Skill\nOverview\n\nThis skill enables Claude to extract public data from Instagram, TikTok, and Reddit for trend analysis, content research, competitor monitoring, and audience insights — powered by the Apify platform.\n\n🔗 Sign up for Apify here: https://www.apify.com/?fpr=dx06p\n\nWhat This Skill Does\nExtract public posts, hashtags, and profiles from Instagram\nScrape trending videos, comments, and creator stats from TikTok\nPull posts, threads, comments, and subreddit data from Reddit\nAggregate data across platforms for unified trend analysis\nOutput structured JSON data ready for analysis, dashboards, or export\nStep 1 — Get Your Apify API Token\nGo to https://www.apify.com/?fpr=dx06p and create a free account\nOnce logged in, navigate to Settings → Integrations\nDirect link: https://console.apify.com/account/integrations\nCopy your Personal API Token — format: apify_api_xxxxxxxxxxxxxxxx\nStore it as an environment variable:\nexport APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx\n\n\nFree tier includes $5/month of free compute — enough for regular trend monitoring runs.\n\nStep 2 — Install the Apify Client\nnpm install apify-client\n\nDedicated Actors by Platform\nInstagram\nActor ID\tPurpose\napify/instagram-scraper\tScrape posts, hashtags, profiles, reels\napify/instagram-hashtag-scraper\tExtract posts by hashtag\napify/instagram-comment-scraper\tPull comments from a specific post\nTikTok\nActor ID\tPurpose\napify/tiktok-scraper\tScrape videos, profiles, hashtag feeds\napify/tiktok-hashtag-scraper\tTrending content by hashtag\napify/tiktok-comment-scraper\tComments from a specific video\nReddit\nActor ID\tPurpose\napify/reddit-scraper\tPosts and comments from subreddits\napify/reddit-search-scraper\tSearch Reddit by keyword\nExamples\nExtract Instagram Posts by Hashtag\nimport ApifyClient from 'apify-client';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\nconst run = await client.actor(\"apify/instagram-hashtag-scraper\").call({\n  hashtags: [\"trending\", \"viral\", \"fyp\"],\n  resultsLimit: 50\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { id, shortCode, caption, likesCount, commentsCount,\n//   timestamp, ownerUsername, url, hashtags[] }\n\nconsole.log(`Extracted ${items.length} posts`);\n\nExtract TikTok Trending Videos by Hashtag\nconst run = await client.actor(\"apify/tiktok-hashtag-scraper\").call({\n  hashtags: [\"trending\", \"lifehack\"],\n  resultsPerPage: 30,\n  shouldDownloadVideos: false\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { id, text, createTime, authorMeta, musicMeta,\n//   diggCount, shareCount, playCount, commentCount }\n\nScrape a Subreddit for Trend Analysis\nconst run = await client.actor(\"apify/reddit-scraper\").call({\n  startUrls: [\n    { url: \"https://www.reddit.com/r/technology/\" },\n    { url: \"https://www.reddit.com/r/worldnews/\" }\n  ],\n  maxPostCount: 100,\n  maxComments: 20,\n  sort: \"hot\"\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { title, score, upvoteRatio, numComments, author,\n//   created, url, selftext, subreddit, comments[] }\n\nMulti-Platform Trend Aggregation\nconst [igRun, ttRun, rdRun] = await Promise.all([\n  client.actor(\"apify/instagram-hashtag-scraper\").call({\n    hashtags: [\"aitools\"], resultsLimit: 30\n  }),\n  client.actor(\"apify/tiktok-hashtag-scraper\").call({\n    hashtags: [\"aitools\"], resultsPerPage: 30\n  }),\n  client.actor(\"apify/reddit-search-scraper\").call({\n    queries: [\"AI tools 2025\"], maxItems: 30\n  })\n]);\n\nconst [igData, ttData, rdData] = await Promise.all([\n  igRun.dataset().getData(),\n  ttRun.dataset().getData(),\n  rdRun.dataset().getData()\n]);\n\nconst aggregated = {\n  instagram: igData.items,\n  tiktok: ttData.items,\n  reddit: rdData.items,\n  totalPosts: igData.items.length + ttData.items.length + rdData.items.length,\n  extractedAt: new Date().toISOString()\n};\n\nUsing the REST API Directly\nconst response = await fetch(\n  \"https://api.apify.com/v2/acts/apify~tiktok-scraper/runs\",\n  {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"Authorization\": `Bearer ${process.env.APIFY_TOKEN}`\n    },\n    body: JSON.stringify({\n      hashtags: [\"viral\"],\n      resultsPerPage: 25\n    })\n  }\n);\n\nconst { data } = await response.json();\nconst runId = data.id;\n\n// Poll for completion\nconst resultRes = await fetch(\n  `https://api.apify.com/v2/actor-runs/${runId}/dataset/items`,\n  { headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}` } }\n);\n\nconst posts = await resultRes.json();\n\nTrend Analysis Workflow\n\nWhen asked to analyze trends, Claude will:\n\nIdentify the target platform(s) and keywords/hashtags\nRun the appropriate Apify actor(s) in parallel when multi-platform\nCollect all posts with engagement metrics (likes, views, comments, shares)\nSort & rank content by engagement rate or volume\nIdentify patterns — recurring hashtags, peak posting times, top creators\nReturn a structured report with top trends, key metrics, and actionable insights\nOutput Data Structure (Normalized)\n{\n  \"platform\": \"tiktok\",\n  \"id\": \"7302938471029384\",\n  \"text\": \"This AI tool is insane #aitools #viral\",\n  \"author\": \"techreviewer99\",\n  \"engagement\": {\n    \"likes\": 142300,\n    \"comments\": 4820,\n    \"shares\": 9100,\n    \"views\": 2300000\n  },\n  \"hashtags\": [\"aitools\", \"viral\"],\n  \"publishedAt\": \"2025-02-18T14:32:00Z\",\n  \"url\": \"https://www.tiktok.com/@techreviewer99/video/7302938471029384\"\n}\n\nBest Practices\nAlways scrape only public content — never attempt to access private profiles\nSet reasonable resultsLimit values (50–200) to stay within your Apify quota\nFor recurring analysis, schedule actor runs using Apify Schedules in the console\nStore results in Apify Datasets for persistent access and historical comparison\nUse sort: \"hot\" on Reddit and trending endpoints on TikTok for most relevant data\nAdd a proxyConfiguration block when scraping at scale to avoid rate limits:\nproxyConfiguration: { useApifyProxy: true, apifyProxyGroups: [\"RESIDENTIAL\"] }\n\nError Handling\ntry {\n  const run = await client.actor(\"apify/tiktok-scraper\").call(input);\n  const dataset = await run.dataset().getData();\n  return dataset.items;\n} catch (error) {\n  if (error.statusCode === 401) throw new Error(\"Invalid Apify token\");\n  if (error.statusCode === 429) throw new Error(\"Rate limit hit — reduce request frequency\");\n  if (error.message.includes(\"timeout\")) throw new Error(\"Actor timed out — try a smaller batch\");\n  throw error;\n}\n\nRequirements\nAn Apify account → https://www.apify.com/?fpr=dx06p\nA valid Personal API Token from Settings → Integrations\nNode.js 18+ for the apify-client package\nNo platform API keys required — Apify handles all platform access"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/g4dr/social-media-extractor",
    "publisherUrl": "https://clawhub.ai/g4dr/social-media-extractor",
    "owner": "g4dr",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/social-media-extractor",
    "downloadUrl": "https://openagent3.xyz/downloads/social-media-extractor",
    "agentUrl": "https://openagent3.xyz/skills/social-media-extractor/agent",
    "manifestUrl": "https://openagent3.xyz/skills/social-media-extractor/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/social-media-extractor/agent.md"
  }
}