Internal Resource
Campaign Playbook · v1.0

The AEO/SEO/Security
Wedge Campaign

A fully automated HubSpot + Claude + n8n pipeline that scans a prospect's website, generates a graded report card, and converts findings into a 15-minute consulting call — your foot in the door for every service we offer.

3 Scored categories
15m Consulting call hook
C–F Trigger threshold
100% Automated outreach
01

Automation flow

Trigger
HubSpot contact / lead
New contact created or existing contact tagged with "scan-needed" in HubSpot CRM
n8n workflow trigger
HubSpot webhook fires on contact.creation or property change event
Scan
Claude scans company website
Fetches the URL from HubSpot contact record · Passes to Claude API with audit prompt · Analyzes AEO readiness, SEO signals, security headers
Returns three scored dimensions
AEO score
Schema markup, AI-indexable content, structured data, FAQ format
SEO score
Meta tags, page speed signals, backlink structure, headings
Security score
HTTPS, security headers, mixed content, compliance exposure
Grade
Claude generates report card
Letter grades A–F per category · Overall composite score · Plain-English narrative of findings · Saved to HubSpot contact as properties
Route
Any C, D, or F → YES
Trigger outreach sequence
Enroll in HubSpot email sequence · Claude writes personalized email
All A/B → NO
Tag & nurture
Log as "healthy site" · Enroll in maintenance nurture sequence
Outreach
Claude writes personalized email
Report card header teaser · Industry-specific narrative of risk · Single CTA: book free 15-min call
Sent via HubSpot sequences
HubSpot sends & tracks
Open/click tracking · Sequence follow-ups
Vimeo video link
Why AEO > SEO · Security as compliance risk
Auto-scheduling link
Calendly / HubSpot Meetings embedded CTA
Convert
15-minute free consulting call
Share full report card · Demonstrate findings live · Qualify for services · Build trust before asking for anything
Upsell
AEO optimization
Schema implementation · AI-indexable content rewrite · Answer engine positioning
SEO remediation
Technical fixes · On-page optimization · Performance improvements
Security hardening
Header fixes · SSL/TLS · Compliance remediation · Ongoing monitoring
HubSpot deal created
Pipeline stage updated · Revenue attributed to campaign

02

Grading scale

A
Excellent. Best practice implemented. No action needed.
B
Good. Minor gaps. Nurture, don't push.
C
Average. Noticeable gaps. Triggers outreach.
D
Below standard. Meaningful risk. Priority outreach.
F
Critical failure. Compliance exposure. Urgent outreach.
Grades are computed per category by Claude based on weighted criteria. A composite overall score is also generated. Any single category scoring C or below triggers the outreach sequence — you don't need to fail everything to qualify as a prospect.

03

Claude audit prompt template

System prompt — Claude API
### ROLE
You are a senior digital strategy analyst specializing in Answer Engine 
Optimization (AEO), Search Engine Optimization (SEO), and web security 
auditing. You produce clear, actionable report cards for business websites.

### TASK
Audit the website at: {{website_url}}
Company name: {{company_name}}
Industry: {{industry}}

### SCORING CRITERIA

AEO (Answer Engine Optimization) — weight: 40%
- Schema.org structured data present and correct
- FAQ and Q&A formatted content blocks
- Clear, direct answers to common questions (AI-indexable)
- Featured snippet optimization signals
- Entity markup and knowledge graph signals

SEO (Search Engine Optimization) — weight: 30%
- Title tags, meta descriptions, H1–H3 hierarchy
- Internal linking structure
- Image alt text and file naming
- Page speed signals (detectable via headers/markup)
- Mobile-responsive viewport meta tag
- Canonical tags and sitemap signals

Security — weight: 30%
- HTTPS enforced (no HTTP fallback)
- Security headers: CSP, X-Frame-Options, X-XSS-Protection, HSTS
- Mixed content warnings
- Cookie security flags
- Privacy policy and compliance signals (GDPR, CCPA)

### OUTPUT FORMAT
Return ONLY valid JSON. No prose. No markdown. Structure:

{
  "company": "{{company_name}}",
  "url": "{{website_url}}",
  "scan_date": "ISO-8601 date",
  "grades": {
    "aeo": { "letter": "A|B|C|D|F", "score": 0-100, "summary": "2-3 sentences" },
    "seo": { "letter": "A|B|C|D|F", "score": 0-100, "summary": "2-3 sentences" },
    "security": { "letter": "A|B|C|D|F", "score": 0-100, "summary": "2-3 sentences" }
  },
  "composite": { "letter": "A|B|C|D|F", "score": 0-100 },
  "top_issues": ["Issue 1", "Issue 2", "Issue 3"],
  "email_narrative": "3-4 sentence plain-English paragraph suitable for a cold 
    outreach email. Reference the company by name and 1-2 specific findings. 
    Do not mention letter grades — describe the risk and opportunity instead.",
  "trigger_outreach": true|false
}
This prompt is passed to the Claude API (claude-sonnet-4-20250514) via n8n's HTTP Request node. The JSON response is parsed by n8n and the fields mapped to HubSpot contact properties and the email template.

04

n8n workflow JSON

Trigger node
HubSpot Trigger — contact.creation
Claude model
claude-sonnet-4-20250514
Key nodes (in order)
HubSpot Trigger → HTTP Request (Claude) → Parse JSON → IF Grade Check → HubSpot Update + Email Sequence
Credentials needed
HubSpot API key · Anthropic API key · Calendly API (optional)
n8n-workflow.json — import directly into n8n
{
  "name": "Securafy AEO/SEO/Security Wedge Campaign",
  "nodes": [
    {
      "id": "1",
      "name": "HubSpot Trigger",
      "type": "n8n-nodes-base.hubspotTrigger",
      "parameters": {
        "eventsUi": {
          "eventValues": [{ "name": "contact.creation" }]
        }
      },
      "position": [240, 300]
    },
    {
      "id": "2",
      "name": "Fetch HubSpot Contact Details",
      "type": "n8n-nodes-base.hubspot",
      "parameters": {
        "resource": "contact",
        "operation": "get",
        "contactId": "={{ $json.objectId }}",
        "additionalFields": {
          "properties": ["website", "company", "industry", "email"]
        }
      },
      "position": [460, 300]
    },
    {
      "id": "3",
      "name": "Claude Website Audit",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "https://api.anthropic.com/v1/messages",
        "headers": {
          "x-api-key": "={{ $credentials.anthropicApiKey }}",
          "anthropic-version": "2023-06-01",
          "content-type": "application/json"
        },
        "body": {
          "model": "claude-sonnet-4-20250514",
          "max_tokens": 1500,
          "tools": [{
            "type": "web_search_20250305",
            "name": "web_search"
          }],
          "system": "[PASTE FULL SYSTEM PROMPT FROM SECTION 03 HERE]",
          "messages": [{
            "role": "user",
            "content": "={{ 'Audit this website: ' + $json.properties.website + '. Company: ' + $json.properties.company + '. Industry: ' + $json.properties.industry }}"
          }]
        }
      },
      "position": [680, 300]
    },
    {
      "id": "4",
      "name": "Parse Claude Response",
      "type": "n8n-nodes-base.code",
      "parameters": {
        "jsCode": "const content = $input.first().json.content;\nconst text = content.find(b => b.type === 'text')?.text || '{}';\nconst audit = JSON.parse(text);\nreturn [{ json: audit }];"
      },
      "position": [900, 300]
    },
    {
      "id": "5",
      "name": "Grade Check — C/D/F Trigger",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "boolean": [{
            "value1": "={{ $json.trigger_outreach }}",
            "value2": true
          }]
        }
      },
      "position": [1120, 300]
    },
    {
      "id": "6",
      "name": "Update HubSpot — Grades & Properties",
      "type": "n8n-nodes-base.hubspot",
      "parameters": {
        "resource": "contact",
        "operation": "update",
        "contactId": "={{ $('Fetch HubSpot Contact Details').item.json.id }}",
        "additionalFields": {
          "aeo_grade": "={{ $json.grades.aeo.letter }}",
          "seo_grade": "={{ $json.grades.seo.letter }}",
          "security_grade": "={{ $json.grades.security.letter }}",
          "composite_grade": "={{ $json.composite.letter }}",
          "audit_top_issues": "={{ $json.top_issues.join(', ') }}",
          "website_audit_date": "={{ $json.scan_date }}",
          "hs_lead_status": "IN_PROGRESS"
        }
      },
      "position": [1340, 200]
    },
    {
      "id": "7",
      "name": "Generate Outreach Email",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "https://api.anthropic.com/v1/messages",
        "body": {
          "model": "claude-sonnet-4-20250514",
          "max_tokens": 800,
          "system": "Write a concise, warm cold outreach email. No subject line wrapper. Return only the email body text.",
          "messages": [{
            "role": "user",
            "content": "={{ 'Write an outreach email for ' + $('Fetch HubSpot Contact Details').item.json.properties.company + '. Use this narrative: ' + $json.email_narrative + '. Top issues: ' + $json.top_issues.join(', ') + '. CTA: book a free 15-min call at [SCHEDULING_LINK]. Sign off from the Securafy team.' }}"
          }]
        }
      },
      "position": [1560, 200]
    },
    {
      "id": "8",
      "name": "Enroll in HubSpot Sequence",
      "type": "n8n-nodes-base.hubspot",
      "parameters": {
        "resource": "contact",
        "operation": "update",
        "contactId": "={{ $('Fetch HubSpot Contact Details').item.json.id }}",
        "additionalFields": {
          "hs_sequences_enrolled_count": 1,
          "campaign_outreach_email": "={{ $json.content[0].text }}",
          "notes_last_updated": "Automated AEO/SEO/Security audit completed. Outreach email queued."
        }
      },
      "position": [1780, 200]
    },
    {
      "id": "9",
      "name": "Tag as Healthy — No Outreach",
      "type": "n8n-nodes-base.hubspot",
      "parameters": {
        "resource": "contact",
        "operation": "update",
        "contactId": "={{ $('Fetch HubSpot Contact Details').item.json.id }}",
        "additionalFields": {
          "website_health_status": "healthy",
          "hs_lead_status": "UNQUALIFIED",
          "notes_last_updated": "Audit complete — all grades A/B. Enrolled in maintenance nurture."
        }
      },
      "position": [1340, 440]
    }
  ],
  "connections": {
    "HubSpot Trigger": { "main": [[{ "node": "Fetch HubSpot Contact Details", "type": "main", "index": 0 }]] },
    "Fetch HubSpot Contact Details": { "main": [[{ "node": "Claude Website Audit", "type": "main", "index": 0 }]] },
    "Claude Website Audit": { "main": [[{ "node": "Parse Claude Response", "type": "main", "index": 0 }]] },
    "Parse Claude Response": { "main": [[{ "node": "Grade Check — C/D/F Trigger", "type": "main", "index": 0 }]] },
    "Grade Check — C/D/F Trigger": {
      "main": [
        [{ "node": "Update HubSpot — Grades & Properties", "type": "main", "index": 0 }],
        [{ "node": "Tag as Healthy — No Outreach", "type": "main", "index": 0 }]
      ]
    },
    "Update HubSpot — Grades & Properties": { "main": [[{ "node": "Generate Outreach Email", "type": "main", "index": 0 }]] },
    "Generate Outreach Email": { "main": [[{ "node": "Enroll in HubSpot Sequence", "type": "main", "index": 0 }]] }
  },
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner"
  }
}

05

Outreach email structure