diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..522b7d12
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,11 @@
+{
+ "printWidth": 100,
+ "tabWidth": 2,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false,
+ "trailingComma": "es5",
+ "bracketSpacing": true,
+ "htmlWhitespaceSensitivity": "ignore",
+ "endOfLine": "lf"
+}
diff --git a/package-lock.json b/package-lock.json
index 14a3a278..32a5d1bf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,8 +43,10 @@
"glob": "^11.1.0",
"husky": "^9.1.7",
"jest": "^30.2.0",
+ "js-beautify": "^1.15.4",
"mintlify": "^4.2.240",
"msw": "^2.12.4",
+ "prettier": "^3.7.4",
"puppeteer": "^24.33.0",
"supertest": "^7.1.4",
"ts-jest": "^29.4.6",
@@ -801,6 +803,22 @@
"semver": "^7.5.3"
}
},
+ "node_modules/@changesets/apply-release-plan/node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/@changesets/assemble-release-plan": {
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz",
@@ -1022,6 +1040,22 @@
"prettier": "^2.7.1"
}
},
+ "node_modules/@changesets/write/node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/@emnapi/core": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz",
@@ -4485,6 +4519,13 @@
"node": ">= 8"
}
},
+ "node_modules/@one-ini/wasm": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
+ "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@open-draft/deferred-promise": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
@@ -8194,6 +8235,16 @@
"react-dom": ">=18"
}
},
+ "node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@@ -10167,6 +10218,17 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -10806,6 +10868,51 @@
"safe-buffer": "^5.0.1"
}
},
+ "node_modules/editorconfig": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz",
+ "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@one-ini/wasm": "0.1.1",
+ "commander": "^10.0.0",
+ "minimatch": "9.0.1",
+ "semver": "^7.5.3"
+ },
+ "bin": {
+ "editorconfig": "bin/editorconfig"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/editorconfig/node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/editorconfig/node_modules/minimatch": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
+ "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -15173,6 +15280,115 @@
"node": ">=10"
}
},
+ "node_modules/js-beautify": {
+ "version": "1.15.4",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz",
+ "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "config-chain": "^1.1.13",
+ "editorconfig": "^1.0.4",
+ "glob": "^10.4.2",
+ "js-cookie": "^3.0.5",
+ "nopt": "^7.2.1"
+ },
+ "bin": {
+ "css-beautify": "js/bin/css-beautify.js",
+ "html-beautify": "js/bin/html-beautify.js",
+ "js-beautify": "js/bin/js-beautify.js"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/js-beautify/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/js-beautify/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/js-beautify/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/js-beautify/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/js-beautify/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -17249,6 +17465,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/nopt": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^2.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -18350,16 +18582,16 @@
}
},
"node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz",
+ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==",
"dev": true,
"license": "MIT",
"bin": {
- "prettier": "bin-prettier.js"
+ "prettier": "bin/prettier.cjs"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
@@ -18430,6 +18662,13 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
diff --git a/package.json b/package.json
index 35f3639d..1b4a0ec0 100644
--- a/package.json
+++ b/package.json
@@ -71,8 +71,10 @@
"glob": "^11.1.0",
"husky": "^9.1.7",
"jest": "^30.2.0",
+ "js-beautify": "^1.15.4",
"mintlify": "^4.2.240",
"msw": "^2.12.4",
+ "prettier": "^3.7.4",
"puppeteer": "^24.33.0",
"supertest": "^7.1.4",
"ts-jest": "^29.4.6",
diff --git a/server/public/design-system.css b/server/public/design-system.css
index a2033202..ccbdf84b 100644
--- a/server/public/design-system.css
+++ b/server/public/design-system.css
@@ -957,6 +957,39 @@ body {
text-decoration: underline;
}
+/* Hero Points - Vertical cards with frosted glass effect */
+.hero-point {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+ background: rgba(255, 255, 255, 0.5);
+ border: none;
+ border-radius: var(--radius-lg);
+ padding: var(--space-6);
+ backdrop-filter: blur(10px);
+ transition: var(--transition-all);
+}
+
+.hero-point:hover {
+ background: rgba(255, 255, 255, 0.65);
+ transform: translateY(-2px);
+}
+
+.hero-point-icon {
+ font-size: var(--text-3xl);
+ margin-bottom: var(--space-2);
+}
+
+.hero-point-text {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ max-width: 240px;
+ font-size: var(--text-lg);
+ line-height: var(--leading-tight);
+}
+
/* -----------------------------------------------------------------------------
12.2 Buttons
diff --git a/server/public/index.html b/server/public/index.html
index b99cffdf..d37fd13f 100644
--- a/server/public/index.html
+++ b/server/public/index.html
@@ -1,263 +1,680 @@
+
-
-AdCP - Open Standard for Advertising Workflows
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ .releaseText_vBj7 {
+ margin-right: var(--space-2) !important;
+ }
+
+ /* Override Docusaurus green theme colors with blue */
+ :root {
+ --ifm-color-primary: #1a36b4 !important;
+ --ifm-color-primary-dark: #172fa0 !important;
+ --ifm-color-primary-darker: #152c97 !important;
+ --ifm-color-primary-darkest: #11247c !important;
+ --ifm-color-primary-light: #1d3dc8 !important;
+ --ifm-color-primary-lighter: #1f40d1 !important;
+ --ifm-color-primary-lightest: #2a4fec !important;
+ }
+
+ /* Get Started section fixes */
+ .getStartedSection_vPGY {
+ background: linear-gradient(135deg, var(--color-primary-700, #172fa0) 0%, var(--color-brand, #1a36b4) 100%);
+ }
+
+ .getStartedSection_vPGY .sectionTitle_Ut5p,
+ .getStartedSection_vPGY .sectionSubtitle_AZuW {
+ color: white !important;
+ }
+
+ .getStartedSection_vPGY .sectionSubtitle_AZuW {
+ opacity: 0.9;
+ }
+
+ /* Consistent button styling in audience cards */
+ .audienceCard_fWZI .button--primary {
+ background-color: var(--color-brand, #1a36b4) !important;
+ border-color: var(--color-brand, #1a36b4) !important;
+ color: white !important;
+ }
+
+ .audienceCard_fWZI .button--outline {
+ background-color: transparent !important;
+ border-color: var(--color-brand, #1a36b4) !important;
+ color: var(--color-brand, #1a36b4) !important;
+ }
+
+ .audienceCard_fWZI .button--outline:hover {
+ background-color: rgba(26, 54, 180, 0.1) !important;
+ }
+
+ /* Hero section spacing and typography */
+ .heroBanner_qdFl {
+ padding-top: var(--space-16) !important;
+ padding-bottom: var(--space-16) !important;
+ background: var(--color-primary-100) !important;
+ }
+
+ .heroBanner_qdFl h1 {
+ color: var(--color-gray-950) !important;
+ }
+
+ .heroBanner_qdFl p,
+ .heroBanner_qdFl .hero-point-text {
+ color: var(--color-text-heading) !important;
+ }
+
+ .heroBanner_qdFl strong {
+ color: var(--color-gray-950) !important;
+ }
+
+ .heroBanner_qdFl .button--primary {
+ background-color: var(--color-primary-900) !important;
+ border-color: var(--color-primary-900) !important;
+ color: white !important;
+ }
+
+ .heroBanner_qdFl .button--primary:hover {
+ background-color: var(--color-primary-800) !important;
+ border-color: var(--color-primary-800) !important;
+ }
+
+ .heroBanner_qdFl .button--secondary {
+ background-color: transparent !important;
+ border-color: var(--color-primary-900) !important;
+ color: var(--color-primary-900) !important;
+ }
+
+ .heroBanner_qdFl .button--secondary:hover {
+ background-color: rgba(15, 31, 107, 0.1) !important;
+ }
+
+ .buttons_AeoN .margin-right--md {
+ margin-right: var(--space-3) !important;
+ }
+
+ .heroTitle_qg2I {
+ margin-bottom: var(--space-4) !important;
+ max-width: 700px !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ line-height: var(--leading-tight) !important;
+ }
+
+ .heroSubtitle_jFu1 {
+ margin-bottom: var(--space-4) !important;
+ max-width: 650px !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ line-height: var(--leading-tight) !important;
+ }
+
+ .heroPoints_gRrZ {
+ margin-bottom: var(--space-16) !important;
+ gap: var(--space-6) !important;
+ }
+
+ .buttons_AeoN {
+ margin-top: 0 !important;
+ display: flex !important;
+ flex-direction: column !important;
+ align-items: center !important;
+ }
+
+
-
-
-
-
-
-
-
-AdCP: The Open Standard for Agentic Advertising From brief to buy, helping agents advertise anywhere: from CTV to chat, from tiny blog to the World Cup.
🎯
Built for outcomes Buy the way you want to grow
🤖
Built for agents Supports MCP and A2A protocols
🌍
Built for everyone A diverse ecosystem of tech and content
v2.5.0 Released Developer experience and API refinement: type safety, batch previews (5-10x faster), schema versioning, and more! Read the release notes → Why we built AdCP The advertising ecosystem is fragmented. Every platform has its own API, its own workflow, its own reporting format. Media buyers and agencies waste countless hours navigating this complexity.
The Integration Problem Each new platform requires custom integration work. APIs change, documentation varies, and maintenance never ends. Teams spend more time on plumbing than on strategy.
The Discovery Problem Inventory is scattered across platforms with different taxonomies and targeting options. Finding the right audiences means learning multiple systems and manually comparing options.
The Automation Problem AI agents and automation tools can't easily interact with advertising platforms. Each integration is bespoke, limiting the potential of AI-powered workflows.
We believe there's a better way. A single protocol that any platform can implement and any tool can use. An open standard that makes advertising technology work together, not against each other.
Managed by Agentic Advertising AdCP is stewarded by Agentic Advertising (AAO) , an industry trade association advancing open standards for AI-powered advertising. AAO brings together publishers, platforms, agencies, and technology providers to shape the future of the ecosystem.
Limited time: Founding member pricing ends March 31, 2026
One protocol. Every platform. Total control. AdCP is the open standard that unifies advertising workflows across all platforms. Think of it as the USB-C of advertising technology.
Before AdCP 15+ different platform APIs Months of custom integration Manual data reconciliation Fragmented reporting Vendor lock-in With AdCP One unified interface Deploy in days Automated workflows Consolidated analytics Complete flexibility See the difference
Traditional Workflow 1. Log into Platform A 2. Search for audiences (30 min) 3. Export to spreadsheet 4. Log into Platform B 5. Manually recreate targeting 6. Wait for approval (2 days) 7. Repeat for 10 more platforms...
AdCP Workflow "Find sports enthusiasts with high purchase intent, compare prices across all platforms, and activate the best option."✓ Done in minutes Everything you need, production-ready AdCP v2.5.0 includes a complete suite of capabilities for modern advertising workflows.
Complete campaign lifecycle management with 9 core tasks:
get_products - Discover inventory with natural languagecreate_media_buy - Launch campaigns across platformsget_media_buy_delivery - Real-time performance metricsPlus sync, update, feedback, and more AI-powered creative generation and management:
build_creative - Generate creatives from briefspreview_creative - Visual preview generationlist_creative_formats - Discover format specsStandard formats library included First-party data integration:
get_signals - Discover available signalsactivate_signal - Activate for campaignsPrivacy-first audience building Platform-agnostic data sharing ⚡ Protocol Features Enterprise-ready infrastructure:
MCP & A2A protocol support Async workflows with webhooks Human-in-the-loop approval JSON Schema validation How AdCP works Built on the Model Context Protocol (MCP), AdCP provides a unified interface for advertising operations across any platform.
1
Discovery Use natural language to describe your target audience. AdCP searches across all connected platforms to find matching inventory and audiences.
"Find sports enthusiasts interested in running gear"2
Comparison Get standardized results from all platforms in a consistent format. Compare pricing, reach, and targeting capabilities side by side.
Platform A: $12 CPM • 2.3M reach Platform B: $18 CPM • 4.1M reach Platform C: $9 CPM • 1.8M reach3
Activation Launch campaigns across multiple platforms with a single command. AdCP handles the technical details while maintaining platform-specific optimizations.
"Activate on Platform B with $10,000 budget"4
Management Monitor performance, adjust budgets, and generate reports across all platforms from one interface. Set up automated rules and alerts.
"Show performance metrics for all active campaigns"Ready to join the revolution? Whether you're a platform provider or an advertiser, AdCP is your path to the future of advertising.
Platform Providers Make your inventory accessible to every AI assistant and automation platform.
Enable AI-powered workflows for your inventory Simplify integration with a standard protocol Reach new customers through automation platforms Advertisers & Agencies Start using natural language to manage campaigns across all platforms.
Manage campaigns with natural language Access unified analytics across platforms Build on open standards, avoid vendor lock-in
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The Open Standard for Agentic Advertising
+
AdCP is an open-source, interoperable protocol designed to make buying and selling digital media more autonomous for all.
+
+
+
🎯
+
Built for outcomes Buy based on actual results and revenue, not just impressions.
+
+
+
🤖
+
Built for agents Native support for AI assistants via MCP and A2A protocols.
+
+
+
🌍
+
Built for everyone Open standard for platforms, from CTV networks to blogs.
+
+
+
+
+
+
+
+
+
+
+
v2.5.0 Released Developer experience and API refinement: type safety, batch previews (5-10x faster), schema versioning, and more! Read the release notes →
+
+
+
+
+
+
+
+
Why we built AdCP
+
The advertising ecosystem is fragmented. Every platform has its own API, its own workflow, its own reporting format. Media buyers and agencies waste countless hours navigating this complexity.
+
+
+
The Integration Problem
+
Each new platform requires custom integration work. APIs change, documentation varies, and maintenance never ends. Teams spend more time on plumbing than on strategy.
+
+
+
The Discovery Problem
+
Inventory is scattered across platforms with different taxonomies and targeting options. Finding the right audiences means learning multiple systems and manually comparing options.
+
+
+
The Automation Problem
+
AI agents and automation tools can't easily interact with advertising platforms. Each integration is bespoke, limiting the potential of AI-powered workflows.
+
+
+
+
We believe there's a better way. A single protocol that any platform can implement and any tool can use. An open standard that makes advertising technology work together, not against each other.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Managed by Agentic Advertising
+
AdCP is stewarded by Agentic Advertising (AAO) , an industry trade association advancing open standards for AI-powered advertising. AAO brings together publishers, platforms, agencies, and technology providers to shape the future of the ecosystem.
+
+
Limited time: Founding member pricing ends March 31, 2026
+
+
+
+
+
+
+
+
+
+
+
+
+
One protocol. Every platform. Total control.
+
AdCP is the open standard that unifies advertising workflows across all platforms. Think of it as the USB-C of advertising technology.
+
+
+
Before AdCP
+
+ 15+ different platform APIs
+ Months of custom integration
+ Manual data reconciliation
+ Fragmented reporting
+ Vendor lock-in
+
+
+
+
With AdCP
+
+ One unified interface
+ Deploy in days
+ Automated workflows
+ Consolidated analytics
+ Complete flexibility
+
+
+
+
+
See the difference
+
+
+
Traditional Workflow 1. Log into Platform A 2. Search for audiences (30 min) 3. Export to spreadsheet 4. Log into Platform B 5. Manually recreate targeting 6. Wait for approval (2 days) 7. Repeat for 10 more platforms...
+
+
+
AdCP Workflow "Find sports enthusiasts with high purchase intent, compare prices across all platforms, and activate the best option."✓ Done in minutes
+
+
+
+
+
+
+
+
+
+
+
+
Everything you need, production-ready
+
AdCP v2.5.0 includes a complete suite of capabilities for modern advertising workflows.
+
+
+
+
Complete campaign lifecycle management with 9 core tasks:
+
+ get_products - Discover inventory with natural language
+ create_media_buy - Launch campaigns across platforms
+ get_media_buy_delivery - Real-time performance metrics
+ Plus sync, update, feedback, and more
+
+
+
+
+
AI-powered creative generation and management:
+
+ build_creative - Generate creatives from briefs
+ preview_creative - Visual preview generation
+ list_creative_formats - Discover format specs
+ Standard formats library included
+
+
+
+
+
First-party data integration:
+
+ get_signals - Discover available signals
+ activate_signal - Activate for campaigns
+ Privacy-first audience building
+ Platform-agnostic data sharing
+
+
+
+
⚡ Protocol Features
+
Enterprise-ready infrastructure:
+
+ MCP & A2A protocol support
+ Async workflows with webhooks
+ Human-in-the-loop approval
+ JSON Schema validation
+
+
+
+
+
+
+
+
+
+
+
+
How AdCP works
+
Built on the Model Context Protocol (MCP), AdCP provides a unified interface for advertising operations across any platform.
+
+
+
1
+
+
Discovery
+
Use natural language to describe your target audience. AdCP searches across all connected platforms to find matching inventory and audiences.
"Find sports enthusiasts interested in running gear"
+
+
+
+
2
+
+
Comparison
+
Get standardized results from all platforms in a consistent format. Compare pricing, reach, and targeting capabilities side by side.
Platform A: $12 CPM • 2.3M reach Platform B: $18 CPM • 4.1M reach Platform C: $9 CPM • 1.8M reach
+
+
+
+
3
+
+
Activation
+
Launch campaigns across multiple platforms with a single command. AdCP handles the technical details while maintaining platform-specific optimizations.
"Activate on Platform B with $10,000 budget"
+
+
+
+
4
+
+
Management
+
Monitor performance, adjust budgets, and generate reports across all platforms from one interface. Set up automated rules and alerts.
"Show performance metrics for all active campaigns"
+
+
+
+
+
+
+
+
+
+
+
+
Ready to join the revolution?
+
Whether you're a platform provider or an advertiser, AdCP is your path to the future of advertising.
+
+
+
Platform Providers
+
Make your inventory accessible to every AI assistant and automation platform.
+
+ Enable AI-powered workflows for your inventory
+ Simplify integration with a standard protocol
+ Reach new customers through automation platforms
+
+
+
+
+
Advertisers & Agencies
+
Start using natural language to manage campaigns across all platforms.
+
+ Manage campaigns with natural language
+ Access unified analytics across platforms
+ Build on open standards, avoid vendor lock-in
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file