CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

creative-testing

Cross-platform creative A/B testing for ads across Google, Meta, LinkedIn, X, Reddit, TikTok, and Amazon. Use for creative testing, ad variant analysis, winner selection, and performance comparison.

Quality

78%

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/creative-testing/SKILL.md
SKILL.md
Quality
Evals
Security

Cross-Platform Creative Testing

A/B tests ad creatives across all connected advertising platforms. Creates test variants, monitors performance, determines statistical winners, and applies winning creatives platform-wide.

Safety Guardrails

Read-only by default. This skill:

  • Analyzes creative performance and outputs recommendations only
  • Never auto-pauses or promotes variants without explicit flags
  • Requires --apply flag to make any changes
  • Generates detailed reports before modifications

Capabilities

  1. Create A/B Tests - Set up multi-variant creative tests across platforms
  2. Monitor Performance - Track CTR, CPC, CVR, ROAS per creative variant
  3. Statistical Analysis - Calculate confidence intervals and significance
  4. Winner Detection - Automatically identify winning variants at threshold
  5. Apply Winners - Promote winning creatives, pause losers
  6. Cross-Platform Sync - Replicate winning concepts to other platforms

Workflow

Step 1: Create Test Configuration

python3 scripts/create_test.py \
  --name "Q1 2026 Hero Image Test" \
  --platforms google,meta,linkedin \
  --variants 3 \
  --metric ctr \
  --confidence 95 \
  --min-impressions 1000 \
  --output test_config.json

Step 2: Upload Creative Variants

python3 scripts/upload_variants.py \
  --test-id test_config.json \
  --variant-a /path/to/hero_v1.png --headline-a "Try Free Today" \
  --variant-b /path/to/hero_v2.png --headline-b "Start Your Trial" \
  --variant-c /path/to/hero_v3.png --headline-c "Get Started Free"

Step 3: Monitor Test Performance

python3 scripts/monitor_test.py \
  --test-id test_config.json \
  --output performance.json

Step 4: Analyze Results

python3 scripts/analyze_results.py \
  --test-id test_config.json \
  --performance performance.json \
  --output analysis.json

Step 5: Apply Winner (Optional)

python3 scripts/apply_winner.py \
  --test-id test_config.json \
  --analysis analysis.json \
  --dry-run

# Remove --dry-run to execute
python3 scripts/apply_winner.py \
  --test-id test_config.json \
  --analysis analysis.json \
  --apply

Common Operations

Quick performance check on active tests

python3 scripts/monitor_test.py \
  --all-active \
  --summary-only

Create headline-only test

python3 scripts/create_test.py \
  --name "Headline Test" \
  --platforms meta \
  --type headline \
  --variants 4 \
  --metric ctr

Create image-only test

python3 scripts/create_test.py \
  --name "Image Test" \
  --platforms google,meta \
  --type image \
  --variants 3 \
  --metric cvr

Generate creative test report

python3 scripts/generate_report.py \
  --test-id test_config.json \
  --format markdown \
  --output creative_report.md

Sync winning creative to other platforms

python3 scripts/sync_winner.py \
  --test-id test_config.json \
  --source-platform meta \
  --target-platforms google,linkedin,tiktok \
  --dry-run

Statistical Methodology

Significance Testing

Uses Bayesian A/B testing with Beta-Binomial model for CTR/CVR:

  1. Prior: Beta(1, 1) - uninformative prior
  2. Posterior: Beta(1 + conversions, 1 + non-conversions)
  3. Winner Probability: Monte Carlo simulation (10,000 draws)
  4. Threshold: Variant wins if P(best) > confidence level

Minimum Sample Size

n = 2 × (Z_α/2 + Z_β)² × p(1-p) / δ²

Where:
- Z_α/2 = 1.96 (95% confidence)
- Z_β = 0.84 (80% power)
- p = expected baseline rate
- δ = minimum detectable effect

Metrics Tracked

MetricFormulaUse Case
CTRClicks / ImpressionsAwareness campaigns
CVRConversions / ClicksConversion campaigns
CPCSpend / ClicksCost efficiency
ROASRevenue / SpendRevenue optimization
CPLSpend / LeadsLead generation

Parameters

ParameterRequiredDefaultDescription
--nameYes-Test name for tracking
--platformsNoallComma-separated platform list
--typeNofullTest type: headline, image, video, full
--variantsNo2Number of variants (2-5)
--metricNoctrPrimary metric: ctr, cvr, cpc, roas
--confidenceNo95Confidence level (90, 95, 99)
--min-impressionsNo1000Minimum impressions before analysis
--max-durationNo14dMaximum test duration
--budget-splitNoequalBudget allocation: equal, weighted
--dry-runNofalsePreview without applying
--applyNofalseExecute winner promotion

Scripts Reference

ScriptPurpose
create_test.pyCreate new A/B test configuration
upload_variants.pyUpload creative variants to platforms
monitor_test.pyTrack real-time performance metrics
analyze_results.pyStatistical analysis and winner detection
apply_winner.pyPromote winner, pause losers
sync_winner.pyReplicate winning creative to other platforms
generate_report.pyCreate detailed test reports
platform_creative_adapters.pyPlatform-specific creative management

Output Format

Test Configuration JSON

{
  "test_id": "ct_2026011801",
  "name": "Q1 2026 Hero Image Test",
  "created_at": "2026-01-18T10:00:00Z",
  "status": "running",
  "platforms": ["google", "meta", "linkedin"],
  "type": "full",
  "primary_metric": "ctr",
  "confidence_level": 95,
  "min_impressions": 1000,
  "max_duration_days": 14,
  "variants": [
    {
      "id": "A",
      "name": "Control",
      "headline": "Try Free Today",
      "image_url": "https://your-cdn.com/creatives/hero_v1.png"
    },
    {
      "id": "B",
      "name": "Variant B",
      "headline": "Start Your Trial",
      "image_url": "https://your-cdn.com/creatives/hero_v2.png"
    }
  ],
  "budget_split": {
    "A": 50,
    "B": 50
  }
}

Analysis Results JSON

{
  "test_id": "ct_2026011801",
  "analyzed_at": "2026-01-25T10:00:00Z",
  "status": "winner_found",
  "winner": "B",
  "confidence": 97.3,
  "platforms": {
    "google": {
      "variants": {
        "A": {
          "impressions": 12500,
          "clicks": 375,
          "conversions": 45,
          "spend": 187.50,
          "ctr": 3.0,
          "cvr": 12.0,
          "cpc": 0.50
        },
        "B": {
          "impressions": 12500,
          "clicks": 500,
          "conversions": 65,
          "spend": 187.50,
          "ctr": 4.0,
          "cvr": 13.0,
          "cpc": 0.375
        }
      },
      "winner": "B",
      "confidence": 98.5,
      "lift": {
        "ctr": 33.3,
        "cvr": 8.3,
        "cpc": -25.0
      }
    },
    "meta": {
      "variants": {
        "A": {
          "impressions": 18000,
          "clicks": 540,
          "conversions": 54,
          "spend": 270.00,
          "ctr": 3.0,
          "cvr": 10.0,
          "cpc": 0.50
        },
        "B": {
          "impressions": 18000,
          "clicks": 720,
          "conversions": 79,
          "spend": 270.00,
          "ctr": 4.0,
          "cvr": 11.0,
          "cpc": 0.375
        }
      },
      "winner": "B",
      "confidence": 99.1,
      "lift": {
        "ctr": 33.3,
        "cvr": 10.0,
        "cpc": -25.0
      }
    }
  },
  "aggregate": {
    "winner": "B",
    "confidence": 97.3,
    "total_impressions": 61000,
    "lift": {
      "ctr": 33.3,
      "cvr": 9.5,
      "cpc": -25.0
    },
    "recommendation": "Promote Variant B across all platforms. Expected +33% CTR improvement."
  }
}

Platform-Specific Notes

Google Ads

  • Creates Responsive Search Ads for headline tests
  • Responsive Display Ads for image tests
  • Asset-level reporting available
  • Ad rotation: Optimize or Rotate Evenly

Meta Ads

  • Uses Dynamic Creative for testing
  • A/B test framework built-in
  • Automatic placements recommended
  • Breakdown by creative element

LinkedIn Ads

  • Sponsored Content A/B testing
  • Single image, carousel, video formats
  • Member traits for audience splits
  • Conversion tracking via Insight Tag

X Ads

  • Promoted Tweets with variants
  • Image, video, carousel formats
  • Engagement objectives for CTR
  • Website conversion tracking

Reddit Ads

  • Link ads and text ads
  • Subreddit targeting splits
  • Conversion pixel for CVR
  • API v3 creative management

TikTok Ads

  • In-Feed ads, TopView, Spark
  • Video-first creative testing
  • Custom audiences for splits
  • TikTok Pixel for conversions

Amazon Ads

  • Sponsored Products/Brands/Display
  • Custom headline tests
  • ASIN-level performance
  • Attribution for conversions

Best Practices

  1. Test one element at a time - Isolate headlines, images, or CTAs
  2. Ensure statistical significance - Wait for min impressions before deciding
  3. Use realistic budgets - Don't starve variants with low spend
  4. Match audiences - Ensure fair comparison with same targeting
  5. Document learnings - Track what works for future campaigns
  6. Consider seasonality - Account for weekly/monthly patterns
  7. Iterate on winners - Use insights for next round of tests
  8. Cross-platform sync - Apply learnings across all platforms

Environment Variables

Required environment variables:

# Platform Connection IDs

# Platform Account IDs
GOOGLE_ADS_CUSTOMER_ID
META_AD_ACCOUNT_ID
LINKEDIN_AD_ACCOUNT_ID
TWITTER_AD_ACCOUNT_ID
REDDIT_AD_ACCOUNT_ID
TIKTOK_ADVERTISER_ID
AMAZON_ADS_PROFILE_ID

# Google Ads specific
GOOGLE_ADS_DEVELOPER_TOKEN
GOOGLE_ADS_LOGIN_CUSTOMER_ID

# Database for test tracking
DATABASE_URL

Error Handling

ErrorCauseSolution
INSUFFICIENT_DATANot enough impressionsExtend test duration or increase budget
NO_WINNERVariants too similarIncrease minimum detectable effect
UPLOAD_FAILEDCreative rejected by platformCheck format/size requirements
TEST_EXPIREDMax duration reachedAnalyze current data or restart
VARIANT_PAUSEDPlatform paused underperformerMay indicate quality issues
SYNC_FAILEDCross-platform sync errorCheck target platform credentials

Integration with Other Skills

  • ad-copy-generation - Generate headline variants for testing
  • cross-platform-launcher - Deploy winning creatives to new campaigns
  • multi-channel-reporting - Include test results in reports
  • budget-optimizer - Allocate more budget to winning creatives

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/creative-testing/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.