{"id":"1a352903-3bce-4c8c-a85a-8449417ac36a","shortId":"S83eHU","kind":"skill","title":"social-sentiment-analyzer","tagline":"Analyze brand or topic sentiment across Twitter, Reddit, and Instagram using Xpoz. Classifies posts as positive/neutral/negative, extracts recurring themes, and generates a sentiment report. Use when asked for \"sentiment analysis\", \"what are people saying about X\", \"brand sentime","description":"# Social Sentiment Analyzer\n\n## Overview\n\nAnalyze public sentiment for any brand, product, or topic across Twitter/X, Reddit, and Instagram. Fetches real posts, classifies sentiment, extracts themes, and produces a structured report.\n\n## When to Use\n\nActivate when the user asks:\n- \"What's the sentiment around [TOPIC]?\"\n- \"Analyze sentiment for [BRAND] on Twitter\"\n- \"What are people saying about [PRODUCT] on social media?\"\n- \"Is the reaction to [EVENT] positive or negative?\"\n- \"Social media opinion on [TOPIC]\"\n\n## Setup & Authentication\n\nBefore fetching data, ensure Xpoz access is configured. Follow these checks in order.\n\n### Check 1: Already authenticated?\n\n**If you have MCP tools**, try calling any Xpoz tool (e.g., `checkAccessKeyStatus`). If it works → skip to Step 1.\n\n**If you have the SDK**, try:\n```python\nfrom xpoz import XpozClient\nclient = XpozClient()  # reads XPOZ_API_KEY env var\n```\nIf this succeeds without error → skip to Step 1.\n\nIf neither works, you need to authenticate. Choose the path that fits your environment:\n\n---\n\n### Path A: MCP via mcporter (OpenClaw agents)\n\nIf `mcporter` is available:\n\n```bash\nmcporter call xpoz.checkAccessKeyStatus\n```\n\nIf `hasAccessKey: true` → ready. If not:\n\n```bash\nmcporter config add xpoz https://mcp.xpoz.ai/mcp --auth oauth\n```\n\nThen authenticate — generate the OAuth URL and send it to the user:\n\n**Step 1: Generate authorization URL**\n```python\nimport secrets, hashlib, base64, urllib.parse, json, urllib.request, os\n\nverifier = secrets.token_urlsafe(64)\nchallenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).rstrip(b'=').decode()\nstate = secrets.token_urlsafe(32)\n\n# Dynamic client registration\nreg_req = urllib.request.Request(\n    'https://mcp.xpoz.ai/oauth/register',\n    data=json.dumps({\n        'client_name': 'Agent Skills',\n        'redirect_uris': ['https://www.xpoz.ai/oauth/openclaw'],\n        'grant_types': ['authorization_code'],\n        'response_types': ['code'],\n        'token_endpoint_auth_method': 'none',\n    }).encode(),\n    headers={'Content-Type': 'application/json'},\n)\nreg_resp = json.loads(urllib.request.urlopen(reg_req).read())\n\nparams = urllib.parse.urlencode({\n    'response_type': 'code',\n    'client_id': reg_resp['client_id'],\n    'code_challenge': challenge,\n    'code_challenge_method': 'S256',\n    'redirect_uri': 'https://www.xpoz.ai/oauth/openclaw',\n    'state': state,\n    'scope': 'mcp:tools',\n    'resource': 'https://mcp.xpoz.ai/',\n})\n\nauth_url = 'https://mcp.xpoz.ai/oauth/authorize?' + params\n\n# Save state for token exchange\nos.makedirs(os.path.expanduser('~/.cache/xpoz-oauth'), exist_ok=True)\nwith open(os.path.expanduser('~/.cache/xpoz-oauth/state.json'), 'w') as f:\n    json.dump({'verifier': verifier, 'state': state, 'client_id': reg_resp['client_id'],\n               'redirect_uri': 'https://www.xpoz.ai/oauth/openclaw'}, f)\n\nprint(auth_url)\n```\n\n**Step 2: Send the URL to the user**\n\nTell them:\n> \"I need to connect to Xpoz for social media data. Please open this link and sign in:\n>\n> [auth_url]\n>\n> After authorizing, you'll see a code. Paste it back to me here.\"\n\n**Step 3: WAIT for the user to reply with the code.** Do not proceed until they respond.\n\n**Step 4: Exchange the code for a token**\n\nOnce the user provides the code (either a raw code or a URL containing `?code=...`), extract the code and exchange it:\n\n```python\nimport json, urllib.request, urllib.parse, subprocess, os\n\nwith open(os.path.expanduser('~/.cache/xpoz-oauth/state.json')) as f:\n    oauth = json.load(f)\n\ncode = \"THE_CODE_FROM_USER\"  # Extract from user's reply\n\ndata = urllib.parse.urlencode({\n    'grant_type': 'authorization_code',\n    'code': code,\n    'redirect_uri': oauth['redirect_uri'],\n    'client_id': oauth['client_id'],\n    'code_verifier': oauth['verifier'],\n}).encode()\n\nreq = urllib.request.Request(\n    'https://mcp.xpoz.ai/oauth/token',\n    data=data,\n    headers={'Content-Type': 'application/x-www-form-urlencoded'},\n)\nresp = json.loads(urllib.request.urlopen(req).read())\ntoken = resp['access_token']\n\n# Configure mcporter with the token (token is never printed)\nsubprocess.run(['mcporter', 'config', 'remove', 'xpoz'], capture_output=True)\nsubprocess.run(['mcporter', 'config', 'add', 'xpoz', 'https://mcp.xpoz.ai/mcp',\n                '--header', f'Authorization=Bearer {token}'], check=True)\n\n# Clean up\nos.remove(os.path.expanduser('~/.cache/xpoz-oauth/state.json'))\nprint(\"Xpoz configured successfully\")\n```\n\n**Step 5: Verify** with `mcporter call xpoz.checkAccessKeyStatus` → should return `hasAccessKey: true`.\n\n---\n\n### Path B: MCP via Claude Code config\n\nFor Claude Code users without mcporter, add to `~/.claude.json`:\n```json\n{\n  \"mcpServers\": {\n    \"xpoz\": {\n      \"url\": \"https://mcp.xpoz.ai/mcp\",\n      \"transport\": \"http-stream\"\n    }\n  }\n}\n```\nClaude Code handles OAuth automatically on first tool call — the user just needs to authorize in their browser when prompted.\n\n---\n\n### Path C: SDK (Python or TypeScript)\n\nAsk the user:\n> \"I need a Xpoz API key to access social media data. Please go to https://xpoz.ai/get-token (it's free, no credit card needed) and paste the key back to me.\"\n\n**WAIT for the user to reply with the key.** Then:\n\n**Python:**\n```bash\npip install xpoz\n```\n```python\nfrom xpoz import XpozClient\nclient = XpozClient(\"THE_KEY_FROM_USER\")\n```\n\n**TypeScript:**\n```bash\nnpm install @xpoz/xpoz\n```\n```typescript\nimport { XpozClient } from \"@xpoz/xpoz\";\nconst client = new XpozClient({ apiKey: \"THE_KEY_FROM_USER\" });\nawait client.connect();\n```\n\nOr set the environment variable and use the default constructor:\n```bash\nexport XPOZ_API_KEY=THE_KEY_FROM_USER\n```\n\n---\n\n### Auth Errors\n| Problem | Solution |\n|---------|----------|\n| MCP: \"Unauthorized\" | Re-run the OAuth flow above |\n| SDK: `AuthenticationError` | Verify key at [xpoz.ai/settings](https://xpoz.ai/settings) |\n| Token exchange fails | Ask user to re-authorize — codes are single-use |\n\n\n## Step-by-Step Instructions\n\n### Step 1: Parse the Request\n\nExtract from the user's message:\n- **Topic/brand** to analyze\n- **Platforms** to search (default: Twitter + Reddit; add Instagram if relevant)\n- **Time period** (default: last 7 days)\n- **Language** filter (default: English)\n\nExpand the query for better coverage:\n- Publicly traded companies → include ticker symbol: `\"Tesla\" OR \"$TSLA\"`\n- Products → include common abbreviations: `\"ChatGPT\" OR \"GPT-4\"`\n- Events → include hashtags: `\"CES 2026\" OR \"#CES2026\"`\n\n### Step 2: Fetch Posts\n\n#### Via MCP (if xpoz MCP server is configured)\n\n**Twitter:**\n```\nCall getTwitterPostsByKeywords:\n  query: \"<expanded query>\"\n  fields: [\"id\", \"text\", \"authorUsername\", \"createdAtDate\", \"likeCount\", \"retweetCount\", \"impressionCount\"]\n  startDate: \"<7 days ago, YYYY-MM-DD>\"\n  endDate: \"<today, YYYY-MM-DD>\"\n  language: \"en\"\n```\n\n**Reddit:**\n```\nCall getRedditPostsByKeywords:\n  query: \"<expanded query>\"\n  fields: [\"id\", \"title\", \"text\", \"authorUsername\", \"createdAtDate\", \"score\", \"numComments\", \"subreddit\"]\n  startDate: \"<7 days ago>\"\n  endDate: \"<today>\"\n```\n\n**Instagram (if requested):**\n```\nCall getInstagramPostsByKeywords:\n  query: \"<expanded query>\"\n  fields: [\"id\", \"text\", \"authorUsername\", \"createdAtDate\", \"likeCount\", \"commentCount\"]\n  startDate: \"<7 days ago>\"\n  endDate: \"<today>\"\n```\n\n**CRITICAL: Async Pattern** — Each call returns an `operationId`. You MUST call `checkOperationStatus` with that ID and poll until status is \"completed\" (up to 8 retries, ~5 seconds apart).\n\n#### Via Python SDK\n\n```python\nfrom xpoz import XpozClient\n\nclient = XpozClient()  # Uses XPOZ_API_KEY env var\n\n# Twitter\ntwitter_results = client.twitter.search_posts(\n    '\"Tesla\" OR \"$TSLA\"',\n    start_date=\"2026-02-16\",\n    end_date=\"2026-02-23\",\n    language=\"en\",\n    fields=[\"id\", \"text\", \"author_username\", \"created_at_date\", \"like_count\", \"retweet_count\"]\n)\n\n# Reddit\nreddit_results = client.reddit.search_posts(\n    '\"Tesla\" OR \"$TSLA\"',\n    start_date=\"2026-02-16\",\n    end_date=\"2026-02-23\",\n    fields=[\"id\", \"title\", \"text\", \"author_username\", \"created_at_date\", \"score\", \"num_comments\", \"subreddit\"]\n)\n\n# Collect all posts\ntwitter_posts = twitter_results.data\nreddit_posts = reddit_results.data\n\n# Fetch additional pages if needed\nwhile twitter_results.has_next_page():\n    twitter_results = twitter_results.next_page()\n    twitter_posts.extend(twitter_results.data)\n\nclient.close()\n```\n\n#### Via TypeScript SDK\n\n```typescript\nimport { XpozClient } from \"@xpoz/xpoz\";\n\nconst client = new XpozClient();\nawait client.connect();\n\nconst twitterResults = await client.twitter.searchPosts('\"Tesla\" OR \"$TSLA\"', {\n  startDate: \"2026-02-16\",\n  endDate: \"2026-02-23\",\n  language: \"en\",\n  fields: [\"id\", \"text\", \"authorUsername\", \"createdAtDate\", \"likeCount\", \"retweetCount\"],\n});\n\nconst redditResults = await client.reddit.searchPosts('\"Tesla\" OR \"$TSLA\"', {\n  startDate: \"2026-02-16\",\n  endDate: \"2026-02-23\",\n  fields: [\"id\", \"title\", \"text\", \"authorUsername\", \"createdAtDate\", \"score\", \"numComments\", \"subreddit\"],\n});\n\nawait client.close();\n```\n\n### Step 3: Classify Sentiment\n\nFor each post, classify into one of 5 levels:\n\n| Level | Indicators |\n|-------|-----------|\n| **Positive** | \"love\", \"amazing\", \"bullish\", \"great\", \"best\", 🚀🔥💪, strong praise |\n| **Leaning Positive** | \"looking good\", \"solid\", \"promising\", measured optimism |\n| **Neutral** | Questions, factual statements, news without opinion, balanced takes |\n| **Leaning Negative** | \"worried\", \"not sure\", \"concerned\", \"some issues\", cautious criticism |\n| **Negative** | \"terrible\", \"worst\", \"avoid\", \"bearish\", 📉💀, strong criticism |\n\n**Tips:**\n- Sarcasm detection: \"Great, another outage\" → Negative\n- Retweets/quotes with no commentary → Neutral\n- Engagement-weighted: high-engagement posts carry more signal\n\n### Step 4: Extract Themes\n\nIdentify 5-8 recurring themes from the posts. For each theme:\n- **Title**: 3-5 word label\n- **Sentiment**: overall lean of posts in this theme\n- **Key quotes**: 2-3 representative posts\n- **Volume**: approximate % of total posts\n\n### Step 5: Generate Report\n\nPresent results in this structure:\n\n```\n## Sentiment Report: [TOPIC]\n**Period:** [start] to [end] | **Posts analyzed:** [count]\n\n### Overall Sentiment\nScore: [0-100, where 50=neutral, 100=max positive]\n- Positive: X%\n- Neutral: X%\n- Negative: X%\n\n### Platform Breakdown\n| Platform | Posts | Sentiment Score | Top Theme |\n|----------|-------|----------------|-----------|\n| Twitter  | X     | X              | ...       |\n| Reddit   | X     | X              | ...       |\n\n### Key Themes\n1. **[Theme Title]** (Positive/Neutral/Negative)\n   [2-3 sentence explanation with example quotes]\n\n2. **[Theme Title]** ...\n\n### Notable Posts\n[Top 5 highest-engagement posts with text, author, and metrics]\n\n### Summary\n[2-3 paragraph executive summary with actionable insights]\n```\n\n## Example Prompts\n\n- \"Analyze sentiment around NVIDIA this week on Twitter and Reddit\"\n- \"What's the social media reaction to the new iPhone?\"\n- \"How are people feeling about Cursor IDE on Reddit?\"\n- \"Sentiment analysis for Bitcoin in the last 30 days\"\n\n## Notes\n\n- Free tier: 100,000 results/month at [xpoz.ai](https://xpoz.ai?utm_source=github&utm_medium=agent-skills&utm_campaign=social-sentiment-analyzer)\n- For large datasets, use CSV export (`export_csv()` / `exportCsv()`) and analyze locally\n- Reddit tends to have longer, more nuanced opinions; Twitter has higher volume but shorter takes","tags":["social","sentiment","analyzer","xpoz","agent","skills","xpozpublic","agent-skills","ai-agents","claude-code","claude-code-skills","claude-skills"],"capabilities":["skill","source-xpozpublic","skill-social-sentiment-analyzer","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-claude-code-skills","topic-claude-skills","topic-codex-cli","topic-mcp","topic-reddit-api","topic-skill-md","topic-skillsmp","topic-social-intelligence","topic-social-media"],"categories":["xpoz-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/XPOZpublic/xpoz-agent-skills/social-sentiment-analyzer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add XPOZpublic/xpoz-agent-skills","source_repo":"https://github.com/XPOZpublic/xpoz-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (11,435 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:22.050Z","embedding":null,"createdAt":"2026-04-23T13:04:17.722Z","updatedAt":"2026-05-18T19:08:22.050Z","lastSeenAt":"2026-05-18T19:08:22.050Z","tsv":"'-02':988,993,1020,1025,1088,1092,1112,1116 '-100':1270 '-16':989,1021,1089,1113 '-23':994,1026,1093,1117 '-3':1239,1304,1328 '-4':849 '-5':1225 '-8':1214 '/'',':345 '/.cache/xpoz-oauth':359 '/.cache/xpoz-oauth/state.json':366,488,584 '/.claude.json':615 '/get-token':672 '/mcp':223,622 '/mcp'',':572 '/oauth/authorize?''':350 '/oauth/openclaw''':385 '/oauth/openclaw'',':336 '/oauth/openclaw''],':288 '/oauth/register'',':277 '/oauth/token'',':531 '/settings](https://xpoz.ai/settings)':773 '0':1269 '000':1379 '1':131,152,180,239,794,1299 '100':1274,1378 '2':391,858,1238,1303,1310,1327 '2026':854,987,992,1019,1024,1087,1091,1111,1115 '3':433,1130,1224 '30':1373 '32':268 '4':450,1209 '5':590,958,1140,1213,1248,1316 '50':1272 '64':255 '7':821,882,911,929 '8':956 'abbrevi':845 'access':122,546,663 'across':10,56 'action':1333 'activ':76 'add':219,568,613,813 'addit':1050 'agent':201,282,1390 'agent-skil':1389 'ago':884,913,931 'alreadi':132 'amaz':1146 'analysi':34,1367 'analyz':4,5,45,47,87,806,1264,1337,1397,1408 'anoth':1190 'apart':960 'api':168,660,747,973 'apikey':727 'application/json':306 'application/x-www-form-urlencoded':538 'approxim':1243 'around':85,1339 'ask':31,80,653,777 'async':934 'auth':224,298,346,388,417,753 'authent':116,133,187,227 'authenticationerror':767 'author':241,291,420,508,575,641,782,1000,1031,1323 'authorusernam':876,905,924,1099,1122 'automat':631 'avail':205 'avoid':1182 'await':732,1077,1081,1105,1127 'b':263,601 'b64encode':258 'back':428,684 'balanc':1167 'base64':247 'base64.urlsafe':257 'bash':206,216,698,714,744 'bearer':576 'bearish':1183 'best':1149 'better':831 'bitcoin':1369 'brand':6,41,52,90 'breakdown':1284 'browser':644 'bullish':1147 'c':648 'call':140,208,594,635,870,898,918,937,943 'campaign':1393 'captur':562 'card':678 'carri':1205 'cautious':1177 'ces':853 'ces2026':856 'challeng':256,326,327,329 'chatgpt':846 'check':127,130,578 'checkaccesskeystatus':145 'checkoperationstatus':944 'choos':188 'classifi':17,64,1131,1136 'claud':604,608,627 'clean':580 'client':164,270,280,319,323,375,379,517,520,707,724,969,1074 'client.close':1064,1128 'client.connect':733,1078 'client.reddit.search':1012 'client.reddit.searchposts':1106 'client.twitter.search':980 'client.twitter.searchposts':1082 'code':292,295,318,325,328,425,442,453,462,466,471,474,494,496,509,510,511,522,605,609,628,783 'collect':1040 'comment':1038 'commentari':1196 'commentcount':927 'common':844 'compani':835 'complet':953 'concern':1174 'config':218,559,567,606 'configur':124,548,587,868 'connect':403 'const':723,1073,1079,1103 'constructor':743 'contain':470 'content':304,536 'content-typ':303,535 'count':1006,1008,1265 'coverag':832 'creat':1002,1033 'createdatd':877,906,925,1100,1123 'credit':677 'critic':933,1178,1185 'csv':1402,1405 'cursor':1362 'data':119,278,409,504,532,533,666 'dataset':1400 'date':986,991,1004,1018,1023,1035 'day':822,883,912,930,1374 'dd':888,894 'decod':264 'default':742,810,819,825 'detect':1188 'digest':261 'dynam':269 'e.g':144 'either':463 'en':896,996,1095 'encod':301,526 'end':990,1022,1262 'enddat':889,914,932,1090,1114 'endpoint':297 'engag':1199,1203,1319 'engagement-weight':1198 'english':826 'ensur':120 'env':170,975 'environ':194,737 'error':176,754 'event':106,850 'exampl':1308,1335 'exchang':356,451,476,775 'execut':1330 'exist':360 'expand':827 'explan':1306 'export':745,1403,1404 'exportcsv':1406 'extract':21,66,472,499,798,1210 'f':369,386,490,493,574 'factual':1162 'fail':776 'feel':1360 'fetch':61,118,859,1049 'field':873,901,921,997,1027,1096,1118 'filter':824 'first':633 'fit':192 'flow':764 'follow':125 'free':675,1376 'generat':25,228,240,1249 'getinstagrampostsbykeyword':919 'getredditpostsbykeyword':899 'gettwitterpostsbykeyword':871 'github':1386 'go':668 'good':1155 'gpt':848 'grant':289,506 'great':1148,1189 'handl':629 'hasaccesskey':211,598 'hashlib':246 'hashlib.sha256':259 'hashtag':852 'header':302,534,573 'high':1202 'high-engag':1201 'higher':1420 'highest':1318 'highest-engag':1317 'http':625 'http-stream':624 'id':320,324,376,380,518,521,874,902,922,947,998,1028,1097,1119 'ide':1363 'identifi':1212 'import':162,244,479,705,719,967,1069 'impressioncount':880 'includ':836,843,851 'indic':1143 'insight':1334 'instagram':14,60,814,915 'instal':700,716 'instruct':792 'iphon':1356 'issu':1176 'json':249,480,616 'json.dump':370 'json.dumps':279 'json.load':492 'json.loads':309,540 'key':169,661,683,695,710,729,748,750,769,974,1236,1297 'label':1227 'languag':823,895,995,1094 'larg':1399 'last':820,1372 'lean':1152,1169,1230 'level':1141,1142 'like':1005 'likecount':878,926,1101 'link':413 'll':422 'local':1409 'longer':1414 'look':1154 'love':1145 'max':1275 'mcp':137,197,340,602,757,862,865 'mcp.xpoz.ai':222,276,344,349,530,571,621 'mcp.xpoz.ai/'',':343 'mcp.xpoz.ai/mcp':221,620 'mcp.xpoz.ai/mcp'',':570 'mcp.xpoz.ai/oauth/authorize?''':348 'mcp.xpoz.ai/oauth/register'',':275 'mcp.xpoz.ai/oauth/token'',':529 'mcporter':199,203,207,217,549,558,566,593,612 'mcpserver':617 'measur':1158 'media':101,111,408,665,1351 'medium':1388 'messag':803 'method':299,330 'metric':1325 'mm':887,893 'must':942 'name':281 'need':185,401,639,657,679,1053 'negat':109,1170,1179,1192,1281 'neither':182 'neutral':1160,1197,1273,1279 'never':555 'new':725,1075,1355 'news':1164 'next':1056 'none':300 'notabl':1313 'note':1375 'npm':715 'nuanc':1416 'num':1037 'numcom':908,1125 'nvidia':1340 'oauth':225,230,491,514,519,524,630,763 'ok':361 'one':1138 'open':364,411,486 'openclaw':200 'operationid':940 'opinion':112,1166,1417 'optim':1159 'order':129 'os':251,484 'os.makedirs':357 'os.path.expanduser':358,365,487,583 'os.remove':582 'outag':1191 'output':563 'overal':1229,1266 'overview':46 'page':1051,1057,1061 'paragraph':1329 'param':314,351 'pars':795 'past':426,681 'path':190,195,600,647 'pattern':935 'peopl':37,95,1359 'period':818,1259 'pip':699 'platform':807,1283,1285 'pleas':410,667 'poll':949 'posit':107,1144,1153,1276,1277 'positive/neutral/negative':20,1302 'post':18,63,860,981,1013,1042,1044,1047,1135,1204,1219,1232,1241,1246,1263,1286,1314,1320 'prais':1151 'present':1251 'print':387,556,585 'problem':755 'proceed':445 'produc':69 'product':53,98,842 'promis':1157 'prompt':646,1336 'provid':460 'public':48,833 'python':159,243,478,650,697,702,962,964 'queri':829,872,900,920 'question':1161 'quot':1237,1309 'raw':465 're':760,781 're-author':780 're-run':759 'reaction':104,1352 'read':166,313,543 'readi':213 'real':62 'recur':22,1215 'reddit':12,58,812,897,1009,1010,1046,1294,1346,1365,1410 'reddit_results.data':1048 'redditresult':1104 'redirect':284,332,381,512,515 'reg':272,307,311,321,377 'registr':271 'relev':816 'remov':560 'repli':439,503,692 'report':28,72,1250,1257 'repres':1240 'req':273,312,527,542 'request':797,917 'resourc':342 'resp':308,322,378,539,545 'respond':448 'respons':293,316 'result':979,1011,1059,1252 'results/month':1380 'retri':957 'return':597,938 'retweet':1007 'retweetcount':879,1102 'retweets/quotes':1193 'rstrip':262 'run':761 's256':331 'sarcasm':1187 'save':352 'say':38,96 'scope':339 'score':907,1036,1124,1268,1288 'sdk':157,649,766,963,1067 'search':809 'second':959 'secret':245 'secrets.token':253,266 'see':423 'send':233,392 'sentenc':1305 'sentim':42 'sentiment':3,9,27,33,44,49,65,84,88,1132,1228,1256,1267,1287,1338,1366,1396 'server':866 'set':735 'setup':115 'shorter':1423 'sign':415 'signal':1207 'singl':786 'single-us':785 'skill':283,1391 'skill-social-sentiment-analyzer' 'skip':149,177 'social':2,43,100,110,407,664,1350,1395 'social-sentiment-analyz':1,1394 'solid':1156 'solut':756 'sourc':1385 'source-xpozpublic' 'start':985,1017,1260 'startdat':881,910,928,1086,1110 'state':265,337,338,353,373,374 'statement':1163 'status':951 'step':151,179,238,390,432,449,589,789,791,793,857,1129,1208,1247 'step-by-step':788 'stream':626 'strong':1150,1184 'structur':71,1255 'subprocess':483 'subprocess.run':557,565 'subreddit':909,1039,1126 'succeed':174 'success':588 'summari':1326,1331 'sure':1173 'symbol':838 'take':1168,1424 'tell':398 'tend':1411 'terribl':1180 'tesla':839,982,1014,1083,1107 'text':875,904,923,999,1030,1098,1121,1322 'theme':23,67,1211,1216,1222,1235,1290,1298,1300,1311 'ticker':837 'tier':1377 'time':817 'tip':1186 'titl':903,1029,1120,1223,1301,1312 'today':890 'token':296,355,456,544,547,552,553,577,774 'tool':138,143,341,634 'top':1289,1315 'topic':8,55,86,114,1258 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-claude-code-skills' 'topic-claude-skills' 'topic-codex-cli' 'topic-mcp' 'topic-reddit-api' 'topic-skill-md' 'topic-skillsmp' 'topic-social-intelligence' 'topic-social-media' 'topic/brand':804 'total':1245 'trade':834 'transport':623 'tri':139,158 'true':212,362,564,579,599 'tsla':841,984,1016,1085,1109 'twitter':11,92,811,869,977,978,1043,1058,1291,1344,1418 'twitter/x':57 'twitter_posts.extend':1062 'twitter_results.data':1045,1063 'twitter_results.has':1055 'twitter_results.next':1060 'twitterresult':1080 'type':290,294,305,317,507,537 'typescript':652,713,718,1066,1068 'unauthor':758 'uri':285,333,382,513,516 'url':231,242,347,389,394,418,469,619 'urllib.parse':248,482 'urllib.parse.urlencode':315,505 'urllib.request':250,481 'urllib.request.request':274,528 'urllib.request.urlopen':310,541 'urlsaf':254,267 'use':15,29,75,740,787,971,1401 'user':79,237,397,437,459,498,501,610,637,655,690,712,731,752,778,801 'usernam':1001,1032 'utm':1384,1387,1392 'var':171,976 'variabl':738 'verifi':252,371,372,523,525,591,768 'verifier.encode':260 'via':198,603,861,961,1065 'volum':1242,1421 'w':367 'wait':434,687 'week':1342 'weight':1200 'without':175,611,1165 'word':1226 'work':148,183 'worri':1171 'worst':1181 'www.xpoz.ai':287,335,384 'www.xpoz.ai/oauth/openclaw''':383 'www.xpoz.ai/oauth/openclaw'',':334 'www.xpoz.ai/oauth/openclaw''],':286 'x':40,1278,1280,1282,1292,1293,1295,1296 'xpoz':16,121,142,161,167,220,405,561,569,586,618,659,701,704,746,864,966,972 'xpoz.ai':671,772,1382,1383 'xpoz.ai/get-token':670 'xpoz.ai/settings](https://xpoz.ai/settings)':771 'xpoz.checkaccesskeystatus':209,595 'xpoz/xpoz':717,722,1072 'xpozclient':163,165,706,708,720,726,968,970,1070,1076 'yyyi':886,892 'yyyy-mm-dd':885,891","prices":[{"id":"6fa552b2-57a0-42ac-a9e9-148ea4ce2041","listingId":"1a352903-3bce-4c8c-a85a-8449417ac36a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"XPOZpublic","category":"xpoz-agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:17.722Z"}],"sources":[{"listingId":"1a352903-3bce-4c8c-a85a-8449417ac36a","source":"github","sourceId":"XPOZpublic/xpoz-agent-skills/social-sentiment-analyzer","sourceUrl":"https://github.com/XPOZpublic/xpoz-agent-skills/tree/main/skills/social-sentiment-analyzer","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:17.722Z","lastSeenAt":"2026-05-18T19:08:22.050Z"}],"details":{"listingId":"1a352903-3bce-4c8c-a85a-8449417ac36a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"XPOZpublic","slug":"social-sentiment-analyzer","github":{"repo":"XPOZpublic/xpoz-agent-skills","stars":10,"topics":["agent-skills","ai-agents","claude-code","claude-code-skills","claude-skills","codex-cli","mcp","reddit-api","skill-md","skillsmp","social-intelligence","social-media","social-media-api","twitter-api"],"license":"mit","html_url":"https://github.com/XPOZpublic/xpoz-agent-skills","pushed_at":"2026-02-24T21:40:32Z","description":"Agent skills for social media intelligence, powered by Xpoz. Compatible with Claude Code, Codex CLI, and ChatGPT.","skill_md_sha":"69b37f5d05551d31b85a480ec5746c367e1378cf","skill_md_path":"skills/social-sentiment-analyzer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/XPOZpublic/xpoz-agent-skills/tree/main/skills/social-sentiment-analyzer"},"layout":"multi","source":"github","category":"xpoz-agent-skills","frontmatter":{"name":"social-sentiment-analyzer","description":"Analyze brand or topic sentiment across Twitter, Reddit, and Instagram using Xpoz. Classifies posts as positive/neutral/negative, extracts recurring themes, and generates a sentiment report. Use when asked for \"sentiment analysis\", \"what are people saying about X\", \"brand sentiment\", or \"social media opinion on X\"."},"skills_sh_url":"https://skills.sh/XPOZpublic/xpoz-agent-skills/social-sentiment-analyzer"},"updatedAt":"2026-05-18T19:08:22.050Z"}}