creative-testing
Skill4 starsChanged 6 months agoMITView on GitHub
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.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- celeryhq/simplified-aitheir own version, first seen Jul 13, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- celeryhq/simplified-ai★ 4same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository59 other files it gives its agents.
- ad-copy-generationSkill
- ad-creative-fatigue-detectorSkill
- ad-policy-complianceSkill
- amazon-ads-optimizerSkill
- anomaly-detectorSkill
- attribution-modelingSkill
- audience-expansion-strategySkill
- bid-optimizationSkill
- budget-optimizerSkill
- campaign-ide-handoffSkill
- campaign-preflightSkill
- campaign-structure-auditorSkill
- chatgpt-ads-conversion-trackingSkill
- chatgpt-ads-launchSkill
- competitor-analysisSkill
- cross-platform-attributionSkill
- cross-platform-launcherSkill
- dayparting-schedulerSkill
- executive-reportingSkill
- first-party-data-strategySkill
- google-ads-operatorSkill
- google-ads-quality-scoreSkill
- google-shopping-optimizerSkill
- gtm-metricsSkill
- incrementality-testingSkill
- keyword-researchSkill
- kill-scale-rulesSkill
- klaviyo-campaignsSkill
- landing-page-optimizerSkill
- launch-gatesSkill
- linkedin-ads-operatorSkill
- linkedin-ads-targetingSkill
- media-plan-builderSkill
- meta-ads-diagnosticsSkill
- meta-ads-operatorSkill
- mmm-budget-plannerSkill
- multi-channel-reportingSkill
- multi-platform-ads-operatorSkill
- multi-platform-launchSkill
- negative-keyword-minerSkill
- openai-ads-operatorSkill
- performance-max-optimizerSkill
- pixel-capi-auditorSkill
- pixel-capi-setupSkill
- platform-cost-benchmarksSkill
- public-ad-library-intelligenceSkill
- retargeting-sequence-designerSkill
- roas-calculatorSkill
- seasonal-budget-plannerSkill
- spearSkill
- spec-driven-devSkill
- synter-mcp-setupSkill
- tiktok-ads-operatorSkill
- tracking-leak-detectorSkill
- ugc-creative-briefSkill
- ui-contrast-reviewSkill
- utm-builderSkill
- video-ad-scriptwriterSkill
- x-ads-operatorSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 5 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Never auto-pauses or promotes variants without explicit flags
- Distinctive: line 364
Ensure statistical significance: - Wait for min impressions before deciding
- Distinctive: line 365
Use realistic budgets: - Don't starve variants with low spend
- Distinctive: line 366
Match audiences: - Ensure fair comparison with same targeting
- Distinctive: line 369
Iterate on winners: - Use insights for next round of tests
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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
--applyflag to make any changes - Generates detailed reports before modifications
Capabilities
- Create A/B Tests - Set up multi-variant creative tests across platforms
- Monitor Performance - Track CTR, CPC, CVR, ROAS per creative variant
- Statistical Analysis - Calculate confidence intervals and significance
- Winner Detection - Automatically identify winning variants at threshold
- Apply Winners - Promote winning creatives, pause losers
- 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.jsonStep 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.jsonStep 4: Analyze Results
python3 scripts/analyze_results.py \
--test-id test_config.json \
--performance performance.json \
--output analysis.jsonStep 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 \
--applyCommon Operations
Quick performance check on active tests
python3 scripts/monitor_test.py \
--all-active \
--summary-onlyCreate headline-only test
python3 scripts/create_test.py \
--name "Headline Test" \
--platforms meta \
--type headline \
--variants 4 \
--metric ctrCreate image-only test
python3 scripts/create_test.py \
--name "Image Test" \
--platforms google,meta \
--type image \
--variants 3 \
--metric cvrGenerate creative test report
python3 scripts/generate_report.py \
--test-id test_config.json \
--format markdown \
--output creative_report.mdSync winning creative to other platforms
python3 scripts/sync_winner.py \
--test-id test_config.json \
--source-platform meta \
--target-platforms google,linkedin,tiktok \
--dry-runStatistical Methodology
Significance Testing
Uses Bayesian A/B testing with Beta-Binomial model for CTR/CVR:
- Prior: Beta(1, 1) - uninformative prior
- Posterior: Beta(1 + conversions, 1 + non-conversions)
- Winner Probability: Monte Carlo simulation (10,000 draws)
- 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 effectMetrics Tracked
| Metric | Formula | Use Case |
| CTR | Clicks / Impressions | Awareness campaigns |
| CVR | Conversions / Clicks | Conversion campaigns |
| CPC | Spend / Clicks | Cost efficiency |
| ROAS | Revenue / Spend | Revenue optimization |
| CPL | Spend / Leads | Lead generation |
Parameters
| Parameter | Required | Default | Description |
--name | Yes | - | Test name for tracking |
--platforms | No | all | Comma-separated platform list |
--type | No | full | Test type: headline, image, video, full |
--variants | No | 2 | Number of variants (2-5) |
--metric | No | ctr | Primary metric: ctr, cvr, cpc, roas |
--confidence | No | 95 | Confidence level (90, 95, 99) |
--min-impressions | No | 1000 | Minimum impressions before analysis |
--max-duration | No | 14d | Maximum test duration |
--budget-split | No | equal | Budget allocation: equal, weighted |
--dry-run | No | false | Preview without applying |
--apply | No | false | Execute winner promotion |
Scripts Reference
| Script | Purpose |
create_test.py | Create new A/B test configuration |
upload_variants.py | Upload creative variants to platforms |
monitor_test.py | Track real-time performance metrics |
analyze_results.py | Statistical analysis and winner detection |
apply_winner.py | Promote winner, pause losers |
sync_winner.py | Replicate winning creative to other platforms |
generate_report.py | Create detailed test reports |
platform_creative_adapters.py | Platform-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
- Test one element at a time - Isolate headlines, images, or CTAs
- Ensure statistical significance - Wait for min impressions before deciding
- Use realistic budgets - Don't starve variants with low spend
- Match audiences - Ensure fair comparison with same targeting
- Document learnings - Track what works for future campaigns
- Consider seasonality - Account for weekly/monthly patterns
- Iterate on winners - Use insights for next round of tests
- 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_URLError Handling
| Error | Cause | Solution |
INSUFFICIENT_DATA | Not enough impressions | Extend test duration or increase budget |
NO_WINNER | Variants too similar | Increase minimum detectable effect |
UPLOAD_FAILED | Creative rejected by platform | Check format/size requirements |
TEST_EXPIRED | Max duration reached | Analyze current data or restart |
VARIANT_PAUSED | Platform paused underperformer | May indicate quality issues |
SYNC_FAILED | Cross-platform sync error | Check 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.
- 🌐 syntermedia.ai
- 📚 All free skills
- 💬 Built by @syntermedia — questions? Open an issue.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

