{"id":"4803d4a4-9431-4eb3-8bc0-9cdbec155e55","entityType":"agent","slug":"clawhub-crawlora-org-social-media-research","name":"social-media-research","canonicalUrl":"https://www.xpersona.co/agent/clawhub-crawlora-org-social-media-research","canonicalPath":"/agent/clawhub-crawlora-org-social-media-research","generatedAt":"2026-10-11T00:33:42.441Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:21:38.795Z","emptyReason":null},"description":"Researches public profiles, posts, trends, and Facebook Marketplace listings across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon through the Crawlora API. It also supports explicitly requested Reddit buying-intent lead discovery. Use for public social listening, or a clearly requested listings/lead search; avoid sensitive targeting.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:social-media-research","sourceUrl":"https://clawhub.ai/crawlora-org/social-media-research","homepage":"https://clawhub.ai/crawlora-org/skills/social-media-research","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/crawlora-org/social-media-research","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/crawlora-org/skills/social-media-research","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"social-media-research technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:21:38.795Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:21:38.795Z","emptyReason":null},"stars":null,"forks":null,"downloads":1243,"packageName":null,"latestVersion":"1.0.22","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:21:38.733Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T22:21:38.795Z","lastCrawledAt":"2026-10-10T22:21:38.733Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T22:21:38.733Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.22","createdAt":"2026-10-06T02:29:19.221Z","changelog":"Sync skill instructions, references, and helper from GitHub 733b6716a4b74b99991a9802ead5fe2cee6d608b","fileCount":5,"zipByteSize":16220},{"version":"1.0.21","createdAt":"2026-10-06T01:59:58.566Z","changelog":"Sync skill instructions, references, and helper from GitHub a91c30113b1827d719267576bbd2936c99a28029","fileCount":5,"zipByteSize":15646},{"version":"1.0.20","createdAt":"2026-10-05T01:23:48.045Z","changelog":"Sync skill instructions, references, and helper from GitHub 83bb98ef1362f25cecb5ddd4bc1ea0e564555d97","fileCount":5,"zipByteSize":15569},{"version":"1.0.19","createdAt":"2026-09-21T01:52:40.982Z","changelog":"Sync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805","fileCount":5,"zipByteSize":15707},{"version":"1.0.18","createdAt":"2026-09-17T10:21:41.183Z","changelog":"Security hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.","fileCount":5,"zipByteSize":14947},{"version":"1.0.17","createdAt":"2026-09-14T03:58:37.642Z","changelog":"Security scope hardening and documented capability alignment from GitHub d47e9935b124fd09c81c6eeda19789073b4fda20","fileCount":5,"zipByteSize":15361},{"version":"1.0.16","createdAt":"2026-09-14T02:09:46.218Z","changelog":"Sync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d","fileCount":5,"zipByteSize":15285},{"version":"1.0.15","createdAt":"2026-09-10T12:36:13.337Z","changelog":"Validate API keys before curl config","fileCount":5,"zipByteSize":15001}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:social-media-research","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:social-media-research` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/crawlora-org/social-media-research before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T00:33:42.435Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-social-media-research/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:21:38.795Z","emptyReason":null},"readme":"Skill: social-media-research\n\nOwner: crawlora-org\n\nSummary: Researches public profiles, posts, trends, and Facebook Marketplace listings across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon through the Crawlora API. It also supports explicitly requested Reddit buying-intent lead discovery. Use for public social listening, or a clearly requested listings/lead search; avoid sensitive targeting.\n\nTags: latest:1.0.22\n\nVersion history:\n\nv1.0.22 | 2026-10-06T02:29:19.221Z | user\n\nSync skill instructions, references, and helper from GitHub 733b6716a4b74b99991a9802ead5fe2cee6d608b\n\nv1.0.21 | 2026-10-06T01:59:58.566Z | user\n\nSync skill instructions, references, and helper from GitHub a91c30113b1827d719267576bbd2936c99a28029\n\nv1.0.20 | 2026-10-05T01:23:48.045Z | user\n\nSync skill instructions, references, and helper from GitHub 83bb98ef1362f25cecb5ddd4bc1ea0e564555d97\n\nv1.0.19 | 2026-09-21T01:52:40.982Z | user\n\nSync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805\n\nv1.0.18 | 2026-09-17T10:21:41.183Z | user\n\nSecurity hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.\n\nv1.0.17 | 2026-09-14T03:58:37.642Z | user\n\nSecurity scope hardening and documented capability alignment from GitHub d47e9935b124fd09c81c6eeda19789073b4fda20\n\nv1.0.16 | 2026-09-14T02:09:46.218Z | user\n\nSync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d\n\nv1.0.15 | 2026-09-10T12:36:13.337Z | user\n\nValidate API keys before curl config\n\nv1.0.14 | 2026-09-10T12:17:07.119Z | user\n\nKeep API keys out of process arguments\n\nv1.0.13 | 2026-09-10T12:08:15.171Z | user\n\nReject curl local-file query syntax\n\nv1.0.12 | 2026-09-10T11:55:22.398Z | user\n\nStream helper request bodies through curl stdin\n\nv1.0.11 | 2026-09-10T11:43:36.340Z | user\n\nScope helper routes and remove secret-shaped key examples\n\nv1.0.10 | 2026-09-10T07:07:27.745Z | user\n\nMigrate publisher from tonywangcn to crawlora-org for brand consistency with the plugins\n\nv1.0.9 | 2026-09-08T04:36:18.710Z | user\n\nRefresh stale REST examples, endpoint references, and Bash helper from crawlora-skills 1.17.1.\n\nv1.0.8 | 2026-09-07T13:42:57.128Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.7 | 2026-09-07T08:25:09.746Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.6 | 2026-09-07T06:48:52.126Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.5 | 2026-08-24T07:32:50.185Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.4 | 2026-08-24T06:43:26.451Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.3 | 2026-08-24T05:20:59.796Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.2 | 2026-08-14T18:41:29.902Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.1 | 2026-08-10T18:33:01.334Z | user\n\nSet categories\n\nv1.0.0 | 2026-08-10T18:05:08.965Z | auto\n\n- Initial release of social-media-research skill.\n- Research public profiles, posts, engagement, trending topics, and run searches across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, and Reddit using the Crawlora API.\n- Returns standardized JSON; eliminates the need for direct app scraping or unofficial libraries.\n- Easily fetch stats, content, engagement metrics, trending topics, and perform social listening and competitor research.\n- Requires a free Crawlora API key for access; usage billed only on successful responses.\n\nArchive index:\n\nArchive v1.0.22: 5 files, 16220 bytes\n\nFiles: reference/endpoints.md (41931b), scripts/crawlora.sh (6805b), skill-card.md (2079b), SKILL.md (6052b), _meta.json (141b)\n\nFile v1.0.22:SKILL.md\n\n---\nname: social-media-research\ndescription: Researches public profiles, posts, trends, and Facebook Marketplace listings across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon through the Crawlora API. It also supports explicitly requested Reddit buying-intent lead discovery. Use for public social listening, or a clearly requested listings/lead search; avoid sensitive targeting.\nallowed-tools: Bash(scripts/crawlora.sh:*)\n---\n\n# Social media research\n\nLook up public profiles, posts, and engagement, run keyword/hashtag search,\nand track trending topics across eleven social platforms — all as normalized\nJSON from the Crawlora API, no app scraping or unofficial client libraries.\n\n## Tool scope and data flow\n\nThe optional shell helper is the only command this skill asks to run. It makes\nGET requests only to the documented, allowlisted Crawlora routes. When invoked,\nit reads `CRAWLORA_API_KEY` and sends it as an `x-api-key` header over HTTPS to\n`api.crawlora.net`; it does not send the key to social platforms. It briefly\nwrites a mode-600 curl config under `TMPDIR` and removes it when the command\nexits. It does not inspect other environment variables, enumerate files, install\nsoftware, or run with elevated privileges. Search terms, public handles, URLs,\nand other requested targets are sent to Crawlora; do not submit confidential\ninvestigations or sensitive personal data.\n\nThe Facebook Marketplace route returns public listings, not social posts. The\nReddit leads route ranks public posts for product/service buying intent; use it\nonly for an explicit lead-discovery request, disclose the post-level scoring,\nand do not infer sensitive traits or target people for high-impact decisions.\n\n## When to use this skill\n\n- \"What's <handle>'s profile / follower count / recent posts on <platform>?\"\n- \"Pull this post's engagement (likes, comments, shares).\"\n- \"Search <platform> for posts about <topic/hashtag>.\"\n- \"What's trending on <platform> right now?\"\n- Competitor social-listening, influencer research, or brand-mention monitoring.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the platform, then the job:\n\n1. **Profile** — `/instagram/profile/{username}`, `/tiktok/profile/{handler}`,\n   `/threads/profile/{username}`, `/bluesky/profile`, `/x/profile/{username}`,\n   `/pinterest/user/{username}`, `/linkedin/company/{id}`,\n   `/facebook/{page}`, `/reddit/user/{username}/posts`.\n2. **Posts / feed** — `/instagram/reels/{id}`, `/tiktok/posts`,\n   `/threads/profile/{username}/posts`, `/bluesky/author-feed`,\n   `/x/profile/{username}/posts`, `/pinterest/user/{username}/pins`,\n   `/reddit/subreddit/{subreddit}/posts`.\n3. **One post/pin/pin detail** — `/instagram/post/{id}/{post_id}`,\n   `/tiktok/post/{id}`, `/threads/post/{username}/{code}` (+ `/replies`),\n   `/bluesky/post-thread`, `/x/post/{id}`, `/pinterest/pin/{id}`,\n   `/reddit/post/{id}` (+ `/reddit/comments/{id}`).\n4. **Search & discovery** — `/tiktok/search`, `/tiktok/search_hashtag`,\n   `/bluesky/search-actors`, `/pinterest/search`, `/reddit/search`,\n   `/facebook/marketplace/search` (listings, not social posts), plus Bilibili\n   and Patreon's public discovery endpoints listed in the reference.\n5. **Trending** — `/tiktok/trending`, `/tiktok/creative-center/hashtags`,\n   `/bluesky/trending-topics`, `/reddit/trends`, `/reddit/subreddits/posts`\n   (multi-subreddit hot feed).\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Profile + posts:\nscripts/crawlora.sh /tiktok/profile/nasa | jq '.'\nscripts/crawlora.sh /reddit/user/spez/posts | jq '.'\n\n# Search:\nscripts/crawlora.sh /tiktok/search keyword=\"ai agents\" | jq '.'\nscripts/crawlora.sh /reddit/search q=\"web scraping\" | jq '.'\n\n# Trending:\nscripts/crawlora.sh /tiktok/trending | jq '.'\nscripts/crawlora.sh /bluesky/trending-topics | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every Instagram,\nTikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili,\nand Patreon endpoint this skill uses.\n\n## Examples\n\n- **Competitor social audit:** pull profile + recent posts on each platform\n  a competitor is active on, compare follower counts and post cadence.\n- **Brand-mention sweep:** `/reddit/search`, `/tiktok/search`, and\n  `/pinterest/search` for the same brand/product name, aggregate volume and\n  sentiment cues from captions/comments.\n- **Influencer vetting:** profile + recent posts to check follower count,\n  engagement rate (likes/comments per post), and posting consistency before\n  a partnership.\n- **Trending-topic scan:** `/tiktok/trending` + `/bluesky/trending-topics` +\n  `/reddit/trends` for a same-day cross-platform snapshot.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public profiles/posts; no login, no private content.\n  Respect each platform's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **Coverage varies by platform**: X and Instagram expose a narrower public\n  surface (profile + recent posts) than TikTok or Reddit (full search +\n  trending); check `reference/endpoints.md` before assuming an endpoint exists.\n- List endpoints are cursor- or page-paginated — follow the returned cursor\n  to walk beyond the first page.\n\nFile v1.0.22:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"social-media-research\",\n  \"version\": \"1.0.22\",\n  \"publishedAt\": 1791253759221\n}\n\nFile v1.0.22:reference/endpoints.md\n\n# social-media-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**86 endpoints across 11 platform group(s).**\n\n## Instagram (3)\n\n### `instagram_post`\n\n- **HTTP:** `GET /instagram/post/{id}/{post_id}`\n- **What:** Retrieve a specific Instagram post by URL shortcode. Returns media details for an Instagram URL shortcode. Use media.code from the reels response or shortcode from a public post URL; numeric media IDs are rejected.\n- **Params:** `id` (string, **required**) — Instagram user ID retained for route compatibility; ownership is not verified; `post_id` (string, **required**) — Instagram URL shortcode (media.code), not a numeric media ID\n\n### `instagram_profile`\n\n- **HTTP:** `GET /instagram/profile/{username}`\n- **What:** Retrieve an Instagram user profile by username. Returns public profile details for a specified Instagram username.\n- **Params:** `username` (string, **required**) — Instagram username\n\n### `instagram_reels`\n\n- **HTTP:** `GET /instagram/reels/{id}`\n- **What:** Retrieve Instagram Reels for a user. Returns up to 12 public Reels via anonymous proxied HTTP for the numeric Instagram user ID. Supports opaque `max_id` pagination. Captions, timestamps and original image dimensions are omitted when the public source does not expose them.\n- **Params:** `id` (string, **required**) — Numeric Instagram user ID (not a username); `max_id` (string, optional) — Pagination cursor for fetching the next page of Reels\n\n## TikTok (25)\n\n### `tiktok_category`\n\n- **HTTP:** `GET /tiktok/category`\n- **What:** List TikTok explore categories. Returns the category list exposed by the TikTok Explore page.\n- **Params:** _none_\n\n### `tiktok_challenge`\n\n- **HTTP:** `GET /tiktok/hashtag/{name}`\n- **What:** Retrieve TikTok hashtag details. Returns the metadata payload for a TikTok hashtag page.\n- **Params:** `name` (string, **required**) — Hashtag name (e.g., 'christmas')\n\n### `tiktok_challenge_list`\n\n- **HTTP:** `GET /tiktok/hashtags`\n- **What:** Retrieve TikTok hashtag posts. Returns the videos listed for a TikTok hashtag id with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `id` (string, **required**) — Hashtag id returned by the hashtag detail endpoint\n\n### `tiktok_comments`\n\n- **HTTP:** `GET /tiktok/comments`\n- **What:** Retrieve TikTok video comments. Returns top-level TikTok video comments with cursor-based pagination.\n- **Params:** `aweme_id` (string, **required**) — TikTok video id from the video URL; `cursor` (integer, optional) — Pagination cursor\n\n### `tiktok_creative_center_hashtags`\n\n- **HTTP:** `GET /tiktok/creative-center/hashtags`\n- **What:** Retrieve TikTok Creative Center trending hashtags. Returns TikTok Creative Center's ranked trending hashtags for a country and period. TikTok gates this endpoint's full result set behind a logged-in TikTok One account: an anonymous request always receives at most 3 hashtags regardless of country or period.\n- **Params:** `country_code` (string, **required**) — ISO-2 country code; `period` (integer, optional) — Lookback window in days\n\n### `tiktok_creative_center_videos`\n\n- **HTTP:** `GET /tiktok/creative-center/videos`\n- **What:** Retrieve TikTok Creative Center trending videos. Returns TikTok Creative Center's ranked trending videos for a country, period, and sort order. TikTok reports the true result-set size (see total_count/page_count in the response) but gates access to it behind a logged-in TikTok One account: an anonymous request always receives page 1 (4 videos) regardless of sort order or period. Country coverage is uneven: US, JP, ID, VN, and TH reliably return populated results; other countries have been observed to return an empty videos array (a genuine no-data response, not an error).\n- **Params:** `content_label_id` (string, optional) — Content tag id to filter by; `country_code` (string, **required**) — ISO-2 country code; `organic_only` (boolean, optional) — Restrict to organic (non-paid) videos only; `period` (integer, optional) — Lookback window in days; `sort_by` (string, optional) — Sort order\n\n### `tiktok_explore`\n\n- **HTTP:** `GET /tiktok/explore/{id}`\n- **What:** Retrieve the TikTok explore feed for a category. Returns explore videos for a TikTok category id from the category endpoint.\n- **Params:** `id` (integer, **required**) — Category type id returned by the category endpoint\n\n### `tiktok_popular_trend_country_industry_meta`\n\n- **HTTP:** `GET /tiktok/popular-trend/country-industry-meta`\n- **What:** Retrieve TikTok popular-trend country and industry metadata. Returns the country and industry metadata used by the TikTok Creative Center popular-trend endpoints.\n- **Params:** _none_\n\n### `tiktok_post`\n\n- **HTTP:** `GET /tiktok/post/{id}`\n- **What:** Retrieve TikTok video details. Returns the TikTok video detail payload for a video id.\n- **Params:** `id` (string, **required**) — TikTok video id\n\n### `tiktok_posts`\n\n- **HTTP:** `GET /tiktok/posts`\n- **What:** Retrieve posts from a TikTok profile. Returns posts from a TikTok profile by `secUid`, with optional cursor pagination and sort mode.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `secUid` (string, **required**) — TikTok secUid for the profile; `sort_type` (integer, optional) — Sort mode: 0 latest, 1 popular, 2 oldest\n\n### `tiktok_profile`\n\n- **HTTP:** `GET /tiktok/profile/{handler}`\n- **What:** Retrieve a TikTok profile. Returns the TikTok profile payload for a public handle.\n- **Params:** `handler` (string, **required**) — TikTok handle without the leading @\n\n### `tiktok_search`\n\n- **HTTP:** `GET /tiktok/search`\n- **What:** Search TikTok videos. Searches TikTok videos by keyword with cursor-based pagination.\n- **Params:** `count` (integer, optional) — Result count, clamped to 50; `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_search_hashtag`\n\n- **HTTP:** `GET /tiktok/search/hashtag`\n- **What:** Search TikTok hashtags. Searches TikTok hashtags/challenges by keyword with cursor-based pagination.\n- **Params:** `count` (integer, optional) — Result count, clamped to 50; `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_search_user`\n\n- **HTTP:** `GET /tiktok/search/user`\n- **What:** Search TikTok users. Searches TikTok users by keyword with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_top_ads_analysis`\n\n- **HTTP:** `GET /tiktok/top-ads/analysis`\n- **What:** Retrieve TikTok Top Ads interactive time analysis. Returns the detail-page interactive time analysis chart and percentile for a Top Ads material. Metric values are `retain_ctr` (CTR), `retain_cvr` (CVR), `click_cnt` (Clicks), `convert_cnt` (Conversion), and `play_retain_cnt` (Remain).\n- **Params:** `material_id` (string, **required**) — Top Ads material id; `metric` (string, optional) — Interactive time analysis metric; `period_type` (integer, optional) — Percentile lookback period in days\n\n### `tiktok_top_ads_detail`\n\n- **HTTP:** `GET /tiktok/top-ads/detail`\n- **What:** Retrieve TikTok Top Ads detail. Returns detail for one TikTok Creative Center Top Ads material. Use `material_id`; the upstream does not accept `id` or `materialId`.\n- **Params:** `material_id` (string, **required**) — Top Ads material id\n\n### `tiktok_top_ads_filters`\n\n- **HTTP:** `GET /tiktok/top-ads/filters`\n- **What:** Retrieve TikTok Top Ads filters. Returns filter metadata for TikTok Creative Center Top Ads. Dynamic values come from TikTok; static UI enums are included for `order_by`, `duration`, `like`, and `ad_format`.\n- **Params:** _none_\n\n### `tiktok_top_ads_list`\n\n- **HTTP:** `GET /tiktok/top-ads/list`\n- **What:** Retrieve TikTok Top Ads. Returns high-performing auction ads from TikTok Creative Center. The service defaults `period` to 30, `page` to 1, `limit` to 20, and `order_by` to `for_you`. Use `/tiktok/top-ads/filters` for dynamic enum values and static enums for order, duration, likes, and ad format.\n- **Params:** `ad_format` (string, optional) — Ad format id; `ad_language` (string, optional) — Ad language id or comma-separated ids from /tiktok/top-ads/filters; `country_code` (string, optional) — Country code or comma-separated country codes from /tiktok/top-ads/filters; `duration` (string, optional) — Video duration bucket; `industry` (string, optional) — Industry filter id or comma-separated ids from /tiktok/top-ads/filters; `keyword` (string, optional) — Brand or product keyword search; `like` (string, optional) — Like percentile bucket id or comma-separated ids; `limit` (integer, optional) — Maximum number of ads to return; `objective` (string, optional) — Objective filter id or comma-separated ids from /tiktok/top-ads/filters; `order_by` (string, optional) — Sort order; `page` (integer, optional) — Page number; `pattern_label` (string, optional) — Pattern label id or comma-separated ids from /tiktok/top-ads/filters; `period` (integer, optional) — Lookback period in days\n\n### `tiktok_top_ads_location_info`\n\n- **HTTP:** `GET /tiktok/top-ads/location-info`\n- **What:** Retrieve TikTok Top Ads location info. Returns the initial location and industry context used by TikTok Creative Center Top Ads.\n- **Params:** `module` (integer, optional) — Creative Center module id\n\n### `tiktok_top_ads_locations`\n\n- **HTTP:** `GET /tiktok/top-ads/locations`\n- **What:** Retrieve TikTok Top Ads locations. Returns available Top Ads location filters from TikTok Creative Center.\n- **Params:** _none_\n\n### `tiktok_top_ads_recommend`\n\n- **HTTP:** `GET /tiktok/top-ads/recommend`\n- **What:** Retrieve TikTok Top Ads recommendations. Returns recommended Top Ads materials related to a material id.\n- **Params:** `limit` (integer, optional) — Maximum number of ads to return; `material_id` (string, **required**) — Top Ads material id; `page` (integer, optional) — Page number\n\n### `tiktok_top_ads_safety`\n\n- **HTTP:** `GET /tiktok/top-ads/safety`\n- **What:** Retrieve TikTok Top Ads safety configuration. Returns public Creative Center safety configuration flags related to search surfaces.\n- **Params:** _none_\n\n### `tiktok_top_ads_spotlight`\n\n- **HTTP:** `GET /tiktok/top-ads/spotlight`\n- **What:** Retrieve TikTok Top Ads Spotlight. Returns Top Ads Spotlight materials handpicked by TikTok Creative Center.\n- **Params:** `limit` (integer, optional) — Maximum number of ads to return; `page` (integer, optional) — Page number\n\n### `tiktok_top_ads_suggestions`\n\n- **HTTP:** `GET /tiktok/top-ads/suggestions`\n- **What:** Retrieve TikTok Top Ads suggestions. Returns Top Ads search suggestions from TikTok Creative Center.\n- **Params:** `count` (integer, optional) — Maximum number of suggestions to return; `scenario` (integer, optional) — Suggestion scenario id\n\n### `tiktok_trending`\n\n- **HTTP:** `GET /tiktok/trending`\n- **What:** Retrieve TikTok trending posts. Returns the current TikTok trending feed.\n- **Params:** _none_\n\n## Threads (5)\n\n### `threads_post`\n\n- **HTTP:** `GET /threads/post/{username}/{code}`\n- **What:** Retrieve a public Threads post. Returns the public text, author, canonical URL, and preview image for a Threads post.\n- **Params:** `code` (string, **required**) — Threads post code; `username` (string, **required**) — Threads username\n\n### `threads_post_replies`\n\n- **HTTP:** `GET /threads/post/{username}/{code}/replies`\n- **What:** Retrieve public replies to a Threads post. Returns the public replies currently exposed to logged-out visitors. The response identifies when Threads reports additional replies but withholds a usable continuation cursor.\n- **Params:** `code` (string, **required**) — Threads post code; `username` (string, **required**) — Threads username\n\n### `threads_profile`\n\n- **HTTP:** `GET /threads/profile/{username}`\n- **What:** Retrieve a public Threads profile. Returns public profile metadata for a Threads username, including the visible biography and counts.\n- **Params:** `username` (string, **required**) — Threads username\n\n### `threads_profile_posts`\n\n- **HTTP:** `GET /threads/profile/{username}/posts`\n- **What:** Retrieve public posts from a Threads profile. Returns public profile posts with an opaque continuation cursor when more posts are available.\n- **Params:** `cursor` (string, optional) — Opaque cursor returned by the previous response; `username` (string, **required**) — Threads username\n\n### `threads_search`\n\n- **HTTP:** `GET /threads/search`\n- **What:** Search public Threads posts. Returns the public first page of Threads search results for a query. Logged-out search does not expose a continuation cursor.\n- **Params:** `q` (string, **required**) — Search query (1-100 characters)\n\n## Bluesky (11)\n\n### `bluesky_author_feed`\n\n- **HTTP:** `GET /bluesky/author-feed`\n- **What:** A Bluesky account's posts. Returns a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_followers`\n\n- **HTTP:** `GET /bluesky/followers`\n- **What:** A Bluesky account's followers. Returns a page of a Bluesky account's followers. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_follows`\n\n- **HTTP:** `GET /bluesky/follows`\n- **What:** Accounts a Bluesky account follows. Returns a page of the accounts a Bluesky account follows. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_post_likes`\n\n- **HTTP:** `GET /bluesky/post-likes`\n- **What:** List actors who liked a Bluesky post. Returns public actors who liked a post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The post's at:// URI\n\n### `bluesky_post_quotes`\n\n- **HTTP:** `GET /bluesky/post-quotes`\n- **What:** List quotes of a Bluesky post. Returns public posts that quote the specified post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The quoted post's at:// URI\n\n### `bluesky_post_reposted_by`\n\n- **HTTP:** `GET /bluesky/post-reposted-by`\n- **What:** List actors who reposted a Bluesky post. Returns public actors who reposted a post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The post's at:// URI\n\n### `bluesky_post_thread`\n\n- **HTTP:** `GET /bluesky/post-thread`\n- **What:** A Bluesky post and its reply tree. Returns a Bluesky post along with its nested replies (and, when the post is itself a reply, its parent chain), up to `depth` levels deep. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `depth` (integer, optional) — Reply-tree depth, 1-10; `uri` (string, **required**) — The post's at:// URI, e.g. from an author-feed or search-actors result's post uri field\n\n### `bluesky_posts`\n\n- **HTTP:** `GET /bluesky/posts`\n- **What:** Look up Bluesky posts in a batch. Returns public Bluesky posts for 1-25 at:// post URIs. Missing, deleted, or blocked posts are omitted when the public AppView omits them.\n- **Params:** `uris` (array, **required**) — One or more at:// post URIs (1-25); repeat the parameter for multiple URIs\n\n### `bluesky_profile`\n\n- **HTTP:** `GET /bluesky/profile`\n- **What:** A Bluesky account's full public profile. Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID (e.g. did:plc:z72i7hdynmk6r22z27h6tvur)\n\n### `bluesky_search_actors`\n\n- **HTTP:** `GET /bluesky/search-actors`\n- **What:** Search Bluesky accounts. Returns Bluesky accounts matching a query against display name, handle, and profile description. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100; `q` (string, **required**) — Search text\n\n### `bluesky_trending_topics`\n\n- **HTTP:** `GET /bluesky/trending-topics`\n- **What:** Bluesky's current trending topics. Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. Public data, sourced from the AT Protocol's public, credential-free AppView API. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.\n- **Params:** _none_\n\n## X (3)\n\n### `x_post`\n\n- **HTTP:** `GET /x/post/{id}`\n- **What:** Retrieve an X post. Returns a public X post by numeric post id, including author, text, visible metrics, and a quoted post preview when present.\n- **Params:** `id` (string, **required**) — X post id; `username` (string, optional) — Expected author username. When provided, mismatched authors return 404.\n\n### `x_profile`\n\n- **HTTP:** `GET /x/profile/{username}`\n- **What:** Retrieve an X profile. Returns public profile details for an X username, including visible counts and profile media when available.\n- **Params:** `username` (string, **required**) — X username\n\n### `x_profile_posts`\n\n- **HTTP:** `GET /x/profile/{username}/posts`\n- **What:** List public X profile posts. Returns posts present in the first public profile page payload for an X username. The endpoint does not paginate replies, media-only tabs, or search results.\n- **Params:** `limit` (integer, optional) — Maximum posts returned from the first page payload. Defaults to 20 and must be 1-50.; `username` (string, **required**) — X username\n\n## Pinterest (8)\n\n### `pinterest_board`\n\n- **HTTP:** `GET /pinterest/board/{username}/{slug}`\n- **What:** Get a Pinterest board's detail. Returns a Pinterest board's metadata (name, description, cover image, pin/follower counts, owner) plus a page of pins from that board. Public data sourced from Pinterest's own board pages.\n- **Params:** `slug` (string, **required**) — Board URL slug, from the board's own /{username}/{slug}/ URL; `username` (string, **required**) — Pinterest username that owns the board\n\n### `pinterest_categories`\n\n- **HTTP:** `GET /pinterest/categories`\n- **What:** Get Pinterest's \"Ideas\" category list. Returns Pinterest's top-level \"Ideas\" category taxonomy (e.g. \"Animals\", \"Home Decor\", \"Food And Drink\"). Each entry's id is usable directly with GET /pinterest/ideas/{id}. Public data sourced from Pinterest's own ideas.pinterest.com-style category hub.\n- **Params:** _none_\n\n### `pinterest_idea`\n\n- **HTTP:** `GET /pinterest/ideas/{id}`\n- **What:** Get a Pinterest \"Ideas\" category's detail feed. Returns one \"Ideas\" category's metadata (name, description, follower count) plus a page of pins from that category's feed. Public data sourced from Pinterest's own ideas category pages.\n- **Params:** `id` (string, **required**) — Pinterest ideas category id. See GET /pinterest/categories for the full list.\n\n### `pinterest_pin`\n\n- **HTTP:** `GET /pinterest/pin/{id}`\n- **What:** Get a Pinterest pin's full detail. Returns a single Pinterest pin's full detail: title, description, image, board, pinner, comment count, save count, and creation time. Public data sourced from Pinterest's own pin pages.\n- **Params:** `id` (string, **required**) — Pinterest pin id\n\n### `pinterest_search`\n\n- **HTTP:** `GET /pinterest/search`\n- **What:** Search Pinterest pins. Returns public Pinterest pins matching a text query: title, description, image, board, and pinner for each result. Public data sourced from Pinterest's own web search.\n- **Params:** `query` (string, **required**) — Search text\n\n### `pinterest_user`\n\n- **HTTP:** `GET /pinterest/user/{username}`\n- **What:** Get a Pinterest user's public profile. Returns a Pinterest user's public profile: display name, bio, website, avatar, and follower/following/pin/board counts. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n### `pinterest_user_boards`\n\n- **HTTP:** `GET /pinterest/user/{username}/boards`\n- **What:** Get a Pinterest user's boards. Returns a page of a Pinterest user's own boards: name, description, cover image, and pin/follower counts for each. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n### `pinterest_user_pins`\n\n- **HTTP:** `GET /pinterest/user/{username}/pins`\n- **What:** Get a Pinterest user's own pins. Returns a page of a Pinterest user's own pins: title, description, image, board, and pinner for each. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n## LinkedIn (5)\n\n### `linkedin_company`\n\n- **HTTP:** `GET /linkedin/company/{id}`\n- **What:** Get LinkedIn Company info by ID. Returns detailed company information by LinkedIn ID.\n- **Params:** `id` (string, **required**) — LinkedIn Company ID\n\n### `linkedin_product`\n\n- **HTTP:** `GET /linkedin/product/{id}`\n- **What:** Get LinkedIn Product info by ID. Returns detailed product information from LinkedIn by product ID.\n- **Params:** `id` (string, **required**) — LinkedIn Product ID\n\n### `linkedin_product_categories`\n\n- **HTTP:** `GET /linkedin/product/categories`\n- **What:** Discover LinkedIn product categories. Returns the standardized product categories accepted by the products/search endpoint's category_id filter. With a keyword, returns matching categories from LinkedIn's own category search. Without one, returns every known category.\n- **Params:** `keyword` (string, optional) — Narrow results to categories matching this term. Omit to return every known category.\n\n### `linkedin_products_search`\n\n- **HTTP:** `GET /linkedin/products/search`\n- **What:** Search the LinkedIn product directory. Returns one page of LinkedIn's public product directory search results, optionally scoped to a keyword and/or category. Keyword matching is on word prefixes. start is an upstream card offset advanced by the previous response's next_start; LinkedIn's guest search stops returning results at offset 1200.\n- **Params:** `category_id` (string, optional) — Numeric category id from /linkedin/product/categories; `keyword` (string, optional) — Search keyword, matched on word prefixes; `start` (integer, optional) — Upstream card offset, 0 to 1199\n\n### `linkedin_showcase`\n\n- **HTTP:** `GET /linkedin/showcase/{id}`\n- **What:** Get Linkedin Showcase Page Info. Returns detailed information about a LinkedIn showcase page by ID.\n- **Params:** `id` (string, **required**) — LinkedIn Showcase Page ID\n\n## Facebook (2)\n\n### `facebook_marketplace_search`\n\n- **HTTP:** `GET /facebook/marketplace/search`\n- **What:** Search Facebook Marketplace. Fetches Facebook Marketplace search or browse results for a location: listing id, title, price, city/state, and a thumbnail image per result. Only the first page Facebook's own server-rendered results page returns is available — Facebook's own further pagination requires a logged-in session and is out of scope. Omit both query and category to get the location's browse feed instead of running a search. minPrice, maxPrice, sortBy, daysSinceListed, and condition only take effect alongside a query or category (Facebook itself ignores them on the plain browse feed), except for the property_rentals category, which has its own always-filtered listing page. This endpoint can take noticeably longer than other search endpoints (up to roughly a minute in the slowest case) as it retries to get past an intermittent upstream condition; priced accordingly.\n- **Params:** `category` (string, optional) — Marketplace category; `condition` (string, optional) — Comma-separated listing conditions; requires query or category; `days_since_listed` (integer, optional) — Restrict to listings posted within this many days; requires query or category; `location` (string, **required**) — Facebook Marketplace location vanity slug; `max_price` (integer, optional) — Maximum price in whole currency units; requires query or category; `min_price` (integer, optional) — Minimum price in whole currency units; requires query or category; `query` (string, optional) — Free-text search terms; omit (with category) for the location's browse feed; `sort_by` (string, optional) — Result order; requires query or category\n\n### `facebook_page`\n\n- **HTTP:** `GET /facebook/{page}`\n- **What:** Get Facebook page details. Fetches public data about a Facebook Page given its page ID, vanity name, or full page URL: name, follower/like counts, intro, category, business hours/price range, review count, and any public contact details (email, phone, address, website, WhatsApp number) exposed on the Page's About tab.\n- **Params:** `page` (string, **required**) — Facebook Page reference: vanity name, handle, profile.php id, or full Facebook URL\n\n## Reddit (12)\n\n### `reddit_comments`\n\n- **HTTP:** `GET /reddit/comments/{id}`\n- **What:** Get Reddit post comments. Returns a Reddit post with its public comments. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return the server-rendered comments with public net score and award count plus post engagement metrics for 3 credits. Large threads may expose only an initial comment subset in anonymous HTML. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. A post that exists but has no comments yet returns a 200 response with an empty comments list; a post that does not exist returns 404, and a temporary block or upstream failure returns 503 (retryable) rather than 404. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `depth` (integer, optional) — Maximum flat comment depth returned in metrics mode.; `id` (string, **required**) — Reddit post id or t3_ id; `include_metrics` (boolean, optional) — Include public post and per-comment engagement metrics; costs 3 credits instead of 1; `limit` (integer, optional) — Maximum comments returned, defaults to 25 and clamps to 100; `sort` (string, optional) — Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.\n\n### `reddit_domain_posts`\n\n- **HTTP:** `GET /reddit/domain/{domain}/posts`\n- **What:** List Reddit domain posts. Returns normalized public posts submitted from a linked domain. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `domain` (string, **required**) — Domain hostname, without scheme or path; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_leads`\n\n- **HTTP:** `GET /reddit/leads`\n- **What:** Find Reddit buying-intent leads. Scans a Reddit search page for people actively asking for a product or service, scores each post 0-10 for buying intent, and returns them ranked highest-first with the signals that fired. Self-promotion, hiring posts, freelancer service adverts, revenue-milestone posts, duplicate reposts, and Title Case article headlines are filtered out before scoring. A deterministic prefilter always runs; when `classifier` resolves to `llm` the surviving candidates are additionally refined in one batched model call. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native Reddit search failures can use the internal Redlib provider while the existing lead-response fields and credit weights are preserved.\n- **Params:** `classifier` (string, optional) — Classifier: auto uses the model when configured, heuristic skips it, llm requires it; `limit` (integer, optional) — Maximum leads returned, defaults to 25 and clamps to 100; `min_score` (integer, optional) — Minimum buying-intent score to return, 0-10, defaults to 4; `q` (string, **required**) — What you offer, in plain language; `sort` (string, optional) — Sort: relevance, hot, new, top, or comments; `subreddit` (string, optional) — Restrict the search to a subreddit name, without r/; `time` (string, optional) — Time window: hour, day, week, month, year, or all\n\n### `reddit_post`\n\n- **HTTP:** `GET /reddit/post/{id}`\n- **What:** Get Reddit post. Returns a normalized public Reddit post. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return public net score, upvote ratio, comment count, award count, and estimated upvote/downvote totals for 3 credits. Reddit fuzzes voting data, so estimates are approximate; share, repost/crosspost, and view counts are not exposed anonymously. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `id` (string, **required**) — Reddit post id or t3_ id; `include_metrics` (boolean, optional) — Include public engagement metrics; costs 3 credits instead of 1\n\n### `reddit_search`\n\n- **HTTP:** `GET /reddit/search`\n- **What:** Search Reddit posts. Searches public Reddit content and returns normalized public post entries. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `q` (string, **required**) — Search keywords; `sort` (string, optional) — Sort: relevance, hot, new, top, or comments; `subreddit` (string, optional) — Restrict search to a subreddit name, without r/; `time` (string, optional) — Time window for top/comments sorts: hour, day, week, month, year, or all\n\n### `reddit_subreddit_about`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/about`\n- **What:** Get Reddit subreddit metadata. Returns public metadata and sample posts for a subreddit. Subscriber counts, icons, and banners are omitted because they are not available on anonymous Reddit pages. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `limit` (integer, optional) — Maximum sample posts inspected, defaults to 25 and clamps to 100; `subreddit` (string, **required**) — Subreddit name, without r/\n\n### `reddit_subreddit_comments`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/comments`\n- **What:** List Reddit subreddit comments. Returns flat public comment entries from a subreddit latest-comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum comments, defaults to 25 and clamps to 100; `subreddit` (string, **required**) — Subreddit name, without r/\n\n### `reddit_subreddit_posts`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/posts`\n- **What:** List Reddit subreddit posts. Returns normalized public posts from a subreddit. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `subreddit` (string, **required**) — Subreddit name, without r/; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_subreddits_posts`\n\n- **HTTP:** `GET /reddit/subreddits/posts`\n- **What:** List Reddit multi-subreddit posts. Returns normalized public posts from a combined multi-subreddit feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `subreddits` (string, **required**) — Comma-separated subreddit names, without r/, maximum 10; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_trends`\n\n- **HTTP:** `GET /reddit/trends`\n- **What:** List Reddit trends. Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, rising, or top; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_user_comments`\n\n- **HTTP:** `GET /reddit/user/{username}/comments`\n- **What:** List Reddit user comments. Returns flat public comment entries from a public Reddit user's comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum comments, defaults to 25 and clamps to 100; `username` (string, **required**) — Public Reddit username, without u/\n\n### `reddit_user_posts`\n\n- **HTTP:** `GET /reddit/user/{username}/posts`\n- **What:** List Reddit user posts. Returns normalized public posts from a public Reddit user's submitted feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `username` (string, **required**) — Public Reddit username, without u/\n\n## Bilibili (8)\n\n### `bilibili_anime_home`\n\n- **HTTP:** `GET /bilibili/anime-home`\n- **What:** Get Bilibili anime home sections. Returns the anonymous anime homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.\n- **Params:** _none_\n\n### `bilibili_autocomplete`\n\n- **HTTP:** `GET /bilibili/autocomplete`\n- **What:** Get Bilibili search suggestions. Returns Bilibili search-box query suggestions for partial text. An empty suggestion list is a valid response when nothing matches.\n- **Params:** `q` (string, **required**) — Partial search text\n\n### `bilibili_guochuang_home`\n\n- **HTTP:** `GET /bilibili/guochuang-home`\n- **What:** Get Bilibili Chinese-animation home sections. Returns the anonymous Chinese-animation homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.\n- **Params:** _none_\n\n### `bilibili_must_watch`\n\n- **HTTP:** `GET /bilibili/must-watch`\n- **What:** Get Bilibili's curated must-watch videos. Returns Bilibili's curated must-watch collection, separated into established classics and the latest additions.\n- **Params:** _none_\n\n### `bilibili_popular`\n\n- **HTTP:** `GET /bilibili/popular`\n- **What:** Get current popular Bilibili videos. Returns Bilibili's current popular-video feed in upstream order. Pass next_cursor back as cursor to continue to the next batch.\n- **Params:** `cursor` (integer, optional) — Upstream cursor from the previous response; defaults to 0\n\n### `bilibili_ranking`\n\n- **HTTP:** `GET /bilibili/ranking`\n- **What:** Get the current Bilibili all-site ranking. Returns the current official all-site ranking with video engagement, category, and creator metadata in rank order.\n- **Params:** _none_\n\n### `bilibili_vertical_home`\n\n- **HTTP:** `GET /bilibili/vertical-home`\n- **What:** Get Bilibili documentary, movie, TV, or variety home sections. Returns stable server-rendered editorial sections for one Bilibili vertical. Allowed category values: documentary, movie, tv, variety. Rotating feeds, pagination, account state, and streaming URLs are excluded.\n- **Params:** `category` (string, **required**) — Vertical: documentary, movie, tv, variety\n\n### `bilibili_weekly`\n\n- **HTTP:** `GET /bilibili/weekly`\n- **What:** Get a Bilibili weekly selected-video issue. Returns one issue from Bilibili's weekly selected-video archive. Omit number to resolve and return the latest issue.\n- **Params:** `number` (integer, optional) — Positive issue number; omit for the latest issue\n\n## Patreon (4)\n\n### `patreon_creator`\n\n- **HTTP:** `GET /patreon/creator`\n- **What:** Get a public Patreon creator profile. Returns public profile metadata from a creator's Patreon page: creator identity, summary, images, membership and creation counts, public earnings snapshot, membership/RSS availability flags, and public external profile links. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.\n- **Params:** `handle` (string, **required**) — Creator page handle\n\n### `patreon_creator_tiers`\n\n- **HTTP:** `GET /patreon/creator/tiers`\n- **What:** Get a creator's public Patreon membership tiers. Returns published membership tiers and their published benefits from a creator's public Patreon page. It excludes member-only entitlements, tier capacity, and member counts. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.\n- **Params:** `handle` (string, **required**) — Creator page handle\n\n### `patreon_explore`\n\n- **HTTP:** `GET /patreon/explore`\n- **What:** Browse public Patreon creators by topic. Returns Patreon's public curated creator shelves for one topic: Top creators, Popular this week, and New on Patreon. topic must be one of podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact.\n- **Params:** `topic` (string, **required**) — Public Explore topic. Allowed values: podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact\n\n### `patreon_rss`\n\n- **HTTP:** `GET /patreon/rss`\n- **What:** Get an explicitly public Patreon podcast RSS feed. Returns public podcast channel metadata and episodes from Patreon's canonical public RSS feed. campaign_id and show_id are the numeric IDs in the public feed URL. Private member feeds and authentication URLs are not supported.\n- **Params:** `campaign_id` (string, **required**) — Numeric Patreon campaign id; `show_id` (string, **required**) — Numeric Patreon show id\n\nFile v1.0.22:skill-card.md\n\n## Description:\n\nResearches public social profiles, posts, trends, Facebook Marketplace listings, and explicitly requested Reddit buying-intent leads through the Crawlora API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and marketing teams use this skill to research public social activity, compare profiles and engagement, monitor trends, and perform clearly requested public listing or Reddit lead searches.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The API key and requested search terms, handles, URLs, locations, or listing targets are sent to Crawlora.\n\nMitigation: Use a dedicated API key and send only public, nonsensitive research targets; avoid confidential investigations and sensitive personal data.\n\nRisk: Public social data or Reddit lead scores could be misused for sensitive targeting or high-impact decisions.\n\nMitigation: Run lead discovery only when explicitly requested, disclose post-level scoring, and do not infer sensitive traits or make high-impact targeting decisions from results.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/crawlora-org/skills/social-media-research)\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance]\n\n**Output Format:** [Markdown with optional shell examples and JSON excerpts]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Research is based on public data returned by Crawlora; list results may require pagination and coverage varies by platform.]\n\n## Skill Version(s):\n\n1.0.22 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.21: 5 files, 15646 bytes\n\nFiles: reference/endpoints.md (41931b), scripts/crawlora.sh (6805b), skill-card.md (1959b), SKILL.md (4997b), _meta.json (141b)\n\nFile v1.0.21:SKILL.md\n\n---\nname: social-media-research\ndescription: Researches social-media profiles, posts, and engagement across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon via the Crawlora API, returning clean JSON. Use when the user wants a public profile's stats, a post's content/engagement, a platform search, trending topics, or social listening/competitor research — instead of scraping each app.\n---\n\n# Social media research\n\nLook up public profiles, posts, and engagement, run keyword/hashtag search,\nand track trending topics across eleven social platforms — all as normalized\nJSON from the Crawlora API, no app scraping or unofficial client libraries.\n\n## When to use this skill\n\n- \"What's <handle>'s profile / follower count / recent posts on <platform>?\"\n- \"Pull this post's engagement (likes, comments, shares).\"\n- \"Search <platform> for posts about <topic/hashtag>.\"\n- \"What's trending on <platform> right now?\"\n- Competitor social-listening, influencer research, or brand-mention monitoring.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the platform, then the job:\n\n1. **Profile** — `/instagram/profile/{username}`, `/tiktok/profile/{handler}`,\n   `/threads/profile/{username}`, `/bluesky/profile`, `/x/profile/{username}`,\n   `/pinterest/user/{username}`, `/linkedin/company/{id}`,\n   `/facebook/{page}`, `/reddit/user/{username}/posts`.\n2. **Posts / feed** — `/instagram/reels/{id}`, `/tiktok/posts`,\n   `/threads/profile/{username}/posts`, `/bluesky/author-feed`,\n   `/x/profile/{username}/posts`, `/pinterest/user/{username}/pins`,\n   `/reddit/subreddit/{subreddit}/posts`.\n3. **One post/pin/pin detail** — `/instagram/post/{id}/{post_id}`,\n   `/tiktok/post/{id}`, `/threads/post/{username}/{code}` (+ `/replies`),\n   `/bluesky/post-thread`, `/x/post/{id}`, `/pinterest/pin/{id}`,\n   `/reddit/post/{id}` (+ `/reddit/comments/{id}`).\n4. **Search & discovery** — `/tiktok/search`, `/tiktok/search_hashtag`,\n   `/bluesky/search-actors`, `/pinterest/search`, `/reddit/search`,\n   `/facebook/marketplace/search` (listings, not social posts), plus Bilibili\n   and Patreon's public discovery endpoints listed in the reference.\n5. **Trending** — `/tiktok/trending`, `/tiktok/creative-center/hashtags`,\n   `/bluesky/trending-topics`, `/reddit/trends`, `/reddit/subreddits/posts`\n   (multi-subreddit hot feed).\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Profile + posts:\nscripts/crawlora.sh /tiktok/profile/nasa | jq '.'\nscripts/crawlora.sh /reddit/user/spez/posts | jq '.'\n\n# Search:\nscripts/crawlora.sh /tiktok/search keyword=\"ai agents\" | jq '.'\nscripts/crawlora.sh /reddit/search q=\"web scraping\" | jq '.'\n\n# Trending:\nscripts/crawlora.sh /tiktok/trending | jq '.'\nscripts/crawlora.sh /bluesky/trending-topics | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every Instagram,\nTikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili,\nand Patreon endpoint this skill uses.\n\n## Examples\n\n- **Competitor social audit:** pull profile + recent posts on each platform\n  a competitor is active on, compare follower counts and post cadence.\n- **Brand-mention sweep:** `/reddit/search`, `/tiktok/search`, and\n  `/pinterest/search` for the same brand/product name, aggregate volume and\n  sentiment cues from captions/comments.\n- **Influencer vetting:** profile + recent posts to check follower count,\n  engagement rate (likes/comments per post), and posting consistency before\n  a partnership.\n- **Trending-topic scan:** `/tiktok/trending` + `/bluesky/trending-topics` +\n  `/reddit/trends` for a same-day cross-platform snapshot.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public profiles/posts; no login, no private content.\n  Respect each platform's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **Coverage varies by platform**: X and Instagram expose a narrower public\n  surface (profile + recent posts) than TikTok or Reddit (full search +\n  trending); check `reference/endpoints.md` before assuming an endpoint exists.\n- List endpoints are cursor- or page-paginated — follow the returned cursor\n  to walk beyond the first page.\n\nFile v1.0.21:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"social-media-research\",\n  \"version\": \"1.0.21\",\n  \"publishedAt\": 1791251998566\n}\n\nFile v1.0.21:reference/endpoints.md\n\n# social-media-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**86 endpoints across 11 platform group(s).**\n\n## Instagram (3)\n\n### `instagram_post`\n\n- **HTTP:** `GET /instagram/post/{id}/{post_id}`\n- **What:** Retrieve a specific Instagram post by URL shortcode. Returns media details for an Instagram URL shortcode. Use media.code from the reels response or shortcode from a public post URL; numeric media IDs are rejected.\n- **Params:** `id` (string, **required**) — Instagram user ID retained for route compatibility; ownership is not verified; `post_id` (string, **required**) — Instagram URL shortcode (media.code), not a numeric media ID\n\n### `instagram_profile`\n\n- **HTTP:** `GET /instagram/profile/{username}`\n- **What:** Retrieve an Instagram user profile by username. Returns public profile details for a specified Instagram username.\n- **Params:** `username` (string, **required**) — Instagram username\n\n### `instagram_reels`\n\n- **HTTP:** `GET /instagram/reels/{id}`\n- **What:** Retrieve Instagram Reels for a user. Returns up to 12 public Reels via anonymous proxied HTTP for the numeric Instagram user ID. Supports opaque `max_id` pagination. Captions, timestamps and original image dimensions are omitted when the public source does not expose them.\n- **Params:** `id` (string, **required**) — Numeric Instagram user ID (not a username); `max_id` (string, optional) — Pagination cursor for fetching the next page of Reels\n\n## TikTok (25)\n\n### `tiktok_category`\n\n- **HTTP:** `GET /tiktok/category`\n- **What:** List TikTok explore categories. Returns the category list exposed by the TikTok Explore page.\n- **Params:** _none_\n\n### `tiktok_challenge`\n\n- **HTTP:** `GET /tiktok/hashtag/{name}`\n- **What:** Retrieve TikTok hashtag details. Returns the metadata payload for a TikTok hashtag page.\n- **Params:** `name` (string, **required**) — Hashtag name (e.g., 'christmas')\n\n### `tiktok_challenge_list`\n\n- **HTTP:** `GET /tiktok/hashtags`\n- **What:** Retrieve TikTok hashtag posts. Returns the videos listed for a TikTok hashtag id with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `id` (string, **required**) — Hashtag id returned by the hashtag detail endpoint\n\n### `tiktok_comments`\n\n- **HTTP:** `GET /tiktok/comments`\n- **What:** Retrieve TikTok video comments. Returns top-level TikTok video comments with cursor-based pagination.\n- **Params:** `aweme_id` (string, **required**) — TikTok video id from the video URL; `cursor` (integer, optional) — Pagination cursor\n\n### `tiktok_creative_center_hashtags`\n\n- **HTTP:** `GET /tiktok/creative-center/hashtags`\n- **What:** Retrieve TikTok Creative Center trending hashtags. Returns TikTok Creative Center's ranked trending hashtags for a country and period. TikTok gates this endpoint's full result set behind a logged-in TikTok One account: an anonymous request always receives at most 3 hashtags regardless of country or period.\n- **Params:** `country_code` (string, **required**) — ISO-2 country code; `period` (integer, optional) — Lookback window in days\n\n### `tiktok_creative_center_videos`\n\n- **HTTP:** `GET /tiktok/creative-center/videos`\n- **What:** Retrieve TikTok Creative Center trending videos. Returns TikTok Creative Center's ranked trending videos for a country, period, and sort order. TikTok reports the true result-set size (see total_count/page_count in the response) but gates access to it behind a logged-in TikTok One account: an anonymous request always receives page 1 (4 videos) regardless of sort order or period. Country coverage is uneven: US, JP, ID, VN, and TH reliably return populated results; other countries have been observed to return an empty videos array (a genuine no-data response, not an error).\n- **Params:** `content_label_id` (string, optional) — Content tag id to filter by; `country_code` (string, **required**) — ISO-2 country code; `organic_only` (boolean, optional) — Restrict to organic (non-paid) videos only; `period` (integer, optional) — Lookback window in days; `sort_by` (string, optional) — Sort order\n\n### `tiktok_explore`\n\n- **HTTP:** `GET /tiktok/explore/{id}`\n- **What:** Retrieve the TikTok explore feed for a category. Returns explore videos for a TikTok category id from the category endpoint.\n- **Params:** `id` (integer, **required**) — Category type id returned by the category endpoint\n\n### `tiktok_popular_trend_country_industry_meta`\n\n- **HTTP:** `GET /tiktok/popular-trend/country-industry-meta`\n- **What:** Retrieve TikTok popular-trend country and industry metadata. Returns the country and industry metadata used by the TikTok Creative Center popular-trend endpoints.\n- **Params:** _none_\n\n### `tiktok_post`\n\n- **HTTP:** `GET /tiktok/post/{id}`\n- **What:** Retrieve TikTok video details. Returns the TikTok video detail payload for a video id.\n- **Params:** `id` (string, **required**) — TikTok video id\n\n### `tiktok_posts`\n\n- **HTTP:** `GET /tiktok/posts`\n- **What:** Retrieve posts from a TikTok profile. Returns posts from a TikTok profile by `secUid`, with optional cursor pagination and sort mode.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `secUid` (string, **required**) — TikTok secUid for the profile; `sort_type` (integer, optional) — Sort mode: 0 latest, 1 popular, 2 oldest\n\n### `tiktok_profile`\n\n- **HTTP:** `GET /tiktok/profile/{handler}`\n- **What:** Retrieve a TikTok profile. Returns the TikTok profile payload for a public handle.\n- **Params:** `handler` (string, **required**) — TikTok handle without the leading @\n\n### `tiktok_search`\n\n- **HTTP:** `GET /tiktok/search`\n- **What:** Search TikTok videos. Searches TikTok videos by keyword with cursor-based pagination.\n- **Params:** `count` (integer, optional) — Result count, clamped to 50; `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_search_hashtag`\n\n- **HTTP:** `GET /tiktok/search/hashtag`\n- **What:** Search TikTok hashtags. Searches TikTok hashtags/challenges by keyword with cursor-based pagination.\n- **Params:** `count` (integer, optional) — Result count, clamped to 50; `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_search_user`\n\n- **HTTP:** `GET /tiktok/search/user`\n- **What:** Search TikTok users. Searches TikTok users by keyword with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_top_ads_analysis`\n\n- **HTTP:** `GET /tiktok/top-ads/analysis`\n- **What:** Retrieve TikTok Top Ads interactive time analysis. Returns the detail-page interactive time analysis chart and percentile for a Top Ads material. Metric values are `retain_ctr` (CTR), `retain_cvr` (CVR), `click_cnt` (Clicks), `convert_cnt` (Conversion), and `play_retain_cnt` (Remain).\n- **Params:** `material_id` (string, **required**) — Top Ads material id; `metric` (string, optional) — Interactive time analysis metric; `period_type` (integer, optional) — Percentile lookback period in days\n\n### `tiktok_top_ads_detail`\n\n- **HTTP:** `GET /tiktok/top-ads/detail`\n- **What:** Retrieve TikTok Top Ads detail. Returns detail for one TikTok Creative Center Top Ads material. Use `material_id`; the upstream does not accept `id` or `materialId`.\n- **Params:** `material_id` (string, **required**) — Top Ads material id\n\n### `tiktok_top_ads_filters`\n\n- **HTTP:** `GET /tiktok/top-ads/filters`\n- **What:** Retrieve TikTok Top Ads filters. Returns filter metadata for TikTok Creative Center Top Ads. Dynamic values come from TikTok; static UI enums are included for `order_by`, `duration`, `like`, and `ad_format`.\n- **Params:** _none_\n\n### `tiktok_top_ads_list`\n\n- **HTTP:** `GET /tiktok/top-ads/list`\n- **What:** Retrieve TikTok Top Ads. Returns high-performing auction ads from TikTok Creative Center. The service defaults `period` to 30, `page` to 1, `limit` to 20, and `order_by` to `for_you`. Use `/tiktok/top-ads/filters` for dynamic enum values and static enums for order, duration, likes, and ad format.\n- **Params:** `ad_format` (string, optional) — Ad format id; `ad_language` (string, optional) — Ad language id or comma-separated ids from /tiktok/top-ads/filters; `country_code` (string, optional) — Country code or comma-separated country codes from /tiktok/top-ads/filters; `duration` (string, optional) — Video duration bucket; `industry` (string, optional) — Industry filter id or comma-separated ids from /tiktok/top-ads/filters; `keyword` (string, optional) — Brand or product keyword search; `like` (string, optional) — Like percentile bucket id or comma-separated ids; `limit` (integer, optional) — Maximum number of ads to return; `objective` (string, optional) — Objective filter id or comma-separated ids from /tiktok/top-ads/filters; `order_by` (string, optional) — Sort order; `page` (integer, optional) — Page number; `pattern_label` (string, optional) — Pattern label id or comma-separated ids from /tiktok/top-ads/filters; `period` (integer, optional) — Lookback period in days\n\n### `tiktok_top_ads_location_info`\n\n- **HTTP:** `GET /tiktok/top-ads/location-info`\n- **What:** Retrieve TikTok Top Ads location info. Returns the initial location and industry context used by TikTok Creative Center Top Ads.\n- **Params:** `module` (integer, optional) — Creative Center module id\n\n### `tiktok_top_ads_locations`\n\n- **HTTP:** `GET /tiktok/top-ads/locations`\n- **What:** Retrieve TikTok Top Ads locations. Returns available Top Ads location filters from TikTok Creative Center.\n- **Params:** _none_\n\n### `tiktok_top_ads_recommend`\n\n- **HTTP:** `GET /tiktok/top-ads/recommend`\n- **What:** Retrieve TikTok Top Ads recommendations. Returns recommended Top Ads materials related to a material id.\n- **Params:** `limit` (integer, optional) — Maximum number of ads to return; `material_id` (string, **required**) — Top Ads material id; `page` (integer, optional) — Page number\n\n### `tiktok_top_ads_safety`\n\n- **HTTP:** `GET /tiktok/top-ads/safety`\n- **What:** Retrieve TikTok Top Ads safety configuration. Returns public Creative Center safety configuration flags related to search surfaces.\n- **Params:** _none_\n\n### `tiktok_top_ads_spotlight`\n\n- **HTTP:** `GET /tiktok/top-ads/spotlight`\n- **What:** Retrieve TikTok Top Ads Spotlight. Returns Top Ads Spotlight materials handpicked by TikTok Creative Center.\n- **Params:** `limit` (integer, optional) — Maximum number of ads to return; `page` (integer, optional) — Page number\n\n### `tiktok_top_ads_suggestions`\n\n- **HTTP:** `GET /tiktok/top-ads/suggestions`\n- **What:** Retrieve TikTok Top Ads suggestions. Returns Top Ads search suggestions from TikTok Creative Center.\n- **Params:** `count` (integer, optional) — Maximum number of suggestions to return; `scenario` (integer, optional) — Suggestion scenario id\n\n### `tiktok_trending`\n\n- **HTTP:** `GET /tiktok/trending`\n- **What:** Retrieve TikTok trending posts. Returns the current TikTok trending feed.\n- **Params:** _none_\n\n## Threads (5)\n\n### `threads_post`\n\n- **HTTP:** `GET /threads/post/{username}/{code}`\n- **What:** Retrieve a public Threads post. Returns the public text, author, canonical URL, and preview image for a Threads post.\n- **Params:** `code` (string, **required**) — Threads post code; `username` (string, **required**) — Threads username\n\n### `threads_post_replies`\n\n- **HTTP:** `GET /threads/post/{username}/{code}/replies`\n- **What:** Retrieve public replies to a Threads post. Returns the public replies currently exposed to logged-out visitors. The response identifies when Threads reports additional replies but withholds a usable continuation cursor.\n- **Params:** `code` (string, **required**) — Threads post code; `username` (string, **required**) — Threads username\n\n### `threads_profile`\n\n- **HTTP:** `GET /threads/profile/{username}`\n- **What:** Retrieve a public Threads profile. Returns public profile metadata for a Threads username, including the visible biography and counts.\n- **Params:** `username` (string, **required**) — Threads username\n\n### `threads_profile_posts`\n\n- **HTTP:** `GET /threads/profile/{username}/posts`\n- **What:** Retrieve public posts from a Threads profile. Returns public profile posts with an opaque continuation cursor when more posts are available.\n- **Params:** `cursor` (string, optional) — Opaque cursor returned by the previous response; `username` (string, **required**) — Threads username\n\n### `threads_search`\n\n- **HTTP:** `GET /threads/search`\n- **What:** Search public Threads posts. Returns the public first page of Threads search results for a query. Logged-out search does not expose a continuation cursor.\n- **Params:** `q` (string, **required**) — Search query (1-100 characters)\n\n## Bluesky (11)\n\n### `bluesky_author_feed`\n\n- **HTTP:** `GET /bluesky/author-feed`\n- **What:** A Bluesky account's posts. Returns a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_followers`\n\n- **HTTP:** `GET /bluesky/followers`\n- **What:** A Bluesky account's followers. Returns a page of a Bluesky account's followers. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_follows`\n\n- **HTTP:** `GET /bluesky/follows`\n- **What:** Accounts a Bluesky account follows. Returns a page of the accounts a Bluesky account follows. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_post_likes`\n\n- **HTTP:** `GET /bluesky/post-likes`\n- **What:** List actors who liked a Bluesky post. Returns public actors who liked a post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The post's at:// URI\n\n### `bluesky_post_quotes`\n\n- **HTTP:** `GET /bluesky/post-quotes`\n- **What:** List quotes of a Bluesky post. Returns public posts that quote the specified post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The quoted post's at:// URI\n\n### `bluesky_post_reposted_by`\n\n- **HTTP:** `GET /bluesky/post-reposted-by`\n- **What:** List actors who reposted a Bluesky post. Returns public actors who reposted a post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The post's at:// URI\n\n### `bluesky_post_thread`\n\n- **HTTP:** `GET /bluesky/post-thread`\n- **What:** A Bluesky post and its reply tree. Returns a Bluesky post along with its nested replies (and, when the post is itself a reply, its parent chain), up to `depth` levels deep. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `depth` (integer, optional) — Reply-tree depth, 1-10; `uri` (string, **required**) — The post's at:// URI, e.g. from an author-feed or search-actors result's post uri field\n\n### `bluesky_posts`\n\n- **HTTP:** `GET /bluesky/posts`\n- **What:** Look up Bluesky posts in a batch. Returns public Bluesky posts for 1-25 at:// post URIs. Missing, deleted, or blocked posts are omitted when the public AppView omits them.\n- **Params:** `uris` (array, **required**) — One or more at:// post URIs (1-25); repeat the parameter for multiple URIs\n\n### `bluesky_profile`\n\n- **HTTP:** `GET /bluesky/profile`\n- **What:** A Bluesky account's full public profile. Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID (e.g. did:plc:z72i7hdynmk6r22z27h6tvur)\n\n### `bluesky_search_actors`\n\n- **HTTP:** `GET /bluesky/search-actors`\n- **What:** Search Bluesky accounts. Returns Bluesky accounts matching a query against display name, handle, and profile description. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100; `q` (string, **required**) — Search text\n\n### `bluesky_trending_topics`\n\n- **HTTP:** `GET /bluesky/trending-topics`\n- **What:** Bluesky's current trending topics. Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. Public data, sourced from the AT Protocol's public, credential-free AppView API. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.\n- **Params:** _none_\n\n## X (3)\n\n### `x_post`\n\n- **HTTP:** `GET /x/post/{id}`\n- **What:** Retrieve an X post. Returns a public X post by numeric post id, including author, text, visible metrics, and a quoted post preview when present.\n- **Params:** `id` (string, **required**) — X post id; `username` (string, optional) — Expected author username. When provided, mismatched authors return 404.\n\n### `x_profile`\n\n- **HTTP:** `GET /x/profile/{username}`\n- **What:** Retrieve an X profile. Returns public profile details for an X username, including visible counts and profile media when available.\n- **Params:** `username` (string, **required**) — X username\n\n### `x_profile_posts`\n\n- **HTTP:** `GET /x/profile/{username}/posts`\n- **What:** List public X profile posts. Returns posts present in the first public profile page payload for an X username. The endpoint does not paginate replies, media-only tabs, or search results.\n- **Params:** `limit` (integer, optional) — Maximum posts returned from the first page payload. Defaults to 20 and must be 1-50.; `username` (string, **required**) — X username\n\n## Pinterest (8)\n\n### `pinterest_board`\n\n- **HTTP:** `GET /pinterest/board/{username}/{slug}`\n- **What:** Get a Pinterest board's detail. Returns a Pinterest board's metadata (name, description, cover image, pin/follower counts, owner) plus a page of pins from that board. Public data sourced from Pinterest's own board pages.\n- **Params:** `slug` (string, **required**) — Board URL slug, from the board's own /{username}/{slug}/ URL; `username` (string, **required**) — Pinterest username that owns the board\n\n### `pinterest_categories`\n\n- **HTTP:** `GET /pinterest/categories`\n- **What:** Get Pinterest's \"Ideas\" category list. Returns Pinterest's top-level \"Ideas\" category taxonomy (e.g. \"Animals\", \"Home Decor\", \"Food And Drink\"). Each entry's id is usable directly with GET /pinterest/ideas/{id}. Public data sourced from Pinterest's own ideas.pinterest.com-style category hub.\n- **Params:** _none_\n\n### `pinterest_idea`\n\n- **HTTP:** `GET /pinterest/ideas/{id}`\n- **What:** Get a Pinterest \"Ideas\" category's detail feed. Returns one \"Ideas\" category's metadata (name, description, follower count) plus a page of pins from that category's feed. Public data sourced from Pinterest's own ideas category pages.\n- **Params:** `id` (string, **required**) — Pinterest ideas category id. See GET /pinterest/categories for the full list.\n\n### `pinterest_pin`\n\n- **HTTP:** `GET /pinterest/pin/{id}`\n- **What:** Get a Pinterest pin's full detail. Returns a single Pinterest pin's full detail: title, description, image, board, pinner, comment count, save count, and creation time. Public data sourced from Pinterest's own pin pages.\n- **Params:** `id` (string, **required**) — Pinterest pin id\n\n### `pinterest_search`\n\n- **HTTP:** `GET /pinterest/search`\n- **What:** Search Pinterest pins. Returns public Pinterest pins matching a text query: title, description, image, board, and pinner for each result. Public data sourced from Pinterest's own web search.\n- **Params:** `query` (string, **required**) — Search text\n\n### `pinterest_user`\n\n- **HTTP:** `GET /pinterest/user/{username}`\n- **What:** Get a Pinterest user's public profile. Returns a Pinterest user's public profile: display name, bio, website, avatar, and follower/following/pin/board counts. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n### `pinterest_user_boards`\n\n- **HTTP:** `GET /pinterest/user/{username}/boards`\n- **What:** Get a Pinterest user's boards. Returns a page of a Pinterest user's own boards: name, description, cover image, and pin/follower counts for each. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n### `pinterest_user_pins`\n\n- **HTTP:** `GET /pinterest/user/{username}/pins`\n- **What:** Get a Pinterest user's own pins. Returns a page of a Pinterest user's own pins: title, description, image, board, and pinner for each. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n## LinkedIn (5)\n\n### `linkedin_company`\n\n- **HTTP:** `GET /linkedin/company/{id}`\n- **What:** Get LinkedIn Company info by ID. Returns detailed company information by LinkedIn ID.\n- **Params:** `id` (string, **required**) — LinkedIn Company ID\n\n### `linkedin_product`\n\n- **HTTP:** `GET /linkedin/product/{id}`\n- **What:** Get LinkedIn Product info by ID. Returns detailed product information from LinkedIn by product ID.\n- **Params:** `id` (string, **required**) — LinkedIn Product ID\n\n### `linkedin_product_categories`\n\n- **HTTP:** `GET /linkedin/product/categories`\n- **What:** Discover LinkedIn product categories. Returns the standardized product categories accepted by the products/search endpoint's category_id filter. With a keyword, returns matching categories from LinkedIn's own category search. Without one, returns every known category.\n- **Params:** `keyword` (string, optional) — Narrow results to categories matching this term. Omit to return every known category.\n\n### `linkedin_products_search`\n\n- **HTTP:** `GET /linkedin/products/search`\n- **What:** Search the LinkedIn product directory. Returns one page of LinkedIn's public product directory search results, optionally scoped to a keyword and/or category. Keyword matching is on word prefixes. start is an upstream card offset advanced by the previous response's next_start; LinkedIn's guest search stops returning results at offset 1200.\n- **Params:** `category_id` (string, optional) — Numeric category id from /linkedin/product/categories; `keyword` (string, optional) — Search keyword, matched on word prefixes; `start` (integer, optional) — Upstream card offset, 0 to 1199\n\n### `linkedin_showcase`\n\n- **HTTP:** `GET /linkedin/showcase/{id}`\n- **What:** Get Linkedin Showcase Page Info. Returns detailed information about a LinkedIn showcase page by ID.\n- **Params:** `id` (string, **required**) — LinkedIn Showcase Page ID\n\n## Facebook (2)\n\n### `facebook_marketplace_search`\n\n- **HTTP:** `GET /facebook/marketplace/search`\n- **What:** Search Facebook Marketplace. Fetches Facebook Marketplace search or browse results for a location: listing id, title, price, city/state, and a thumbnail image per result. Only the first page Facebook's own server-rendered results page returns is available — Facebook's own further pagination requires a logged-in session and is out of scope. Omit both query and category to get the location's browse feed instead of running a search. minPrice, maxPrice, sortBy, daysSinceListed, and condition only take effect alongside a query or category (Facebook itself ignores them on the plain browse feed), except for the property_rentals category, which has its own always-filtered listing page. This endpoint can take noticeably longer than other search endpoints (up to roughly a minute in the slowest case) as it retries to get past an intermittent upstream condition; priced accordingly.\n- **Params:** `category` (string, optional) — Marketplace category; `condition` (string, optional) — Comma-separated listing conditions; requires query or category; `days_since_listed` (integer, optional) — Restrict to listings posted within this many days; requires query or category; `location` (string, **required**) — Facebook Marketplace location vanity slug; `max_price` (integer, optional) — Maximum price in whole currency units; requires query or category; `min_price` (integer, optional) — Minimum price in whole currency units; requires query or category; `query` (string, optional) — Free-text search terms; omit (with category) for the location's browse feed; `sort_by` (string, optional) — Result order; requires query or category\n\n### `facebook_page`\n\n- **HTTP:** `GET /facebook/{page}`\n- **What:** Get Facebook page details. Fetches public data about a Facebook Page given its page ID, vanity name, or full page URL: name, follower/like counts, intro, category, business hours/price range, review count, and any public contact details (email, phone, address, website, WhatsApp number) exposed on the Page's About tab.\n- **Params:** `page` (string, **required**) — Facebook Page reference: vanity name, handle, profile.php id, or full Facebook URL\n\n## Reddit (12)\n\n### `reddit_comments`\n\n- **HTTP:** `GET /reddit/comments/{id}`\n- **What:** Get Reddit post comments. Returns a Reddit post with its public comments. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return the server-rendered comments with public net score and award count plus post engagement metrics for 3 credits. Large threads may expose only an initial comment subset in anonymous HTML. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. A post that exists but has no comments yet returns a 200 response with an empty comments list; a post that does not exist returns 404, and a temporary block or upstream failure returns 503 (retryable) rather than 404. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `depth` (integer, optional) — Maximum flat comment depth returned in metrics mode.; `id` (string, **required**) — Reddit post id or t3_ id; `include_metrics` (boolean, optional) — Include public post and per-comment engagement metrics; costs 3 credits instead of 1; `limit` (integer, optional) — Maximum comments returned, defaults to 25 and clamps to 100; `sort` (string, optional) — Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.\n\n### `reddit_domain_posts`\n\n- **HTTP:** `GET /reddit/domain/{domain}/posts`\n- **What:** List Reddit domain posts. Returns normalized public posts submitted from a linked domain. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `domain` (string, **required**) — Domain hostname, without scheme or path; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_leads`\n\n- **HTTP:** `GET /reddit/leads`\n- **What:** Find Reddit buying-intent leads. Scans a Reddit search page for people actively asking for a product or service, scores each post 0-10 for buying intent, and returns them ranked highest-first with the signals that fired. Self-promotion, hiring posts, freelancer service adverts, revenue-milestone posts, duplicate reposts, and Title Case article headlines are filtered out before scoring. A deterministic prefilter always runs; when `classifier` resolves to `llm` the surviving candidates are additionally refined in one batched model call. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native Reddit search failures can use the internal Redlib provider while the existing lead-response fields and credit weights are preserved.\n- **Params:** `classifier` (string, optional) — Classifier: auto uses the model when configured, heuristic skips it, llm requires it; `limit` (integer, optional) — Maximum leads returned, defaults to 25 and clamps to 100; `min_score` (integer, optional) — Minimum buying-intent score to return, 0-10, defaults to 4; `q` (string, **required**) — What you offer, in plain language; `sort` (string, optional) — Sort: relevance, hot, new, top, or comments; `subreddit` (string, optional) — Restrict the search to a subreddit name, without r/; `time` (string, optional) — Time window: hour, day, week, month, year, or all\n\n### `reddit_post`\n\n- **HTTP:** `GET /reddit/post/{id}`\n- **What:** Get Reddit post. Returns a normalized public Reddit post. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return public net score, upvote ratio, comment count, award count, and estimated upvote/downvote totals for 3 credits. Reddit fuzzes voting data, so estimates are approximate; share, repost/crosspost, and view counts are not exposed anonymously. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `id` (string, **required**) — Reddit post id or t3_ id; `include_metrics` (boolean, optional) — Include public engagement metrics; costs 3 credits instead of 1\n\n### `reddit_search`\n\n- **HTTP:** `GET /reddit/search`\n- **What:** Search Reddit posts. Searches public Reddit content and returns normalized public post entries. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `q` (string, **required**) — Search keywords; `sort` (string, optional) — Sort: relevance, hot, new, top, or comments; `subreddit` (string, optional) — Restrict search to a subreddit name, without r/; `time` (string, optional) — Time window for top/comments sorts: hour, day, week, month, year, or all\n\n### `reddit_subreddit_about`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/about`\n- **What:** Get Reddit subreddit metadata. Returns public metadata and sample posts for a subreddit. Subscriber counts, icons, and banners are omitted because they are not available on anonymous Reddit pages. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `limit` (integer, optional) — Maximum sample posts inspected, defaults to 25 and clamps to 100; `subreddit` (string, **required**) — Subreddit name, without r/\n\n### `reddit_subreddit_comments`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/comments`\n- **What:** List Reddit subreddit comments. Returns flat public comment entries from a subreddit latest-comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum comments, defaults to 25 and clamps to 100; `subreddit` (string, **required**) — Subreddit name, without r/\n\n### `reddit_subreddit_posts`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/posts`\n- **What:** List Reddit subreddit posts. Returns normalized public posts from a subreddit. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `subreddit` (string, **required**) — Subreddit name, without r/; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_subreddits_posts`\n\n- **HTTP:** `GET /reddit/subreddits/posts`\n- **What:** List Reddit multi-subreddit posts. Returns normalized public posts from a combined multi-subreddit feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `subreddits` (string, **required**) — Comma-separated subreddit names, without r/, maximum 10; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_trends`\n\n- **HTTP:** `GET /reddit/trends`\n- **What:** List Reddit trends. Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, rising, or top; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_user_comments`\n\n- **HTTP:** `GET /reddit/user/{username}/comments`\n- **What:** List Reddit user comments. Returns flat public comment entries from a public Reddit user's comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum comments, defaults to 25 and clamps to 100; `username` (string, **required**) — Public Reddit username, without u/\n\n### `reddit_user_posts`\n\n- **HTTP:** `GET /reddit/user/{username}/posts`\n- **What:** List Reddit user posts. Returns normalized public posts from a public Reddit user's submitted feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `username` (string, **required**) — Public Reddit username, without u/\n\n## Bilibili (8)\n\n### `bilibili_anime_home`\n\n- **HTTP:** `GET /bilibili/anime-home`\n- **What:** Get Bilibili anime home sections. Returns the anonymous anime homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.\n- **Params:** _none_\n\n### `bilibili_autocomplete`\n\n- **HTTP:** `GET /bilibili/autocomplete`\n- **What:** Get Bilibili search suggestions. Returns Bilibili search-box query suggestions for partial text. An empty suggestion list is a valid response when nothing matches.\n- **Params:** `q` (string, **required**) — Partial search text\n\n### `bilibili_guochuang_home`\n\n- **HTTP:** `GET /bilibili/guochuang-home`\n- **What:** Get Bilibili Chinese-animation home sections. Returns the anonymous Chinese-animation homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.\n- **Params:** _none_\n\n### `bilibili_must_watch`\n\n- **HTTP:** `GET /bilibili/must-watch`\n- **What:** Get Bilibili's curated must-watch videos. Returns Bilibili's curated must-watch collection, separated into established classics and the latest additions.\n- **Params:** _none_\n\n### `bilibili_popular`\n\n- **HTTP:** `GET /bilibili/popular`\n- **What:** Get current popular Bilibili videos. Returns Bilibili's current popular-video feed in upstream order. Pass next_cursor back as cursor to continue to the next batch.\n- **Params:** `cursor` (integer, optional) — Upstream cursor from the previous response; defaults to 0\n\n### `bilibili_ranking`\n\n- **HTTP:** `GET /bilibili/ranking`\n- **What:** Get the current Bilibili all-site ranking. Returns the current official all-site ranking with video engagement, category, and creator metadata in rank order.\n- **Params:** _none_\n\n### `bilibili_vertical_home`\n\n- **HTTP:** `GET /bilibili/vertical-home`\n- **What:** Get Bilibili documentary, movie, TV, or variety home sections. Returns stable server-rendered editorial sections for one Bilibili vertical. Allowed category values: documentary, movie, tv, variety. Rotating feeds, pagination, account state, and streaming URLs are excluded.\n- **Params:** `category` (string, **required**) — Vertical: documentary, movie, tv, variety\n\n### `bilibili_weekly`\n\n- **HTTP:** `GET /bilibili/weekly`\n- **What:** Get a Bilibili weekly selected-video issue. Returns one issue from Bilibili's weekly selected-video archive. Omit number to resolve and return the latest issue.\n- **Params:** `number` (integer, optional) — Positive issue number; omit for the latest issue\n\n## Patreon (4)\n\n### `patreon_creator`\n\n- **HTTP:** `GET /patreon/creator`\n- **What:** Get a public Patreon creator profile. Returns public profile metadata from a creator's Patreon page: creator identity, summary, images, membership and creation counts, public earnings snapshot, membership/RSS availability flags, and public external profile links. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.\n- **Params:** `handle` (string, **required**) — Creator page handle\n\n### `patreon_creator_tiers`\n\n- **HTTP:** `GET /patreon/creator/tiers`\n- **What:** Get a creator's public Patreon membership tiers. Returns published membership tiers and their published benefits from a creator's public Patreon page. It excludes member-only entitlements, tier capacity, and member counts. handle is the creator's page handle, e.g. CachyOS for patreon.com/CachyOS.\n- **Params:** `handle` (string, **required**) — Creator page handle\n\n### `patreon_explore`\n\n- **HTTP:** `GET /patreon/explore`\n- **What:** Browse public Patreon creators by topic. Returns Patreon's public curated creator shelves for one topic: Top creators, Popular this week, and New on Patreon. topic must be one of podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact.\n- **Params:** `topic` (string, **required**) — Public Explore topic. Allowed values: podcasts_and_shows, visual_arts, tabletop_games, video_games, music, lifestyle, writing, handicrafts, apps_and_software, social_impact\n\n### `patreon_rss`\n\n- **HTTP:** `GET /patreon/rss`\n- **What:** Get an explicitly public Patreon podcast RSS feed. Returns public podcast channel metadata and episodes from Patreon's canonical public RSS feed. campaign_id and show_id are the numeric IDs in the public feed URL. Private member feeds and authentication URLs are not supported.\n- **Params:** `campaign_id` (string, **required**) — Numeric Patreon campaign id; `show_id` (string, **required**) — Numeric Patreon show id\n\nFile v1.0.21:skill-card.md\n\n## Description:\n\nResearches public social-media profiles, posts, trends, and marketplace listings through the Crawlora API, with optional Reddit lead discovery when explicitly requested.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nResearchers, marketers, and other users can examine public profiles, posts, engagement, and trends across social platforms. They can also search Facebook Marketplace listings or, when explicitly requested, public Reddit posts for buying-intent leads.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Social-media queries and identifiers are sent to Crawlora's external API.\n\nMitigation: Avoid secrets, confidential business data, and sensitive personal information in queries or identifiers.\n\nRisk: Public Reddit lead discovery can be used for sales prospecting or sensitive targeting.\n\nMitigation: Use lead discovery only when explicitly requested, and avoid sensitive targeting.\n\n## Reference(s):\n\n- [Skill endpoint reference](artifact/reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [ClawHub skill release](https://clawhub.ai/crawlora-org/skills/social-media-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, Shell commands, Guidance]\n\n**Output Format:** [Natural-language summaries or structured JSON, with shell commands when useful]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Public-data scope; platform coverage varies and list results may be paginated.]\n\n## Skill Version(s):\n\n1.0.21 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.20: 5 files, 15569 bytes\n\nFiles: reference/endpoints.md (41789b), scripts/crawlora.sh (6805b), skill-card.md (1864b), SKILL.md (4997b), _meta.json (141b)\n\nFile v1.0.20:SKILL.md\n\n---\nname: social-media-research\ndescription: Researches social-media profiles, posts, and engagement across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon via the Crawlora API, returning clean JSON. Use when the user wants a public profile's stats, a post's content/engagement, a platform search, trending topics, or social listening/competitor research — instead of scraping each app.\n---\n\n# Social media research\n\nLook up public profiles, posts, and engagement, run keyword/hashtag search,\nand track trending topics across eleven social platforms — all as normalized\nJSON from the Crawlora API, no app scraping or unofficial client libraries.\n\n## When to use this skill\n\n- \"What's <handle>'s profile / follower count / recent posts on <platform>?\"\n- \"Pull this post's engagement (likes, comments, shares).\"\n- \"Search <platform> for posts about <topic/hashtag>.\"\n- \"What's trending on <platform> right now?\"\n- Competitor social-listening, influencer research, or brand-mention monitoring.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the platform, then the job:\n\n1. **Profile** — `/instagram/profile/{username}`, `/tiktok/profile/{handler}`,\n   `/threads/profile/{username}`, `/bluesky/profile`, `/x/profile/{username}`,\n   `/pinterest/user/{username}`, `/linkedin/company/{id}`,\n   `/facebook/{page}`, `/reddit/user/{username}/posts`.\n2. **Posts / feed** — `/instagram/reels/{id}`, `/tiktok/posts`,\n   `/threads/profile/{username}/posts`, `/bluesky/author-feed`,\n   `/x/profile/{username}/posts`, `/pinterest/user/{username}/pins`,\n   `/reddit/subreddit/{subreddit}/posts`.\n3. **One post/pin/pin detail** — `/instagram/post/{id}/{post_id}`,\n   `/tiktok/post/{id}`, `/threads/post/{username}/{code}` (+ `/replies`),\n   `/bluesky/post-thread`, `/x/post/{id}`, `/pinterest/pin/{id}`,\n   `/reddit/post/{id}` (+ `/reddit/comments/{id}`).\n4. **Search & discovery** — `/tiktok/search`, `/tiktok/search_hashtag`,\n   `/bluesky/search-actors`, `/pinterest/search`, `/reddit/search`,\n   `/facebook/marketplace/search` (listings, not social posts), plus Bilibili\n   and Patreon's public discovery endpoints listed in the reference.\n5. **Trending** — `/tiktok/trending`, `/tiktok/creative-center/hashtags`,\n   `/bluesky/trending-topics`, `/reddit/trends`, `/reddit/subreddits/posts`\n   (multi-subreddit hot feed).\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Profile + posts:\nscripts/crawlora.sh /tiktok/profile/nasa | jq '.'\nscripts/crawlora.sh /reddit/user/spez/posts | jq '.'\n\n# Search:\nscripts/crawlora.sh /tiktok/search keyword=\"ai agents\" | jq '.'\nscripts/crawlora.sh /reddit/search q=\"web scraping\" | jq '.'\n\n# Trending:\nscripts/crawlora.sh /tiktok/trending | jq '.'\nscripts/crawlora.sh /bluesky/trending-topics | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every Instagram,\nTikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili,\nand Patreon endpoint this skill uses.\n\n## Examples\n\n- **Competitor social audit:** pull profile + recent posts on each platform\n  a competitor is active on, compare follower counts and post cadence.\n- **Brand-mention sweep:** `/reddit/search`, `/tiktok/search`, and\n  `/pinterest/search` for the same brand/product name, aggregate volume and\n  sentiment cues from captions/comments.\n- **Influencer vetting:** profile + recent posts to check follower count,\n  engagement rate (likes/comments per post), and posting consistency before\n  a partnership.\n- **Trending-topic scan:** `/tiktok/trending` + `/bluesky/trending-topics` +\n  `/reddit/trends` for a same-day cross-platform snapshot.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public profiles/posts; no login, no private content.\n  Respect each platform's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **Coverage varies by platform**: X and Instagram expose a narrower public\n  surface (profile + recent posts) than TikTok or Reddit (full search +\n  trending); check `reference/endpoints.md` before assuming an endpoint exists.\n- List endpoints are cursor- or page-paginated — follow the returned cursor\n  to walk beyond the first page.\n\nFile v1.0.20:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"social-media-research\",\n  \"version\": \"1.0.20\",\n  \"publishedAt\": 1791163428045\n}\n\nFile v1.0.20:reference/endpoints.md\n\n# social-media-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**86 endpoints across 11 platform group(s).**\n\n## Instagram (3)\n\n### `instagram_post`\n\n- **HTTP:** `GET /instagram/post/{id}/{post_id}`\n- **What:** Retrieve a specific Instagram post by URL shortcode. Returns media details for an Instagram URL shortcode. Use media.code from the reels response or shortcode from a public post URL; numeric media IDs are rejected.\n- **Params:** `id` (string, **required**) — Instagram user ID retained for route compatibility; ownership is not verified; `post_id` (string, **required**) — Instagram URL shortcode (media.code), not a numeric media ID\n\n### `instagram_profile`\n\n- **HTTP:** `GET /instagram/profile/{username}`\n- **What:** Retrieve an Instagram user profile by username. Returns public profile details for a specified Instagram username.\n- **Params:** `username` (string, **required**) — Instagram username\n\n### `instagram_reels`\n\n- **HTTP:** `GET /instagram/reels/{id}`\n- **What:** Retrieve Instagram Reels for a user. Returns a feed of Instagram Reels for the specified user ID. Supports pagination via `max_id`.\n- **Params:** `id` (string, **required**) — Numeric Instagram user ID (not a username); `max_id` (string, optional) — Pagination cursor for fetching the next page of Reels\n\n## TikTok (25)\n\n### `tiktok_category`\n\n- **HTTP:** `GET /tiktok/category`\n- **What:** List TikTok explore categories. Returns the category list exposed by the TikTok Explore page.\n- **Params:** _none_\n\n### `tiktok_challenge`\n\n- **HTTP:** `GET /tiktok/hashtag/{name}`\n- **What:** Retrieve TikTok hashtag details. Returns the metadata payload for a TikTok hashtag page.\n- **Params:** `name` (string, **required**) — Hashtag name (e.g., 'christmas')\n\n### `tiktok_challenge_list`\n\n- **HTTP:** `GET /tiktok/hashtags`\n- **What:** Retrieve TikTok hashtag posts. Returns the videos listed for a TikTok hashtag id with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `id` (string, **required**) — Hashtag id returned by the hashtag detail endpoint\n\n### `tiktok_comments`\n\n- **HTTP:** `GET /tiktok/comments`\n- **What:** Retrieve TikTok video comments. Returns top-level TikTok video comments with cursor-based pagination.\n- **Params:** `aweme_id` (string, **required**) — TikTok video id from the video URL; `cursor` (integer, optional) — Pagination cursor\n\n### `tiktok_creative_center_hashtags`\n\n- **HTTP:** `GET /tiktok/creative-center/hashtags`\n- **What:** Retrieve TikTok Creative Center trending hashtags. Returns TikTok Creative Center's ranked trending hashtags for a country and period. TikTok gates this endpoint's full result set behind a logged-in TikTok One account: an anonymous request always receives at most 3 hashtags regardless of country or period.\n- **Params:** `country_code` (string, **required**) — ISO-2 country code; `period` (integer, optional) — Lookback window in days\n\n### `tiktok_creative_center_videos`\n\n- **HTTP:** `GET /tiktok/creative-center/videos`\n- **What:** Retrieve TikTok Creative Center trending videos. Returns TikTok Creative Center's ranked trending videos for a country, period, and sort order. TikTok reports the true result-set size (see total_count/page_count in the response) but gates access to it behind a logged-in TikTok One account: an anonymous request always receives page 1 (4 videos) regardless of sort order or period. Country coverage is uneven: US, JP, ID, VN, and TH reliably return populated results; other countries have been observed to return an empty videos array (a genuine no-data response, not an error).\n- **Params:** `content_label_id` (string, optional) — Content tag id to filter by; `country_code` (string, **required**) — ISO-2 country code; `organic_only` (boolean, optional) — Restrict to organic (non-paid) videos only; `period` (integer, optional) — Lookback window in days; `sort_by` (string, optional) — Sort order\n\n### `tiktok_explore`\n\n- **HTTP:** `GET /tiktok/explore/{id}`\n- **What:** Retrieve the TikTok explore feed for a category. Returns explore videos for a TikTok category id from the category endpoint.\n- **Params:** `id` (integer, **required**) — Category type id returned by the category endpoint\n\n### `tiktok_popular_trend_country_industry_meta`\n\n- **HTTP:** `GET /tiktok/popular-trend/country-industry-meta`\n- **What:** Retrieve TikTok popular-trend country and industry metadata. Returns the country and industry metadata used by the TikTok Creative Center popular-trend endpoints.\n- **Params:** _none_\n\n### `tiktok_post`\n\n- **HTTP:** `GET /tiktok/post/{id}`\n- **What:** Retrieve TikTok video details. Returns the TikTok video detail payload for a video id.\n- **Params:** `id` (string, **required**) — TikTok video id\n\n### `tiktok_posts`\n\n- **HTTP:** `GET /tiktok/posts`\n- **What:** Retrieve posts from a TikTok profile. Returns posts from a TikTok profile by `secUid`, with optional cursor pagination and sort mode.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `secUid` (string, **required**) — TikTok secUid for the profile; `sort_type` (integer, optional) — Sort mode: 0 latest, 1 popular, 2 oldest\n\n### `tiktok_profile`\n\n- **HTTP:** `GET /tiktok/profile/{handler}`\n- **What:** Retrieve a TikTok profile. Returns the TikTok profile payload for a public handle.\n- **Params:** `handler` (string, **required**) — TikTok handle without the leading @\n\n### `tiktok_search`\n\n- **HTTP:** `GET /tiktok/search`\n- **What:** Search TikTok videos. Searches TikTok videos by keyword with cursor-based pagination.\n- **Params:** `count` (integer, optional) — Result count, clamped to 50; `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_search_hashtag`\n\n- **HTTP:** `GET /tiktok/search/hashtag`\n- **What:** Search TikTok hashtags. Searches TikTok hashtags/challenges by keyword with cursor-based pagination.\n- **Params:** `count` (integer, optional) — Result count, clamped to 50; `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_search_user`\n\n- **HTTP:** `GET /tiktok/search/user`\n- **What:** Search TikTok users. Searches TikTok users by keyword with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `keyword` (string, **required**) — Search keyword\n\n### `tiktok_top_ads_analysis`\n\n- **HTTP:** `GET /tiktok/top-ads/analysis`\n- **What:** Retrieve TikTok Top Ads interactive time analysis. Returns the detail-page interactive time analysis chart and percentile for a Top Ads material. Metric values are `retain_ctr` (CTR), `retain_cvr` (CVR), `click_cnt` (Clicks), `convert_cnt` (Conversion), and `play_retain_cnt` (Remain).\n- **Params:** `material_id` (string, **required**) — Top Ads material id; `metric` (string, optional) — Interactive time analysis metric; `period_type` (integer, optional) — Percentile lookback period in days\n\n### `tiktok_top_ads_detail`\n\n- **HTTP:** `GET /tiktok/top-ads/detail`\n- **What:** Retrieve TikTok Top Ads detail. Returns detail for one TikTok Creative Center Top Ads material. Use `material_id`; the upstream does not accept `id` or `materialId`.\n- **Params:** `material_id` (string, **required**) — Top Ads material id\n\n### `tiktok_top_ads_filters`\n\n- **HTTP:** `GET /tiktok/top-ads/filters`\n- **What:** Retrieve TikTok Top Ads filters. Returns filter metadata for TikTok Creative Center Top Ads. Dynamic values come from TikTok; static UI enums are included for `order_by`, `duration`, `like`, and `ad_format`.\n- **Params:** _none_\n\n### `tiktok_top_ads_list`\n\n- **HTTP:** `GET /tiktok/top-ads/list`\n- **What:** Retrieve TikTok Top Ads. Returns high-performing auction ads from TikTok Creative Center. The service defaults `period` to 30, `page` to 1, `limit` to 20, and `order_by` to `for_you`. Use `/tiktok/top-ads/filters` for dynamic enum values and static enums for order, duration, likes, and ad format.\n- **Params:** `ad_format` (string, optional) — Ad format id; `ad_language` (string, optional) — Ad language id or comma-separated ids from /tiktok/top-ads/filters; `country_code` (string, optional) — Country code or comma-separated country codes from /tiktok/top-ads/filters; `duration` (string, optional) — Video duration bucket; `industry` (string, optional) — Industry filter id or comma-separated ids from /tiktok/top-ads/filters; `keyword` (string, optional) — Brand or product keyword search; `like` (string, optional) — Like percentile bucket id or comma-separated ids; `limit` (integer, optional) — Maximum number of ads to return; `objective` (string, optional) — Objective filter id or comma-separated ids from /tiktok/top-ads/filters; `order_by` (string, optional) — Sort order; `page` (integer, optional) — Page number; `pattern_label` (string, optional) — Pattern label id or comma-separated ids from /tiktok/top-ads/filters; `period` (integer, optional) — Lookback period in days\n\n### `tiktok_top_ads_location_info`\n\n- **HTTP:** `GET /tiktok/top-ads/location-info`\n- **What:** Retrieve TikTok Top Ads location info. Returns the initial location and industry context used by TikTok Creative Center Top Ads.\n- **Params:** `module` (integer, optional) — Creative Center module id\n\n### `tiktok_top_ads_locations`\n\n- **HTTP:** `GET /tiktok/top-ads/locations`\n- **What:** Retrieve TikTok Top Ads locations. Returns available Top Ads location filters from TikTok Creative Center.\n- **Params:** _none_\n\n### `tiktok_top_ads_recommend`\n\n- **HTTP:** `GET /tiktok/top-ads/recommend`\n- **What:** Retrieve TikTok Top Ads recommendations. Returns recommended Top Ads materials related to a material id.\n- **Params:** `limit` (integer, optional) — Maximum number of ads to return; `material_id` (string, **required**) — Top Ads material id; `page` (integer, optional) — Page number\n\n### `tiktok_top_ads_safety`\n\n- **HTTP:** `GET /tiktok/top-ads/safety`\n- **What:** Retrieve TikTok Top Ads safety configuration. Returns public Creative Center safety configuration flags related to search surfaces.\n- **Params:** _none_\n\n### `tiktok_top_ads_spotlight`\n\n- **HTTP:** `GET /tiktok/top-ads/spotlight`\n- **What:** Retrieve TikTok Top Ads Spotlight. Returns Top Ads Spotlight materials handpicked by TikTok Creative Center.\n- **Params:** `limit` (integer, optional) — Maximum number of ads to return; `page` (integer, optional) — Page number\n\n### `tiktok_top_ads_suggestions`\n\n- **HTTP:** `GET /tiktok/top-ads/suggestions`\n- **What:** Retrieve TikTok Top Ads suggestions. Returns Top Ads search suggestions from TikTok Creative Center.\n- **Params:** `count` (integer, optional) — Maximum number of suggestions to return; `scenario` (integer, optional) — Suggestion scenario id\n\n### `tiktok_trending`\n\n- **HTTP:** `GET /tiktok/trending`\n- **What:** Retrieve TikTok trending posts. Returns the current TikTok trending feed.\n- **Params:** _none_\n\n## Threads (5)\n\n### `threads_post`\n\n- **HTTP:** `GET /threads/post/{username}/{code}`\n- **What:** Retrieve a public Threads post. Returns the public text, author, canonical URL, and preview image for a Threads post.\n- **Params:** `code` (string, **required**) — Threads post code; `username` (string, **required**) — Threads username\n\n### `threads_post_replies`\n\n- **HTTP:** `GET /threads/post/{username}/{code}/replies`\n- **What:** Retrieve public replies to a Threads post. Returns the public replies currently exposed to logged-out visitors. The response identifies when Threads reports additional replies but withholds a usable continuation cursor.\n- **Params:** `code` (string, **required**) — Threads post code; `username` (string, **required**) — Threads username\n\n### `threads_profile`\n\n- **HTTP:** `GET /threads/profile/{username}`\n- **What:** Retrieve a public Threads profile. Returns public profile metadata for a Threads username, including the visible biography and counts.\n- **Params:** `username` (string, **required**) — Threads username\n\n### `threads_profile_posts`\n\n- **HTTP:** `GET /threads/profile/{username}/posts`\n- **What:** Retrieve public posts from a Threads profile. Returns public profile posts with an opaque continuation cursor when more posts are available.\n- **Params:** `cursor` (string, optional) — Opaque cursor returned by the previous response; `username` (string, **required**) — Threads username\n\n### `threads_search`\n\n- **HTTP:** `GET /threads/search`\n- **What:** Search public Threads posts. Returns the public first page of Threads search results for a query. Logged-out search does not expose a continuation cursor.\n- **Params:** `q` (string, **required**) — Search query (1-100 characters)\n\n## Bluesky (11)\n\n### `bluesky_author_feed`\n\n- **HTTP:** `GET /bluesky/author-feed`\n- **What:** A Bluesky account's posts. Returns a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_followers`\n\n- **HTTP:** `GET /bluesky/followers`\n- **What:** A Bluesky account's followers. Returns a page of a Bluesky account's followers. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_follows`\n\n- **HTTP:** `GET /bluesky/follows`\n- **What:** Accounts a Bluesky account follows. Returns a page of the accounts a Bluesky account follows. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID; `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100\n\n### `bluesky_post_likes`\n\n- **HTTP:** `GET /bluesky/post-likes`\n- **What:** List actors who liked a Bluesky post. Returns public actors who liked a post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The post's at:// URI\n\n### `bluesky_post_quotes`\n\n- **HTTP:** `GET /bluesky/post-quotes`\n- **What:** List quotes of a Bluesky post. Returns public posts that quote the specified post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The quoted post's at:// URI\n\n### `bluesky_post_reposted_by`\n\n- **HTTP:** `GET /bluesky/post-reposted-by`\n- **What:** List actors who reposted a Bluesky post. Returns public actors who reposted a post, with an optional cursor for pagination.\n- **Params:** `cursor` (string, optional) — Pagination cursor; `limit` (integer, optional) — Page size, 1-100; `uri` (string, **required**) — The post's at:// URI\n\n### `bluesky_post_thread`\n\n- **HTTP:** `GET /bluesky/post-thread`\n- **What:** A Bluesky post and its reply tree. Returns a Bluesky post along with its nested replies (and, when the post is itself a reply, its parent chain), up to `depth` levels deep. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `depth` (integer, optional) — Reply-tree depth, 1-10; `uri` (string, **required**) — The post's at:// URI, e.g. from an author-feed or search-actors result's post uri field\n\n### `bluesky_posts`\n\n- **HTTP:** `GET /bluesky/posts`\n- **What:** Look up Bluesky posts in a batch. Returns public Bluesky posts for 1-25 at:// post URIs. Missing, deleted, or blocked posts are omitted when the public AppView omits them.\n- **Params:** `uris` (array, **required**) — One or more at:// post URIs (1-25); repeat the parameter for multiple URIs\n\n### `bluesky_profile`\n\n- **HTTP:** `GET /bluesky/profile`\n- **What:** A Bluesky account's full public profile. Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `actor` (string, **required**) — A handle (e.g. bsky.app) or DID (e.g. did:plc:z72i7hdynmk6r22z27h6tvur)\n\n### `bluesky_search_actors`\n\n- **HTTP:** `GET /bluesky/search-actors`\n- **What:** Search Bluesky accounts. Returns Bluesky accounts matching a query against display name, handle, and profile description. Public data, sourced from the AT Protocol's public, credential-free AppView API.\n- **Params:** `cursor` (string, optional) — Pagination cursor from a previous response's cursor field; `limit` (integer, optional) — Page size, 1-100; `q` (string, **required**) — Search text\n\n### `bluesky_trending_topics`\n\n- **HTTP:** `GET /bluesky/trending-topics`\n- **What:** Bluesky's current trending topics. Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. Public data, sourced from the AT Protocol's public, credential-free AppView API. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.\n- **Params:** _none_\n\n## X (3)\n\n### `x_post`\n\n- **HTTP:** `GET /x/post/{id}`\n- **What:** Retrieve an X post. Returns a public X post by numeric post id, including author, text, visible metrics, and a quoted post preview when present.\n- **Params:** `id` (string, **required**) — X post id; `username` (string, optional) — Expected author username. When provided, mismatched authors return 404.\n\n### `x_profile`\n\n- **HTTP:** `GET /x/profile/{username}`\n- **What:** Retrieve an X profile. Returns public profile details for an X username, including visible counts and profile media when available.\n- **Params:** `username` (string, **required**) — X username\n\n### `x_profile_posts`\n\n- **HTTP:** `GET /x/profile/{username}/posts`\n- **What:** List public X profile posts. Returns posts present in the first public profile page payload for an X username. The endpoint does not paginate replies, media-only tabs, or search results.\n- **Params:** `limit` (integer, optional) — Maximum posts returned from the first page payload. Defaults to 20 and must be 1-50.; `username` (string, **required**) — X username\n\n## Pinterest (8)\n\n### `pinterest_board`\n\n- **HTTP:** `GET /pinterest/board/{username}/{slug}`\n- **What:** Get a Pinterest board's detail. Returns a Pinterest board's metadata (name, description, cover image, pin/follower counts, owner) plus a page of pins from that board. Public data sourced from Pinterest's own board pages.\n- **Params:** `slug` (string, **required**) — Board URL slug, from the board's own /{username}/{slug}/ URL; `username` (string, **required**) — Pinterest username that owns the board\n\n### `pinterest_categories`\n\n- **HTTP:** `GET /pinterest/categories`\n- **What:** Get Pinterest's \"Ideas\" category list. Returns Pinterest's top-level \"Ideas\" category taxonomy (e.g. \"Animals\", \"Home Decor\", \"Food And Drink\"). Each entry's id is usable directly with GET /pinterest/ideas/{id}. Public data sourced from Pinterest's own ideas.pinterest.com-style category hub.\n- **Params:** _none_\n\n### `pinterest_idea`\n\n- **HTTP:** `GET /pinterest/ideas/{id}`\n- **What:** Get a Pinterest \"Ideas\" category's detail feed. Returns one \"Ideas\" category's metadata (name, description, follower count) plus a page of pins from that category's feed. Public data sourced from Pinterest's own ideas category pages.\n- **Params:** `id` (string, **required**) — Pinterest ideas category id. See GET /pinterest/categories for the full list.\n\n### `pinterest_pin`\n\n- **HTTP:** `GET /pinterest/pin/{id}`\n- **What:** Get a Pinterest pin's full detail. Returns a single Pinterest pin's full detail: title, description, image, board, pinner, comment count, save count, and creation time. Public data sourced from Pinterest's own pin pages.\n- **Params:** `id` (string, **required**) — Pinterest pin id\n\n### `pinterest_search`\n\n- **HTTP:** `GET /pinterest/search`\n- **What:** Search Pinterest pins. Returns public Pinterest pins matching a text query: title, description, image, board, and pinner for each result. Public data sourced from Pinterest's own web search.\n- **Params:** `query` (string, **required**) — Search text\n\n### `pinterest_user`\n\n- **HTTP:** `GET /pinterest/user/{username}`\n- **What:** Get a Pinterest user's public profile. Returns a Pinterest user's public profile: display name, bio, website, avatar, and follower/following/pin/board counts. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n### `pinterest_user_boards`\n\n- **HTTP:** `GET /pinterest/user/{username}/boards`\n- **What:** Get a Pinterest user's boards. Returns a page of a Pinterest user's own boards: name, description, cover image, and pin/follower counts for each. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n### `pinterest_user_pins`\n\n- **HTTP:** `GET /pinterest/user/{username}/pins`\n- **What:** Get a Pinterest user's own pins. Returns a page of a Pinterest user's own pins: title, description, image, board, and pinner for each. Public data sourced from Pinterest's own profile pages.\n- **Params:** `username` (string, **required**) — Pinterest username\n\n## LinkedIn (5)\n\n### `linkedin_company`\n\n- **HTTP:** `GET /linkedin/company/{id}`\n- **What:** Get LinkedIn Company info by ID. Returns detailed company information by LinkedIn ID.\n- **Params:** `id` (string, **required**) — LinkedIn Company ID\n\n### `linkedin_product`\n\n- **HTTP:** `GET /linkedin/product/{id}`\n- **What:** Get LinkedIn Product info by ID. Returns detailed product information from LinkedIn by product ID.\n- **Params:** `id` (string, **required**) — LinkedIn Product ID\n\n### `linkedin_product_categories`\n\n- **HTTP:** `GET /linkedin/product/categories`\n- **What:** Discover LinkedIn product categories. Returns the standardized product categories accepted by the products/search endpoint's category_id filter. With a keyword, returns matching categories from LinkedIn's own category search. Without one, returns every known category.\n- **Params:** `keyword` (string, optional) — Narrow results to categories matching this term. Omit to return every known category.\n\n### `linkedin_products_search`\n\n- **HTTP:** `GET /linkedin/products/search`\n- **What:** Search the LinkedIn product directory. Returns one page of LinkedIn's public product directory search results, optionally scoped to a keyword and/or category. Keyword matching is on word prefixes. start is an upstream card offset advanced by the previous response's next_start; LinkedIn's guest search stops returning results at offset 1200.\n- **Params:** `category_id` (string, optional) — Numeric category id from /linkedin/product/categories; `keyword` (string, optional) — Search keyword, matched on word prefixes; `start` (integer, optional) — Upstream card offset, 0 to 1199\n\n### `linkedin_showcase`\n\n- **HTTP:** `GET /linkedin/showcase/{id}`\n- **What:** Get Linkedin Showcase Page Info. Returns detailed information about a LinkedIn showcase page by ID.\n- **Params:** `id` (string, **required**) — LinkedIn Showcase Page ID\n\n## Facebook (2)\n\n### `facebook_marketplace_search`\n\n- **HTTP:** `GET /facebook/marketplace/search`\n- **What:** Search Facebook Marketplace. Fetches Facebook Marketplace search or browse results for a location: listing id, title, price, city/state, and a thumbnail image per result. Only the first page Facebook's own server-rendered results page returns is available — Facebook's own further pagination requires a logged-in session and is out of scope. Omit both query and category to get the location's browse feed instead of running a search. minPrice, maxPrice, sortBy, daysSinceListed, and condition only take effect alongside a query or category (Facebook itself ignores them on the plain browse feed), except for the property_rentals category, which has its own always-filtered listing page. This endpoint can take noticeably longer than other search endpoints (up to roughly a minute in the slowest case) as it retries to get past an intermittent upstream condition; priced accordingly.\n- **Params:** `category` (string, optional) — Marketplace category; `condition` (string, optional) — Comma-separated listing conditions; requires query or category; `days_since_listed` (integer, optional) — Restrict to listings posted within this many days; requires query or category; `location` (string, **required**) — Facebook Marketplace location vanity slug; `max_price` (integer, optional) — Maximum price in whole currency units; requires query or category; `min_price` (integer, optional) — Minimum price in whole currency units; requires query or category; `query` (string, optional) — Free-text search terms; omit (with category) for the location's browse feed; `sort_by` (string, optional) — Result order; requires query or category\n\n### `facebook_page`\n\n- **HTTP:** `GET /facebook/{page}`\n- **What:** Get Facebook page details. Fetches public data about a Facebook Page given its page ID, vanity name, or full page URL: name, follower/like counts, intro, category, business hours/price range, review count, and any public contact details (email, phone, address, website, WhatsApp number) exposed on the Page's About tab.\n- **Params:** `page` (string, **required**) — Facebook Page reference: vanity name, handle, profile.php id, or full Facebook URL\n\n## Reddit (12)\n\n### `reddit_comments`\n\n- **HTTP:** `GET /reddit/comments/{id}`\n- **What:** Get Reddit post comments. Returns a Reddit post with its public comments. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return the server-rendered comments with public net score and award count plus post engagement metrics for 3 credits. Large threads may expose only an initial comment subset in anonymous HTML. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. A post that exists but has no comments yet returns a 200 response with an empty comments list; a post that does not exist returns 404, and a temporary block or upstream failure returns 503 (retryable) rather than 404. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `depth` (integer, optional) — Maximum flat comment depth returned in metrics mode.; `id` (string, **required**) — Reddit post id or t3_ id; `include_metrics` (boolean, optional) — Include public post and per-comment engagement metrics; costs 3 credits instead of 1; `limit` (integer, optional) — Maximum comments returned, defaults to 25 and clamps to 100; `sort` (string, optional) — Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.\n\n### `reddit_domain_posts`\n\n- **HTTP:** `GET /reddit/domain/{domain}/posts`\n- **What:** List Reddit domain posts. Returns normalized public posts submitted from a linked domain. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `domain` (string, **required**) — Domain hostname, without scheme or path; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_leads`\n\n- **HTTP:** `GET /reddit/leads`\n- **What:** Find Reddit buying-intent leads. Scans a Reddit search page for people actively asking for a product or service, scores each post 0-10 for buying intent, and returns them ranked highest-first with the signals that fired. Self-promotion, hiring posts, freelancer service adverts, revenue-milestone posts, duplicate reposts, and Title Case article headlines are filtered out before scoring. A deterministic prefilter always runs; when `classifier` resolves to `llm` the surviving candidates are additionally refined in one batched model call. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native Reddit search failures can use the internal Redlib provider while the existing lead-response fields and credit weights are preserved.\n- **Params:** `classifier` (string, optional) — Classifier: auto uses the model when configured, heuristic skips it, llm requires it; `limit` (integer, optional) — Maximum leads returned, defaults to 25 and clamps to 100; `min_score` (integer, optional) — Minimum buying-intent score to return, 0-10, defaults to 4; `q` (string, **required**) — What you offer, in plain language; `sort` (string, optional) — Sort: relevance, hot, new, top, or comments; `subreddit` (string, optional) — Restrict the search to a subreddit name, without r/; `time` (string, optional) — Time window: hour, day, week, month, year, or all\n\n### `reddit_post`\n\n- **HTTP:** `GET /reddit/post/{id}`\n- **What:** Get Reddit post. Returns a normalized public Reddit post. The default 1-credit mode uses RSS. Set `include_metrics=true` to use the anonymous HTML post page as the sole content request and return public net score, upvote ratio, comment count, award count, and estimated upvote/downvote totals for 3 credits. Reddit fuzzes voting data, so estimates are approximate; share, repost/crosspost, and view counts are not exposed anonymously. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `id` (string, **required**) — Reddit post id or t3_ id; `include_metrics` (boolean, optional) — Include public engagement metrics; costs 3 credits instead of 1\n\n### `reddit_search`\n\n- **HTTP:** `GET /reddit/search`\n- **What:** Search Reddit posts. Searches public Reddit content and returns normalized public post entries. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `q` (string, **required**) — Search keywords; `sort` (string, optional) — Sort: relevance, hot, new, top, or comments; `subreddit` (string, optional) — Restrict search to a subreddit name, without r/; `time` (string, optional) — Time window for top/comments sorts: hour, day, week, month, year, or all\n\n### `reddit_subreddit_about`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/about`\n- **What:** Get Reddit subreddit metadata. Returns public metadata and sample posts for a subreddit. Subscriber counts, icons, and banners are omitted because they are not available on anonymous Reddit pages. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `limit` (integer, optional) — Maximum sample posts inspected, defaults to 25 and clamps to 100; `subreddit` (string, **required**) — Subreddit name, without r/\n\n### `reddit_subreddit_comments`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/comments`\n- **What:** List Reddit subreddit comments. Returns flat public comment entries from a subreddit latest-comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum comments, defaults to 25 and clamps to 100; `subreddit` (string, **required**) — Subreddit name, without r/\n\n### `reddit_subreddit_posts`\n\n- **HTTP:** `GET /reddit/subreddit/{subreddit}/posts`\n- **What:** List Reddit subreddit posts. Returns normalized public posts from a subreddit. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `subreddit` (string, **required**) — Subreddit name, without r/; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_subreddits_posts`\n\n- **HTTP:** `GET /reddit/subreddits/posts`\n- **What:** List Reddit multi-subreddit posts. Returns normalized public posts from a combined multi-subreddit feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, top, or rising; `subreddits` (string, **required**) — Comma-separated subreddit names, without r/, maximum 10; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_trends`\n\n- **HTTP:** `GET /reddit/trends`\n- **What:** List Reddit trends. Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum posts, defaults to 25 and clamps to 100; `sort` (string, optional) — Sort: hot, new, rising, or top; `time` (string, optional) — Time window for top sort: hour, day, week, month, year, or all\n\n### `reddit_user_comments`\n\n- **HTTP:** `GET /reddit/user/{username}/comments`\n- **What:** List Reddit user comments. Returns flat public comment entries from a public Reddit user's comments feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; wait that many seconds and retry. Native-source failures can use the internal Redlib fallback; source.type is redlib and public fields/credit weights are preserved.\n- **Params:** `after` (string, optional) — Reddit pagination token; `limit` (integer, optional) — Maximum comments, defaults to 25 and clamps to 100; `username` (string, **required**) — Public Reddit username, without u/\n\n### `reddit_user_posts`\n\n- **HTTP:** `GET /reddit/user/{username}/posts`\n- **What:** List Reddit user posts. Returns normalized public posts from a public Reddit user's submitted feed. A `503` with a `Retry-After` header means Reddit is temporarily throttling the request; \n\nArchive v1.0.19: 5 files, 15707 bytes\n\nFiles: reference/endpoints.md (40017b), scripts/crawlora.sh (6805b), skill-card.md (2568b), SKILL.md (4997b), _meta.json (141b)\n\nArchive v1.0.18: 5 files, 14947 bytes\n\nFiles: reference/endpoints.md (37358b), scripts/crawlora.sh (6518b), skill-card.md (2186b), SKILL.md (4997b), _meta.json (141b)\n\nArchive v1.0.17: 5 files, 15361 bytes\n\nFiles: reference/endpoints.md (37358b), scripts/crawlora.sh (7418b), skill-card.md (2134b), SKILL.md (4997b), _meta.json (141b)\n\nArchive v1.0.16: 5 files, 15285 bytes\n\nFiles: reference/endpoints.md (37358b), scripts/crawlora.sh (7432b), skill-card.md (2090b), SKILL.md (4874b), _meta.json (141b)\n\nArchive v1.0.15: 5 files, 15001 bytes\n\nFiles: reference/endpoints.md (37358b), scripts/crawlora.sh (5885b), skill-card.md (2034b), SKILL.md (4874b), _meta.json (141b)\n\nArchive v1.0.14: 5 files, 14953 bytes\n\nFiles: reference/endpoints.md (37358b), scripts/crawlora.sh (5628b), skill-card.md (2193b), SKILL.md (4874b), _meta.json (141b)\n\nArchive v1.0.13: 5 files, 15000 bytes\n\nFiles: reference/endpoints.md (37358b), scripts/crawlora.sh (5303b), skill-card.md (2635b), SKILL.md (4911b), _meta.json (141b)","readmeExcerpt":"Skill: social-media-research Owner: crawlora-org Summary: Researches public profiles, posts, trends, and Facebook Marketplace listings across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon through the Crawlora API. It also supports explicitly requested Reddit buying-intent lead discovery. Use for public social listening, or a clearly requested listings/lead search","codeSnippets":[],"executableExamples":[{"language":"sh","snippet":"# Profile + posts:\nscripts/crawlora.sh /tiktok/profile/nasa | jq '.'\nscripts/crawlora.sh /reddit/user/spez/posts | jq '.'\n\n# Search:\nscripts/crawlora.sh /tiktok/search keyword=\"ai agents\" | jq '.'\nscripts/crawlora.sh /reddit/search q=\"web scraping\" | jq '.'\n\n# Trending:\nscripts/crawlora.sh /tiktok/trending | jq '.'\nscripts/crawlora.sh /bluesky/trending-topics | jq '.'"},{"language":"sh","snippet":"# Profile + posts:\nscripts/crawlora.sh /tiktok/profile/nasa | jq '.'\nscripts/crawlora.sh /reddit/user/spez/posts | jq '.'\n\n# Search:\nscripts/crawlora.sh /tiktok/search keyword=\"ai agents\" | jq '.'\nscripts/crawlora.sh /reddit/search q=\"web scraping\" | jq '.'\n\n# Trending:\nscripts/crawlora.sh /tiktok/trending | jq '.'\nscripts/crawlora.sh /bluesky/trending-topics | jq '.'"},{"language":"sh","snippet":"# Profile + posts:\nscripts/crawlora.sh /tiktok/profile/nasa | jq '.'\nscripts/crawlora.sh /reddit/user/spez/posts | jq '.'\n\n# Search:\nscripts/crawlora.sh /tiktok/search keyword=\"ai agents\" | jq '.'\nscripts/crawlora.sh /reddit/search q=\"web scraping\" | jq '.'\n\n# Trending:\nscripts/crawlora.sh /tiktok/trending | jq '.'\nscripts/crawlora.sh /bluesky/trending-topics | jq '.'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: social-media-research\ndescription: Researches public profiles, posts, trends, and Facebook Marketplace listings across Instagram, TikTok, Threads, Bluesky, X, Pinterest, LinkedIn, Facebook, Reddit, Bilibili, and Patreon through the Crawlora API. It also supports explicitly requested Reddit buying-intent lead discovery. Use for public social listening, or a clearly requested listings/lead search; avoid sensitive targeting.\nallowed-tools: Bash(scripts/crawlora.sh:*)\n---\n\n# Social media research\n\nLook up public profiles, posts, and engagement, run keyword/hashtag search,\nand track trending topics across eleven social platforms — all as normalized\nJSON from the Crawlora API, no app scraping or unofficial client libraries.\n\n## Tool scope and data flow\n\nThe optional shell helper is the only command this skill asks to run. It makes\nGET requests only to the documented, allowlisted Crawlora routes. When invoked,\nit reads `CRAWLORA_API_KEY` and sends it as an `x-api-key` header over HTTPS to\n`api.crawlora.net`; it does not send the key to social platforms. It briefly\nwrites a mode-600 curl config under `TMPDIR` and removes it when the command\nexits. It does not inspect other environment variables, enumerate files, install\nsoftware, or run with elevated privileges. Search terms, public handles, URLs,\nand other requested targets are sent to Crawlora; do not submit confidential\ninvestigations or sensitive personal data.\n\nThe Facebook Marketplace route returns public listings, not social posts. The\nReddit leads route ranks public posts for product/service buying intent; use it\nonly for an explicit lead-discovery request, disclose the post-level scoring,\nand do not infer sensitive traits or target people for high-impact decisions.\n\n## When to use this skill\n\n- \"What's <handle>'s profile / follower count / recent posts on <platform>?\"\n- \"Pull this post's engagement (likes, comments, shares).\"\n- \"Search <platform> for posts about <topic/hashtag>.\"\n- \"What's trending on <platform> right now?\"\n- Competitor social-listening, influencer research, or brand-mention monitoring.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the platform, then the job:\n\n1. **Profile** — `/instagram/profile/{username}`, `/tiktok/profile/{handler}`,\n   `/threads/profile/{username}`, `/bluesky/profile`, `/x/profile/{username}`,\n   `/pinterest/user/{username}`, `/linkedin/company/{id}`,\n   `/facebook/{page}`, `/reddit/user/{username}/posts`.\n2. **Posts / feed** — `/instagram/reels/{id}`, `/tiktok/posts`,\n   `/threads/profile/{username}/posts`, `/bluesky/author-feed`,\n   `/x/profile/{username}/posts`, "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"social-media-research\",\n  \"version\": \"1.0.22\",\n  \"publishedAt\": 1791253759221\n}"},{"path":"reference/endpoints.md","content":"# social-media-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**86 endpoints across 11 platform group(s).**\n\n## Instagram (3)\n\n### `instagram_post`\n\n- **HTTP:** `GET /instagram/post/{id}/{post_id}`\n- **What:** Retrieve a specific Instagram post by URL shortcode. Returns media details for an Instagram URL shortcode. Use media.code from the reels response or shortcode from a public post URL; numeric media IDs are rejected.\n- **Params:** `id` (string, **required**) — Instagram user ID retained for route compatibility; ownership is not verified; `post_id` (string, **required**) — Instagram URL shortcode (media.code), not a numeric media ID\n\n### `instagram_profile`\n\n- **HTTP:** `GET /instagram/profile/{username}`\n- **What:** Retrieve an Instagram user profile by username. Returns public profile details for a specified Instagram username.\n- **Params:** `username` (string, **required**) — Instagram username\n\n### `instagram_reels`\n\n- **HTTP:** `GET /instagram/reels/{id}`\n- **What:** Retrieve Instagram Reels for a user. Returns up to 12 public Reels via anonymous proxied HTTP for the numeric Instagram user ID. Supports opaque `max_id` pagination. Captions, timestamps and original image dimensions are omitted when the public source does not expose them.\n- **Params:** `id` (string, **required**) — Numeric Instagram user ID (not a username); `max_id` (string, optional) — Pagination cursor for fetching the next page of Reels\n\n## TikTok (25)\n\n### `tiktok_category`\n\n- **HTTP:** `GET /tiktok/category`\n- **What:** List TikTok explore categories. Returns the category list exposed by the TikTok Explore page.\n- **Params:** _none_\n\n### `tiktok_challenge`\n\n- **HTTP:** `GET /tiktok/hashtag/{name}`\n- **What:** Retrieve TikTok hashtag details. Returns the metadata payload for a TikTok hashtag page.\n- **Params:** `name` (string, **required**) — Hashtag name (e.g., 'christmas')\n\n### `tiktok_challenge_list`\n\n- **HTTP:** `GET /tiktok/hashtags`\n- **What:** Retrieve TikTok hashtag posts. Returns the videos listed for a TikTok hashtag id with cursor-based pagination.\n- **Params:** `cursor` (integer, optional) — Pagination cursor; `id` (string, **required**) — Hashtag id returned by the hashtag detail endpoint\n\n### `tiktok_comments`\n\n- **HTTP:** `GET /tiktok/comments`\n- **What:** Retrieve TikTok video comments. Returns top-level TikTok video comments with cursor-based pagination.\n- **Params:** `aweme_id` (string, **required**) — TikTok video id from the video URL; `cursor` (integer, optional) — Pagination cursor\n\n### `tiktok_creative_center_hashtags`\n\n- **HTTP:"},{"path":"skill-card.md","content":"## Description:\n\nResearches public social profiles, posts, trends, Facebook Marketplace listings, and explicitly requested Reddit buying-intent leads through the Crawlora API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and marketing teams use this skill to research public social activity, compare profiles and engagement, monitor trends, and perform clearly requested public listing or Reddit lead searches.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The API key and requested search terms, handles, URLs, locations, or listing targets are sent to Crawlora.\n\nMitigation: Use a dedicated API key and send only public, nonsensitive research targets; avoid confidential investigations and sensitive personal data.\n\nRisk: Public social data or Reddit lead scores could be misused for sensitive targeting or high-impact decisions.\n\nMitigation: Run lead discovery only when explicitly requested, disclose post-level scoring, and do not infer sensitive traits or make high-impact targeting decisions from results.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/crawlora-org/skills/social-media-research)\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance]\n\n**Output Format:** [Markdown with optional shell examples and JSON excerpts]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Research is based on public data returned by Crawlora; list results may require pagination and coverage varies by platform.]\n\n## Skill Version(s):\n\n1.0.22 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1574,"uniquenessScore":40,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T22:21:38.795Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T22:21:38.795Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T00:33:42.441Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}