b2b-ai-appendix-25-scripts
EXPERT BUNDLE — 2026-03-11T00:00:00.000Z
APPENDIX
25 Actionable Scripts, Prompts & Templates
B2B AI Operating System — Companion Reference
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PART A
9 n8n Scripts
Items A1 – A9
PART B
9 Google Ads Prompts
Items B10 – B18
PART C
7 BRIDGE Templates
Items C19 – C25
CONTENTS
A1
Google Ads Anomaly Detector → Slack Alert
n8n Automation
A2
Weekly Campaign Health Brief — Auto-Generated to Google Docs
n8n Automation
A3
Lead Score Threshold → CRM Update + Sales Slack Alert
n8n Automation
A4
Budget Pacing Watchdog — Intraday Overspend Prevention
n8n Automation
A5
New Demo Request → Full Account Intelligence Brief
n8n Automation
A6
GEO Citation Monitor — Weekly Brand Mention Tracker
n8n Automation
A7
Content Performance → GEO Score Pipeline
n8n Automation
A8
Competitor Ad Copy Monitor → Weekly Positioning Brief
n8n Automation
A9
Multi-Platform Daily Data Sync to Google Sheets Dashboard
n8n Automation
B10
Weekly Campaign Health Brief — VP-Ready Narrative
Google Ads
B11
Anomaly Root Cause Drill-Down
Google Ads
B12
Bid Strategy Optimisation Recommendations
Google Ads
B13
Search Terms Quality Audit — Negative Keyword Generator
Google Ads
B14
Quality Score Recovery Plan
Google Ads
B15
Impression Share Recovery Plan
Google Ads
B16
Landing Page Conversion Rate Audit
Google Ads
B17
Monthly Executive Summary — Board-Ready
Google Ads
B18
Audience Performance Segmentation — ICP Refinement
Google Ads
C19
GEO-Optimised Landing Page — B2B SaaS Category Page
BRIDGE Content
C20
B2B Case Study — GEO and Sales-Ready Format
BRIDGE Content
C21
BRIDGE Prompt — LinkedIn Thought Leadership Post (ICP-Targeted)
BRIDGE Content
C22
Email Nurture Sequence — 5-Email Intent-Based Series
BRIDGE Content
C23
BRIDGE Prompt — AI-Powered Pipeline Contribution Report
BRIDGE Content
C24
GEO Comparison Page — [Your Product] vs [Competitor]
BRIDGE Content
C25
Master BRIDGE Context Document — Full Template
BRIDGE Content
HOW TO USE THIS APPENDIX: Each item is fully self-contained. Scripts contain real working code — paste into n8n workflow editor as JSON. Prompts are BRIDGE-compliant — replace all [BRACKETED] variables, paste as-is. Templates are drop-in ready — fill variables, publish. Every item includes Setup Notes explaining prerequisites and deployment sequence.
PART A — Items A1 through A9
n8n Automation Scripts
9 fully-written workflow scripts. Copy the JSON block into n8n > workflow > import. Set environment variables as documented in Setup Notes.
A1 N8N AUTOMATION SCRIPT
Google Ads Anomaly Detector → Slack Alert
Runs hourly. Compares today’s spend and ROAS against 8-week same-day baseline. Fires Slack DM to campaign manager when deviation exceeds threshold.
{
“nodes”: [
{
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "hours", "hoursInterval": 1 }] }
}
},
{
"name": "Google Ads — Fetch Today Metrics",
"type": "n8n-nodes-base.googleAds",
"parameters": {
"resource": "campaign",
"operation": "getAll",
"customerId": "={{ $env.GADS_CUSTOMER_ID }}",
"additionalFields": {
"dateRange": "TODAY",
"metrics": ["cost_micros","conversions","impressions","clicks"],
"segments": ["date","campaign.name"]
}
}
},
{
"name": "Google Sheets — Fetch 8-Week Baseline",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "read",
"documentId": "={{ $env.BASELINE_SHEET_ID }}",
"sheetName": "same_day_baselines",
"options": { "range": "A:F" }
}
},
{
"name": "Code — Anomaly Detection Logic",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const today = $('Google Ads — Fetch Today Metrics').all();\\nconst baseline = $('Google Sheets — Fetch 8-Week Baseline').all();\\nconst THRESHOLD = 0.20; // 20% deviation\\nconst alerts = [];\\n\\nfor (const campaign of today) {\\n const name = campaign.json.campaign_name;\\n const base = baseline.find(b => b.json.campaign_name === name);\\n if (!base) continue;\\n\\n const spend = campaign.json.cost_micros / 1e6;\\n const baseSpend = parseFloat(base.json.avg_spend);\\n const roas = campaign.json.conversions_value / spend;\\n const baseRoas = parseFloat(base.json.avg_roas);\\n\\n const spendDelta = Math.abs(spend - baseSpend) / baseSpend;\\n const roasDelta = Math.abs(roas - baseRoas) / baseRoas;\\n\\n if (spendDelta > THRESHOLD || roasDelta > THRESHOLD) {\\n const impact = (spendDelta > 0.35 || roasDelta > 0.35) ? 'HIGH' : 'MEDIUM';\\n alerts.push({\\n campaign: name,\\n impact,\\n spend_today: spend.toFixed(2),\\n spend_baseline: baseSpend.toFixed(2),\\n spend_delta_pct: (spendDelta * 100).toFixed(1) + '%',\\n roas_today: roas.toFixed(2),\\n roas_baseline: baseRoas.toFixed(2),\\n roas_delta_pct: (roasDelta * 100).toFixed(1) + '%',\\n });\\n }\\n}\\nreturn alerts.map(a => ({ json: a }));"
}
},
{
"name": "IF — Alerts Exist",
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"number": [{ "value1": "={{ $json.impact }}", "operation": "isNotEmpty" }]
}
}
},
{
"name": "Slack — Send Anomaly Alert",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "={{ $env.SLACK_GADS_CHANNEL }}",
"text": ":rotating_light: *{{ $json.impact }} ANOMALY* — {{ $json.campaign }}\\n>Spend: ${{ $json.spend_today }} vs baseline ${{ $json.spend_baseline }} ({{ $json.spend_delta_pct }})\\n>ROAS: {{ $json.roas_today }} vs baseline {{ $json.roas_baseline }} ({{ $json.roas_delta_pct }})\\n_Review in Google Ads → Campaign Manager_"
}
}
]
}
SETUP & DEPLOYMENT NOTES
-
Set GADS_CUSTOMER_ID, BASELINE_SHEET_ID, SLACK_GADS_CHANNEL as n8n env vars.
-
Populate baseline sheet weekly: columns campaign_name, day_of_week, avg_spend, avg_roas (rolling 8-week same-day averages).
-
Activate workflow. Runs every hour automatically.
A2 N8N AUTOMATION SCRIPT
Weekly Campaign Health Brief — Auto-Generated to Google Docs
Fires every Monday 7am. Pulls 7-day Google Ads export, sends to OpenAI with BRIDGE prompt, writes formatted narrative to Google Doc, emails to VP.
{
“nodes”: [
{
"name": "Schedule — Monday 7am",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": {
"interval": [{ "field": "cronExpression", "expression": "0 7 * * 1" }]
}
}
},
{
"name": "Google Sheets — Pull 7-Day Ads Data",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "read",
"documentId": "={{ $env.ADS_DATA_SHEET_ID }}",
"sheetName": "last_7_days",
"options": { "range": "A:M" }
}
},
{
"name": "Code — Format Data as CSV String",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const rows = $input.all();\\nconst headers = Object.keys(rows[0].json).join(',');\\nconst lines = rows.map(r => Object.values(r.json).join(','));\\nconst csv = [headers, ...lines].join('\\\\n');\\nreturn [{ json: { csv_data: csv } }];"
}
},
{
"name": "OpenAI — Generate Brief",
"type": "@n8n/n8n-nodes-langchain.openAi",
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{
"role": "system",
"content": "You are a senior PPC analyst producing a weekly campaign health brief for a VP of Marketing. Be precise, data-driven, and direct. No fluff. Output in clean markdown."
},
{
"role": "user",
"content": "BACKGROUND: B2B SaaS company. Target CPA: ${{ $env.TARGET_CPA }}. Primary KPI: demo requests. 8-week baseline CPA: ${{ $env.BASELINE_CPA }}.\\n\\nREQUEST: Analyse the CSV data below (last 7 days). Identify: (1) top 3 campaigns by conversion volume, (2) bottom 3 by ROAS, (3) any campaign where impression share dropped >10pts vs prior period, (4) any keyword with QS degradation of 2+ pts, (5) three prioritised bid or budget recommendations with projected impact.\\n\\nINPUT:\\n{{ $json.csv_data }}\\n\\nDELIVERABLE: Produce exactly: ## Executive Summary (3 sentences), ## Performance Table (markdown table: Campaign | Metric | vs Baseline | Status), ## Anomaly Log (Impact: HIGH/MED/LOW | Campaign | Issue | Recommended Action), ## Top 3 Recommendations (numbered, each with projected outcome).\\n\\nGUARDRAILS: No spend increase recommendation >15% without flagging. No competitor names. Flag every assumption made. Numbers only in tables — no rounding narrative.\\n\\nEVALUATE: Confirm all recommendations are data-backed from the CSV before responding."
}
]
}
}
},
{
"name": "Google Docs — Write Brief",
"type": "n8n-nodes-base.googleDocs",
"parameters": {
"operation": "create",
"title": "=Campaign Health Brief — {{ $now.format('YYYY-MM-DD') }}",
"content": "={{ $json.message.content }}"
}
},
{
"name": "Gmail — Email to VP",
"type": "n8n-nodes-base.gmail",
"parameters": {
"to": "={{ $env.VP_EMAIL }}",
"subject": "=Weekly Campaign Brief — {{ $now.format('MMM DD') }}",
"message": "Hi,\\n\\nThis week's Google Ads campaign health brief is ready:\\n\\n{{ $json.message.content }}\\n\\nFull doc: {{ $('Google Docs — Write Brief').item.json.id }}",
"options": { "mimeType": "text/plain" }
}
}
]
}
SETUP & DEPLOYMENT NOTES
Set env vars: ADS_DATA_SHEET_ID (your Supermetrics/Dataslayer output sheet), TARGET_CPA, BASELINE_CPA, VP_EMAIL. The Ads data sheet must refresh via Supermetrics on Sunday night for Monday morning brief to be current.
A3 N8N AUTOMATION SCRIPT
Lead Score Threshold → CRM Update + Sales Slack Alert
Polls HubSpot every 4 hours. When a contact’s AI score crosses HIGH threshold, updates CRM stage, fires Slack to assigned rep with intent signal summary.
{
“nodes”: [
{
"name": "Schedule — Every 4 Hours",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "hours", "hoursInterval": 4 }] }
}
},
{
"name": "HubSpot — Get High-Score Contacts",
"type": "n8n-nodes-base.hubspot",
"parameters": {
"resource": "contact",
"operation": "getAll",
"additionalFields": {
"filters": [
{ "propertyName": "ai_intent_score", "operator": "GTE", "value": "80" },
{ "propertyName": "sales_alerted", "operator": "EQ", "value": "false" }
],
"properties": ["firstname","lastname","email","company","ai_intent_score",
"ai_fit_score","last_page_seen","num_sessions_30d","lifecyclestage",
"hubspot_owner_id","recent_content_download"]
}
}
},
{
"name": "Code — Score Classification",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const contacts = $input.all();\\nreturn contacts.map(c => {\\n const fit = parseInt(c.json.ai_fit_score) || 0;\\n const intent = parseInt(c.json.ai_intent_score) || 0;\\n let priority, action;\\n if (fit >= 4 && intent >= 80) { priority = 'HOT'; action = 'Immediate outreach — call within 2 hours'; }\\n else if (fit >= 3 && intent >= 80) { priority = 'WARM'; action = 'Personalised email sequence + LinkedIn connect'; }\\n else { priority = 'MONITOR'; action = 'Add to intent watch list'; }\\n return { json: { ...c.json, priority, recommended_action: action } };\\n});"
}
},
{
"name": "IF — Priority is HOT or WARM",
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"string": [{ "value1": "={{ $json.priority }}", "operation": "notEqual", "value2": "MONITOR" }]
}
}
},
{
"name": "HubSpot — Update Lifecycle Stage",
"type": "n8n-nodes-base.hubspot",
"parameters": {
"resource": "contact",
"operation": "update",
"contactId": "={{ $json.hs_object_id }}",
"additionalFields": {
"properties": {
"lifecyclestage": "salesqualifiedlead",
"sales_alerted": "true",
"ai_priority_flag": "={{ $json.priority }}"
}
}
}
},
{
"name": "Slack — Alert Sales Rep",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "={{ $json.hubspot_owner_id }}",
"text": ":fire: *{{ $json.priority }} LEAD* — Action Required\\n\\n*Contact:* {{ $json.firstname }} {{ $json.lastname }} @ {{ $json.company }}\\n*Fit Score:* {{ $json.ai_fit_score }}/5 | *Intent Score:* {{ $json.ai_intent_score }}/100\\n*Last Page:* {{ $json.last_page_seen }}\\n*Sessions (30d):* {{ $json.num_sessions_30d }}\\n*Content Downloaded:* {{ $json.recent_content_download }}\\n\\n:clipboard: *Recommended Action:* {{ $json.recommended_action }}\\n\\n_Update contact in HubSpot after outreach._"
}
}
]
}
SETUP & DEPLOYMENT NOTES
Requires HubSpot custom properties: ai_intent_score, ai_fit_score, sales_alerted, ai_priority_flag. Score these properties via HubSpot workflow or Clay enrichment before this automation fires. Slack DM uses HubSpot owner ID — map to Slack user IDs in a lookup sheet.
A4 N8N AUTOMATION SCRIPT
Budget Pacing Watchdog — Intraday Overspend Prevention
Runs every 2 hours. Calculates expected vs actual spend against daily budget. Fires escalating alerts at 80%, 95%, and 105% of daily budget.
{
“nodes”: [
{
"name": "Schedule — Every 2 Hours",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "hours", "hoursInterval": 2 }] }
}
},
{
"name": "Google Ads — Fetch Today Spend",
"type": "n8n-nodes-base.googleAds",
"parameters": {
"resource": "campaign",
"operation": "getAll",
"customerId": "={{ $env.GADS_CUSTOMER_ID }}",
"additionalFields": {
"dateRange": "TODAY",
"metrics": ["cost_micros","campaign_budget_amount_micros"],
"segments": ["campaign.name","campaign.status"]
}
}
},
{
"name": "Code — Pacing Calculation",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const campaigns = $input.all();\\nconst now = new Date();\\nconst hoursElapsed = now.getHours() + now.getMinutes()/60;\\nconst dayFraction = hoursElapsed / 24;\\nconst alerts = [];\\n\\nfor (const c of campaigns) {\\n const spend = c.json.cost_micros / 1e6;\\n const budget = c.json.campaign_budget_amount_micros / 1e6;\\n if (!budget || budget === 0) continue;\\n const expectedSpend = budget * dayFraction;\\n const pacingRatio = spend / budget;\\n const expectedRatio = dayFraction;\\n const pacingVariance = ((pacingRatio - expectedRatio) / expectedRatio) * 100;\\n\\n let alertLevel = null;\\n if (pacingRatio >= 1.05) alertLevel = 'CRITICAL — Overspent';\\n else if (pacingRatio >= 0.95) alertLevel = 'WARNING — Near limit';\\n else if (pacingRatio >= 0.80 && pacingVariance > 30) alertLevel = 'WATCH — Pacing ahead';\\n\\n if (alertLevel) {\\n alerts.push({\\n campaign: c.json.campaign_name,\\n alert_level: alertLevel,\\n spend_today: spend.toFixed(2),\\n daily_budget: budget.toFixed(2),\\n pacing_pct: (pacingRatio * 100).toFixed(1) + '%',\\n expected_pct: (expectedRatio * 100).toFixed(1) + '%',\\n variance: pacingVariance.toFixed(1) + '%'\\n });\\n }\\n}\\nreturn alerts.map(a => ({ json: a }));"
}
},
{
"name": "Switch — Alert Level Routing",
"type": "n8n-nodes-base.switch",
"parameters": {
"dataPropertyName": "alert_level",
"rules": {
"rules": [
{ "value": "CRITICAL — Overspent", "outputKey": "critical" },
{ "value": "WARNING — Near limit", "outputKey": "warning" },
{ "value": "WATCH — Pacing ahead", "outputKey": "watch" }
]
}
}
},
{
"name": "Slack — CRITICAL Alert",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "{{ $env.SLACK_GADS_CHANNEL }}",
"text": ":red_circle: *CRITICAL — Budget Overspent*\\n*Campaign:* {{ $json.campaign }}\\nSpent *{{ $json.spend_today }}* of ${{ $json.daily_budget }} daily budget ({{ $json.pacing_pct }})\\nExpected at this time: {{ $json.expected_pct }}\\n*Action required immediately: pause or reduce bids.*"
}
},
{
"name": "Slack — WARNING Alert",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "{{ $env.SLACK_GADS_CHANNEL }}",
"text": ":large_yellow_circle: *WARNING — Approaching Daily Budget*\\n*Campaign:* {{ $json.campaign }}\\nSpent *{{ $json.spend_today }}* of ${{ $json.daily_budget }} ({{ $json.pacing_pct }}) — {{ $json.variance }} ahead of expected pace.\\nMonitor closely. Consider bid reduction if trend continues."
}
}
]
}
SETUP & DEPLOYMENT NOTES
No additional setup beyond Google Ads credentials and Slack channel. Works across MCC accounts — add customer IDs as a loop over an env array for multi-account management.
A5 N8N AUTOMATION SCRIPT
New Demo Request → Full Account Intelligence Brief
Triggers on new HubSpot form submission. Enriches account via Clearbit, pulls intent data, generates AI-written account brief, delivers to assigned AE in Slack within 90 seconds.
{
“nodes”: [
{
"name": "HubSpot Webhook — New Form Submission",
"type": "n8n-nodes-base.hubspotTrigger",
"parameters": {
"eventsUi": { "eventValues": [{ "name": "contact.creation" }] }
}
},
{
"name": "Clearbit — Enrich Company",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://company.clearbit.com/v2/companies/find",
"method": "GET",
"qs": { "domain": "={{ $json.properties.company_domain }}" },
"headers": {
"Authorization": "=Bearer {{ $env.CLEARBIT_API_KEY }}"
}
}
},
{
"name": "Code — Compile Account Data",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const contact = $('HubSpot Webhook — New Form Submission').item.json;\\nconst company = $('Clearbit — Enrich Company').item.json;\\nreturn [{ json: {\\n contact_name: contact.properties.firstname + ' ' + contact.properties.lastname,\\n contact_title: contact.properties.jobtitle,\\n contact_email: contact.properties.email,\\n company_name: company.name,\\n company_size: company.metrics?.employees,\\n company_revenue: company.metrics?.estimatedAnnualRevenue,\\n company_industry: company.category?.industry,\\n tech_stack: (company.tech || []).join(', '),\\n funding_stage: company.crunchbase?.handle,\\n linkedin_handle: company.linkedin?.handle,\\n page_last_visited: contact.properties.hs_analytics_last_url,\\n sessions_count: contact.properties.hs_analytics_num_visits,\\n source: contact.properties.hs_analytics_source\\n}}];"
}
},
{
"name": "OpenAI — Generate Account Brief",
"type": "@n8n/n8n-nodes-langchain.openAi",
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{ "role": "system", "content": "You are a B2B sales intelligence analyst. Write sharp, specific account briefs. No generic advice. Use the data provided." },
{ "role": "user", "content": "Write a 200-word sales account brief for an AE about to reach out to this inbound lead. Include: (1) why this account likely submitted the form now (2) their most probable pain point based on company size, industry, and tech stack (3) the one angle most likely to resonate in the first call (4) two personalisation hooks from the data.\\n\\nACCOUNT DATA:\\nContact: {{ $json.contact_name }}, {{ $json.contact_title }}\\nCompany: {{ $json.company_name }} — {{ $json.company_industry }}\\nSize: {{ $json.company_size }} employees | Revenue: {{ $json.company_revenue }}\\nTech Stack: {{ $json.tech_stack }}\\nLast Page Visited: {{ $json.page_last_visited }}\\nTotal Site Sessions: {{ $json.sessions_count }}\\nSource: {{ $json.source }}\\n\\nGUARDRAILS: Only use the data above. Do not invent facts. Flag if data is insufficient for a strong brief." }
]
}
}
},
{
"name": "Slack — Brief to AE",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "={{ $env.SALES_CHANNEL }}",
"text": ":incoming_envelope: *New Demo Request — Account Brief*\\n\\n*{{ $('Code — Compile Account Data').item.json.contact_name }}* @ *{{ $('Code — Compile Account Data').item.json.company_name }}*\\n{{ $('Code — Compile Account Data').item.json.contact_title }} | {{ $('Code — Compile Account Data').item.json.company_size }} employees\\n\\n---\\n{{ $json.message.content }}\\n---\\n*Email:* {{ $('Code — Compile Account Data').item.json.contact_email }}\\n*Tech Stack:* {{ $('Code — Compile Account Data').item.json.tech_stack }}"
}
}
]
}
SETUP & DEPLOYMENT NOTES
Set CLEARBIT_API_KEY and SALES_CHANNEL. For accounts without Clearbit matches (personal email domains), add a fallback branch using Hunter.io or Apollo to find the company domain.
A6 N8N AUTOMATION SCRIPT
GEO Citation Monitor — Weekly Brand Mention Tracker
Runs every Sunday. Queries Perplexity API for your top 20 target queries. Records whether your domain is cited. Logs results to Google Sheets. Sends weekly trend summary to Slack.
{
“nodes”: [
{
"name": "Schedule — Sunday 8am",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "cronExpression", "expression": "0 8 * * 0" }] }
}
},
{
"name": "Google Sheets — Read Target Queries",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "read",
"documentId": "={{ $env.GEO_TRACKING_SHEET }}",
"sheetName": "target_queries",
"options": { "range": "A:B" }
}
},
{
"name": "Split — Process Each Query",
"type": "n8n-nodes-base.splitInBatches",
"parameters": { "batchSize": 1 }
},
{
"name": "HTTP — Perplexity API Query",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.perplexity.ai/chat/completions",
"method": "POST",
"headers": {
"Authorization": "=Bearer {{ $env.PERPLEXITY_API_KEY }}",
"Content-Type": "application/json"
},
"body": {
"mode": "raw",
"rawParameters": "={\"model\": \"llama-3.1-sonar-large-128k-online\", \"messages\": [{\"role\": \"user\", \"content\": \"{{ $json.query }}\"}], \"return_citations\": true}"
}
}
},
{
"name": "Code — Check Citation",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const query = $('Split — Process Each Query').item.json;\\nconst response = $input.item.json;\\nconst citations = response.citations || [];\\nconst answer = response.choices?.[0]?.message?.content || '';\\nconst YOUR_DOMAIN = process.env.YOUR_DOMAIN;\\nconst cited = citations.some(c => c.includes(YOUR_DOMAIN));\\nconst brand_mentioned = answer.toLowerCase().includes(process.env.BRAND_NAME.toLowerCase());\\nreturn [{ json: {\\n query: query.query,\\n category: query.category,\\n cited_in_sources: cited,\\n brand_mentioned_in_answer: brand_mentioned,\\n citation_count: citations.length,\\n competitor_citations: citations.filter(c => !c.includes(YOUR_DOMAIN)).slice(0,3).join(' | '),\\n checked_at: new Date().toISOString().split('T')[0]\\n}}];"
}
},
{
"name": "Google Sheets — Log Results",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "appendOrUpdate",
"documentId": "={{ $env.GEO_TRACKING_SHEET }}",
"sheetName": "citation_log",
"columns": {
"mappingMode": "defineBelow",
"value": {
"query": "={{ $json.query }}",
"cited": "={{ $json.cited_in_sources }}",
"mentioned": "={{ $json.brand_mentioned_in_answer }}",
"competitors": "={{ $json.competitor_citations }}",
"date": "={{ $json.checked_at }}"
}
}
}
},
{
"name": "Aggregate — Weekly Summary",
"type": "n8n-nodes-base.aggregate",
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "all_results"
}
},
{
"name": "Code — Build Summary Stats",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const results = $json.all_results;\\nconst total = results.length;\\nconst cited = results.filter(r => r.cited_in_sources).length;\\nconst mentioned = results.filter(r => r.brand_mentioned_in_answer).length;\\nconst citedPct = ((cited/total)*100).toFixed(0);\\nconst mentionedPct = ((mentioned/total)*100).toFixed(0);\\nreturn [{ json: { total, cited, mentioned, citedPct, mentionedPct }}];"
}
},
{
"name": "Slack — Weekly GEO Report",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "={{ $env.SLACK_GEO_CHANNEL }}",
"text": ":mag: *Weekly GEO Citation Report*\\n\\n*Cited as source:* {{ $json.cited }}/{{ $json.total }} queries ({{ $json.citedPct }}%)\\n*Brand mentioned in answer:* {{ $json.mentioned }}/{{ $json.total }} queries ({{ $json.mentionedPct }}%)\\n\\n_Full breakdown in Google Sheets: {{ $env.GEO_TRACKING_SHEET }}_"
}
}
]
}
SETUP & DEPLOYMENT NOTES
Set env vars: GEO_TRACKING_SHEET, PERPLEXITY_API_KEY, YOUR_DOMAIN, BRAND_NAME, SLACK_GEO_CHANNEL. Populate target_queries sheet with columns: query, category (awareness/consideration/decision). Perplexity API requires paid plan ($20/mo).
A7 N8N AUTOMATION SCRIPT
Content Performance → GEO Score Pipeline
Weekly. Takes your top 20 pages from GA4, scores each for GEO readiness (ski ramp, entity density, schema, Q&A structure), outputs prioritised rewrite list to Notion.
{
“nodes”: [
{
"name": "Schedule — Monday 6am",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "cronExpression", "expression": "0 6 * * 1" }] }
}
},
{
"name": "Google Analytics — Top 20 Pages",
"type": "n8n-nodes-base.googleAnalytics",
"parameters": {
"propertyId": "={{ $env.GA4_PROPERTY_ID }}",
"dateRange": "last_28_days",
"dimensions": [{ "name": "pagePath" }, { "name": "pageTitle" }],
"metrics": [{ "name": "sessions" }, { "name": "engagementRate" }],
"limit": 20
}
},
{
"name": "HTTP — Fetch Page HTML",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "={{ $env.SITE_BASE_URL + $json.dimensionValues[0].value }}",
"method": "GET"
}
},
{
"name": "OpenAI — GEO Score This Page",
"type": "@n8n/n8n-nodes-langchain.openAi",
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{ "role": "system", "content": "You are a GEO content auditor. Score pages strictly against evidence. Output JSON only." },
{ "role": "user", "content": "Score this page for GEO readiness. Output ONLY valid JSON with this structure: { \\\"ski_ramp_score\\\": 0-10, \\\"ski_ramp_note\\\": string, \\\"entity_density_score\\\": 0-10, \\\"entity_density_note\\\": string, \\\"h2_as_query_score\\\": 0-10, \\\"h2_as_query_note\\\": string, \\\"faq_schema_present\\\": boolean, \\\"answer_first_opening\\\": boolean, \\\"total_score\\\": 0-50, \\\"priority_rewrite\\\": boolean, \\\"top_fix\\\": string }\\n\\nDEFINITIONS: ski_ramp = key insight appears in first 30% of body text. entity_density = ratio of proper nouns, named tools, brands. h2_as_query = H2 headings phrased as questions.\\n\\nPAGE CONTENT:\\n{{ $json.data.substring(0, 8000) }}" }
]
}
}
},
{
"name": "Code — Parse GEO Score",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const page = $('Google Analytics — Top 20 Pages').item.json;\\nconst raw = $json.message.content.replace(/```json|```/g, '').trim();\\nconst score = JSON.parse(raw);\\nreturn [{ json: {\\n page_path: page.dimensionValues[0].value,\\n page_title: page.dimensionValues[1].value,\\n sessions: page.metricValues[0].value,\\n ...score\\n}}];"
}
},
{
"name": "Notion — Add to Rewrite Queue",
"type": "n8n-nodes-base.notion",
"parameters": {
"resource": "databasePage",
"operation": "create",
"databaseId": "={{ $env.NOTION_GEO_DB_ID }}",
"propertiesUi": {
"propertyValues": [
{ "key": "Page", "type": "title", "titleValue": "={{ $json.page_title }}" },
{ "key": "GEO Score", "type": "number", "numberValue": "={{ $json.total_score }}" },
{ "key": "Priority", "type": "checkbox", "checkboxValue": "={{ $json.priority_rewrite }}" },
{ "key": "Top Fix", "type": "richText", "textValue": "={{ $json.top_fix }}" },
{ "key": "Sessions", "type": "number", "numberValue": "={{ $json.sessions }}" },
{ "key": "URL", "type": "url", "urlValue": "={{ $env.SITE_BASE_URL + $json.page_path }}" }
]
}
}
}
]
}
SETUP & DEPLOYMENT NOTES
Set env vars: GA4_PROPERTY_ID, SITE_BASE_URL, NOTION_GEO_DB_ID. The Notion database needs columns: Page (title), GEO Score (number), Priority (checkbox), Top Fix (text), Sessions (number), URL. Sort by GEO Score ascending to get your rewrite priority list.
A8 N8N AUTOMATION SCRIPT
Competitor Ad Copy Monitor → Weekly Positioning Brief
Scrapes Google Ads Transparency Centre weekly for up to 5 competitors. Extracts messaging themes, value props, and new CTAs. Sends AI-generated competitive positioning brief to marketing Slack channel.
{
“nodes”: [
{
"name": "Schedule — Friday 4pm",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "cronExpression", "expression": "0 16 * * 5" }] }
}
},
{
"name": "Google Sheets — Competitor List",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "read",
"documentId": "={{ $env.COMPETITOR_SHEET_ID }}",
"sheetName": "competitors",
"options": { "range": "A:C" }
}
},
{
"name": "HTTP — Ads Transparency Scrape",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "=https://adstransparency.google.com/advertiser/{{ $json.advertiser_id }}/ads?region=anywhere&format=TEXT",
"method": "GET",
"options": { "response": { "response": { "responseFormat": "text" } } }
}
},
{
"name": "OpenAI — Extract Ad Themes",
"type": "@n8n/n8n-nodes-langchain.openAi",
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{ "role": "system", "content": "You are a competitive intelligence analyst. Extract precise, specific data. No padding." },
{ "role": "user", "content": "Analyse the Google ad copy below for competitor: {{ $json.competitor_name }}\\n\\nExtract and return as JSON: { \\\"primary_value_props\\\": [top 3 value propositions], \\\"primary_ctas\\\": [main CTAs used], \\\"target_icp_signals\\\": [job titles, industries, pain points mentioned], \\\"pricing_signals\\\": [any pricing language], \\\"new_themes_vs_prior\\\": string, \\\"our_gap\\\": string }\\n\\nAD COPY DATA:\\n{{ $json.data.substring(0, 6000) }}\\n\\nGUARDRAILS: Only extract what is in the ad copy. Do not infer. If data is missing, say so." }
]
}
}
},
{
"name": "Aggregate — All Competitors",
"type": "n8n-nodes-base.aggregate",
"parameters": { "aggregate": "aggregateAllItemData", "destinationFieldName": "competitors" }
},
{
"name": "OpenAI — Synthesise Positioning Brief",
"type": "@n8n/n8n-nodes-langchain.openAi",
"parameters": {
"model": "gpt-4o",
"messages": {
"values": [
{ "role": "system", "content": "You are a B2B positioning strategist." },
{ "role": "user", "content": "Based on this competitive ad data, write a 250-word Friday positioning brief for our marketing team. Include: (1) what messaging themes competitors are doubling down on this week, (2) any gaps in competitor messaging we can exploit in our own ads next week, (3) one specific ad copy angle recommendation for our top campaign.\\n\\nOUR COMPANY: {{ $env.COMPANY_NAME }} — {{ $env.OUR_POSITIONING }}\\n\\nCOMPETITOR DATA:\\n{{ JSON.stringify($json.competitors, null, 2) }}" }
]
}
}
},
{
"name": "Slack — Weekly Competitive Brief",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "={{ $env.SLACK_MARKETING_CHANNEL }}",
"text": ":eyes: *Weekly Competitive Ad Brief — {{ $now.format('MMM DD') }}*\\n\\n{{ $json.message.content }}"
}
}
]
}
SETUP & DEPLOYMENT NOTES
Set COMPETITOR_SHEET_ID with columns: competitor_name, advertiser_id, domain. Get advertiser IDs from Google Ads Transparency Centre (adstransparency.google.com — search brand, copy ID from URL). Set COMPANY_NAME, OUR_POSITIONING, SLACK_MARKETING_CHANNEL.
A9 N8N AUTOMATION SCRIPT
Multi-Platform Daily Data Sync to Google Sheets Dashboard
Runs every night at 11pm. Pulls yesterday’s data from Google Ads, LinkedIn Ads, and HubSpot CRM into a single unified Google Sheet. Powers the Looker Studio decision dashboard.
{
“nodes”: [
{
"name": "Schedule — Daily 11pm",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": { "interval": [{ "field": "cronExpression", "expression": "0 23 * * *" }] }
}
},
{
"name": "Google Ads — Yesterday Data",
"type": "n8n-nodes-base.googleAds",
"parameters": {
"resource": "campaign",
"operation": "getAll",
"customerId": "={{ $env.GADS_CUSTOMER_ID }}",
"additionalFields": {
"dateRange": "YESTERDAY",
"metrics": ["cost_micros","impressions","clicks","conversions","conversions_value"],
"segments": ["date","campaign.name","campaign.advertising_channel_type"]
}
}
},
{
"name": "LinkedIn — Yesterday Campaigns",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.linkedin.com/v2/adAnalyticsV2",
"method": "GET",
"headers": { "Authorization": "=Bearer {{ $env.LINKEDIN_TOKEN }}" },
"qs": {
"q": "analytics",
"pivot": "CAMPAIGN",
"dateRange.start.day": "={{ $now.minus({days:1}).day }}",
"dateRange.start.month": "={{ $now.minus({days:1}).month }}",
"dateRange.start.year": "={{ $now.minus({days:1}).year }}",
"dateRange.end.day": "={{ $now.minus({days:1}).day }}",
"dateRange.end.month": "={{ $now.minus({days:1}).month }}",
"dateRange.end.year": "={{ $now.minus({days:1}).year }}",
"fields": "clicks,impressions,costInLocalCurrency,leads,dateRange",
"accounts": "=urn:li:sponsoredAccount:{{ $env.LINKEDIN_ACCOUNT_ID }}"
}
}
},
{
"name": "HubSpot — New SQLs Yesterday",
"type": "n8n-nodes-base.hubspot",
"parameters": {
"resource": "deal",
"operation": "getAll",
"additionalFields": {
"filters": [
{ "propertyName": "createdate", "operator": "GT", "value": "={{ $now.minus({days:1}).startOf('day').toMillis() }}" },
{ "propertyName": "dealstage", "operator": "EQ", "value": "appointmentscheduled" }
],
"properties": ["dealname","amount","createdate","hs_analytics_source","campaign"]
}
}
},
{
"name": "Code — Unify Data",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const date = $now.minus({days:1}).toFormat('yyyy-MM-dd');\\nconst gads = $('Google Ads — Yesterday Data').all();\\nconst li = $('LinkedIn — Yesterday Campaigns').item.json.elements || [];\\nconst sqls = $('HubSpot — New SQLs Yesterday').all();\\n\\nconst gadsSpend = gads.reduce((s,c) => s + c.json.cost_micros/1e6, 0);\\nconst gadsConversions = gads.reduce((s,c) => s + (c.json.conversions||0), 0);\\nconst gadsClicks = gads.reduce((s,c) => s + (c.json.clicks||0), 0);\\nconst liSpend = li.reduce((s,c) => s + parseFloat(c.costInLocalCurrency?.amount||0), 0);\\nconst liLeads = li.reduce((s,c) => s + (c.leads||0), 0);\\nconst liClicks = li.reduce((s,c) => s + (c.clicks||0), 0);\\nconst newSQLs = sqls.length;\\nconst sqlPipelineValue = sqls.reduce((s,d) => s + parseFloat(d.json.amount||0), 0);\\n\\nreturn [{ json: {\\n date,\\n gads_spend: gadsSpend.toFixed(2),\\n gads_conversions: gadsConversions,\\n gads_clicks: gadsClicks,\\n gads_cpa: gadsConversions > 0 ? (gadsSpend/gadsConversions).toFixed(2) : 'N/A',\\n li_spend: liSpend.toFixed(2),\\n li_leads: liLeads,\\n li_clicks: liClicks,\\n li_cpl: liLeads > 0 ? (liSpend/liLeads).toFixed(2) : 'N/A',\\n new_sqls: newSQLs,\\n sql_pipeline_value: sqlPipelineValue.toFixed(2),\\n total_spend: (gadsSpend + liSpend).toFixed(2)\\n}}];"
}
},
{
"name": "Google Sheets — Append Daily Row",
"type": "n8n-nodes-base.googleSheets",
"parameters": {
"operation": "append",
"documentId": "={{ $env.UNIFIED_DASHBOARD_SHEET }}",
"sheetName": "daily_data",
"columns": {
"mappingMode": "defineBelow",
"value": {
"date": "={{ $json.date }}",
"gads_spend": "={{ $json.gads_spend }}",
"gads_conversions": "={{ $json.gads_conversions }}",
"gads_cpa": "={{ $json.gads_cpa }}",
"li_spend": "={{ $json.li_spend }}",
"li_leads": "={{ $json.li_leads }}",
"li_cpl": "={{ $json.li_cpl }}",
"new_sqls": "={{ $json.new_sqls }}",
"sql_pipeline_value": "={{ $json.sql_pipeline_value }}",
"total_spend": "={{ $json.total_spend }}"
}
}
}
}
]
}
SETUP & DEPLOYMENT NOTES
Set GADS_CUSTOMER_ID, LINKEDIN_TOKEN, LINKEDIN_ACCOUNT_ID, UNIFIED_DASHBOARD_SHEET. The dashboard sheet feeds directly into Looker Studio — connect via Google Sheets data source. Sheet columns become Looker Studio dimensions and metrics automatically.
PART B — Items B10 through B18
Google Ads Data Ingestion Prompts
9 BRIDGE-structured prompts. Each one ready to use with your Google Ads CSV export. Replace [BRACKETED] variables. Paste into ChatGPT Advanced Data Analysis or Claude.
B10 GOOGLE ADS DATA INGESTION PROMPT
Weekly Campaign Health Brief — VP-Ready Narrative
Full BRIDGE-structured prompt. Paste your Google Ads CSV export. Outputs executive summary, anomaly log, and 3 prioritised recommendations in VP-ready format.
BACKGROUND:
Company: [COMPANY NAME]
Industry: [SECTOR] B2B SaaS/Services
ICP: [Company size, industry, geography, job titles]
Target CPA: $[X] | Target ROAS: [X] | Target Impression Share: [X]%
8-week baseline CPA: $[X] | Baseline ROAS: [X]
Primary conversion goal: [Demo requests / Trial signups / Form fills]
Business goal this quarter: [e.g., Reduce CPL by 20% while maintaining 40 demos/month]
Current monthly budget: $[X] across [N] active campaigns
REQUEST:
Analyse the Google Ads performance data below (last 7 days vs prior 7-day period
and vs 8-week same-day-of-week baseline). Identify:
-
Top 3 campaigns by conversion volume with commentary on why they’re winning
-
Bottom 3 campaigns by ROAS with root cause hypothesis
-
Any campaign where impression share dropped more than 10 percentage points
-
Any keyword or ad group where Quality Score degraded by 2+ points in the period
-
Any budget pacing anomaly: campaigns underspending >20% or overspending >10% of
daily budget at time of export
-
Three specific, data-backed recommendations — each with projected metric impact
INPUT:
[PASTE YOUR GOOGLE ADS CSV EXPORT HERE]
Columns required: Campaign | Ad Group | Keyword | Match Type | Impressions | Clicks |
CTR | Avg CPC | Conversions | CPA | Conv Value | ROAS | Quality Score | Impression Share |
IS Lost (Rank) | IS Lost (Budget) | Date Range
DELIVERABLE:
Output in exactly this structure — no additional sections, no preamble:
EXECUTIVE SUMMARY
[3 sentences maximum. State overall account health, single most important finding,
and the immediate action it requires. Numbers only. No vague language.]
PERFORMANCE TABLE
| Campaign | Conv | CPA | vs Baseline | ROAS | vs Baseline | IS | Status |
[Populate for all active campaigns. Status: STRONG / WATCH / ACTION REQUIRED]
ANOMALY LOG
| Impact | Campaign/KW | Issue | Root Cause Hypothesis | Recommended Action |
[HIGH = large deviation on large traffic segment. MED = one axis significant. LOW = log only]
TOP 3 RECOMMENDATIONS
-
[Action] — [Data that supports it] — [Projected outcome: e.g., +8% IS, -12% CPA]
-
[Action] — [Data that supports it] — [Projected outcome]
-
[Action] — [Data that supports it] — [Projected outcome]
GUARDRAILS:
-
Never recommend increasing total monthly spend by more than 15% without an explicit flag
-
Never mention competitor names in any output
-
Flag every assumption made with [ASSUMPTION: description]
-
If a recommendation relies on data not in the input, state what additional data is needed
-
Do not use marketing language: no “optimise”, “leverage”, “synergise”
EVALUATE BEFORE RESPONDING:
Confirm: (1) every recommendation references specific data from the input, (2) all
anomalies are rated using the two-axis system (magnitude AND affected volume),
(3) the executive summary would make sense to a VP reading it without the data
SETUP & DEPLOYMENT NOTES
Export from Google Ads: Reports > Predefined Reports > Campaigns. Set date range to last 7 days. Download as CSV. Remove auto-total rows before pasting. For best results use Advanced Data Analysis in ChatGPT or Claude Projects with this as a system prompt.
B11 GOOGLE ADS DATA INGESTION PROMPT
Anomaly Root Cause Drill-Down
Use this after the Weekly Brief identifies an anomaly. Ingests the specific campaign or ad group data and performs 5-layer root cause analysis with hypothesis ranking.
BACKGROUND:
Account: [COMPANY] Google Ads account
Anomaly identified: [e.g., ‘Brand Campaign CPA increased 47% week-over-week’]
Normal CPA range for this campaign: $[low]–$[high]
Campaign type: [Search / Shopping / Display / Performance Max]
Campaign objective: [e.g., Demo request conversions]
Key audiences: [Remarketing / In-market / Keyword-targeted]
Recent account changes in last 14 days: [List any: bid changes, budget changes,
new keywords, paused ads, landing page changes, audience updates. Write NONE if no changes]
REQUEST:
Perform a 5-layer root cause analysis on the anomaly described above using the
data provided below. For each layer, identify what changed and whether it is
the proximate cause, a contributing factor, or ruling it out.
LAYER 1 — BUDGET & BID: Was spend pacing normal? Did any automated bid strategy
change? Did target CPA or ROAS target shift?
LAYER 2 — AUCTION COMPETITIVENESS: Did impression share change? Did IS Lost (Rank)
increase? Did auction insights show new competitors?
LAYER 3 — QUALITY & RELEVANCE: Did Quality Score change at keyword or ad level?
Did landing page experience signal degrade? Did CTR drop below expected range?
LAYER 4 — AUDIENCE & MATCH: Did audience composition shift? Did match type
behaviour change (broad match expansion)? Did search term quality degrade?
LAYER 5 — EXTERNAL FACTORS: Does the timing align with day-of-week/month-end
patterns? Any seasonality explanation in the data? Any landing page change?
INPUT:
[PASTE: Campaign-level data, ad group breakdown, keyword performance,
search terms report, auction insights, and quality score history for
the affected campaign — last 28 days, daily breakdown preferred]
DELIVERABLE:
-
DIAGNOSIS TABLE: Layer | Finding | Evidence | Verdict (Primary Cause /
Contributing Factor / Ruled Out)
-
PRIMARY ROOT CAUSE: One sentence. Specific. Referenced to data.
-
CONFIDENCE LEVEL: High / Medium / Low — with explanation of uncertainty
-
RECOMMENDED FIX: Specific action, expected timeline for impact, and what
metric to watch to confirm the fix worked
-
WHAT TO MONITOR: 3 metrics to track daily for the next 7 days
GUARDRAILS:
-
Never assert a cause without data evidence
-
If the root cause cannot be determined from available data, say so explicitly
and specify what additional data would resolve the ambiguity
-
Flag any recommendation that would change bid strategy type (these have
learning period implications)
SETUP & DEPLOYMENT NOTES
Export data from: (1) Campaign view — last 28 days daily. (2) Keywords view — last 28 days. (3) Search Terms report — last 28 days. (4) Auction Insights — last 28 days. Combine into a single paste. This prompt produces the highest-value output when run in Claude with a persistent system prompt containing your Master Context Document.
B12 GOOGLE ADS DATA INGESTION PROMPT
Bid Strategy Optimisation Recommendations
Monthly bid strategy review. Evaluates current bid strategies against actual conversion data and recommends adjustments or strategy changes with projected impact.
BACKGROUND:
Company: [COMPANY] | Industry: [SECTOR]
Account monthly budget: $[X] | Active campaigns: [N]
Current bid strategies in use: [List each campaign name and its current bid strategy:
Manual CPC / Target CPA / Target ROAS / Maximize Conversions / Max Conv Value /
Enhanced CPC / Portfolio strategy]
Primary conversion action: [Action name and value, e.g., “Demo Request — value $0”]
Secondary conversion actions: [List with values]
Account learning status: [Are any campaigns in learning period? Which ones?]
Historical context: [Any major changes in last 90 days that affected data quality]
REQUEST:
Analyse the campaign performance data below and evaluate the effectiveness of each
current bid strategy. For each campaign, determine:
-
Is the current bid strategy appropriate for the volume of conversions (automated
strategies require minimum 30-50 conv/month to function correctly)?
-
Is the current target (CPA or ROAS) aligned with actual performance? Is it
too aggressive (limiting reach) or too loose (overpaying)?
-
For Target CPA campaigns: calculate the optimal target range based on the
actual CPA distribution — not the average, but the 25th–75th percentile range
-
For Target ROAS campaigns: apply the same percentile analysis
-
Which campaigns have sufficient data to move from Manual CPC to automated bidding?
INPUT:
[PASTE: Monthly campaign performance data — all campaigns, last 90 days minimum.
Columns: Campaign | Bid Strategy | Target | Impressions | Clicks | Conversions |
CPA | Conv Value | ROAS | IS | IS Lost (Budget) | IS Lost (Rank) | Avg CPC | Budget]
DELIVERABLE:
-
BID STRATEGY AUDIT TABLE:
Campaign | Current Strategy | Current Target | Recommended Strategy |
Recommended Target | Rationale | Expected Impact
-
PORTFOLIO STRATEGY OPPORTUNITY: Identify any group of campaigns that would
benefit from a shared portfolio bid strategy. Show the combined conversion
volume that would power a more stable automated strategy.
-
LEARNING PERIOD RISK ASSESSMENT: Flag any changes that would trigger a new
learning period, estimate the performance dip duration, and recommend whether
the long-term gain justifies the short-term disruption.
-
PRIORITY ORDER: Rank the 3 recommended changes from highest to lowest expected
impact. Include the implementation sequence to minimise risk.
GUARDRAILS:
-
Never recommend switching to automated bidding for campaigns with fewer than
20 conversions in the last 30 days
-
Flag any recommendation that requires a learning period with [LEARNING PERIOD RISK]
-
Do not recommend Target Impression Share bidding for conversion-focused campaigns
-
All projected impacts must state the assumption underlying the projection
SETUP & DEPLOYMENT NOTES
Pull 90-day data from Google Ads Reports > Campaigns view. Add columns: Bid Strategy Type, Target CPA or Target ROAS. Export as CSV. This prompt works best run monthly, not weekly — bid strategy changes need 30+ days of data to evaluate.
B13 GOOGLE ADS DATA INGESTION PROMPT
Search Terms Quality Audit — Negative Keyword Generator
Ingests full search terms report. Identifies wasted spend on irrelevant queries. Outputs a categorised negative keyword list ready for upload, with match type recommendations.
BACKGROUND:
Company: [COMPANY] | Product/Service: [DESCRIPTION]
Target buyer: [ICP — job title, company type, buying intent]
What we DO sell: [Specific products/services — be precise]
What we DO NOT sell: [Explicitly list — e.g., “not B2C, not freelancers, not free tools”]
Current negative keyword lists applied: [List existing negative keyword themes]
Approximate % of spend on branded vs non-branded: [X]% branded
REQUEST:
Analyse the search terms report below. Identify:
-
All queries with zero conversions and spend exceeding $[X] (your target CPA / 5)
-
All queries where the search intent is clearly misaligned with B2B buyer intent
(B2C indicators, student/learning intent, competitor research, job-seeking intent)
-
Queries triggering on the wrong segment of our ICP (wrong industry, wrong
company size, wrong role level)
-
Duplicate intent themes across multiple specific search terms (consolidate into
single negative keyword phrases)
-
Any brand or product terms of direct competitors being triggered (flag separately)
INPUT:
[PASTE: Google Ads Search Terms Report — last 90 days.
Columns: Search Term | Campaign | Ad Group | Match Type | Impressions | Clicks |
CTR | Avg CPC | Spend | Conversions | CPA | Conv Value]
DELIVERABLE:
-
WASTED SPEND SUMMARY: Total spend on zero-conversion terms. Top 10 by spend.
-
NEGATIVE KEYWORD LIST — formatted for Google Ads bulk upload:
Keyword | Match Type (Exact/Phrase/Broad) | Campaign or Account Level |
Rationale Category (Wrong ICP / Wrong Intent / Wrong Geography / Competitor Brand)
-
MATCH TYPE RECOMMENDATIONS: For each negative, specify:
-
Exact match: query is too specific to a bad intent
-
Phrase match: the phrase indicates a wrong intent pattern
-
Broad match negative: the concept is always wrong regardless of surrounding words
Note: be conservative with broad match negatives — they can block good traffic
-
-
SAVINGS PROJECTION: If all recommended negatives had been in place for this period,
estimate spend saved. Show calculation.
GUARDRAILS:
-
Never recommend negating any term that generated even 1 conversion
-
Flag any negative that might accidentally block high-intent commercial queries
-
Do not recommend negating competitor brand terms if they have >2% conversion rate
(some competitor traffic converts — check before blocking)
SETUP & DEPLOYMENT NOTES
Export Search Terms report from Google Ads: Keywords > Search Terms. Include date range 90 days minimum for statistical validity. Set your threshold for zero-conversion spend as roughly CPA/5 (e.g., if target CPA is $100, flag any query spending >$20 with zero conversions).
B14 GOOGLE ADS DATA INGESTION PROMPT
Quality Score Recovery Plan
Identifies all keywords with degraded or low Quality Score. Maps each to its specific QS component breakdown (CTR, Ad Relevance, Landing Page). Outputs a prioritised repair sequence.
BACKGROUND:
Account: [COMPANY] Google Ads
Quality Score baseline: [e.g., average QS was 7.2 six months ago, now averaging 5.8]
Recent changes that may have affected QS: [New landing pages? New ad copy?
Expanded keywords? Account restructure?]
Landing page technology: [e.g., HubSpot, Unbounce, WordPress — helps diagnose page speed]
Primary conversion pages: [List URLs of key landing pages being targeted]
REQUEST:
Analyse the Quality Score data below. For every keyword with QS ≤ 6:
-
Identify which of the three QS components is dragging the score:
-
Expected CTR: Below Average means the keyword-to-ad relevance is poor
-
Ad Relevance: Below Average means ad copy doesn’t reflect the search query
-
Landing Page Experience: Below Average means page speed, relevance, or
content doesn’t match query intent
-
-
Group keywords by primary diagnosis — cluster keywords with the same root cause
-
For each cluster, define the minimum viable repair action
-
Prioritise repairs by: volume of impressions affected × magnitude of QS gap
INPUT:
[PASTE: Keyword performance data with QS components.
Columns: Campaign | Ad Group | Keyword | Match Type | QS | Expected CTR Rating |
Ad Relevance Rating | Landing Page Exp Rating | Impressions | Clicks | CPA |
Current Ad Copy headline 1 | Current Ad Copy headline 2 | Landing Page URL]
DELIVERABLE:
-
QS DIAGNOSTIC SUMMARY:
-
% of keywords at QS 1-4 (critical) / 5-6 (below target) / 7-10 (healthy)
-
Total impressions affected by sub-7 QS
-
Estimated CPC premium being paid due to low QS (calculate from benchmark)
-
-
REPAIR PRIORITY LIST:
Keyword Cluster | Primary QS Issue | Affected Impressions |
Specific Fix Required | Est. QS Improvement | Est. CPC Reduction
-
AD COPY REWRITES: For the top 5 keywords with “Ad Relevance: Below Average”,
write 3 alternative headline variants that more precisely match the keyword intent.
Format: [Keyword] | [Headline 1] | [Headline 2] | [Headline 3]
-
LANDING PAGE BRIEF: For keywords with “Landing Page Experience: Below Average”,
specify: (a) exact content mismatch between query and page, (b) the specific
section or heading that needs to change, (c) whether a new dedicated landing
page is warranted based on impression volume
GUARDRAILS:
-
Do not recommend pausing any keyword with QS ≤ 4 before trying the repair first
(pausing loses historical QS data that’s hard to rebuild)
-
Flag any landing page recommendations that would require developer resource
vs changes achievable in the CMS directly
SETUP & DEPLOYMENT NOTES
Add QS columns in Google Ads keyword view: Quality Score, Expected CTR, Ad Relevance, Landing Page Experience. These are segment-level columns — you need to enable them in the column picker. Export last 30 days. Note: QS is a point-in-time metric, not an average — export as frequently as possible.
B15 GOOGLE ADS DATA INGESTION PROMPT
Impression Share Recovery Plan
Full impression share gap analysis. Diagnoses whether IS loss is budget-driven or rank-driven. Produces specific budget reallocation or bid adjustment plan to recover lost visibility on priority keywords.
BACKGROUND:
Account: [COMPANY] | Account monthly budget: $[X]
Priority campaigns (must defend IS): [List 2-3 campaigns that represent core pipeline]
Acceptable IS floor: [e.g., “We cannot let branded IS drop below 85%”]
Current bid strategies: [List per campaign]
Competitor intensity: [High / Medium / Low — based on auction insights observations]
REQUEST:
Analyse the impression share data below. For each campaign:
-
Calculate the IS gap: what % of eligible impressions are being missed?
-
Diagnose the cause: IS Lost (Budget) vs IS Lost (Rank) vs both
-
For Budget-Lost IS: calculate exactly how much additional daily budget would
be required to close the gap — use the formula:
Required Budget = Current Budget / (1 - IS Lost to Budget)
-
For Rank-Lost IS: identify whether the issue is bid level, Quality Score,
or Ad Rank threshold — use the QS data to discriminate
-
Cross-campaign budget reallocation opportunity: are there campaigns with
high IS (>85%) and significant budget remaining? That budget is better
deployed to campaigns with high IS Lost (Budget)
INPUT:
[PASTE: Campaign performance with IS data — last 30 days.
Columns: Campaign | Budget | Spend | Impressions | IS | IS Lost (Budget) |
IS Lost (Rank) | Clicks | Conversions | CPA | ROAS | Avg CPC | QS Average]
DELIVERABLE:
-
IS GAP ANALYSIS TABLE:
Campaign | Current IS | IS Lost Budget | IS Lost Rank |
Gap Type | Budget Required to Close | Bid Adj Required to Close
-
REALLOCATION RECOMMENDATION:
Which budget to move, from where, to where, and in what increments
(never move more than 20% of a campaign’s budget at once — performance
can destabilise). Show the expected IS improvement per dollar reallocated.
-
QUICK WIN LIST:
3 changes achievable this week that would recover the most IS with the
least risk. Rank by: IS points recovered per dollar of budget change.
-
RISK FLAGS:
Any campaign where increasing budget would likely trigger smart bidding
to re-enter learning period. Any campaign where IS is deceptively high
but impression volume is very low (small audience exhaustion).
GUARDRAILS:
-
Never recommend IS recovery actions that would push CPA above target by >20%
-
Flag any budget increase over $500/month as requiring CMO sign-off
-
Do not recommend consolidating campaigns to recover IS without flagging
the audience and targeting implications of consolidation
SETUP & DEPLOYMENT NOTES
Pull campaign-level data with IS columns enabled. Critical: the IS Lost (Budget) and IS Lost (Rank) columns must be added manually in the column picker — they are not in the default export. Pull 30-day view for statistical reliability.
B16 GOOGLE ADS DATA INGESTION PROMPT
Landing Page Conversion Rate Audit
Correlates Google Ads click data with GA4 landing page conversion rates. Identifies pages with high traffic but low conversion, outputs hypothesis-driven CRO priority list.
BACKGROUND:
Company: [COMPANY] | Primary conversion: [Action, e.g., “demo request form”]
Target conversion rate: [X]% (industry benchmark for B2B SaaS landing pages: 2–5%)
Current overall account conversion rate: [X]%
Landing page technology: [HubSpot / Unbounce / WordPress / Webflow]
Form tool: [HubSpot Forms / Typeform / Gravity Forms]
Key value proposition: [One sentence — what the page must communicate]
REQUEST:
Analyse the combined Google Ads + GA4 landing page data below. For each landing page:
-
Calculate: Click-to-conversion rate (Ads) vs Session-to-conversion rate (GA4)
— a significant gap between these two rates indicates mid-funnel drop-off
(people arriving but not engaging before converting)
-
Segment by traffic source within the page: branded vs non-branded traffic
often converts at 3-5x different rates — blended rates hide the problem
-
Identify pages with engagement rate >60% but conversion rate <2% — these have
the highest CRO opportunity (visitors are engaging but not converting)
-
Identify pages with high bounce rate AND high spend — these are the most
expensive conversion failures in the account
INPUT:
[PASTE TWO DATA SETS side by side or separately labelled:
DATASET 1 — Google Ads (last 30 days):
Landing Page URL | Campaign | Impressions | Clicks | Conversions | CPA | Spend
DATASET 2 — GA4 (last 30 days, same URLs):
Page Path | Sessions | Engaged Sessions | Engagement Rate | Conversions |
Conv Rate | Avg Engagement Time | Bounce Rate]
DELIVERABLE:
-
CONVERSION RATE TABLE:
Page URL | Ads CPA | GA4 Conv Rate | Engaged Sessions |
Spend Last 30d | CRO Priority Score (1-10)
-
TOP 5 CRO PRIORITY PAGES: For each, write:
-
The specific conversion bottleneck hypothesis (e.g., “form is below the fold”,
“value proposition is not visible on mobile”, “no social proof near CTA”)
-
ONE specific change to test first (not a list — the single highest-leverage change)
-
Expected conversion rate improvement if hypothesis is correct
-
-
QUICK DIAGNOSTIC QUESTIONS: For the top 2 priority pages, list the 5 questions
a CRO specialist would ask in a heuristic review — to guide your own page audit
before booking an agency
GUARDRAILS:
-
Never recommend redesigning an entire page without first testing
single-element changes (form position, headline, CTA copy)
-
Flag any recommendation requiring developer resource vs CMS-editable changes
-
Note if a page’s conversion data is statistically insufficient
(<200 sessions) to draw conclusions
SETUP & DEPLOYMENT NOTES
Pull GA4 data via Explorations > Free Form report. Dimension: Page path. Metrics: Sessions, Engaged sessions, Conversions, Conversion rate, Average engagement time. Filter to your landing page paths only. Match URLs to Google Ads final URL column.
B17 GOOGLE ADS DATA INGESTION PROMPT
Monthly Executive Summary — Board-Ready
Synthesises a full month of Google Ads performance into a 1-page board-ready summary. Maps ad spend directly to pipeline contribution. Uses business language, not marketing language.
BACKGROUND:
Company: [COMPANY] | Reporting period: [Month, Year]
Audience: [VP of Marketing / CMO / Board — be specific]
Business goal this quarter: [e.g., “Generate 120 demos at CPL ≤$450”]
Month’s Google Ads budget: $[X] | Actual spend: $[X]
Closed-won deals this month attributable to paid: [N deals, $X revenue]
Average sales cycle length: [X days]
Average deal value: $[X]
Definition of pipeline: [Deals in stages X through Y in CRM]
REQUEST:
Synthesise the Google Ads performance data below into a 1-page executive summary
for [AUDIENCE]. The summary must:
-
Open with a business outcome statement — not a metric. Not “CTR improved 12%.”
Instead: “Paid search generated [N] qualified demos this month at $[CPA],
representing $[X] in pipeline at our [X]% average demo-to-opportunity rate.”
-
Frame every metric against the quarterly goal — are we on track, ahead, or behind?
-
Translate ad metrics into business language:
-
Impressions = “brand reach across [N] in-market searches”
-
Quality Score = “ad relevance health score”
-
Impression Share = “share of visible pipeline opportunity”
-
-
Include one clear forward-looking statement: what will change next month and why
-
Include one risk flag if any metric is trending in the wrong direction
INPUT:
[PASTE: Monthly campaign summary data + MoM comparison + QTD progress vs goal.
Include: Spend, Conversions, CPA, ROAS, IS, Clicks, Impressions, Top/Bottom campaigns]
ALSO INCLUDE if available:
-
CRM data: demos that progressed to opportunity this month from paid source
-
Revenue closed-won this month from paid-sourced opportunities
DELIVERABLE:
FORMAT: 1 page maximum. No tables. Prose only. Written for a board member who
does not know what CTR stands for.
SECTIONS:
[1] HEADLINE RESULT (1 sentence — the most important business outcome)
[2] PIPELINE CONTRIBUTION (demos generated, pipeline value, trend vs last month)
[3] EFFICIENCY (CPL trend, comparison to target, reason for variance)
[4] REACH & VISIBILITY (IS, branded share — translated to business terms)
[5] NEXT MONTH FORECAST (what we’re doing differently and why it will improve results)
[6] ONE RISK FLAG (if applicable — be specific, not vague)
GUARDRAILS:
-
No marketing jargon: no “optimise”, “leverage”, “holistic”, “synergy”
-
Every number must be contextualised against the quarterly goal
-
If a metric looks bad, do not bury it — state it and then explain the plan
-
Maximum reading time: 2 minutes. If it’s longer, cut it.
SETUP & DEPLOYMENT NOTES
This prompt requires both Google Ads data and CRM attribution data for maximum impact. The pipeline contribution section — connecting ad spend to actual pipeline value — is the single most effective way to secure budget for the next quarter. Pull from HubSpot or Salesforce: deals created this month where original source = Paid Search.
B18 GOOGLE ADS DATA INGESTION PROMPT
Audience Performance Segmentation — ICP Refinement
Analyses audience overlay data and demographic performance to identify which audience segments are converting at or above ICP benchmark. Recommends bid adjustments and audience exclusions.
BACKGROUND:
Company: [COMPANY] | ICP definition:
Company size: [e.g., 50–500 employees]
Industry: [e.g., Financial Services, Healthcare, SaaS]
Job title targets: [e.g., VP Marketing, Director of Demand Gen, CMO]
Geography: [Countries / regions targeted]
Tech stack indicators: [e.g., HubSpot users, Salesforce users]
Target CPA: $[X] | Baseline CPA across all audiences: $[X]
Current audience bid adjustments in place: [List if any]
In-market audiences applied: [List names]
Remarketing audiences applied: [List: e.g., “Visited pricing page 30d”, “All visitors 90d”]
REQUEST:
Analyse the audience performance data below. Identify:
-
Which audience segments are converting at >20% below target CPA —
these warrant positive bid adjustments
-
Which segments are converting at >50% above target CPA —
evaluate for negative bid adjustment or exclusion
-
Which in-market audiences have sufficient volume (>50 conv)
to be statistically meaningful vs those that are directionally interesting only
-
Remarketing segment analysis: what is the conversion rate and CPA difference
between cold audiences and each remarketing list? This ratio justifies
remarketing bid adjustments
-
Demographic analysis: are there age bands, device types, or day-of-week
patterns showing consistently better performance that warrant adjustments?
INPUT:
[PASTE: Audience performance report + Demographics report — last 60 days.
Dataset 1 — Audiences: Audience Name | Type | Impressions | Clicks |
Conversions | CPA | CPC | Bid Adj Applied
Dataset 2 — Demographics: Dimension | Value | Impressions | Clicks |
Conversions | CPA | Conv Rate]
DELIVERABLE:
-
AUDIENCE TIER TABLE:
Audience | Conversions | CPA | vs Target | Recommended Bid Adj | Confidence Level
-
ICP SIGNAL FINDINGS: Which audience combinations best match our ICP?
(e.g., “In-Market: CRM Software + Seniority: Senior = CPA 34% below target
— strongest ICP signal in the account”)
-
BID ADJUSTMENT SCHEDULE: A ready-to-implement list:
Audience/Demographic | Current Adj | Recommended Adj | Expected CPA Impact
-
EXCLUSION RECOMMENDATIONS: Any audience that should be fully excluded (not
just bid-adjusted down) with reasoning and risk flag if volume impact is significant
GUARDRAILS:
-
Never recommend bid adjustments based on <25 conversions (insufficient data)
-
Flag any demographic bid adjustment that could violate Google’s personalised
advertising policies (age, gender, parental status require care in some industries)
-
Do not recommend excluding an audience with >5% of total conversions
without a volume replacement plan
SETUP & DEPLOYMENT NOTES
Access audience data via: Google Ads > Audiences tab. Add performance columns. Demographics data: Settings > Demographics. Export both. Run this prompt quarterly — audience performance shifts with market conditions and your content strategy.
PART C — Items C19 through C25
BRIDGE-Compliant Content Templates
7 fully-written content templates. GEO-optimised, sales-ready, entity-rich. Fill [BRACKETED] variables. Each includes schema markup where applicable.
C19 BRIDGE CONTENT TEMPLATE
GEO-Optimised Landing Page — B2B SaaS Category Page
Full page structure following ski ramp architecture, answer-first opening, H2-as-query format, FAQ schema ready, entity-rich. Drop in your variables and edit the specifics.
[PRODUCT CATEGORY]: [DIRECT BENEFIT STATEMENT for ICP]
[PRODUCT NAME] is a [CATEGORY DEFINITION] designed for [ICP DESCRIPTION].
[COMPANY] enables [SPECIFIC JOB TITLE] at [COMPANY SIZE] [INDUSTRY] companies
to [SPECIFIC OUTCOME] — [QUANTIFIED RESULT, e.g., “reducing manual reporting
time from 6 hours to 20 minutes”] without [BARRIER REMOVED, e.g., “additional
headcount or data science resources”].
[COMPANY] integrates with [NAMED TOOL 1], [NAMED TOOL 2], and [NAMED TOOL 3].
Customers including [NAMED CUSTOMER 1] and [NAMED CUSTOMER 2] use [PRODUCT]
to [SPECIFIC MEASURABLE OUTCOME].
What is [PRODUCT CATEGORY] and how does it work for [ICP]?
[PRODUCT CATEGORY] is the practice of [DIRECT DEFINITION]. For [JOB TITLE] at
[COMPANY TYPE], this means [SPECIFIC PRACTICAL EXPLANATION].
[COMPANY’S] approach uses [NAMED METHODOLOGY OR FRAMEWORK] to [MECHANISM].
Unlike [GENERIC ALTERNATIVE], [PRODUCT] [SPECIFIC DIFFERENTIATOR].
How does [COMPANY] compare to [TOP COMPETITOR] for [ICP USE CASE]?
[COMPANY] and [COMPETITOR] take different approaches to [USE CASE].
[COMPANY] focuses on [SPECIFIC CAPABILITY], which matters most when [CONTEXT].
[COMPETITOR] is better suited for [DIFFERENT CONTEXT].
For [ICP] companies needing [SPECIFIC REQUIREMENT], [COMPANY] provides [ADVANTAGE].
What results do [ICP JOB TITLE]s achieve with [PRODUCT]?
[NAMED CUSTOMER], a [COMPANY SIZE] [INDUSTRY] company, used [PRODUCT] to
[SPECIFIC RESULT with number, e.g., “reduce CPL by 34% in 90 days”].
[NAMED CUSTOMER 2], a [SIZE] [INDUSTRY] company, achieved [DIFFERENT RESULT].
Across [NUMBER] customers, [COMPANY] customers average [BENCHMARK RESULT].
The fastest time to [SPECIFIC OUTCOME] is [X DAYS/WEEKS] following implementation.
How do you implement [PRODUCT] within an existing [TECH STACK]?
[PRODUCT] connects to [LIST SPECIFIC INTEGRATIONS: CRM name, ad platform,
analytics tool] via native API connectors. Setup takes [TIMEFRAME].
[ICP JOB TITLE] at a typical [COMPANY SIZE] company can complete initial
implementation without IT resource.
What does [PRODUCT] cost for a [COMPANY SIZE] company?
[PRODUCT] pricing for [COMPANY SIZE] companies starts at $[X]/month.
[PRICING STRUCTURE — be specific]. [COMPANY] offers [TRIAL/DEMO TYPE].
Frequently Asked Questions about [PRODUCT CATEGORY]
What is [PRODUCT CATEGORY]?
[DIRECT DEFINITION — mirror FAQ schema text]
How does [PRODUCT] work for [ICP JOB TITLE]?
[DIRECT ANSWER — mirror FAQ schema text]
What is the difference between [PRODUCT] and [MAIN COMPETITOR]?
[DIRECT ANSWER — mirror FAQ schema text]
How do [ICP JOB TITLE]s at [COMPANY SIZE] companies get started?
[PRODUCT] onboarding for [ICP] starts with [SPECIFIC FIRST STEP, e.g.,
a 30-minute technical review]. [COMPANY] connects to your [NAMED TOOL] in
[TIMEFRAME] and produces the first [DELIVERABLE] within [TIMEFRAME].
[CTA TEXT — specific, not generic: e.g., “See how [COMPANY]
SETUP & DEPLOYMENT NOTES
Fill all [BRACKETED] variables before publishing. Key GEO compliance checks: (1) Opening paragraph must contain ‘X is Y’ definition structure. (2) All H2s must be questions. (3) FAQ schema must match visible FAQ text exactly. (4) Minimum 3 named customer references, named integrations, and named competitor comparisons for entity richness.
C20 BRIDGE CONTENT TEMPLATE
B2B Case Study — GEO and Sales-Ready Format
Full case study structure optimised for AI citation (answer-first, entity-rich, quantified outcomes in first 30%) and sales enablement (objection-handling sections, specific ROI). Two formats: long-form web and one-page PDF summary.
═══════════════════════════════════════════════════
B2B CASE STUDY TEMPLATE
GEO-Optimised | Sales-Ready | BRIDGE-Compliant
Variables in [BRACKETS]
═══════════════════════════════════════════════════
── WEB VERSION (Long Form, GEO-Optimised) ──────────
TITLE (must contain result + ICP descriptor):
How [CUSTOMER COMPANY] [ACHIEVED SPECIFIC RESULT]
with [YOUR PRODUCT] — [QUANTIFIED OUTCOME]
Example: “How Meridian Analytics Reduced B2B CPL by 38%
Using AI-Powered Lead Scoring in 90 Days”
── HERO STATS (Answer-First — appears in first 30%) ──
KEY RESULTS:
[X]% [PRIMARY METRIC IMPROVEMENT] — [TIMEFRAME]
$[X] [PIPELINE/REVENUE/COST METRIC]
[X] [SECONDARY OPERATIONAL METRIC, e.g., “hours saved weekly”]
── OPENING PARAGRAPH (Citable, standalone answer) ──
[CUSTOMER COMPANY], a [COMPANY SIZE] [INDUSTRY] company,
used [YOUR PRODUCT] to [SPECIFIC RESULT]. Before implementing
[YOUR PRODUCT], [CUSTOMER] faced [SPECIFIC CHALLENGE] — a
common problem for [ICP DESCRIPTION] managing [CONTEXT].
Within [TIMEFRAME], [CUSTOMER] achieved [PRIMARY RESULT].
── ABOUT THE CUSTOMER (Entity-rich) ──
[CUSTOMER COMPANY] is a [DESCRIPTION]. Founded in [YEAR],
the company serves [CUSTOMER’S CUSTOMERS]. [CUSTOMER] uses
[NAMED TOOLS: CRM, ads platform, analytics] and employs a
marketing team of [SIZE]. [NAMED CONTACT: Name, Title] owns
[SPECIFIC RESPONSIBILITY — the thing your product solves].
── THE CHALLENGE ──
H2: What problem was [NAMED CONTACT] trying to solve?
Before [YOUR PRODUCT], [NAMED CONTACT] described the situation:
[DIRECT QUOTE from customer — specific, not generic]
The specific challenges [CUSTOMER] faced:
-
[CHALLENGE 1 — quantified: e.g., “6–8 hours weekly spent on manual reporting”]
-
[CHALLENGE 2 — quantified]
-
[CHALLENGE 3 — quantified]
[CUSTOMER] had tried [PREVIOUS APPROACH — name it specifically].
The limitation: [WHY IT DIDN’T WORK].
── THE SOLUTION ──
H2: Why did [CUSTOMER] choose [YOUR PRODUCT] over alternatives?
[CUSTOMER] evaluated [YOUR PRODUCT] alongside [NAMED ALTERNATIVES].
The deciding factors:
-
[SPECIFIC REASON 1 — tied to a named feature or capability]
-
[SPECIFIC REASON 2]
-
[SPECIFIC REASON 3 — ideally one that addresses a common objection]
Implementation: [NAMED CONTACT] completed initial setup in [TIMEFRAME]
using [YOUR PRODUCT’S] integration with [NAMED TOOL]. The first [DELIVERABLE]
was produced within [TIMEFRAME] of going live.
── THE RESULTS ──
H2: What results did [CUSTOMER] achieve with [YOUR PRODUCT]?
PRIMARY RESULT (quantified):
[METRIC] improved from [BEFORE] to [AFTER] — a [X]% improvement
in [TIMEFRAME]. This [TRANSLATES TO: business impact, e.g.,
“represents $X in recovered pipeline per quarter”].
OPERATIONAL RESULT:
[NAMED CONTACT] now spends [AFTER HOURS] vs [BEFORE HOURS] on [TASK] —
freeing [X hours/week] for [HIGHER VALUE ACTIVITY].
REVENUE IMPACT (if available):
[CUSTOMER] attributes $[X] in [REVENUE/PIPELINE] to [YOUR PRODUCT]-driven
improvements in [QUARTER/YEAR].
[DIRECT QUOTE from customer about results — specific, numbers if possible]
── OBJECTION-HANDLING SECTION ──
H2: What concerns did [CUSTOMER] have before implementing [YOUR PRODUCT]?
CONCERN 1: “[COMMON OBJECTION, e.g., ‘We didn’t have a data science team’]”
RESOLUTION: [How YOUR PRODUCT addressed this specifically — not generically]
CONCERN 2: “[INTEGRATION/TECH CONCERN]”
RESOLUTION: [Specific integration steps taken — name the tools connected]
── FORWARD LOOKING ──
H2: What is [CUSTOMER] planning next with [YOUR PRODUCT]?
[NAMED CONTACT] is now [NEXT PHASE — specific expansion].
[CUSTOMER] plans to [FORWARD STATEMENT — shows ongoing value and adoption].
── FINAL QUOTE ──
“[BEST QUOTE from customer — should contain a number or specific outcome]”
— [FULL NAME], [TITLE], [COMPANY]
═══════════════════════════════════════════════════
── ONE-PAGE PDF SUMMARY VERSION ──
(For sales team use in deal cycles)
═══════════════════════════════════════════════════
[CUSTOMER LOGO] + [YOUR LOGO]
HEADLINE: [CUSTOMER] + [YOUR PRODUCT] = [PRIMARY RESULT]
THE SITUATION (2 sentences):
[CUSTOMER], a [SIZE] [INDUSTRY] company, needed to [CHALLENGE].
[NAMED CONTACT] was losing [X hours/week or $X] to [SPECIFIC PROBLEM].
THE SOLUTION (2 sentences):
[CUSTOMER] implemented [YOUR PRODUCT] to [MECHANISM].
Integration with [NAMED TOOLS] was complete in [TIMEFRAME].
THE RESULTS:
[X]% [METRIC IMPROVEMENT]
$[X] [PIPELINE/REVENUE/SAVINGS]
[X hrs] saved weekly
THE QUOTE:
“[SHORT POWERFUL QUOTE — max 25 words]”
— [NAME, TITLE, COMPANY]
FOR DEALS IN [INDUSTRY/COMPANY SIZE]:
Use this case study to address: [OBJECTION 1] / [OBJECTION 2] / [OBJECTION 3]
Contact [SALES REP NAME] with questions about this customer’s story.
SETUP & DEPLOYMENT NOTES
Run this template past the customer before publishing. The objection-handling section is the highest-value sales tool in the case study — brief the customer explicitly on the 2-3 objections you most need them to address. For GEO optimisation: the hero stats and opening paragraph must appear above the fold. Schema: use Article schema with the headline as the headline property and the opening paragraph as the description.
C21 BRIDGE CONTENT TEMPLATE
BRIDGE Prompt — LinkedIn Thought Leadership Post (ICP-Targeted)
Full BRIDGE-structured prompt that generates a LinkedIn post with a specific insight hook, data-backed argument, and soft CTA. Produces three angle variants for A/B testing.
BACKGROUND:
Company: [COMPANY NAME] | Author: [NAME, TITLE]
ICP on LinkedIn: [Job title, industry, company size, seniority level]
Content goal: [Awareness / Lead gen / Nurture existing followers]
Our core differentiating perspective: [One sentence — what we believe that most
people in our space get wrong or haven’t said publicly yet]
Business goal this campaign: [e.g., “drive demo requests from VP Marketing
at 100-500 person SaaS companies”]
Tone: [Direct analyst / Warm practitioner / Challenging conventional wisdom]
Link in comments or CTA: [Yes/No — what is it?]
REQUEST:
Write 3 variants of a LinkedIn thought leadership post from [AUTHOR NAME]‘s POV.
Each variant should use a different hook format (formats below) but deliver the
same core insight. The post should feel like [AUTHOR] is sharing a genuine
professional observation — not promoting a product.
HOOK FORMAT OPTIONS:
VARIANT A — The Contrarian Observation:
“Most [ICP JOB TITLES] [COMMON BELIEF].
Here’s why that’s wrong — and what the data shows instead.”
VARIANT B — The Specific Failure Pattern:
“In [TIMEFRAME], I’ve seen [N] [ICP] teams make the same mistake.
Here’s what it looks like — and the fix.”
VARIANT C — The Counterintuitive Insight:
“[SURPRISING STATEMENT that challenges conventional wisdom in our space].
[Supporting evidence or example]”
POST REQUIREMENTS:
-
Length: 150–250 words
-
No more than 2-3 line breaks (LinkedIn rewards scannability, not walls of text)
-
At least ONE specific number or named example in the body
-
The core insight must be genuinely useful even if the reader never visits our website
-
CTA if included: soft — curiosity-based, not promotional. e.g., “I wrote about
the exact framework we used — drop a comment if you’d like a link”
-
No hashtag farms (max 3 relevant hashtags if used at all)
-
Ends with a question if appropriate (drives comments which boost reach)
INPUT:
Core insight to communicate: [PASTE THE SPECIFIC INSIGHT OR DATA POINT]
Any personal anecdote or client example to include: [OPTIONAL — anonymised]
Specific statistic or research to reference: [If available]
DELIVERABLE:
Three complete post drafts, labelled VARIANT A / B / C.
After each: one sentence explaining the strategic angle and which ICP segment
it will resonate with most strongly.
GUARDRAILS:
-
Never mention [COMPANY NAME] in the body of the post — mention only in comments
if relevant
-
Never write “Excited to share” or “I’m thrilled” — banned phrases
-
No motivational language: “hustle”, “crushing it”, “game-changer”
-
The post must work as standalone value — not as a teaser requiring a click
-
If the insight is not genuinely differentiating, say so and ask for a sharper input
SETUP & DEPLOYMENT NOTES
The ‘core differentiating perspective’ field is the most important input. A generic insight produces a generic post. The test for a strong input: if you deleted the company name, would an industry insider immediately know who wrote it? If yes, it’s specific enough. Run VARIANT A for first post, test B and C in subsequent weeks. Measure: comments (engagement depth) not just likes (passive engagement).
C22 BRIDGE CONTENT TEMPLATE
Email Nurture Sequence — 5-Email Intent-Based Series
Full 5-email sequence triggered when a contact moves from Low Intent to Medium Intent in the scoring model. Each email mapped to a specific buying stage and objection. BRIDGE-structured for personalisation at scale.
═══════════════════════════════════════════════════
5-EMAIL INTENT NURTURE SEQUENCE
Trigger: Lead score crosses Medium Intent threshold (40+)
ICP: [JOB TITLE] at [COMPANY SIZE] [INDUSTRY] companies
Goal: Progress contact from Medium → High Intent within 21 days
═══════════════════════════════════════════════════
── EMAIL 1 — Day 0 (Trigger: Score crosses 40) ──
Subject: [SPECIFIC PAIN POINT] — how [SIMILAR COMPANY TYPE] solved it
Preview: The approach that cut [METRIC] by [X]%
Hi [FIRST NAME],
[COMPANY] works with [JOB TITLE]s at [COMPANY TYPE] companies,
and one problem comes up constantly: [SPECIFIC PAIN POINT IN THEIR WORDS,
e.g., “spending 6+ hours weekly on reporting that’s stale by the time it reaches leadership”].
[NAMED CUSTOMER], a [SIZE] [INDUSTRY] company, had the same problem.
Here’s what changed: [SPECIFIC MECHANISM — one sentence].
Result: [QUANTIFIED OUTCOME in [TIMEFRAME]].
I thought it might be relevant given [PERSONALISATION TOKEN — e.g.,
“your recent content on [TOPIC]” or “the growth [COMPANY] has had in [PERIOD]”].
Worth a 3-minute read? [LINK TO CASE STUDY — specific, not generic]
[SIGNATURE]
[COMPANY] | [TITLE]
P.S. [OPTIONAL: One additional relevant stat or data point]
─────────────────────────────────────────────────
── EMAIL 2 — Day 4 (Educational — build credibility) ──
Subject: The [FRAMEWORK NAME] that [SPECIFIC OUTCOME]
Preview: Used by [JOB TITLE]s at [COMPANY TYPE] companies
Hi [FIRST NAME],
[DIRECT INSIGHT — lead with the value, not the preamble]
Most [JOB TITLE]s approach [PROBLEM] by [COMMON BUT SUBOPTIMAL METHOD].
The limitation: [WHY IT DOESN’T SCALE].
The [ICP]s getting better results are using a different approach:
[FRAMEWORK NAME — give it a specific name]:
Step 1: [ACTION — specific]
Step 2: [ACTION — specific]
Step 3: [ACTION — specific]
[NAMED EXAMPLE]: [Company] implemented this in [TIMEFRAME] and saw [RESULT].
I wrote this up in more detail here: [LINK — title should reflect the exact value]
[SIGNATURE]
─────────────────────────────────────────────────
── EMAIL 3 — Day 9 (Objection pre-emption) ──
Subject: “We don’t have the bandwidth to implement right now”
Preview: What [NAMED CUSTOMER] said — and what happened next
Hi [FIRST NAME],
The most common thing I hear from [JOB TITLE]s before they start using [PRODUCT]:
“[COMMON OBJECTION IN THEIR EXACT WORDS — not corporate paraphrase]”
[NAMED CUSTOMER’S CONTACT NAME], [TITLE] at [COMPANY], said exactly this.
Here’s what their implementation actually looked like:
[SPECIFIC TIMELINE: Week 1 / Week 2 / Week 3 — what happened in each]
[WHAT CONCERNED THEM] turned out to [RESOLUTION — specific, not vague].
I’m not going to pretend [PRODUCT] is zero effort.
But the question isn’t whether it takes bandwidth.
It’s whether the [X HOURS/WEEK SAVED] after week 3 is worth the
[SPECIFIC SETUP EFFORT].
For [NAMED CONTACT], the answer was yes. Here’s their 90-day recap: [LINK]
[SIGNATURE]
─────────────────────────────────────────────────
── EMAIL 4 — Day 15 (Comparison / consideration stage) ──
Subject: [YOUR PRODUCT] vs [TOP COMPETITOR] — honest comparison
Preview: The 3 questions to ask before deciding
Hi [FIRST NAME],
If you’re evaluating [PRODUCT CATEGORY], you’re probably also looking at [COMPETITOR].
Here’s an honest breakdown:
[YOUR PRODUCT] is stronger when:
-
[SPECIFIC USE CASE 1 — be precise]
-
[SPECIFIC USE CASE 2]
[COMPETITOR] is stronger when:
-
[SPECIFIC USE CASE WHERE COMPETITOR WINS — be honest]
-
[ANOTHER HONEST CONCESSION]
The three questions that determine which is right for [JOB TITLE]s at
[COMPANY SIZE] companies:
-
[DECISION QUESTION 1 — with your answer: “If X, then us. If Y, then them.”]
-
[DECISION QUESTION 2]
-
[DECISION QUESTION 3]
We published the full comparison here: [LINK]
No form. No lead-gate. Actual comparison.
[SIGNATURE]
─────────────────────────────────────────────────
── EMAIL 5 — Day 21 (Soft CTA — decision stage) ──
Subject: 20 minutes — what [SPECIFIC OUTCOME] looks like for [COMPANY NAME]
Preview: No demo pitch. Just the answer to whether it makes sense.
Hi [FIRST NAME],
Five emails in — I’ll be direct.
[YOUR PRODUCT] is not right for every [JOB TITLE].
It works best when: [SPECIFIC QUALIFYING CRITERIA — 2-3 conditions].
If [COMPANY NAME] fits that profile, a 20-minute call gets you:
-
Whether [SPECIFIC CHALLENGE] is solvable with our approach in your stack
-
What [SIMILAR COMPANY TYPE] achieved in their first 90 days
-
A realistic timeline for your specific setup
If it doesn’t fit, I’ll tell you that too and point you somewhere better.
[CTA BUTTON/LINK: Book 20 minutes — [SPECIFIC CALENDAR LINK]]
Either way — [FINAL VALUE STATEMENT tied to their likely main pain point].
[SIGNATURE]
─────────────────────────────────────────────────
SEQUENCE AUTOMATION RULES:
-
Email 1: Send immediately on trigger
-
Email 2: Send day 4 IF Email 1 opened OR link clicked. Skip if not opened.
-
Email 3: Send day 9 unconditionally
-
Email 4: Send day 15 IF any prior email opened
-
Email 5: Send day 21 IF score still Medium (not yet Hot — Hot goes to sales)
-
STOP SEQUENCE if: meeting booked, demo requested, or lead score crosses 80
SETUP & DEPLOYMENT NOTES
Replace every [BRACKETED] variable before activating. The objection in Email 3 should be the single most common reason deals stall in your pipeline — pull this from CRM loss reason data or sales call transcripts, not assumptions. The comparison email (Email 4) must be genuinely honest — buyers are sophisticated enough to know when a comparison is rigged, and inauthenticity destroys the credibility built in emails 1-3.
C23 BRIDGE CONTENT TEMPLATE
BRIDGE Prompt — AI-Powered Pipeline Contribution Report
Full BRIDGE prompt that ingests CRM data and outputs a pipeline contribution report connecting marketing activities to revenue outcomes. Designed for monthly VP/CMO presentation.
BACKGROUND:
Company: [COMPANY NAME] | Reporting month: [MONTH YEAR]
Report audience: [VP of Marketing / CMO / Revenue leadership]
Marketing channels tracked: [List: Paid Search, LinkedIn, Email, Content, Events]
CRM platform: [HubSpot / Salesforce / Other]
Definition of Marketing Sourced: [e.g., “first touch was a marketing channel before AE contact”]
Definition of Marketing Influenced: [e.g., “contact engaged with marketing content
at any point in the deal cycle”]
Average sales cycle: [X days] | Average deal value: $[X]
Closed-won rate from SQL: [X]%
Revenue target this quarter: $[X] | QTD revenue: $[X]
REQUEST:
Analyse the CRM and marketing performance data below. Build a pipeline contribution
report that connects marketing activities to revenue outcomes across three horizons:
-
CLOSED REVENUE: Marketing’s direct contribution to closed-won deals this month
-
PIPELINE CREATED: New opportunities created this month attributable to marketing
-
PIPELINE INFLUENCED: Deals currently in pipeline where marketing engagement
was a material factor in progression
For each horizon, calculate:
a) Volume (# of deals)
b) Value ($)
c) Attribution confidence (High = clear first-touch / Medium = multi-touch /
Low = influenced but not sourced)
d) The specific marketing activity that generated or influenced the deal
INPUT:
DATASET 1 — CRM Closed-Won this month:
[Deal Name | Value | Close Date | Original Source | Marketing Touchpoints |
Days in Pipeline | Channel Attribution]
DATASET 2 — New Opportunities Created this month:
[Deal Name | Value | Create Date | Source | First Marketing Touch |
Contact’s Content Engagement History]
DATASET 3 — Current Pipeline (all open deals):
[Deal Name | Value | Stage | Days in Stage | Last Marketing Engagement |
Marketing Touchpoints Count | Channel]
DATASET 4 — Marketing Activity Summary:
[Channel | Spend | Conversions/Leads | MQLs | SQLs | Cost Per MQL | Cost Per SQL]
DELIVERABLE:
FORMAT: Board-ready. Prose sections with supporting tables.
Maximum 1.5 pages reading time. No marketing jargon.
[1] MARKETING REVENUE CONTRIBUTION (this month)
Closed-won deals sourced: [N] deals = $[X] (X% of total revenue closed this month)
Closed-won deals influenced: [N] deals = $[X]
Lead sentence: “Marketing directly sourced $[X] in closed revenue this month,
representing [X]% of total closed-won.”
[2] PIPELINE CREATED
New opportunities from marketing this month: $[X] pipeline value
Expected close value (apply SQL→close rate): $[X]
Best channel by pipeline quality: [CHANNEL] — [WHY, specific data]
[3] PIPELINE EFFICIENCY
CPL by channel: [TABLE — Channel | CPL | SQL Rate | Pipeline $ per $ Spent]
Cost per SQL: [CHANNEL BREAKDOWN]
Revenue generated per $1 of marketing spend: [CALCULATE]
[4] FORWARD PROJECTION
Based on current pipeline and average sales cycle, marketing-sourced revenue
expected to close in next 90 days: $[X]
Assumption: [STATE CLEARLY]
[5] ONE RISK FLAG (if applicable)
[Specific declining metric + specific remediation already underway]
GUARDRAILS:
-
Never claim revenue credit without clear attribution data
-
When attribution is ambiguous, label it “influenced” not “sourced”
-
All projections must state their assumptions explicitly
-
Do not report on vanity metrics (impressions, social followers) unless directly
connected to pipeline or revenue data
-
If the data shows marketing is underperforming vs target, say so directly
with the remediation plan — do not bury it
SETUP & DEPLOYMENT NOTES
This report is most impactful when it leads with the closed-revenue number, not the pipeline number. Leadership trusts closed revenue. Pipeline projections require context. The critical data dependency: CRM must have source tracking and marketing touchpoints logged on every deal. If your CRM is missing this data, this report is the business case to implement UTM tracking and multi-touch attribution before next month.
C24 BRIDGE CONTENT TEMPLATE
GEO Comparison Page — [Your Product] vs [Competitor]
Full comparison page template built for AI citation. Answer-first structure, honest balanced format, entity-rich, FAQ schema. Comparison pages are among the highest-cited content types in B2B AI search.
[YOUR PRODUCT] vs [COMPETITOR]: Which Is Right for [ICP DESCRIPTION]?
[YOUR PRODUCT] and [COMPETITOR] are both [CATEGORY DEFINITION] platforms,
but they serve different use cases. [YOUR PRODUCT] is built for [SPECIFIC USE CASE,
ICP, and COMPANY TYPE]. [COMPETITOR] is better suited for [DIFFERENT USE CASE
— be honest]. For [ICP JOB TITLE] at [COMPANY SIZE] [INDUSTRY] companies,
the decision comes down to [1-2 SPECIFIC CRITERIA].
Quick Comparison: [YOUR PRODUCT] vs [COMPETITOR]
| Feature/Capability | [YOUR PRODUCT] | [COMPETITOR] |
|---|---|---|
| [CAPABILITY 1] | [YOUR STATUS — specific] | [THEIR STATUS] |
| [CAPABILITY 2] | [YOUR STATUS] | [THEIR STATUS] |
| [CAPABILITY 3] | [YOUR STATUS] | [THEIR STATUS] |
| Pricing (entry) | $[X]/month | $[X]/month |
| [INTEGRATION 1] | [YES/NO + detail] | [YES/NO + detail] |
| Best for | [YOUR ICP — specific] | [THEIR ICP — honest] |
What is the key difference between [YOUR PRODUCT] and [COMPETITOR]?
The fundamental difference between [YOUR PRODUCT] and [COMPETITOR] is [SPECIFIC,
EVIDENCE-BASED DIFFERENTIATOR — not marketing language]. [YOUR PRODUCT] approaches
[PROBLEM] by [YOUR MECHANISM], while [COMPETITOR] uses [THEIR MECHANISM].
For [ICP], this means [PRACTICAL IMPLICATION in their workflow].
When should you choose [YOUR PRODUCT] over [COMPETITOR]?
Choose [YOUR PRODUCT] when:
- [SPECIFIC CONDITION 1 — named feature, named use case, named company type]
- [SPECIFIC CONDITION 2]
- [SPECIFIC CONDITION 3]
For example, [NAMED CUSTOMER TYPE] using [NAMED INTEGRATION] typically chooses
[YOUR PRODUCT] because [SPECIFIC REASON tied to their workflow].
When is [COMPETITOR] the better choice?
[COMPETITOR] is a stronger choice when:
- [HONEST CONDITION WHERE COMPETITOR WINS — e.g., "you need enterprise SAML SSO"]
- [HONEST CONDITION 2 — e.g., "your primary language is not English"]
- [HONEST CONDITION 3]
If [SPECIFIC SCENARIO WHERE COMPETITOR IS BETTER], [COMPETITOR] is the more
appropriate platform. We’d rather you choose the right tool than the wrong one.
How do [YOUR PRODUCT] and [COMPETITOR] compare on pricing?
[YOUR PRODUCT] pricing: [SPECIFIC TIER BREAKDOWN — entry / mid / enterprise].
[COMPETITOR] pricing: [THEIR KNOWN PRICING — source it if public].
For [COMPANY SIZE] companies, [COST COMPARISON — be specific and accurate].
Key difference: [PRICING MODEL DIFFERENCE, e.g., “per-seat vs flat-rate”].
What do users say about [YOUR PRODUCT] vs [COMPETITOR]?
On [G2 / Capterra / TrustRadius], [YOUR PRODUCT] is rated [X]/5 across [N] reviews.
[COMPETITOR] is rated [X]/5 across [N] reviews.
[YOUR PRODUCT] scores higher on: [SPECIFIC ATTRIBUTES from review platform].
[COMPETITOR] scores higher on: [HONEST ATTRIBUTES — cite the review platform].
Frequently Asked Questions
What is the difference between [YOUR PRODUCT] and [COMPETITOR]?
[Mirror FAQ schema answer]
Is [YOUR PRODUCT] better than [COMPETITOR] for [ICP]?
[Mirror FAQ schema answer]
How much does [YOUR PRODUCT] cost compared to [COMPETITOR]?
[Mirror FAQ schema answer]
SETUP & DEPLOYMENT NOTES
The ‘When is Competitor the better choice’ section is the single most important GEO element on this page. AI search engines weight balanced content significantly higher for comparison queries because they are trained to detect bias. An honest concession on 2-3 points dramatically increases citation probability. Source all competitor pricing from their public pricing pages and date-stamp the last verification.
C25 BRIDGE CONTENT TEMPLATE
Master BRIDGE Context Document — Full Template
The complete Master Context Document template. Fill once, paste at the top of every high-stakes prompt. This is the single highest-leverage time investment in the BRIDGE system — it transforms generic AI outputs into company-specific intelligence.
═══════════════════════════════════════════════════════════
MASTER BRIDGE CONTEXT DOCUMENT
[COMPANY NAME] — Marketing Operations AI OS
Version: [X.X] | Last Updated: [DATE]
Owner: [NAME, TITLE]
═══════════════════════════════════════════════════════════
USAGE INSTRUCTION: Paste this entire document at the top
of every high-stakes AI prompt as the BACKGROUND block.
Update quarterly or when any core metric changes by >20%.
═══════════════════════════════════════════════════════════
── COMPANY IDENTITY ──────────────────────────────────────
Company Name: [COMPANY NAME]
Founded: [YEAR] | HQ: [CITY, COUNTRY]
Stage: [Seed / Series A / B / C / Growth / Enterprise]
Business Model: [SaaS / Services / Marketplace / Other]
Annual Revenue Range: [e.g., $5M–$20M ARR]
Headcount: [Total] | Marketing team: [N people]
Product/Service:
[ONE PARAGRAPH — what you sell, to whom, and how it works.
Be specific. Include the mechanism, not just the category.
Example: “[PRODUCT] is a B2B lead intelligence platform that
de-anonymises dark-funnel web traffic for revenue teams at
50–500 person SaaS companies. It integrates with HubSpot and
Salesforce to surface account-level intent signals before
buyers raise their hand.”]
Primary URL: [yourcompany.com]
Primary CTA: [e.g., “Request a demo at /demo”]
── IDEAL CUSTOMER PROFILE (ICP) ───────────────────────────
Primary ICP:
Company Size: [e.g., 50–500 employees]
Revenue Range: [e.g., $5M–$100M ARR]
Industry: [Primary industry] + [Secondary industries]
Geography: [Countries/regions]
Tech Stack Indicators: [e.g., “uses HubSpot CRM, Google Ads,
Slack — NOT Salesforce enterprise or Marketo"]
Funding Stage: [e.g., “Series A or B preferred”]
Growth Signal: [e.g., “headcount growing 20%+ YoY”]
Buying Committee:
Economic Buyer: [Title, seniority — e.g., “VP Marketing or CMO”]
Technical Evaluator: [Title — e.g., “Marketing Ops Manager”]
Champion: [Title — e.g., “Demand Generation Manager”]
Blocker: [Who kills deals — e.g., “IT/Security team for data privacy”]
Decision Criteria (in priority order):
-
[CRITERION 1 — e.g., “Integration with existing CRM”]
-
[CRITERION 2 — e.g., “Time to first value <30 days”]
-
[CRITERION 3]
-
[CRITERION 4]
Common Objections:
“[OBJECTION 1 verbatim]” — Response: [YOUR RESPONSE]
“[OBJECTION 2 verbatim]” — Response: [YOUR RESPONSE]
“[OBJECTION 3 verbatim]” — Response: [YOUR RESPONSE]
── PERFORMANCE BENCHMARKS ─────────────────────────────────
CURRENT PERFORMANCE (last 90 days):
Monthly Marketing Budget: $[X]
— Google Ads: $[X] | LinkedIn: $[X] | Other: $[X]
Google Ads:
Target CPA: $[X] | Current CPA: $[X]
Target ROAS: [X] | Current ROAS: [X]
Target IS (branded): [X]% | Current: [X]%
Target IS (non-branded): [X]% | Current: [X]%
8-week baseline CPA (same-day): $[X]
8-week baseline ROAS: [X]
Pipeline Metrics:
Monthly demo target: [N] | Actual (last 90d avg): [N]
MQL → SQL rate: [X]%
SQL → Opportunity rate: [X]%
Opportunity → Closed-Won rate: [X]%
Average Sales Cycle: [X days]
Average Deal Value: $[X]
LTV: $[X]
Content / GEO:
Current AI citation rate (top 20 queries): [X]%
Branded search volume (monthly): [X]
Top cited pages: [URL 1], [URL 2], [URL 3]
── COMPETITIVE LANDSCAPE ─────────────────────────────────
Primary Competitors:
[COMPETITOR 1]:
Strengths vs us: [SPECIFIC — where they win]
Weaknesses vs us: [SPECIFIC — where we win]
Typical deal scenario where they beat us: [CONTEXT]
Their pricing: [If known]
[COMPETITOR 2]:
Strengths vs us: [SPECIFIC]
Weaknesses vs us: [SPECIFIC]
[COMPETITOR 3]:
Strengths vs us: [SPECIFIC]
Weaknesses vs us: [SPECIFIC]
Our primary differentiator vs all competitors:
[ONE SENTENCE — specific, evidenced, not marketing language]
Naming rules: Never mention competitor names in customer-facing
output unless the context is explicitly a comparison page or
a sales battle card.
── BRAND VOICE & TONE ────────────────────────────────────
Tone: [e.g., Direct analyst. Fact plus interpretation. Not
promotional, not academic. The voice of a senior practitioner
who’s seen what works and isn’t afraid to say what doesn’t.]
3 Defining Adjectives: [e.g., Precise | Credible | Practical]
Explicitly Forbidden Phrases:
“Leverage” | “Holistic” | “Synergies” | “Game-changer”
“Best-in-class” | “Excited to share” | “Innovative”
“World-class” | “Robust” | “Comprehensive solution”
Reading Level Target: Grade 14–16 (professional, not academic)
Writing Style:
-
Active voice preferred
-
Specific over general (numbers, named examples)
-
Short sentences for key insights, longer for context
-
Questions welcome in H2s and email subjects
-
First person (I/we) for thought leadership content
── DATA & COMPLIANCE RULES ───────────────────────────────
Data Privacy:
[GDPR compliant / CCPA compliant / SOC 2 Type II — list applicable]
PII Rule: Never include personally identifiable information
in AI prompts or outputs shared beyond the marketing team
GDPR regions: [List EU countries you operate in]
Budget Approval Thresholds (AI cannot override):
Spend increases >15% require: [NAME]‘s approval
New channel spend >$[X]/month requires: CMO sign-off
Campaign pause affecting >20% of budget: Notify [NAME] first
Competitive Naming Policy:
Customer-facing content: No competitor names unless
explicitly a comparison page
Internal briefs: Competitor names permitted with context
PR and external publications: Legal review required
Reporting Standards:
Metric rounding: 2 decimal places for $, whole numbers for %
Attribution model: [First-touch / Last-touch / Linear /
Data-driven — specify]
Fiscal year: [Calendar year / other — affects QTD calculations]
── QUARTERLY BUSINESS GOAL ──────────────────────────────
Current Quarter: [Q, YEAR]
Primary Goal: [ONE SENTENCE — specific metric + target + deadline]
Example: “Generate 90 SQLs at CPL ≤$380 by March 31, 2026”
QTD Progress: [X SQLs at $X CPL as of [DATE]]
On Track: [Yes / No — if No, current gap and remediation plan]
Secondary Goal: [METRIC + TARGET]
Tertiary Goal: [METRIC + TARGET]
═══════════════════════════════════════════════════════════
MAINTENANCE LOG
Q1 [YEAR]: [What changed — version notes]
Q2 [YEAR]: [What changed]
═══════════════════════════════════════════════════════════
SETUP & DEPLOYMENT NOTES
Schedule a 60-minute session with your marketing manager and one sales rep to fill this document together. The sales perspective on objections (section 3) and competitive scenarios is irreplaceable — it cannot be filled in solo by marketing. Save as a pinned document in Notion, a saved ChatGPT system prompt (Pro), or a Claude Project instruction. Every team member who uses AI for marketing tasks gets a copy. Update the benchmarks block every quarter.
IMPLEMENTATION PRIORITY GUIDE
Deploy in this sequence for fastest ROI
WEEK 1 C25 — Build Master Context Document. A9 — Daily data sync. A4 — Budget pacing watchdog.
WEEK 2 B10 — First BRIDGE campaign brief. A1 — Anomaly detector. A2 — Weekly auto-brief.
WEEK 3 C19 — Audit top 5 landing pages. B14 — Quality Score audit. A5 — Demo request intelligence.
WEEK 4 B13 — Negative keyword cleanup. A3 — Lead score threshold alerts. C22 — Intent nurture sequence.
MONTH 2 A6 — GEO citation monitor. A7 — Content GEO scoring. C20/C24 — Case study + comparison pages.
MONTH 3 B17 — Board-ready monthly report. C23 — Pipeline contribution report. A8 — Competitive monitoring.
Full implementation package
Get the complete guide with production-ready scripts, configs, and deployment templates.
$17 — Purchases coming soon