Ready to use prompts, scripts, and workflow templates from Module 03 of the Lead Generation with Paid Social course.

Everything in this toolkit is designed to plug into your existing setup. Pick the pieces you need, customise the bracketed placeholders, and put them to work.


1. Lead enrichment prompt

Use with Claude (or your favourite LLM) to enrich any new lead with company, role, and intent context. Pass in whatever lead data you already have. The LLM fills in the gaps and returns clean JSON ready to write back into your CRM.

You are a lead enrichment assistant for [your company name].

Your task: take the raw lead data below and return a structured JSON profile of this lead. Use general knowledge about the company domain and any context provided to fill in fields. If you cannot determine a field with reasonable confidence, return null.

Return JSON with this exact structure:
{
  "company_name": string or null,
  "company_size": "1-10" | "11-50" | "51-200" | "201-1000" | "1000+" | null,
  "industry": string or null,
  "role_seniority": "junior" | "mid" | "senior" | "executive" | "founder" | null,
  "decision_authority": "decision_maker" | "influencer" | "user" | "unknown",
  "icp_match": "strong" | "partial" | "weak" | "junk",
  "intent_signals": [string],
  "notes_for_sales": string
}

Our ideal customer profile:
[describe your ICP in 2 to 3 sentences. e.g. "B2B SaaS companies with 10 to 200 employees, run by a founder or marketing lead, spending $5k+ a month on paid acquisition."]

Lead data:
{paste the raw lead JSON here}

Tips for using this prompt:

  • Replace [your company name] and the ICP description with your specifics
  • Pass the lead data as JSON for cleanest parsing
  • The icp_match field is what you'll use for routing in the next step

2. Lead scoring prompt

Once enriched, classify every lead into HOT, WARM, COLD, or JUNK. This drives where each lead goes in your CRM.

You are a lead scoring assistant for [your company name].

Score this lead based on the framework below. Return JSON only.

Scoring framework:
- HOT: Strong ICP match + decision maker + high intent signals (urgency, budget, specific use case mentioned). Route to sales for same day call.
- WARM: Good ICP match but lower urgency. Timeline 1 to 3 months, exploring options. Personalised follow up then nurture.
- COLD: Weak ICP match or very early stage. Just exploring, no clear timeline, or partial profile match. Long form nurture sequence.
- JUNK: Not a real lead. Competitor, student, fake details, or completely outside our market.

Return JSON:
{
  "score": "HOT" | "WARM" | "COLD" | "JUNK",
  "reasoning": "single sentence explaining the score",
  "next_action": "specific recommendation for what to do next",
  "urgency_signal": boolean
}

Enriched lead data:
{paste the enriched JSON from step 1 here}

Tips:

  • Keep the scoring framework exactly as written. AI does best with explicit rules.
  • The urgency_signal boolean is useful for triggering same day notifications.
  • Run this on a sample of 20 to 50 leads first to calibrate. Adjust the framework if the scores don't match your gut.

3. Personalised first touch email prompt

Send within 5 minutes of form submission. AI drafts, you review (or auto send once trusted).

You are writing a personalised first touch email to a lead who just submitted a form on [your company name]'s website.

Email rules:
- Maximum 100 words
- Conversational tone, not corporate
- Reference one specific thing about their situation from the enrichment data
- Reference what they downloaded or which form they submitted
- Single clear CTA: book a call, reply with one question, or give a useful next resource
- Sign off as [your name]

Lead context:
{paste enriched + scored lead JSON here}

Form they submitted: [name of form / lead magnet]

Return only the email body, no subject line.

Tips:

  • Generate a subject line in a separate prompt or use a fixed subject pattern like "Quick question about {company_name}"
  • For HOT leads, the CTA should be "book a call". For WARM, offer to send a relevant case study. For COLD, just provide value.
  • Run in approval mode for the first 50 outputs before letting it auto send.

4. Apps Script: form to enrichment trigger

Triggers when a new row is added to a Google Sheet (e.g. from a Meta Lead Ad webhook or a form submission). Reads the lead, calls Claude, writes enriched data back to the sheet.

// Replace these constants with your values
const ANTHROPIC_API_KEY = 'sk-ant-...'; // Store in Script Properties for safety
const SHEET_NAME = 'Leads';
const ENRICHMENT_PROMPT = `[paste your enrichment prompt here, with {LEAD_DATA} as the placeholder for the lead JSON]`;

function onLeadSubmit(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const row = e.range.getRow();
  const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  const rowData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  // Build a JSON object from the row
  const leadData = {};
  headers.forEach((header, i) => {
    leadData[header] = rowData[i];
  });
  
  // Call Claude for enrichment
  const enriched = enrichLeadWithClaude(leadData);
  if (!enriched) return;
  
  // Write enriched fields back to the sheet
  // Assumes columns exist for: ICP_Match, Score, Reasoning, Next_Action
  const icpCol = headers.indexOf('ICP_Match') + 1;
  const scoreCol = headers.indexOf('Score') + 1;
  const reasoningCol = headers.indexOf('Reasoning') + 1;
  const nextActionCol = headers.indexOf('Next_Action') + 1;
  
  if (icpCol > 0) sheet.getRange(row, icpCol).setValue(enriched.icp_match);
  if (scoreCol > 0) sheet.getRange(row, scoreCol).setValue(enriched.score);
  if (reasoningCol > 0) sheet.getRange(row, reasoningCol).setValue(enriched.reasoning);
  if (nextActionCol > 0) sheet.getRange(row, nextActionCol).setValue(enriched.next_action);
}

function enrichLeadWithClaude(leadData) {
  const prompt = ENRICHMENT_PROMPT.replace('{LEAD_DATA}', JSON.stringify(leadData));
  
  const payload = {
    model: 'claude-sonnet-4-6',
    max_tokens: 1024,
    messages: [
      { role: 'user', content: prompt }
    ]
  };
  
  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      'x-api-key': ANTHROPIC_API_KEY,
      'anthropic-version': '2023-06-01'
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };
  
  try {
    const response = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', options);
    const result = JSON.parse(response.getContentText());
    const text = result.content[0].text;
    
    // Extract JSON from the response
    const jsonMatch = text.match(/\{[\s\S]*\}/);
    if (!jsonMatch) return null;
    
    return JSON.parse(jsonMatch[0]);
  } catch (err) {
    console.error('Enrichment failed:', err);
    return null;
  }
}

Setup:

  1. Open your lead capture Google Sheet → Extensions → Apps Script
  2. Paste the code above into a new script file
  3. Replace ANTHROPIC_API_KEY with your actual key (better: store it in Project Settings → Script Properties)
  4. Add columns to your sheet: ICP_Match, Score, Reasoning, Next_Action
  5. Triggers → Add Trigger → Function: onLeadSubmit → Event: On form submit (or On change)
  6. Save and authorise

5. Apps Script: send to CRM via webhook

Once enriched, push the lead to your CRM. This example sends to a generic webhook URL (works with Zapier, Make, or most CRMs).

const CRM_WEBHOOK_URL = 'https://hooks.zapier.com/hooks/catch/...'; // Or your CRM's incoming webhook

function sendToCrm(enrichedLead) {
  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(enrichedLead),
    muteHttpExceptions: true
  };
  
  try {
    UrlFetchApp.fetch(CRM_WEBHOOK_URL, options);
  } catch (err) {
    console.error('CRM push failed:', err);
  }
}

Call sendToCrm(enriched) at the end of onLeadSubmit after you've written enrichment back to the sheet.


6. Zapier workflow template

If you'd rather use a visual builder than write code, here's the equivalent Zapier flow:

Trigger: Lead form submission (Meta Lead Ads, Typeform, JotForm, or similar)

Step 1 — Enrich with Claude

  • App: Anthropic (Claude)
  • Action: Send Prompt
  • Model: claude-sonnet-4-6
  • Prompt: paste your enrichment prompt from section 1, with form fields mapped into the {LEAD_DATA} placeholder

Step 2 — Parse Claude's JSON response

  • App: Formatter by Zapier
  • Action: Utilities → Pick from List → JSON Parse
  • Input: Claude's response text

Step 3 — Score with Claude (optional, separate call)

  • App: Anthropic (Claude)
  • Action: Send Prompt
  • Prompt: paste your scoring prompt from section 2

Step 4 — Route based on score

  • App: Filter / Paths
  • Path A (HOT): send Slack alert + create CRM contact + add to high priority pipeline
  • Path B (WARM): create CRM contact + add to nurture sequence
  • Path C (COLD): create CRM contact + add to long form nurture
  • Path D (JUNK): write to a separate junk sheet for review, no CRM action

Step 5 — Send personalised email

  • App: Anthropic (Claude)
  • Action: Send Prompt
  • Prompt: paste your follow up email prompt from section 3
  • Then: send via your email tool (Gmail, Mailchimp, Resend, SendGrid)

7. Tips for safe deployment

Start in approval mode. For your first 50 leads, the AI drafts everything and you approve before anything sends. Watch for hallucinations, wrong tone, or missed context. Once it's reliable, switch to auto.

Log everything. Keep a record of every AI call: input, output, score given. If something goes wrong later, you can see why.

Monitor cost. Most lead processing costs $0.01 to $0.10 per lead with Claude. At 100 leads a month, that's $1 to $10. Cheap. But monitor in case of bugs that cause runaway calls.

Privacy. If you're processing personal data through an LLM, check your data processing agreements. For EU/UK leads, GDPR compliance matters. Anthropic's data is processed in the US by default, with options for EU residency.

Don't over engineer. Start with one automation (enrichment + scoring). Get it stable. Then add the next one. Brands that try to automate everything on day one usually end up with a fragile pipeline that breaks weekly.


This toolkit is meant as a starting point. Customise the prompts to your tone and your ideal customer profile. The more specific your prompts, the better the AI's output.

Need help building this for your specific stack? Book a call at howweconvert.com.au.

Ad Generator Insights About