CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

cross-platform-launcher

Deploys campaigns to multiple ad platforms simultaneously (Google, Meta, LinkedIn, X, Reddit, TikTok, Amazon, The Trade Desk, Amazon DSP). Use for launching unified campaigns, multi-channel rollouts, or synchronized campaign deployment.

Quality

71%

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/cross-platform-launcher/SKILL.md
SKILL.md
Quality
Evals
Security

Cross-Platform Campaign Launcher

Deploy advertising campaigns to multiple platforms simultaneously from a single unified campaign definition. Supports Google Ads, Meta Ads, LinkedIn Ads, X Ads, Reddit Ads, TikTok Ads, Amazon Ads, The Trade Desk, and Amazon DSP.

Capabilities

  1. Unified Campaign Creation - Define once, deploy to multiple platforms
  2. Platform-Specific Mapping - Auto-maps objectives, budgets, and targeting per platform
  3. Parallel Deployment - Launches to all selected platforms concurrently
  4. Rollout Validation - Pre-flight checks before deployment
  5. Deployment Status Tracking - Track success/failure per platform
  6. Budget Distribution - Split budget across platforms (equal, weighted, or custom)
  7. Dry Run Mode - Preview what would be created without deploying

Workflow

Step 1: Define Unified Campaign

Create a campaign definition JSON file:

{
  "name": "Q1 2026 Lead Generation",
  "objective": "LEAD_GENERATION",
  "budget": {
    "total_daily": 500,
    "currency": "USD",
    "distribution": "weighted",
    "weights": {
      "google": 0.35,
      "meta": 0.25,
      "linkedin": 0.20,
      "x": 0.10,
      "reddit": 0.10
    }
  },
  "schedule": {
    "start_date": "2026-02-01",
    "end_date": "2026-03-31"
  },
  "targeting": {
    "locations": ["US", "CA", "GB"],
    "age_min": 25,
    "age_max": 55,
    "interests": ["marketing", "advertising", "business"],
    "job_titles": ["Marketing Manager", "CMO", "Director of Marketing"]
  },
  "platforms": ["google", "meta", "linkedin", "x", "reddit"],
  "status": "PAUSED"
}

Step 2: Validate Campaign Definition

python3 scripts/validate_unified_campaign.py \
  --config campaign.json \
  --check-credentials \
  --check-budgets

Step 3: Preview Deployment (Dry Run)

python3 scripts/launch_unified_campaign.py \
  --config campaign.json \
  --dry-run

Step 4: Deploy to All Platforms

python3 scripts/launch_unified_campaign.py \
  --config campaign.json

Step 5: Check Deployment Status

python3 scripts/check_deployment_status.py \
  --deployment-id dep_abc123

Step 6: Sync Status to Database

python3 scripts/sync_deployment_status.py \
  --deployment-id dep_abc123

Common Operations

Quick launch to Google + Meta

python3 scripts/launch_unified_campaign.py \
  --name "Spring Sale 2026" \
  --objective WEBSITE_TRAFFIC \
  --daily-budget 200 \
  --platforms google,meta \
  --locations US \
  --status PAUSED

Launch lead gen to B2B platforms

python3 scripts/launch_unified_campaign.py \
  --name "Enterprise Demo Requests" \
  --objective LEAD_GENERATION \
  --daily-budget 500 \
  --platforms linkedin,google \
  --job-titles "CTO,VP Engineering,Director IT" \
  --industries "Technology,Software" \
  --status PAUSED

Distribute budget across platforms

python3 scripts/launch_unified_campaign.py \
  --name "Brand Awareness 2026" \
  --objective BRAND_AWARENESS \
  --daily-budget 1000 \
  --platforms google,meta,linkedin,x,reddit \
  --distribution weighted \
  --weights "google:0.30,meta:0.25,linkedin:0.20,x:0.15,reddit:0.10" \
  --status PAUSED

Objective Mapping

Unified ObjectiveGoogle AdsMeta AdsLinkedInX AdsRedditTikTokAmazonTTDAmazon DSP
BRAND_AWARENESSDisplay/VideoREACHBRAND_AWARENESSAWARENESSAWARENESSREACH-MaximizeReachAWARENESS
WEBSITE_TRAFFICSearch/DisplayTRAFFICWEBSITE_VISITSCLICKSTRAFFICTRAFFIC-MaximizeClicksCONSIDERATION
LEAD_GENERATIONSearch/Lead FormsLEAD_GENERATIONLEAD_GENERATIONLEADSCONVERSIONSLEAD_GENERATION-MaximizeConversionsCONVERSION
CONVERSIONSSearch/pMaxCONVERSIONSWEBSITE_CONVERSIONSCONVERSIONSCONVERSIONSCONVERSIONSPURCHASESMaximizeConversionsCONVERSION
APP_INSTALLSAppAPP_INSTALLS-APP_INSTALLAPP_INSTALLAPP_PROMOTION---
VIDEO_VIEWSVideoVIDEO_VIEWSVIDEO_VIEWSVIDEO_VIEWSVIDEO_VIEWSVIDEO_VIEWS-ViewableImpressionsAWARENESS
ENGAGEMENTDisplayENGAGEMENTENGAGEMENTENGAGEMENTSENGAGEMENTENGAGEMENT-MaximizeClicksCONSIDERATION

Budget Distribution Modes

ModeDescription
equalSplit budget equally across all platforms
weightedSplit budget by specified weights (must sum to 1.0)
customSpecify exact amounts per platform
performanceAuto-optimize based on historical ROAS (requires data)

Parameters

ParameterRequiredDefaultDescription
--configNo-Path to campaign JSON config file
--nameYes*-Campaign name (*required if no config)
--objectiveYes*-Unified campaign objective
--daily-budgetYes*-Total daily budget in USD
--platformsYes*allComma-separated platform list
--distributionNoequalBudget distribution mode
--weightsNo-Platform weights for weighted distribution
--locationsNoUSComma-separated geo targets
--start-dateNotomorrowCampaign start date (YYYY-MM-DD)
--end-dateNo-Campaign end date (YYYY-MM-DD)
--statusNoPAUSEDInitial campaign status
--dry-runNofalsePreview without deploying
--parallelNotrueDeploy to platforms in parallel

Scripts Reference

ScriptPurpose
launch_unified_campaign.pyMain launcher - deploys to all platforms
validate_unified_campaign.pyValidate config and credentials
check_deployment_status.pyCheck status of a deployment
sync_deployment_status.pySync deployment status to database
list_active_deployments.pyList all active multi-platform deployments
pause_deployment.pyPause campaigns across all platforms
resume_deployment.pyResume paused deployment
update_deployment_budget.pyUpdate budget across all platforms

Deployment Output

{
  "success": true,
  "deployment_id": "dep_20260118_abc123",
  "name": "Q1 2026 Lead Generation",
  "total_budget": 500,
  "currency": "USD",
  "platforms": {
    "google": {
      "success": true,
      "campaign_id": "customers/123/campaigns/456",
      "budget_allocated": 175,
      "status": "PAUSED"
    },
    "meta": {
      "success": true,
      "campaign_id": "23849573845",
      "budget_allocated": 125,
      "status": "PAUSED"
    },
    "linkedin": {
      "success": true,
      "campaign_id": "389457839",
      "budget_allocated": 100,
      "status": "PAUSED"
    },
    "x": {
      "success": true,
      "campaign_id": "1234567890",
      "budget_allocated": 50,
      "status": "PAUSED"
    },
    "reddit": {
      "success": true,
      "campaign_id": "t5_abc123",
      "budget_allocated": 50,
      "status": "PAUSED"
    }
  },
  "created_at": "2026-01-18T10:30:00Z"
}

Pre-Flight Checks

Before deploying, the launcher validates:

  1. OAuth Credentials - All platform connections are active
  2. Budget Minimums - Each platform meets minimum budget requirements
  3. Targeting Availability - Targeting options supported on each platform
  4. Objective Support - Objective available on all selected platforms
  5. Geo Targeting - Locations available on all platforms
  6. Asset Requirements - Required creatives exist for each platform

Platform-Specific Notes

Google Ads

  • Requires GOOGLE_ADS_DEVELOPER_TOKEN
  • Campaigns created as Search (for leads/conversions) or Display (for awareness)
  • Uses customer ID from GOOGLE_ADS_CUSTOMER_ID

Meta Ads

  • Requires META_AD_ACCOUNT_ID
  • Creates campaign under ad account
  • Audience targeting mapped to Meta's detailed targeting

LinkedIn Ads

  • Requires LINKEDIN_AD_ACCOUNT_ID
  • Best for B2B with job title/industry targeting
  • Lead gen uses LinkedIn Lead Gen Forms

X Ads

  • Requires TWITTER_AD_ACCOUNT_ID
  • Campaigns created with funding instrument
  • Interest targeting mapped to X's categories

Reddit Ads

  • Requires REDDIT_AD_ACCOUNT_ID
  • User-Agent header required
  • Interest/subreddit targeting available

TikTok Ads

  • Requires TIKTOK_ADVERTISER_ID
  • Video-first platform
  • Interest and behavior targeting

Amazon Ads

  • Requires AMAZON_ADS_PROFILE_ID
  • Product-focused campaigns
  • Sponsored Products/Brands/Display

The Trade Desk

  • Requires TTD_AUTH_TOKEN and TTD_ADVERTISER_ID
  • API token auth (not OAuth)
  • Supports Display, Video, CTV, Audio, Native
  • Budgets in micros (multiply by 1,000,000)
  • Modern campaigns use Version: "Kokai"

Amazon DSP

  • Requires AMAZON_DSP_PROFILE_ID and AMAZON_DSP_ADVERTISER_ID
  • OAuth 2.0 with PKCE
  • Order = Campaign, Line Item = Ad Group
  • Lifetime budgets (not daily)
  • Region-specific (NA, EU, FE)

Environment Variables

Required per platform:

# Google Ads
GOOGLE_ADS_DEVELOPER_TOKEN
GOOGLE_ADS_CUSTOMER_ID
GOOGLE_ADS_LOGIN_CUSTOMER_ID

# Meta Ads
META_AD_ACCOUNT_ID
META_ACCESS_TOKEN

# LinkedIn Ads
LINKEDIN_AD_ACCOUNT_ID
LINKEDIN_ACCESS_TOKEN

# X Ads
TWITTER_AD_ACCOUNT_ID
X_ACCESS_TOKEN

# Reddit Ads
REDDIT_AD_ACCOUNT_ID
REDDIT_ACCESS_TOKEN

# TikTok Ads
TIKTOK_ADVERTISER_ID
TIKTOK_ACCESS_TOKEN

# Amazon Ads
AMAZON_ADS_PROFILE_ID
AMAZON_ACCESS_TOKEN

# The Trade Desk
TTD_AUTH_TOKEN
TTD_ADVERTISER_ID
TTD_ENVIRONMENT  # sandbox or prod

# Amazon DSP
AMAZON_DSP_PROFILE_ID
AMAZON_DSP_ADVERTISER_ID
AMAZON_DSP_ACCESS_TOKEN
AMAZON_DSP_REGION  # na, eu, or fe
  1. Tokens refreshed automatically if expired

Database Schema

Deployments tracked in unified_deployments table:

CREATE TABLE unified_deployments (
  id UUID PRIMARY KEY,
  deployment_id VARCHAR(255) UNIQUE NOT NULL,
  user_id INTEGER REFERENCES users(id),
  name VARCHAR(255) NOT NULL,
  objective VARCHAR(50) NOT NULL,
  total_budget DECIMAL(10,2),
  currency VARCHAR(3) DEFAULT 'USD',
  distribution_mode VARCHAR(20) DEFAULT 'equal',
  status VARCHAR(20) DEFAULT 'PENDING',
  platforms JSONB NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE deployment_campaigns (
  id UUID PRIMARY KEY,
  deployment_id UUID REFERENCES unified_deployments(id),
  platform VARCHAR(20) NOT NULL,
  platform_campaign_id VARCHAR(255),
  budget_allocated DECIMAL(10,2),
  status VARCHAR(20) DEFAULT 'PENDING',
  error_message TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

Error Handling

ErrorCauseSolution
MISSING_CREDENTIALSPlatform OAuth not connectedConnect platform in Settings
BUDGET_TOO_LOWPlatform minimum not metIncrease budget or remove platform
OBJECTIVE_NOT_SUPPORTEDPlatform doesn't support objectiveRemove platform from deployment
TARGETING_UNAVAILABLETargeting option not on platformAdjust targeting or remove platform
RATE_LIMITEDToo many API requestsRetry with backoff
PARTIAL_FAILURESome platforms failedCheck individual errors, retry failed

Best Practices

  1. Always start PAUSED - Review campaigns before enabling
  2. Use dry-run first - Preview deployment before creating
  3. Set realistic budgets - Ensure minimums met per platform
  4. Check credentials - Verify all OAuth connections active
  5. Review targeting - Ensure targeting makes sense per platform
  6. Monitor after launch - Use health monitoring skill for alerts
  7. Use weighted distribution - Allocate more to high-performing platforms
  8. Sync status regularly - Keep database in sync with platforms

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/cross-platform-launcher/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.