Advertising infrastructure
for developers

Run multi-platform ad campaigns from code. One API for Google Ads, Reddit Ads, and X Ads.

Quick Start
TypeScript
# Install
npm install @synter/sdk
# Use
const
synter =
new
Synter
(apiKey)
await synter.campaigns
.create({
platform:'google',
budget: {daily:500 }
})
Python
# Install
pip install synter
# Use
from
synter
import
Synter
async with Synter(api_key)
as
synter:
campaign = await
synter.campaigns
.create({...})

What we handle

Multi-platform API

Same interface for Google/Reddit/X

Conversion tracking

Auto-detect click IDs, fan out to analytics

Data export

Raw data for your ML models

One API, six platforms

Google Ads
Ready
Bing Ads
Beta
Reddit Ads
Ready
LinkedIn Ads
Beta
Meta Ads
Coming
X Ads
Ready

Common use cases

Track conversions automatically

TypeScript
// Auto-detects platform from URL
await
synter.conversions.create({
click_id: req.query.gclid,
event: 'purchase',
value: 299,
send_to: ['google', 'posthog']
})
What happens
  • Platform detected from gclid (Google)
  • Conversion sent to Google Ads API
  • Event tracked in PostHog
  • Attribution data stored

Same code, different platforms

// Google Ads campaign
await synter.campaigns.create({ platform: 'google', ... })
// Reddit Ads campaign (same interface)
await synter.campaigns.create({ platform: 'reddit', ... })
// Meta Ads campaign (same interface)
await synter.campaigns.create({ platform: 'meta', ... })
// Get ROAS across all platforms
const roas = await synter.analytics.roas({ window: '30d' })
// { google: 3.2, reddit: 2.8, meta: 4.1, x: 1.9 }

Budget optimization with agents

// Run budget optimizer (dry run)
const result = await synter.agents.run(
'budget-optimizer',
{
dry_run: true,
params: {
max_budget_change: 0.15 // ±15%
}
}
)
// Review proposed changes
console.log(result.proposed_changes)
// [
// { campaign: 'A', current: 500, proposed: 575, reason: 'CAC below target' },
// { campaign: 'B', current: 300, proposed: 240, reason: 'CAC above threshold' }
// ]
// Apply if approved
if (approved) await synter.agents.apply(result.run_id)

Export data for your own AI

// Export raw ad data
const data = await synter.data.export({
platforms: ['google', 'reddit', 'meta'],
window: '30d',
metrics: ['spend', 'clicks', 'conversions']
})
// Feed to your ML model
predictions = yourModel.predict(data)
Why this matters
  • Normalized data across all platforms
  • Use GPT-4, Claude, or custom models
  • No vendor lock-in
  • Full control over optimization logic

Ready to build?

Sign up to get your API key and start shipping campaigns from code.