Comprehensive examples for generating advertising and marketing analytics data using agentic-synth. These examples demonstrate how to create realistic campaign performance data, optimization scenarios, and analytics pipelines for major advertising platforms.
This directory contains practical examples for:
- Campaign Performance Tracking: Generate realistic ad campaign metrics
- Optimization Simulations: Test budget allocation and bidding strategies
- Analytics Pipelines: Build comprehensive marketing analytics systems
- Multi-Platform Integration: Work with Google Ads, Facebook Ads, TikTok Ads
Generates comprehensive ad campaign performance data including:
-
Platform-Specific Campaigns
- Google Ads (Search, Display, Shopping)
- Facebook/Meta Ads (Feed, Stories, Reels)
- TikTok Ads (In-Feed, TopView, Branded Effects)
-
Multi-Channel Attribution
- First-touch, last-touch, linear attribution
- Time-decay and position-based models
- Data-driven attribution
-
Customer Journey Tracking
- Touchpoint analysis
- Path to conversion
- Device and location tracking
-
A/B Testing Results
- Creative variations
- Audience testing
- Landing page experiments
-
Cohort Analysis
- Retention rates
- LTV calculations
- Payback periods
Simulates various optimization scenarios:
-
Budget Allocation
- Cross-platform budget distribution
- ROI-based allocation
- Risk-adjusted scenarios
-
Bid Strategy Testing
- Manual CPC vs automated bidding
- Target CPA/ROAS strategies
- Maximize conversions/value
-
Audience Segmentation
- Demographic targeting
- Interest-based audiences
- Lookalike/similar audiences
- Custom and remarketing lists
-
Creative Optimization
- Ad format testing
- Copy variations
- Visual element testing
-
Advanced Optimizations
- Dayparting analysis
- Geo-targeting optimization
- Multi-variate testing
Marketing analytics and modeling examples:
-
Attribution Modeling
- Compare attribution models
- Channel valuation
- Cross-channel interactions
-
LTV (Lifetime Value) Analysis
- Cohort-based LTV
- Predictive LTV models
- LTV:CAC ratios
-
Funnel Analysis
- Conversion funnel stages
- Dropout analysis
- Bottleneck identification
-
Predictive Analytics
- Revenue forecasting
- Scenario planning
- Risk assessment
-
Marketing Mix Modeling (MMM)
- Channel contribution analysis
- Saturation curves
- Optimal budget allocation
-
Incrementality Testing
- Geo holdout tests
- PSA (Public Service Announcement) tests
- True lift measurement
import { createSynth } from 'agentic-synth';
// Initialize with your API key
const synth = createSynth({
provider: 'gemini',
apiKey: process.env.GEMINI_API_KEY
});
// Generate Google Ads campaign data
const campaigns = await synth.generateStructured({
count: 100,
schema: {
campaignId: { type: 'string', required: true },
impressions: { type: 'number', required: true },
clicks: { type: 'number', required: true },
conversions: { type: 'number', required: true },
spend: { type: 'number', required: true },
revenue: { type: 'number', required: true },
roas: { type: 'number', required: true }
},
constraints: {
impressions: { min: 1000, max: 100000 },
roas: { min: 0.5, max: 8.0 }
}
});// Generate daily campaign metrics for 90 days
const timeSeries = await synth.generateTimeSeries({
count: 90,
interval: '1d',
metrics: ['impressions', 'clicks', 'conversions', 'spend', 'revenue', 'roas'],
trend: 'up',
seasonality: true,
constraints: {
roas: { min: 1.0, max: 10.0 }
}
});// Generate data for multiple platforms in parallel
const platforms = [
{ count: 50, constraints: { platform: 'Google Ads' } },
{ count: 50, constraints: { platform: 'Facebook Ads' } },
{ count: 50, constraints: { platform: 'TikTok Ads' } }
];
const results = await synth.generateBatch('structured', platforms, 3);Generate realistic data for testing marketing dashboards:
import { generateTimeSeriesCampaignData } from './campaign-data.js';
// Generate 6 months of daily metrics
const dashboardData = await generateTimeSeriesCampaignData();
// Use for:
// - Frontend dashboard development
// - Chart/visualization testing
// - Performance optimization
// - Demo presentationsCompare different attribution models:
import { generateAttributionModels } from './analytics-pipeline.js';
// Generate attribution data for analysis
const attribution = await generateAttributionModels();
// Compare:
// - First-touch vs last-touch
// - Linear vs time-decay
// - Position-based vs data-drivenTest budget allocation strategies:
import { simulateBudgetAllocation } from './optimization-simulator.js';
// Generate optimization scenarios
const scenarios = await simulateBudgetAllocation();
// Analyze:
// - Risk-adjusted returns
// - Diversification benefits
// - Scaling opportunitiesPlan and simulate A/B tests:
import { generateABTestResults } from './campaign-data.js';
// Generate A/B test data
const tests = await generateABTestResults();
// Use for:
// - Sample size calculations
// - Statistical significance testing
// - Test design validationAnalyze customer lifetime value:
import { generateLTVAnalysis } from './analytics-pipeline.js';
// Generate cohort LTV data
const ltvData = await generateLTVAnalysis();
// Calculate:
// - Payback periods
// - LTV:CAC ratios
// - Retention curves// Search campaign with quality score
const googleAds = await synth.generateStructured({
count: 100,
schema: {
keyword: { type: 'string' },
matchType: { type: 'string' },
qualityScore: { type: 'number' },
avgPosition: { type: 'number' },
impressionShare: { type: 'number' },
cpc: { type: 'number' },
roas: { type: 'number' }
},
constraints: {
matchType: ['exact', 'phrase', 'broad'],
qualityScore: { min: 1, max: 10 }
}
});// Facebook campaign with engagement metrics
const facebookAds = await synth.generateStructured({
count: 100,
schema: {
objective: { type: 'string' },
placement: { type: 'string' },
reach: { type: 'number' },
frequency: { type: 'number' },
engagement: { type: 'number' },
relevanceScore: { type: 'number' },
cpm: { type: 'number' },
roas: { type: 'number' }
},
constraints: {
objective: ['conversions', 'traffic', 'engagement'],
placement: ['feed', 'stories', 'reels', 'marketplace']
}
});// TikTok campaign with video metrics
const tiktokAds = await synth.generateStructured({
count: 100,
schema: {
objective: { type: 'string' },
videoViews: { type: 'number' },
videoCompletionRate: { type: 'number' },
engagement: { type: 'number' },
shares: { type: 'number' },
follows: { type: 'number' },
roas: { type: 'number' }
},
constraints: {
objective: ['conversions', 'app_install', 'video_views'],
videoCompletionRate: { min: 0.1, max: 0.8 }
}
});// Stream campaign metrics in real-time
const synth = createSynth({ streaming: true });
for await (const metric of synth.generateStream('structured', {
count: 100,
schema: {
timestamp: { type: 'string' },
roas: { type: 'number' },
alert: { type: 'string' }
}
})) {
console.log('Real-time metric:', metric);
// Trigger alerts based on ROAS
if (metric.roas < 1.0) {
console.log('⚠️ ROAS below target!');
}
}// Use caching for repeated queries
const synth = createSynth({
cacheStrategy: 'memory',
cacheTTL: 600 // 10 minutes
});
// First call generates data
const data1 = await synth.generateStructured({ count: 100, schema });
// Second call uses cache (much faster)
const data2 = await synth.generateStructured({ count: 100, schema });// Apply realistic business constraints
const campaigns = await synth.generateStructured({
count: 50,
schema: campaignSchema,
constraints: {
// Budget constraints
spend: { min: 1000, max: 50000 },
// Performance constraints
roas: { min: 2.0, max: 10.0 },
cpa: { max: 50.0 },
// Volume constraints
impressions: { min: 10000 },
clicks: { min: 100 },
conversions: { min: 10 },
// Platform-specific
platform: ['Google Ads', 'Facebook Ads'],
status: ['active', 'paused']
}
});import { generateTimeSeriesCampaignData } from './campaign-data.js';
async function loadToWarehouse() {
const campaigns = await generateTimeSeriesCampaignData();
// Transform to warehouse schema
const rows = campaigns.data.map(campaign => ({
date: campaign.timestamp,
platform: campaign.platform,
metrics: {
impressions: campaign.impressions,
clicks: campaign.clicks,
spend: campaign.spend,
revenue: campaign.revenue,
roas: campaign.roas
}
}));
// Load to BigQuery, Snowflake, Redshift, etc.
await warehouse.bulkInsert('campaigns', rows);
}import { generateChannelComparison } from './analytics-pipeline.js';
async function generateBIReport() {
const comparison = await generateChannelComparison();
// Export for Tableau, Looker, Power BI
const csv = convertToCSV(comparison.data);
await fs.writeFile('channel_performance.csv', csv);
}import { generateLTVAnalysis } from './analytics-pipeline.js';
async function trainPredictiveModel() {
// Generate training data
const ltvData = await generateLTVAnalysis();
// Features for ML model
const features = ltvData.data.map(cohort => ({
acquisitionChannel: cohort.acquisitionChannel,
firstPurchase: cohort.metrics.avgFirstPurchase,
frequency: cohort.metrics.purchaseFrequency,
retention: cohort.metrics.retentionRate,
// Target variable
ltv: cohort.ltvCalculations.predictiveLTV
}));
// Train with TensorFlow, scikit-learn, etc.
await model.train(features);
}// ✅ Good: Realistic business constraints
const campaigns = await synth.generateStructured({
constraints: {
roas: { min: 0.5, max: 15.0 }, // Typical range
ctr: { min: 0.01, max: 0.15 }, // 1-15%
cvr: { min: 0.01, max: 0.20 } // 1-20%
}
});
// ❌ Bad: Unrealistic values
const bad = await synth.generateStructured({
constraints: {
roas: { min: 50.0 }, // Too high
ctr: { min: 0.5 } // 50% CTR unrealistic
}
});// Different platforms have different metrics
const googleAds = {
qualityScore: { min: 1, max: 10 },
avgPosition: { min: 1.0, max: 5.0 }
};
const facebookAds = {
relevanceScore: { min: 1, max: 10 },
frequency: { min: 1.0, max: 5.0 }
};
const tiktokAds = {
videoCompletionRate: { min: 0.1, max: 0.8 },
engagement: { min: 0.02, max: 0.15 }
};// Include seasonal patterns for realistic data
const seasonal = await synth.generateTimeSeries({
count: 365,
interval: '1d',
seasonality: true, // Includes weekly/monthly patterns
trend: 'up', // Long-term growth
noise: 0.15 // 15% random variation
});// Generate large datasets efficiently
const batches = Array.from({ length: 10 }, (_, i) => ({
count: 1000,
schema: campaignSchema
}));
const results = await synth.generateBatch('structured', batches, 5);
// Processes 10,000 records in parallel- Enable Caching: Reuse generated data for similar queries
- Batch Operations: Generate multiple datasets in parallel
- Streaming: Use for real-time or large datasets
- Constraints: Be specific to reduce generation time
- Schema Design: Simpler schemas generate faster
import { generateGoogleAdsCampaign } from './campaign-data.js';
describe('Campaign Data Generator', () => {
it('should generate valid ROAS values', async () => {
const result = await generateGoogleAdsCampaign();
result.data.forEach(campaign => {
expect(campaign.roas).toBeGreaterThanOrEqual(0.5);
expect(campaign.roas).toBeLessThanOrEqual(8.0);
});
});
});import { runAnalyticsExamples } from './analytics-pipeline.js';
async function testAnalyticsPipeline() {
// Generate test data
await runAnalyticsExamples();
// Verify pipeline processes data correctly
const processed = await pipeline.run();
expect(processed.success).toBe(true);
}// Ensure API key is set
if (!process.env.GEMINI_API_KEY) {
throw new Error('GEMINI_API_KEY not found');
}
const synth = createSynth({
provider: 'gemini',
apiKey: process.env.GEMINI_API_KEY
});// Use retry logic for rate limits
const synth = createSynth({
maxRetries: 5,
timeout: 60000 // 60 seconds
});// Use streaming for large datasets
const synth = createSynth({ streaming: true });
for await (const chunk of synth.generateStream('structured', {
count: 100000,
schema: simpleSchema
})) {
await processChunk(chunk);
// Process in batches to avoid memory issues
}- agentic-synth Documentation
- API Reference
- Examples Directory
- Google Ads API
- Facebook Marketing API
- TikTok for Business
MIT
Contributions welcome! Please see the main repository for guidelines.
For issues or questions:
- Open an issue on GitHub
- Check existing examples
- Review documentation
- Initial release
- Campaign data generation
- Optimization simulators
- Analytics pipelines
- Multi-platform support