Define ad campaigns in TypeScript. Preview changes with plan. Apply with confidence.
$ ads plan+ campaign/brand-search create+ campaign/brand-search/core-keywords create+ campaign/brand-search/core-keywords/rsa create~ campaign/retarget/budget $15 → $25/day~ campaign/retarget/broad/rsa +2 headlines- campaign/old-summer-promo delete5 to create, 2 to update, 1 to delete.Run ads apply to execute.
Define ad campaigns in TypeScript. Preview changes with plan. Apply them to Google Ads and Meta. Detect drift when someone edits in the UI.
Campaigns are TypeScript. Type-safe, reviewable, version-controlled.
import { google, daily, exact, broad,
headlines, descriptions, rsa, url } from '@upspawn/ads'
export default google.search('Brand - Acme', {
budget: daily(20),
bidding: 'maximize-clicks',
})
.group('core-keywords', {
keywords: [...exact('workflow automation'), ...broad('ai automation')],
ad: rsa(
headlines('Automate Any Workflow', 'AI-Powered', 'Free Trial'),
descriptions('Connect 200+ apps. Ship workflows in minutes.'),
url('https://acme.dev'),
),
})Connect 200+ apps. Ship workflows in minutes.
Preview every change before it touches your ad account.
$ ads plan + campaign/brand-acme create + campaign/brand-acme/core-keywords create + campaign/brand-acme/core-keywords/rsa create 3 to create. Run ads apply to execute.
Execute with confidence. Rollback with git revert.
$ ads apply ✓ Created campaign/brand-acme ✓ Created campaign/brand-acme/core-keywords ✓ Created RSA ad 3 resources created.