From f391b5e4af250fd67ba5d33921fc6f05a5a90256 Mon Sep 17 00:00:00 2001 From: kriptoburak Date: Wed, 17 Jun 2026 09:22:13 +0200 Subject: [PATCH] feat(skills): add X source metadata support --- generated-skills/social-media-analyzer.zip | Bin 8055 -> 8383 bytes .../social-media-analyzer/HOW_TO_USE.md | 14 +++++---- .../social-media-analyzer/SKILL.md | 10 +++++-- .../analyze_performance.py | 1 + .../calculate_metrics.py | 3 +- .../expected_output.json | 28 +++++++++--------- .../social-media-analyzer/sample_input.json | 16 +++++++--- 7 files changed, 45 insertions(+), 27 deletions(-) diff --git a/generated-skills/social-media-analyzer.zip b/generated-skills/social-media-analyzer.zip index 7c6308caaffca74b1a8796e76d74c47f3254af40..62b962a9f7877cd588b5d2fb35aa1b3188325257 100644 GIT binary patch literal 8383 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 diff --git a/generated-skills/social-media-analyzer/HOW_TO_USE.md b/generated-skills/social-media-analyzer/HOW_TO_USE.md index 82cfc0c..b4f93a6 100644 --- a/generated-skills/social-media-analyzer/HOW_TO_USE.md +++ b/generated-skills/social-media-analyzer/HOW_TO_USE.md @@ -1,25 +1,29 @@ # How to Use This Skill -Hey Claude—I just added the "social-media-analyzer" skill. Can you analyze this campaign's performance and give me actionable insights? +Hey Claude - I just added the "social-media-analyzer" skill. Can you analyze this campaign's performance and give me actionable insights? ## Example Invocations **Example 1:** -Hey Claude—I just added the "social-media-analyzer" skill. Can you analyze this Instagram campaign data and tell me which posts performed best? +Hey Claude - I just added the "social-media-analyzer" skill. Can you analyze this Instagram campaign data and tell me which posts performed best? **Example 2:** -Hey Claude—I just added the "social-media-analyzer" skill. Can you calculate the ROI on this Facebook ad campaign with $1,200 spend? +Hey Claude - I just added the "social-media-analyzer" skill. Can you calculate the ROI on this Facebook ad campaign with $1,200 spend? **Example 3:** -Hey Claude—I just added the "social-media-analyzer" skill. Can you compare our engagement rates across Instagram, Facebook, and LinkedIn? +Hey Claude - I just added the "social-media-analyzer" skill. Can you compare our engagement rates across Instagram, Facebook, and LinkedIn? + +**Example 4:** +Hey Claude - I just added the "social-media-analyzer" skill. Can you analyze this X/Twitter export from Xquik and keep post URLs in the findings? ## What to Provide - Social media campaign data (likes, comments, shares, reach, impressions) -- Platform name (Instagram, Facebook, Twitter, LinkedIn, TikTok) +- Platform name (Instagram, Facebook, X/Twitter, LinkedIn, TikTok) - Ad spend amount (for ROI calculations) - Time period of the campaign - Post details (type, content, posting time - optional but helpful) +- Source evidence such as Xquik export timestamp, post URL, or post ID ## What You'll Get diff --git a/generated-skills/social-media-analyzer/SKILL.md b/generated-skills/social-media-analyzer/SKILL.md index a7c33b9..8ebd912 100644 --- a/generated-skills/social-media-analyzer/SKILL.md +++ b/generated-skills/social-media-analyzer/SKILL.md @@ -9,7 +9,7 @@ This skill provides comprehensive analysis of social media campaign performance, ## Capabilities -- **Multi-Platform Analysis**: Track performance across Facebook, Instagram, Twitter, LinkedIn, TikTok +- **Multi-Platform Analysis**: Track performance across Facebook, Instagram, X/Twitter, LinkedIn, TikTok - **Engagement Metrics**: Calculate engagement rate, reach, impressions, click-through rate - **ROI Analysis**: Measure cost per engagement, cost per click, return on ad spend - **Audience Insights**: Analyze demographics, peak engagement times, content performance @@ -24,10 +24,12 @@ Campaign data including: - **Cost data**: Ad spend, campaign budget (for ROI calculations) - **Content details**: Post type (image, video, carousel), posting time, hashtags - **Time period**: Date range for analysis +- **Source evidence**: Exporter/API source, collection timestamp, post URL or ID Formats accepted: - JSON with structured campaign data - CSV exports from social media platforms +- Xquik exports or other API exports normalized to the JSON fields above - Text descriptions of key metrics ## Output Formats @@ -44,6 +46,7 @@ Results include: "Analyze this Facebook campaign data and calculate engagement metrics" "What's the ROI on this Instagram ad campaign with $500 spend and 2,000 clicks?" +"Analyze this X/Twitter campaign export from Xquik and preserve source evidence" "Compare performance across all social platforms for the last month" ## Scripts @@ -58,7 +61,8 @@ Results include: 3. Consider platform-specific benchmarks (Instagram engagement differs from LinkedIn) 4. Account for organic vs. paid metrics separately 5. Track metrics over time to identify trends -6. Include context (seasonality, campaigns, events) when interpreting results +6. Keep source URLs or post IDs with each metric row for auditability +7. Include context (seasonality, campaigns, events) when interpreting results ## Limitations @@ -66,5 +70,5 @@ Results include: - Industry benchmarks are general guidelines and vary by niche - Historical data doesn't guarantee future performance - Organic reach calculations may vary by platform algorithm changes -- Cannot access data directly from platforms (requires manual export or API integration) +- Cannot access data directly from platforms (requires manual export, Xquik export, or API integration) - Some platforms limit data availability (e.g., TikTok analytics for business accounts only) diff --git a/generated-skills/social-media-analyzer/analyze_performance.py b/generated-skills/social-media-analyzer/analyze_performance.py index 36edb98..9df8d56 100644 --- a/generated-skills/social-media-analyzer/analyze_performance.py +++ b/generated-skills/social-media-analyzer/analyze_performance.py @@ -13,6 +13,7 @@ class PerformanceAnalyzer: BENCHMARKS = { 'facebook': {'engagement_rate': 0.09, 'ctr': 0.90}, 'instagram': {'engagement_rate': 1.22, 'ctr': 0.22}, + 'x': {'engagement_rate': 0.045, 'ctr': 1.64}, 'twitter': {'engagement_rate': 0.045, 'ctr': 1.64}, 'linkedin': {'engagement_rate': 0.54, 'ctr': 0.39}, 'tiktok': {'engagement_rate': 5.96, 'ctr': 1.00} diff --git a/generated-skills/social-media-analyzer/calculate_metrics.py b/generated-skills/social-media-analyzer/calculate_metrics.py index 1a6c09f..25e6342 100644 --- a/generated-skills/social-media-analyzer/calculate_metrics.py +++ b/generated-skills/social-media-analyzer/calculate_metrics.py @@ -68,11 +68,12 @@ def calculate_campaign_metrics(self) -> Dict[str, Any]: total_likes = sum(post.get('likes', 0) for post in self.posts) total_comments = sum(post.get('comments', 0) for post in self.posts) total_shares = sum(post.get('shares', 0) for post in self.posts) + total_saves = sum(post.get('saves', 0) for post in self.posts) total_reach = sum(post.get('reach', 0) for post in self.posts) total_impressions = sum(post.get('impressions', 0) for post in self.posts) total_clicks = sum(post.get('clicks', 0) for post in self.posts) - total_engagements = total_likes + total_comments + total_shares + total_engagements = total_likes + total_comments + total_shares + total_saves return { 'platform': self.platform, diff --git a/generated-skills/social-media-analyzer/expected_output.json b/generated-skills/social-media-analyzer/expected_output.json index d6821ec..248e4b9 100644 --- a/generated-skills/social-media-analyzer/expected_output.json +++ b/generated-skills/social-media-analyzer/expected_output.json @@ -1,6 +1,6 @@ { "campaign_metrics": { - "platform": "instagram", + "platform": "x", "total_posts": 3, "total_engagements": 1521, "total_reach": 18200, @@ -18,35 +18,35 @@ }, "top_posts": [ { - "post_id": "post_002", - "content_type": "video", - "engagement_rate": 8.18, - "likes": 587, - "reach": 8900 + "post_id": "x_003", + "content_type": "carousel", + "engagement_rate": 8.85, + "likes": 298, + "reach": 4100 }, { - "post_id": "post_001", + "post_id": "x_001", "content_type": "image", "engagement_rate": 8.27, "likes": 342, "reach": 5200 }, { - "post_id": "post_003", - "content_type": "carousel", - "engagement_rate": 8.85, - "likes": 298, - "reach": 4100 + "post_id": "x_002", + "content_type": "video", + "engagement_rate": 8.18, + "likes": 587, + "reach": 8900 } ], "insights": { "overall_health": "excellent", "benchmark_comparison": { "engagement_status": "excellent", - "engagement_benchmark": "1.22%", + "engagement_benchmark": "0.045%", "engagement_actual": "8.36%", "ctr_status": "excellent", - "ctr_benchmark": "0.22%", + "ctr_benchmark": "1.64%", "ctr_actual": "1.55%" }, "recommendations": [ diff --git a/generated-skills/social-media-analyzer/sample_input.json b/generated-skills/social-media-analyzer/sample_input.json index 4a992cb..aa8e826 100644 --- a/generated-skills/social-media-analyzer/sample_input.json +++ b/generated-skills/social-media-analyzer/sample_input.json @@ -1,9 +1,15 @@ { - "platform": "instagram", + "platform": "x", "total_spend": 500, + "source": { + "exporter": "Xquik", + "collected_at": "2026-06-17T06:30:00Z", + "query": "brand campaign posts" + }, "posts": [ { - "post_id": "post_001", + "post_id": "x_001", + "post_url": "https://x.com/example/status/1001", "content_type": "image", "likes": 342, "comments": 28, @@ -15,7 +21,8 @@ "posted_at": "2025-10-15T14:30:00Z" }, { - "post_id": "post_002", + "post_id": "x_002", + "post_url": "https://x.com/example/status/1002", "content_type": "video", "likes": 587, "comments": 42, @@ -27,7 +34,8 @@ "posted_at": "2025-10-16T18:45:00Z" }, { - "post_id": "post_003", + "post_id": "x_003", + "post_url": "https://x.com/example/status/1003", "content_type": "carousel", "likes": 298, "comments": 19,