{"id":"31e078f4-9561-4559-9e68-e87219c3c495","shortId":"LmSp4P","kind":"skill","title":"competitive-intel","tagline":"Compare brands and products across social media — share of voice, sentiment, positioning, and audience overlap using Xpoz. Use when asked to \"compare brands\", \"competitive analysis\", \"share of voice\", \"brand vs brand\", or \"competitive intelligence\".","description":"# Competitive Intelligence\n\n## Overview\n\nCompare multiple brands or products side by side across Twitter/X, Reddit, and Instagram. Measure share of voice, compare sentiment, identify positioning differences, and discover competitive advantages from real social conversations.\n\n## When to Use\n\nActivate when the user asks:\n- \"Compare [BRAND A] vs [BRAND B] on social media\"\n- \"Share of voice: [BRAND] vs competitors\"\n- \"Competitive analysis for [PRODUCT]\"\n- \"How does [BRAND A] sentiment compare to [BRAND B]?\"\n- \"What are people saying about [BRAND] vs [COMPETITOR]?\"\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:\n- **Primary brand** and **competitors** (2-5 brands total)\n- **Platforms** (default: Twitter + Reddit)\n- **Time period** (default: last 7 days)\n- **Industry context** for better analysis\n\nBuild expanded queries for each brand:\n- `\"Slack\"` → `\"Slack\" NOT \"cut some slack\" NOT \"slack off\"`\n- `\"Discord\"` → `\"Discord\" NOT \"sow discord\" NOT \"discord between\"`\n- For stocks: include ticker symbols\n\n### Step 2: Fetch Data for Each Brand\n\nRun parallel searches — one per brand, per platform.\n\n#### Via MCP\n\nFor each brand, call:\n\n**Twitter posts:**\n```\nCall getTwitterPostsByKeywords:\n  query: \"<brand query>\"\n  fields: [\"id\", \"text\", \"authorUsername\", \"createdAtDate\", \"likeCount\", \"retweetCount\", \"impressionCount\"]\n  startDate: \"<7 days ago>\"\n  endDate: \"<today>\"\n  language: \"en\"\n```\n\n**Twitter users discussing the brand:**\n```\nCall getTwitterUsersByKeywords:\n  query: \"<brand query>\"\n  fields: [\"id\", \"username\", \"name\", \"followersCount\", \"relevantTweetsCount\", \"relevantTweetsLikesSum\"]\n  startDate: \"<7 days ago>\"\n```\n\n**Reddit (for each brand):**\n```\nCall getRedditPostsByKeywords:\n  query: \"<brand query>\"\n  fields: [\"id\", \"title\", \"text\", \"score\", \"numComments\", \"subreddit\", \"createdAtDate\"]\n  startDate: \"<7 days ago>\"\n```\n\n**CRITICAL:** Each call returns an `operationId` — poll `checkOperationStatus` until \"completed\".\n\n**Tip:** Launch all brand searches in sequence, collect all operationIds, then poll them. This is faster than waiting for each one.\n\n#### Via Python SDK\n\n```python\nfrom xpoz import XpozClient\n\nclient = XpozClient()\n\nbrands = {\n    \"Slack\": '\"Slack\" NOT \"cut some slack\"',\n    \"Discord\": '\"Discord\" NOT \"sow discord\"',\n    \"Teams\": '\"Microsoft Teams\" OR \"MS Teams\"',\n}\n\nbrand_data = {}\n\nfor brand_name, query in brands.items():\n    # Twitter posts\n    twitter = client.twitter.search_posts(\n        query,\n        start_date=\"2026-02-16\",\n        end_date=\"2026-02-23\",\n        language=\"en\",\n        fields=[\"id\", \"text\", \"author_username\", \"like_count\", \"retweet_count\", \"impression_count\", \"created_at_date\"]\n    )\n\n    # Twitter users (for influencer overlap analysis)\n    users = client.twitter.get_users_by_keywords(\n        query,\n        start_date=\"2026-02-16\",\n        fields=[\"username\", \"followers_count\", \"relevant_tweets_count\", \"relevant_tweets_likes_sum\"]\n    )\n\n    # Reddit posts\n    reddit = client.reddit.search_posts(\n        query,\n        start_date=\"2026-02-16\",\n        fields=[\"id\", \"title\", \"text\", \"score\", \"num_comments\", \"subreddit\", \"created_at_date\"]\n    )\n\n    brand_data[brand_name] = {\n        \"twitter_posts\": twitter,\n        \"twitter_users\": users,\n        \"reddit_posts\": reddit,\n        \"tweet_count\": twitter.pagination.total_rows,\n        \"reddit_count\": reddit.pagination.total_rows,\n    }\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 brands: Record<string, string> = {\n  Slack: '\"Slack\" NOT \"cut some slack\"',\n  Discord: '\"Discord\" NOT \"sow discord\"',\n  Teams: '\"Microsoft Teams\" OR \"MS Teams\"',\n};\n\nconst brandData: Record<string, any> = {};\n\nfor (const [name, query] of Object.entries(brands)) {\n  const twitter = await client.twitter.searchPosts(query, {\n    startDate: \"2026-02-16\",\n    endDate: \"2026-02-23\",\n    language: \"en\",\n    fields: [\"id\", \"text\", \"authorUsername\", \"likeCount\", \"retweetCount\", \"createdAtDate\"],\n  });\n\n  const reddit = await client.reddit.searchPosts(query, {\n    startDate: \"2026-02-16\",\n    fields: [\"id\", \"title\", \"text\", \"score\", \"numComments\", \"subreddit\"],\n  });\n\n  brandData[name] = { twitter, reddit };\n}\n\nawait client.close();\n```\n\n### Step 3: Analyze and Compare\n\n**Share of Voice (SOV):**\n```\nSOV for Brand A = (Brand A mentions) / (Total mentions across all brands) × 100\n```\nCalculate separately for Twitter and Reddit.\n\n**Sentiment Comparison:**\nFor each brand, classify posts into positive/neutral/negative (see social-sentiment-analyzer skill for classification method) and compare:\n- Overall sentiment score (0-100)\n- Positive/negative ratio\n- Sentiment trend over the time period\n\n**Engagement Comparison:**\n- Average likes per post\n- Average comments/replies per post\n- Total impressions (Twitter)\n- Total Reddit score\n\n**Audience Overlap:**\n- Find users who posted about multiple brands (common usernames across datasets)\n- These users are particularly valuable for understanding switching behavior\n\n**Positioning Analysis:**\n- What attributes does each brand's audience associate with it?\n- What are the unique strengths/weaknesses mentioned for each?\n- Common comparison contexts (\"I switched from X to Y because...\")\n\n### Step 4: Generate Report\n\n```\n## Competitive Intelligence: [BRAND] vs Competitors\n**Period:** [date range] | **Platforms:** Twitter, Reddit\n\n### Share of Voice\n| Brand | Twitter Posts | Reddit Posts | Total | SOV |\n|-------|-------------|-------------|-------|-----|\n| Slack | 1,234 | 456 | 1,690 | 42% |\n| Discord | 890 | 678 | 1,568 | 39% |\n| Teams | 456 | 321 | 777 | 19% |\n\n### Sentiment Comparison\n| Brand | Score | Positive | Neutral | Negative | Trend |\n|-------|-------|----------|---------|----------|-------|\n| Slack | 62 | 38% | 42% | 20% | → Stable |\n| Discord | 71 | 48% | 35% | 17% | ↑ Improving |\n| Teams | 45 | 22% | 45% | 33% | ↓ Declining |\n\n### Engagement Comparison\n| Brand | Avg Likes (Twitter) | Avg Score (Reddit) | Avg Comments |\n|-------|--------------------|--------------------|--------------|\n| ... | ... | ... | ... |\n\n### Key Findings\n\n#### [Brand A] Strengths\n- [What people praise, with example quotes]\n\n#### [Brand A] Weaknesses\n- [What people complain about, with example quotes]\n\n#### [Brand B] Strengths / Weaknesses\n...\n\n### Competitive Positioning Map\n- **[Brand A]:** Positioned as [description]\n- **[Brand B]:** Positioned as [description]\n- **Switching signals:** [users switching from X to Y, with reasons]\n\n### Audience Overlap\n[X users posted about multiple brands — analysis of their preferences]\n\n### Recommendations\n[3-5 actionable insights based on the competitive landscape]\n```\n\n## Example Prompts\n\n- \"Compare Tesla vs Rivian vs Lucid on Twitter sentiment\"\n- \"Share of voice: Figma vs Sketch vs Adobe XD\"\n- \"Competitive analysis for Notion vs Obsidian vs Roam Research on Reddit\"\n- \"How does Claude sentiment compare to ChatGPT and Gemini?\"\n\n## Notes\n\n- Expand brand names carefully to avoid false positives (common words need exclusions)\n- Reddit provides qualitative depth; Twitter provides quantitative breadth\n- Free tier: 100K results/month at [xpoz.ai](https://xpoz.ai?utm_source=github&utm_medium=agent-skills&utm_campaign=competitive-intel)\n- For large comparisons (5+ brands), use CSV exports and analyze locally with pandas/Excel","tags":["competitive","intel","xpoz","agent","skills","xpozpublic","agent-skills","ai-agents","claude-code","claude-code-skills","claude-skills","codex-cli"],"capabilities":["skill","source-xpozpublic","skill-competitive-intel","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/competitive-intel","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 (12,823 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:21.591Z","embedding":null,"createdAt":"2026-04-23T13:04:17.238Z","updatedAt":"2026-05-18T19:08:21.591Z","lastSeenAt":"2026-05-18T19:08:21.591Z","tsv":"'-02':1005,1010,1043,1065,1155,1159,1177 '-100':1244 '-16':1006,1044,1066,1156,1178 '-23':1011,1160 '-5':804,1463 '/'',':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':1243 '1':131,152,180,239,794,1347,1350,1356 '100':1213 '100k':1534 '17':1382 '19':1363 '2':391,803,851 '20':1376 '2026':1004,1009,1042,1064,1154,1158,1176 '22':1386 '234':1348 '3':433,1193,1462 '32':268 '321':1361 '33':1388 '35':1381 '38':1374 '39':1358 '4':450,1322 '42':1352,1375 '45':1385,1387 '456':1349,1360 '48':1380 '5':590,1555 '568':1357 '62':1373 '64':255 '678':1355 '690':1351 '7':815,885,907,926 '71':1379 '777':1362 '890':1354 'access':122,546,663 'across':8,49,1210,1280 'action':1464 'activ':74 'add':219,568,613 'adob':1489 'advantag':66 'agent':201,282,1545 'agent-skil':1544 'ago':887,909,928 'alreadi':132 'analysi':28,95,821,1033,1292,1457,1492 'analyz':1194,1233,1561 'api':168,660,747 'apikey':727 'application/json':306 'application/x-www-form-urlencoded':538 'ask':23,78,653,777 'associ':1300 'attribut':1294 'audienc':17,1269,1299,1449 'auth':224,298,346,388,417,753 'authent':116,133,187,227 'authenticationerror':767 'author':241,291,420,508,575,641,782,1017 'authorusernam':879,1166 'automat':631 'avail':205 'averag':1255,1259 'avg':1393,1396,1399 'avoid':1517 'await':732,1112,1150,1172,1190 'b':84,106,263,601,1423,1435 'b64encode':258 'back':428,684 'base':1466 'base64':247 'base64.urlsafe':257 'bash':206,216,698,714,744 'bearer':576 'behavior':1290 'better':820 'brand':5,26,32,34,43,80,83,91,100,105,112,800,805,827,856,862,869,895,913,942,970,988,991,1078,1080,1115,1147,1203,1205,1212,1224,1277,1297,1327,1339,1366,1392,1403,1412,1422,1429,1434,1456,1513,1556 'branddata':1137,1186 'brands.items':995 'breadth':1531 'browser':644 'build':822 'c':648 'calcul':1214 'call':140,208,594,635,870,873,896,914,931 'campaign':1548 'captur':562 'card':678 'care':1515 'challeng':256,326,327,329 'chatgpt':1508 'check':127,130,578 'checkaccesskeystatus':145 'checkoperationstatus':936 'choos':188 'classif':1236 'classifi':1225 'claud':604,608,627,1504 'clean':580 'client':164,270,280,319,323,375,379,517,520,707,724,968,1109 'client.close':1099,1191 'client.connect':733,1113 'client.reddit.search':1059 'client.reddit.searchposts':1173 'client.twitter.get':1035 'client.twitter.search':999 'client.twitter.searchposts':1151 'code':292,295,318,325,328,425,442,453,462,466,471,474,494,496,509,510,511,522,605,609,628,783 'collect':946 'comment':1073,1400 'comments/replies':1260 'common':1278,1311,1520 'compar':4,25,41,58,79,103,1196,1239,1473,1506 'comparison':1221,1254,1312,1365,1391,1554 'competit':2,27,36,38,65,94,1325,1426,1469,1491,1550 'competitive-intel':1,1549 'competitor':93,114,802,1329 'complain':1417 'complet':938 'config':218,559,567,606 'configur':124,548,587 'connect':403 'const':723,1108,1114,1136,1142,1148,1170 'constructor':743 'contain':470 'content':304,536 'content-typ':303,535 'context':818,1313 'convers':70 'count':1020,1022,1024,1048,1051,1092,1096 'creat':1025,1075 'createdatd':880,924,1169 'credit':677 'critic':929 'csv':1558 'cut':831,974,1122 'data':119,278,409,504,532,533,666,853,989,1079 'dataset':1281 'date':1003,1008,1027,1041,1063,1077,1331 'day':816,886,908,927 'declin':1389 'decod':264 'default':742,808,813 'depth':1527 'descript':1433,1438 'differ':62 'digest':261 'discord':837,838,841,843,977,978,981,1125,1126,1129,1353,1378 'discov':64 'discuss':893 'dynam':269 'e.g':144 'either':463 'en':890,1013,1162 'encod':301,526 'end':1007 'enddat':888,1157 'endpoint':297 'engag':1253,1390 'ensur':120 'env':170 'environ':194,737 'error':176,754 'exampl':1410,1420,1471 'exchang':356,451,476,775 'exclus':1523 'exist':360 'expand':823,1512 'export':745,1559 'extract':472,499,798 'f':369,386,490,493,574 'fail':776 'fals':1518 'faster':954 'fetch':118,852 'field':876,899,917,1014,1045,1067,1163,1179 'figma':1485 'find':1271,1402 'first':633 'fit':192 'flow':764 'follow':125,1047 'followerscount':903 'free':675,1532 'gemini':1510 'generat':228,240,1323 'getredditpostsbykeyword':915 'gettwitterpostsbykeyword':874 'gettwitterusersbykeyword':897 'github':1541 'go':668 'grant':289,506 'handl':629 'hasaccesskey':211,598 'hashlib':246 'hashlib.sha256':259 'header':302,534,573 'http':625 'http-stream':624 'id':320,324,376,380,518,521,877,900,918,1015,1068,1164,1180 'identifi':60 'import':162,244,479,705,719,966,1104 'impress':1023,1264 'impressioncount':883 'improv':1383 'includ':847 'industri':817 'influenc':1031 'insight':1465 'instagram':53 'instal':700,716 'instruct':792 'intel':3,1551 'intellig':37,39,1326 '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,1401 'keyword':1038 'landscap':1470 'languag':889,1012,1161 'larg':1553 'last':814 'launch':940 'like':1019,1054,1256,1394 'likecount':881,1167 'link':413 'll':422 'local':1562 'lucid':1478 'map':1428 'mcp':137,197,340,602,757,866 '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':54 'media':10,87,408,665 'medium':1543 'mention':1207,1209,1308 'method':299,330,1237 'microsoft':983,1131 'ms':986,1134 'multipl':42,1276,1455 'name':281,902,992,1081,1143,1187,1514 'need':185,401,639,657,679,1522 'negat':1370 'neither':182 'neutral':1369 'never':555 'new':725,1110 'none':300 'note':1511 'notion':1494 'npm':715 'num':1072 'numcom':922,1184 'oauth':225,230,491,514,519,524,630,763 'object.entries':1146 'obsidian':1496 'ok':361 'one':860,959 'open':364,411,486 'openclaw':200 'operationid':934,948 'order':129 'os':251,484 'os.makedirs':357 'os.path.expanduser':358,365,487,583 'os.remove':582 'output':563 'overal':1240 'overlap':18,1032,1270,1450 'overview':40 'pandas/excel':1564 'parallel':858 'param':314,351 'pars':795 'particular':1285 'past':426,681 'path':190,195,600,647 'peopl':109,1407,1416 'per':861,863,1257,1261 'period':812,1252,1330 'pip':699 'platform':807,864,1333 'pleas':410,667 'poll':935,950 'posit':15,61,1291,1368,1427,1431,1436,1519 'positive/negative':1245 'positive/neutral/negative':1228 'post':872,997,1000,1057,1060,1083,1089,1226,1258,1262,1274,1341,1343,1453 'prais':1408 'prefer':1460 'primari':799 'print':387,556,585 'problem':755 'proceed':445 'product':7,45,97 'prompt':646,1472 'provid':460,1525,1529 'python':159,243,478,650,697,702,961,963 'qualit':1526 'quantit':1530 'queri':824,875,898,916,993,1001,1039,1061,1144,1152,1174 'quot':1411,1421 'rang':1332 'ratio':1246 'raw':465 're':760,781 're-author':780 're-run':759 'read':166,313,543 'readi':213 'real':68 'reason':1448 'recommend':1461 'record':1116,1138 'reddit':51,810,910,1056,1058,1088,1090,1095,1171,1189,1219,1267,1335,1342,1398,1501,1524 'reddit.pagination.total':1097 'redirect':284,332,381,512,515 'reg':272,307,311,321,377 'registr':271 'relev':1049,1052 'relevanttweetscount':904 'relevanttweetslikessum':905 'remov':560 'repli':439,503,692 'report':1324 'req':273,312,527,542 'request':797 'research':1499 'resourc':342 'resp':308,322,378,539,545 'respond':448 'respons':293,316 'results/month':1535 'return':597,932 'retweet':1021 'retweetcount':882,1168 'rivian':1476 'roam':1498 'row':1094,1098 'rstrip':262 'run':761,857 's256':331 'save':352 'say':110 'scope':339 'score':921,1071,1183,1242,1268,1367,1397 'sdk':157,649,766,962,1102 'search':859,943 'secret':245 'secrets.token':253,266 'see':423,1229 'send':233,392 'sentiment':14,59,102,1220,1232,1241,1247,1364,1481,1505 'separ':1215 'sequenc':945 'set':735 'setup':115 'share':11,29,55,88,1197,1336,1482 'side':46,48 'sign':415 'signal':1440 'singl':786 'single-us':785 'sketch':1487 'skill':283,1234,1546 'skill-competitive-intel' 'skip':149,177 'slack':828,829,833,835,971,972,976,1119,1120,1124,1346,1372 'social':9,69,86,407,664,1231 'social-sentiment-analyz':1230 'solut':756 'sourc':1540 'source-xpozpublic' 'sov':1200,1201,1345 'sow':840,980,1128 'stabl':1377 'start':1002,1040,1062 'startdat':884,906,925,1153,1175 'state':265,337,338,353,373,374 'step':151,179,238,390,432,449,589,789,791,793,850,1192,1321 'step-by-step':788 'stock':846 'stream':626 'strength':1405,1424 'strengths/weaknesses':1307 'string':1117,1118,1139 'subprocess':483 'subprocess.run':557,565 'subreddit':923,1074,1185 'succeed':174 'success':588 'sum':1055 'switch':1289,1315,1439,1442 'symbol':849 'team':982,984,987,1130,1132,1135,1359,1384 'tell':398 'tesla':1474 'text':878,920,1016,1070,1165,1182 'ticker':848 'tier':1533 'time':811,1251 'tip':939 'titl':919,1069,1181 'token':296,355,456,544,547,552,553,577,774 'tool':138,143,341,634 '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' 'total':806,1208,1263,1266,1344 'transport':623 'trend':1248,1371 'tri':139,158 'true':212,362,564,579,599 'tweet':1050,1053,1091 'twitter':809,871,891,996,998,1028,1082,1084,1085,1149,1188,1217,1265,1334,1340,1395,1480,1528 'twitter.pagination.total':1093 'twitter/x':50 'type':290,294,305,317,507,537 'typescript':652,713,718,1101,1103 'unauthor':758 'understand':1288 'uniqu':1306 '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':19,21,73,740,787,1557 'user':77,237,397,437,459,498,501,610,637,655,690,712,731,752,778,892,1029,1034,1036,1086,1087,1272,1283,1441,1452 'usernam':901,1018,1046,1279 'utm':1539,1542,1547 'valuabl':1286 'var':171 'variabl':738 'verifi':252,371,372,523,525,591,768 'verifier.encode':260 'via':198,603,865,960,1100 'voic':13,31,57,90,1199,1338,1484 'vs':33,82,92,113,1328,1475,1477,1486,1488,1495,1497 'w':367 'wait':434,687,956 'weak':1414,1425 'without':175,611 'word':1521 'work':148,183 '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':1317,1444,1451 'xd':1490 'xpoz':20,121,142,161,167,220,405,561,569,586,618,659,701,704,746,965 'xpoz.ai':671,772,1537,1538 'xpoz.ai/get-token':670 'xpoz.ai/settings](https://xpoz.ai/settings)':771 'xpoz.checkaccesskeystatus':209,595 'xpoz/xpoz':717,722,1107 'xpozclient':163,165,706,708,720,726,967,969,1105,1111 'y':1319,1446","prices":[{"id":"44adec1e-8c99-4a44-8d47-c4824830500e","listingId":"31e078f4-9561-4559-9e68-e87219c3c495","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.238Z"}],"sources":[{"listingId":"31e078f4-9561-4559-9e68-e87219c3c495","source":"github","sourceId":"XPOZpublic/xpoz-agent-skills/competitive-intel","sourceUrl":"https://github.com/XPOZpublic/xpoz-agent-skills/tree/main/skills/competitive-intel","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:17.238Z","lastSeenAt":"2026-05-18T19:08:21.591Z"}],"details":{"listingId":"31e078f4-9561-4559-9e68-e87219c3c495","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"XPOZpublic","slug":"competitive-intel","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":"d208bf383e67b81e1ddab01b23877c157674c073","skill_md_path":"skills/competitive-intel/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/XPOZpublic/xpoz-agent-skills/tree/main/skills/competitive-intel"},"layout":"multi","source":"github","category":"xpoz-agent-skills","frontmatter":{"name":"competitive-intel","description":"Compare brands and products across social media — share of voice, sentiment, positioning, and audience overlap using Xpoz. Use when asked to \"compare brands\", \"competitive analysis\", \"share of voice\", \"brand vs brand\", or \"competitive intelligence\"."},"skills_sh_url":"https://skills.sh/XPOZpublic/xpoz-agent-skills/competitive-intel"},"updatedAt":"2026-05-18T19:08:21.591Z"}}