CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

multi-channel-reporting

Generates cross-channel advertising reports and performance summaries. Use for campaign analysis, budget reviews, and executive reporting.

Quality

69%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/multi-channel-reporting/SKILL.md
SKILL.md
Quality
Evals
Security

Multi-Channel Reporting Skill

Generates cross-channel advertising performance reports using Google Ads API Report Fetcher (GAARF) patterns. Token-efficient summaries instead of raw data dumps.

Capabilities

  1. Executive summaries - High-level spend, conversions, ROAS across all channels
  2. Channel comparison - Side-by-side platform performance
  3. Top/bottom performers - Identify winners and losers to act on
  4. Daily data extraction - Scheduled pulls for trend analysis

Report Types

ReportDescriptionUse When
Executive SummaryTotals + KPIs across channelsWeekly/monthly reviews
Channel SummaryPer-platform breakdownBudget allocation decisions
Campaign PerformanceTop/bottom campaignsOptimization meetings
Trend ReportDay-over-day/week-over-weekIdentifying anomalies

Workflow

Generate Performance Report

Run scripts/generate-report.py with date range:

python3 scripts/generate-report.py \
  --start-date 2025-01-01 \
  --end-date 2025-01-15 \
  --breakdown campaign

Options:

  • --breakdown: campaign | ad_group | keyword | day
  • --top-n: Number of top/bottom performers to show (default: 10)
  • --output: Save to JSON file

Daily Data Pull

Run scripts/daily-pull.py for scheduled extraction:

python3 scripts/daily-pull.py \
  --days 7 \
  --output-dir data/

This stores data in data/YYYY-MM-DD.json for trend analysis.

GAQL Query Examples

Campaign Performance (Last 30 Days)

SELECT
  campaign.name,
  campaign.status,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros,
  metrics.conversions,
  metrics.conversions_value
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
  AND campaign.status = 'ENABLED'
ORDER BY metrics.cost_micros DESC

Daily Spend Trend

SELECT
  segments.date,
  metrics.cost_micros,
  metrics.conversions,
  metrics.impressions
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
ORDER BY segments.date

Ad Group Performance

SELECT
  campaign.name,
  ad_group.name,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros,
  metrics.conversions
FROM ad_group
WHERE segments.date DURING LAST_30_DAYS
  AND campaign.status = 'ENABLED'
  AND ad_group.status = 'ENABLED'
ORDER BY metrics.cost_micros DESC

Keyword Performance

SELECT
  campaign.name,
  ad_group.name,
  ad_group_criterion.keyword.text,
  ad_group_criterion.keyword.match_type,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros,
  metrics.conversions
FROM keyword_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC

Output Format

Reports are token-efficient summaries, not raw row dumps:

EXECUTIVE SUMMARY
=================
Period: 2025-01-01 to 2025-01-15
Total Spend: $12,345.67
Conversions: 234
CPA: $52.76
ROAS: 3.2x

CHANNEL SUMMARY
===============
Google Ads: $10,000 | 200 conv | $50 CPA
LinkedIn:   $2,000  | 30 conv  | $67 CPA
Reddit:     $345    | 4 conv   | $86 CPA

TOP 5 PERFORMERS (by CPA)
=========================
1. Brand - Search ($15 CPA, 50 conv)
2. JTBD - Budget ($35 CPA, 30 conv)
...

BOTTOM 5 PERFORMERS (by CPA)  
============================
1. Cold - Display ($250 CPA, 2 conv)
...

ACTION ITEMS
============
• Scale: Brand - Search (lowest CPA, room to grow)
• Fix: Cold - Display (CPA 5x average)
• Pause: Test Campaign (no conversions in 14 days)

Environment Requirements

Requires environment variables:

  • DATABASE_URL
  • GOOGLE_ADS_DEVELOPER_TOKEN

Account IDs

  • MCC Login Customer ID: 7431593382

Extending to Other Platforms

The scripts are designed for extension. To add a new platform:

  1. Add platform query function in generate-report.py
  2. Normalize data to common schema: {name, spend, impressions, clicks, conversions, cpa}
  3. Add to channel summary aggregation

Supported Platforms

PlatformAPI TypeNotes
Google AdsGAQLGAARF patterns
Meta AdsGraph APICampaign insights
LinkedIn AdsRest.li 2.0B2B metrics
X Adsv12 APIEngagement metrics
Reddit Adsv3 APIRequires User-Agent
TikTok AdsBusiness APIVideo-first metrics
Amazon AdsSponsored Ads APIACOS → ROAS conversion
The Trade DeskREST + GraphQLDelta sync for efficiency
Amazon DSPAsync ReportingRequest → poll → download

Platform-Specific Notes

The Trade Desk

  • Uses changeTrackingVersion for incremental sync
  • GraphQL for complex cross-dimension queries
  • Supports display, video, CTV, audio metrics

Amazon DSP

  • Async reporting - must poll for report completion
  • Order = Campaign, Line Item = Ad Group
  • Lifetime budgets (convert to daily for comparison)

About this skill

Part of the Synter free skills collection — open-source agent skills for advertising, PPC, and marketing automation.

Want this skill (and 40+ more) running on autopilot against your live ad accounts? Try Synter — AI Agent Media Buyers that connect to Google, Meta, LinkedIn, TikTok, Reddit, Amazon, and 7+ more platforms.

Repository

Synter-Media-AI/free-skills

Path

skills/multi-channel-reporting/SKILL.md

Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.