Last quarter, I ran a cold outreach experiment at Wbcom Designs. We pulled 200 WordPress agency sites from Google Search Console decline data, profiled each one using Apollo and Clearbit, then drafted personalized cold emails using Claude Opus 4.7. The result: 22 replies from 200 outreach sequences, 4 discovery calls, and 2 new retainer engagements at $2,800/month each. That is $5,600 MRR from a process that took about 14 hours of my time.

This post walks through the exact system, the prompts I use, the SpyFu hooks that make cold emails land, and the math that tells you whether the pipeline is actually working. If you run a WordPress agency and you are tired of waiting for referrals, this is the workflow I wish I had built two years earlier.

Why Most WordPress Agencies Have a Pipeline Problem

WordPress agencies live and die on referrals. A client finishes a project, refers a friend, and the cycle continues. That is fine when business is good. The problem shows up the moment a major client churns, a referral source goes cold, or you want to grow faster than your existing network allows.

I have been there. In 2023, we lost two anchor clients in the same month. Both had internal budget cuts. Neither was our fault. But we still had a team to pay and a pipeline that had run dry. That experience forced me to build an outbound system that does not depend on who I know.

The challenge with outbound for WordPress agencies specifically is the signal-to-noise problem. Every agency in the world sends cold emails. Most of them are generic: “Hi, I noticed your website could use some work. We specialize in WordPress development. Can we hop on a call?” That message lands in the trash because it could have been written about anyone.

The fix is specificity. And the way you get specificity at scale, without spending 45 minutes researching each prospect, is AI.

The Stack: What You Actually Need

Before getting into the workflow, here is the tool list. None of this requires an enterprise budget.

  • Google Search Console – free, already connected to your prospects’ sites if they rank for anything
  • SpyFu – $39/month for the basic plan. This is where competitor keyword gaps come from.
  • Apollo.io – $49/month for email lookup and company profiling at scale
  • Clearbit (now part of HubSpot) – for enriching contact data with tech stack info
  • Claude Opus 4.7 – for drafting personalized cold outreach. The model is good enough to pick up on context and write emails that do not sound like AI wrote them. If you are evaluating which Claude-backed tool fits your dev setup, the Cursor vs Claude Code vs Windsurf comparison for WordPress 2026 covers the IDE choices in depth.
  • A simple CRM – I use a Google Sheet for this, though HubSpot free tier works too
  • Lemlist or Instantly.ai – for sequencing and tracking replies

Total monthly cost: roughly $90-120. If one retainer closes, that pays for 18 months of the stack.

Step 1: Finding Prospects With GSC Decline Detection

The best cold email is the one that arrives at exactly the right time. For WordPress agencies, the right time is when a prospect’s organic traffic is declining. A business watching their Google rankings drop is actively looking for solutions. They are not happy with their current setup.

Here is how I find these prospects without having access to their GSC data directly.

The SpyFu Decline Signal Method

SpyFu shows you competitor ranking history. More importantly, it shows you when a domain’s keyword count is trending down. I run this query every two weeks:

Search SpyFu for domains in my target niche (B2B SaaS, professional services, e-commerce under $5M ARR). Filter for sites with 500-5,000 organic keywords. Then look at the “keywords lost” metric from the last 30 days. Any site that lost more than 15% of its organic keywords in 30 days is a warm prospect.

Why? Because they just got hit by something: an algorithm update, a technical issue, a competitor who published better content. They are in pain and they do not know why.

Validating With Site Audit Data

Once I have a list of 50-100 declining domains, I run a quick Screaming Frog crawl on each. I am looking for three things: page speed score below 60, missing meta descriptions on more than 20% of pages, and broken internal links. Any two of these three tells me the site has technical debt that an agency could fix.

This turns my prospect list from “sites with declining traffic” into “sites with declining traffic AND diagnosable problems I can solve.” That specificity is what makes the outreach land.

Step 2: Profiling Targets With Apollo and Clearbit

Now I have a list of warm prospects with real problems. The next step is finding the right person to contact and building an accurate profile of their business.

In Apollo, I search by domain and pull:

  • The decision-maker’s name and verified email (usually the founder, marketing director, or head of digital for companies under 50 people)
  • Company size and revenue estimate
  • LinkedIn URL for additional context
  • Tech stack tags if available

Clearbit enriches this with the WordPress confirmation (many prospects run WP but have not announced it publicly), plus funding rounds, recent news, and employee count trends. If a company just hired two new salespeople, they are in growth mode and their website probably needs to keep up.

I export this to a Google Sheet with the following columns: Domain, Decision Maker Name, Email, Title, Company Revenue Estimate, Keywords Lost (30d), Top Technical Issue Found, WordPress Version (from Screaming Frog headers), Recent News Hook.

That last column is key. If I can find something recent that happened at the company (a funding round, a new product launch, a job posting), I use that as the opening hook. Claude writes much better emails when it has a concrete recent event to anchor on.

Step 3: Auto-Drafting Personalized Outreach With Claude Opus 4.7

This is the part that took me the longest to get right. Claude is not a mail-merge tool. If you feed it a template and tell it to fill in the blanks, you get fill-in-the-blank emails. The model needs context and constraints to write something that sounds human.

Here is the prompt structure I use. I pass the entire prospect row from my Google Sheet as context.

You are drafting a cold outreach email for a WordPress development agency. 
The email should be 4-6 sentences maximum. No fluff. No "hope this finds you well."
No "I was browsing your website and noticed." 

Prospect data:
- Name: {first_name}
- Company: {company_name}
- Title: {title}
- Their site lost {keywords_lost} keywords in the last 30 days
- Main technical issue found: {technical_issue}
- Recent news hook: {recent_news}
- Their WordPress version: {wp_version}

Write one cold email using this structure:
1. Opening: reference the recent news hook, one sentence, no compliments
2. Bridge: connect their traffic decline to the news context in one sentence
3. Credibility: one sentence about what we fixed for a similar client
4. Offer: one specific thing we can do for them, no commitment required
5. CTA: one question that requires a yes/no answer

Tone: direct, founder-to-founder. Not salesy. Not humble. Confident.
Length: under 120 words total.
Do not mention that you are AI. Write in first person as a WordPress developer.

The output for a real prospect looks like this (anonymized):

Subject: Your Series A + the 340 keywords you lost last month

Hey Sarah,

Congrats on the Series A – that is a big milestone. I noticed your organic traffic dropped about 340 keywords in April, which tends to happen right after funding rounds when technical debt catches up with growth.

We fixed a similar issue for a legal SaaS client in March: 22 broken redirect chains and three orphaned content clusters. Traffic recovered 40% in six weeks.

I can send you a 10-minute audit video of your site, no strings attached.

Would that be useful?

– Varun

That email is 94 words. It has a specific hook (Series A), a specific problem (340 keywords lost), a specific result from a real client (40% traffic recovery), and a low-commitment offer (a video, not a call). The reply rate on emails structured like this runs 11-14% in our campaigns.

Building the SpyFu Competitor-Gap Hook

For prospects who do not have a recent news hook, I use a SpyFu competitor-gap hook instead. This one is actually more effective because it is more specific.

The prompt addition:

Additional context for SpyFu hook:
- Their top competitor: {competitor_domain}
- Keywords competitor ranks for that prospect does not: {gap_keywords}
- Competitor's top keyword: {competitor_top_kw} at position {competitor_position}

Use one of the gap keywords as the hook. Frame it as: their competitor is capturing 
a specific audience segment they are not. This is the entry point for the content 
strategy conversation.

Example output:

Subject: Your competitor ranks #3 for “headless WooCommerce agency” – you don’t

Hey Marcus,

Noticed that Acme Dev ranks #3 for “headless WooCommerce agency” – a term getting about 1,200 searches a month in your space. Your site does not appear in the top 50 for it.

I build WordPress content strategies for agencies. We got a similar client to rank #5 for their version of that term in 11 weeks using three targeted posts and some schema fixes.

Can I show you the gap map in a 5-minute Loom?

– Varun

Step 4: LinkedIn InMail Templates That Actually Get Replies

Cold email is the volume play. LinkedIn InMail is the precision play. I use LinkedIn for the top 20% of prospects on my list, people at well-funded companies or agencies with decision-makers who are active on the platform.

The InMail template structure is different from cold email because LinkedIn has a character limit on the subject line and the message body reads in a preview format. The first two sentences need to do all the work.

Subject: [Specific observation about their work] (under 40 chars)

Message:
Saw your post about [specific recent LinkedIn post topic]. 
[One sentence connecting that post to the problem you solve.]
[One sentence about a result you got for a comparable client.]
[One specific, low-friction offer.]

Is this worth a 15-minute chat?

The key difference between LinkedIn and email: on LinkedIn, people expect a slightly warmer tone because they have already opted into a professional network. But “warmer” does not mean longer. It means you can reference their LinkedIn activity directly, which makes it feel less like a mass blast.

I use Claude to draft these too, but with a different prompt that pulls in their three most recent LinkedIn posts as context. The Claude output rate for InMail is about 70% usable without edits, versus 85% for cold email. The LinkedIn variable requires more human judgment about tone.

Step 5: The Follow-Up Sequence

Most replies do not come from the first email. In our campaigns, about 60% of replies come from follow-up messages 2 or 3 in the sequence. Here is the structure we run:

  • Day 0: Initial email (as above)
  • Day 3: Follow-up 1 – a single new data point. Something like “I ran a quick crawl on your site and found X. Thought you might want to know.” No ask, just value.
  • Day 8: Follow-up 2 – a case study or result relevant to their industry. One paragraph, links to the case study page.
  • Day 15: Follow-up 3 – permission to close. “I don’t want to keep emailing if this is not relevant. Should I close this out?” This one gets replies because people feel a social obligation to respond to a clear close.

I use Lemlist to automate the send timing and track opens. The open tracking tells me whether the email is getting through (deliverability issue) or getting opened but not replied (content issue). These are different problems with different fixes.

Claude drafts all four messages in one batch. I give it the initial email it wrote plus the follow-up instructions and it produces the full sequence in about 90 seconds.

The Conversion Math: What to Expect

Here is the honest math from running this system for three months at Wbcom Designs.

StageCountRate
Prospects identified (SpyFu + GSC method)400/month
Qualify (technical issues confirmed)200/month50%
Outreach sent100/month50% of qualified
Replies (all responses)10-12/month10-12%
Interested replies (wants to learn more)4-5/month40-45% of replies
Discovery calls booked2/month50% of interested
Proposals sent1.5/month75% of calls
Retainers closed1/month67% of proposals

One retainer per month at an average of $2,500-4,000/month is $30,000-48,000 ARR from this channel alone. The time investment to run the system is 8-12 hours per month once it is set up. That math works for any agency with a senior person who can review and approve the outreach before it goes out.

The numbers above are from 100 outreach emails sent per month, not 1,000. I deliberately keep the volume low because quality collapses at scale when you are using AI-assisted personalization.

100 well-targeted, personalized emails outperform 1,000 generic ones every time we have tested it.

What Breaks the Math

Two things collapse conversion rates in this system:

Bad data. If Apollo’s email data is wrong and your emails bounce, your sender reputation drops and future emails land in spam. I verify all emails with NeverBounce before adding them to a sequence. The extra step costs $0.008 per email and saves campaigns.

Generic hooks. If the SpyFu data or GSC signal is not specific enough, Claude generates a less specific email. I have a quality check step where I review 20% of Claude’s drafts before approving the batch. If more than 2 of those 20 feel generic, I go back and improve the prospect data before running the full batch.

Building the GSC Decline Detection Process

I want to go deeper on the GSC decline detection piece because it is the most valuable signal and most agencies do not know how to use it without having direct access to a prospect’s GSC.

The method uses three data sources in combination:

1. SpyFu Historical Keyword Tracking

SpyFu’s “SEO Keywords” tab shows you a domain’s keyword count by month going back several years. A drop of more than 10% in a single month is a signal worth investigating. A drop in two consecutive months is a strong signal. Export the domain list and mark these as Priority A prospects.

2. Ahrefs or Semrush Rank Tracking

If you have Ahrefs, the “Top Pages” report sorted by traffic change shows you exactly which pages lost the most traffic. This is the data point you include in the cold email. “Your /pricing page dropped from position 4 to position 22 in the last 60 days” is a sentence that gets a reply because the recipient has to check if it is true.

3. Google’s Own Tools

Site:domain.com queries in Google tell you the index count. If a site had 500 indexed pages last month and now shows 380, they have a crawlability or canonicalization problem. Check this manually for high-priority prospects before you send. It takes 30 seconds and gives you a specific problem to name in the email.

Integrating This Into a Weekly Rhythm

The reason most agencies do not do outbound is that it feels like a second job on top of delivery. The way I solved that is by making it a fixed weekly process with a time budget, not an ongoing task that bleeds into everything else.

My weekly outbound block is Tuesday mornings, 9am-11am. Here is what happens in those two hours:

  • Week 1 of the month (90 min): Pull new prospects from SpyFu, qualify with Screaming Frog, build prospect sheet. Remaining 30 min: review last week’s replies and advance hot leads.
  • Week 2 (60 min): Run Claude batch for email drafts, review 20% sample, approve and load into Lemlist. 60 min remaining: LinkedIn InMail outreach for top 10 prospects.
  • Week 3 (90 min): Reply management and discovery call prep. Check campaign metrics. Kill any sequences with below 5% open rates (deliverability problem).
  • Week 4 (60 min): Proposal follow-ups. CRM cleanup. Plan next month’s prospect batch.

Total: 5-6 hours per month for the outbound function. The rest of the 8-12 hour estimate includes occasional prospect research deep-dives and sales calls.

What Claude Cannot Do (And What You Still Need to Own)

I want to be honest about the limits because AI tools get oversold. Claude cannot replace judgment. It can produce 100 email drafts in 5 minutes, but it cannot tell you which 10 prospects are actually a good fit for your agency’s delivery model.

The fit judgment has to be yours. I have declined prospects from this pipeline because even though they fit the data profile, their business model was not something we could serve well. A founder who wants a $500 website is not a retainer client no matter how perfect their traffic decline signal looks.

The other thing Claude cannot do is handle the discovery call. The AI drafts the email, books the meeting, and you close the deal. The transition from AI-assisted outreach to human relationship is where retainers actually get signed. I have found that when prospects realize the outreach was highly personalized, they come into the discovery call with higher trust than typical cold-call prospects. They expected a generic pitch and got a specific insight. That expectation gap works in your favor.

The SEO Play Inside the Outreach Loop

There is a second-order benefit to this system that I did not anticipate when I started: the research I do for outreach feeds back into my own content strategy.

When I pull SpyFu data on 200 prospects per month and see the keywords they are all losing, I am also seeing what the market is struggling with. Three months of this data told me that WordPress agencies in the B2B SaaS space were consistently losing ground on transactional queries related to headless WordPress. I wrote a three-post content series on that topic. Those posts now drive 400 visits per month and two inbound leads in the last quarter.

The outreach system is also a market research system. The problems your prospects have are the problems your blog should answer. When you write content about the exact problems you are solving in outreach, the people who find that content via search are pre-qualified leads. If you are thinking about how AI fits into the broader WordPress agency stack, the post on self-hosting AI for WordPress agencies with Llama 4 Scout covers the infrastructure side of running your own models.

This is the loop: outreach research informs content, content attracts inbound, inbound validates outreach targeting. Over time, the inbound channel grows and the outbound requirement shrinks. But you need the outbound engine to get the market data that makes inbound work faster.

Scaling Without Breaking the Personalization

The question I get most often: can you scale this to 500 or 1,000 outreach emails per month without losing the personalization quality?

The honest answer is: 300 is probably the ceiling before quality degrades, unless you add a person to the quality review process. Here is why.

Claude’s output quality is directly tied to the quality of the input data. At 100 outreach emails per month, I can personally verify the input data for every prospect. At 300, I need a VA doing 50% of the data verification. At 500, the data verification becomes the bottleneck and the AI output starts to drift toward generic because the inputs are less precise.

The scaling path I recommend: keep the outreach volume at 100 per month until you hit a 12% reply rate consistently. Then hire a VA for data gathering and verification and scale to 200. Hit 12% again, then scale to 300. Never outrun your data quality.

Tracking and Iteration

The metrics I track weekly in a simple Google Sheet:

  • Open rate by campaign: Target 40%+. Below 30% means deliverability issue or subject line problem.
  • Reply rate by hook type: GSC decline hook vs. SpyFu competitor hook vs. recent news hook. I track which hook type generates the best replies per niche.
  • Reply sentiment: Positive, neutral, negative. Negative replies tell me the hook is aggressive or the targeting is off.
  • Days to first reply: Average 4.2 days in our campaigns. If this goes above 7, the follow-up sequence timing needs adjustment.
  • Calls to proposal rate: 75% is my benchmark. Below that, the discovery call script needs work.

Every two weeks I share this sheet with myself from two weeks ago and look for trends. The tool does not need to be fancy. It needs to be consistent.

Starting From Zero: The First 30 Days

If you are reading this and you have no outbound system at all, here is the 30-day start sequence:

Days 1-7: Set up the stack. Get Apollo, SpyFu, and a Lemlist trial. Connect your outreach email address to Lemlist and warm it up (Lemlist has a built-in warmup tool). Do not send any outreach yet.

Days 8-14: Build your first prospect list. Target 50 prospects max for the first batch. Run the SpyFu decline check, validate with a quick crawl, and verify emails with NeverBounce. Load into your Google Sheet.

Days 15-21: Draft the emails using Claude. Review every single one personally for this first batch. Do not delegate the review on the first run. You need to see what Claude does well and what it gets wrong before you trust its output at scale.

Days 22-30: Send the sequence to all 50 prospects. Watch the metrics daily. Reply to every response within 4 hours. Book calls with anyone who expresses interest.

You will not close a retainer in the first 30 days. You will learn what works and what does not. That learning is the asset.

A Note on AI Disclosure

People ask me whether I disclose that AI drafted the outreach emails. I do not, and here is my reasoning: I review and approve every email before it goes out. The email represents my judgment about what to say to this prospect. Claude is a writing tool, the same way Grammarly is a writing tool. I do not disclose that I used Grammarly either.

What I do disclose, if a prospect asks in a reply, is that I use AI tools in my workflow. That conversation has happened three times in three months of running this system. All three times it was a positive conversation because the prospects were curious about how it worked, not upset that they had received an AI-assisted email.

The test is simple: if you would not be embarrassed to show the prospect the email before AI helped write it, you are fine. If you are relying on AI to hide that you did not do the research, that is a different problem.

The Bottom Line

Building an AI-assisted outreach system for a WordPress agency is a 14-hour investment to set up and 6-10 hours per month to maintain. From that investment, we close one retainer per month on average. Over a year, that is $30,000-48,000 ARR from a channel that did not exist before.

The tools are accessible. Claude Opus 4.7, SpyFu, Apollo, and Lemlist together cost less than $200 per month. The knowledge to run them is in this post. The only thing left is to start.

The pipeline does not fill itself. But with the right system, filling it stops feeling like a mystery and starts feeling like a process.