Back to blog
Case Study

How We Automated Outreach for a Chess Company Using Claude Code

March 23, 202610 min read

This is a case study from our own operations. We built an automated cold email system for a chess technology company — ChessWeb.site and TrendingChess.com — using Claude Code as the execution engine. The system discovers leads from multiple sources, scores them against an ideal customer profile, drafts personalized emails based on each lead's actual profile, and manages the entire pipeline through a Firestore-backed CRM with a dashboard approval queue.

The founder is a solo operator building two products: a website builder for the chess industry and a directory indexing the entire chess ecosystem. The target audience includes chess coaches, club organizers, content creators, tournament directors, and federation officials. These people are scattered across Lichess profiles, federation directories, Instagram pages, Reddit threads, and personal websites. There is no single list to buy. There is no industry CRM to plug into.

Manual outreach was not going to work. At best, a solo founder can research and email 5 to 10 leads per day before the quality drops. The chess industry has thousands of potential customers across dozens of countries. The math demanded automation — but the outreach still had to feel personal, because chess is a community where people know each other and generic pitches get ignored.

We built the system using Claude Code skills, Firestore as the CRM backend, a React dashboard for human review, and n8n for email delivery. The methodology behind it — Shadow, Systematize, Ship — is the same one we apply to every client engagement. This case study walks through exactly what we built, how it works, and why the same approach applies to any business that needs to reach people at scale without sacrificing personalization.

The Problem: Scale Without Spam

The chess industry is fragmented. Coaches operate independently. Clubs are local and often invisible online. Creators are spread across YouTube, Twitch, and social platforms. Tournament organizers work through federations with outdated directories. There is no centralized database of "people who need a chess website."

The founder needed to reach these people with a message that was relevant to their specific situation. A coach with 2,000 students on Lichess and no personal website needs a different pitch than a club running tournaments out of a community center with only a Facebook page. A content creator with 50,000 YouTube subscribers needs a different conversation than a titled player who teaches privately.

Generic outreach — "Hi, we build websites for chess professionals" — was not going to work. The chess community is tight. People talk. A bad cold email gets screenshotted and shared. The outreach had to demonstrate that we actually knew who the person was and what they did.

At the same time, the founder could not spend 30 minutes researching each lead. The goal was hundreds of leads per month, not dozens. The system needed to automate the research, scoring, and drafting while keeping the output indistinguishable from a hand-written email.

Lead Discovery: Finding People Where They Already Are

We built three distinct discovery pipelines, each targeting a different segment of the chess industry.

Lichess API for coaches. Lichess is an open-source chess platform with millions of users and a public API. We built a scraper that pages through Lichess coach profiles — extracting usernames, ratings, activity levels, student counts, bio text, languages spoken, and linked social accounts. The scraper tracks which pages it has already processed so it never duplicates work. It runs daily, pulling fresh coach data and checking each one against the existing CRM to avoid re-processing.

The key detail: we only keep coaches who have a visible email address. A coach without contact information is invisible to the outreach pipeline. This single filter eliminates roughly 60 percent of profiles and saves enormous downstream compute — no point scoring or drafting emails for people we cannot reach.

Web search for clubs and organizations. Chess clubs are the hardest to find because many exist only as a Facebook group, an Instagram page, or a line item in a federation directory. We use web search to discover clubs by region — "chess clubs in Texas," "youth chess programs in Ontario," "scholastic chess organizations UK" — and then extract whatever contact information exists. Clubs with polished websites get skipped. We target the ones with weak or nonexistent web presence, because those are the ones who need the product.

Reddit scanning for opportunities. The chess subreddits — r/chess, r/chessbeginners, r/lichess — are full of coaches asking about website builders, club organizers looking for registration tools, and creators discussing their tech stack. We scan these threads to identify potential leads and gauge market sentiment. Reddit signals intent in a way that cold lists never can — someone posting "what platform should I use for my chess coaching business?" is a warmer lead than any scraped profile.

Lead Scoring: Separating Signal From Noise

Not every discovered lead is worth an email. A Lichess coach with a 1200 rating and 2 students is a different prospect than an International Master with 500 students, an active YouTube channel, and no personal website. The system scores every lead on multiple dimensions.

Rating and title. Higher-rated players and titled players (FM, IM, GM) are more likely to have established coaching businesses that justify a professional web presence. A titled player coaching full-time is almost certainly our ideal customer.

Activity level. Recent activity on Lichess, recent social media posts, and recent tournament participation all signal an active professional. A coach who has not logged in for six months is probably not actively building their business.

Existing web presence. This is the most important negative signal. If a coach already has a professional website, they are not our customer — at least not for the core product. We check for personal domains, existing website builder profiles, and social links that suggest a mature online presence.

Student count and social following. More students or followers means a bigger business that would benefit more from a professional platform. It also means more social proof we can reference in the email.

Source quality. A lead who posted on Reddit asking for coaching platform recommendations scores higher than a lead scraped from a bulk directory. Intent matters.

The scoring system produces a numeric score. Leads above a threshold get emails drafted automatically. Leads below the threshold get logged but deprioritized. Leads that score exceptionally high get flagged for personal attention from the founder — these are the ones worth a truly custom message.

Every scoring weight is configurable. As the founder provides feedback — "this type of lead converts" or "stop emailing people with fewer than 50 students" — the weights adjust. The system improves with every cycle.

Email Drafting: Personalized at Scale

This is where AI outreach automation either succeeds or becomes spam. The difference is personalization — not the "Hi {first_name}" kind, but genuine personalization that references the lead's actual situation.

The system drafts every email using the lead's full profile: their name, title, rating, platform activity, student count, languages, bio text, social presence, and any other data collected during discovery. The email references specific details that prove we looked at their profile.

A coach who mentions specializing in youth chess gets an email about the content library features for kid-friendly course materials. A titled player with a large following gets an email about custom domains and professional branding. A club organizer gets an email about event registration and member management. The product being pitched is the same, but the angle matches the lead's world.

What we do not do:

  • No generic templates with mail-merge fields. Every email reads like it was written for that person.
  • No aggressive sales language. The tone is conversational and direct — one chess person talking to another.
  • No false urgency or manufactured scarcity. The pitch is honest: here is what we built, here is why it might be useful for you, here is a link to see it.
  • No mixing outreach pipelines. A TrendingChess directory listing email never mentions ChessWeb.site. A ChessWeb.site pitch never pretends to be about directory listings. These are separate conversations with separate goals.

For high-scoring leads, the system goes further: it builds a demo profile on ChessWeb.site using the lead's public information — their photo, bio, ratings, and coaching details — so the email can link to a live preview of what their website would look like. The lead clicks a link and sees their own name on a professional chess website. That converts better than any pitch deck.

Every drafted email lands in a review queue. The founder reviews each one before it sends. This is the human-in-the-loop checkpoint that keeps quality high and prevents any message from going out that does not meet the standard.

The CRM Pipeline: Firestore as the Backbone

The entire pipeline runs on Firestore — Google's serverless document database. Every lead gets a document in the outreach_leads collection with their full profile, score, discovery source, email draft, and status.

The pipeline stages are simple:

Discovered — Lead found and profile extracted. No email drafted yet.

Scored — Lead scored against the ICP. Threshold met or not.

Drafted — Email written, sitting in the review queue.

Approved — Founder reviewed and approved. Ready to send.

Sent — Email delivered via n8n SMTP workflow.

Replied — Lead responded. Conversation moves to Gmail.

Converted — Lead signed up, booked a call, or became a customer.

Declined — Lead replied with a clear "not interested." Respected immediately.

The React dashboard at TrendingChess.com/admin shows the full pipeline: how many leads are in each stage, which emails are pending review, which leads replied, and aggregate conversion metrics. The founder can approve, edit, or reject any email with one click.

Follow-up sequences are built into the pipeline. If a lead does not respond within two weeks, the system drafts a follow-up — shorter, different angle, still personalized. A maximum of two follow-ups. After that, the lead moves to a long-term nurture list and might get re-engaged if they show new activity (like posting on Reddit or updating their Lichess profile).

Firestore's real-time capabilities mean the dashboard updates instantly. When the daily discovery skill runs and imports 10 new leads, they appear in the dashboard within seconds. When the founder approves a batch of emails, n8n picks them up and delivers them automatically.

The Methodology: Shadow, Systematize, Ship

This outreach system was not designed in a vacuum. It emerged from watching the founder do outreach manually and then systematizing every step.

Shadow. The founder spent weeks doing manual outreach — browsing Lichess profiles, Googling chess clubs, writing individual emails, tracking leads in a spreadsheet. During this phase, patterns became clear: which data points mattered for qualification, which email angles got responses, which leads were worth pursuing, and which were dead ends. The manual phase was not wasted time — it was the training data for the automated system.

Systematize. Every manual step was decomposed into its components. Lead discovery became an API scraper with pagination tracking. Qualification became a scoring algorithm with weighted inputs. Email writing became a prompt that takes structured lead data and produces a personalized message. Follow-ups became a state machine with time-based triggers. The spreadsheet became a Firestore collection with a React dashboard.

The critical insight: separating decisions from execution. The founder still makes the decisions — which leads to pursue, which emails sound right, when to escalate to a personal message. The system handles the execution — scraping, scoring, drafting, scheduling, sending, tracking.

Ship. The system went live incrementally. First the discovery pipeline, running daily and populating the CRM. Then the scoring algorithm, filtering the noise. Then the email drafter, producing review-ready messages. Then the dashboard, giving the founder visibility and control. Then the n8n integration, automating delivery. Each piece was tested independently before connecting to the next.

The system has been running in production for months. It processes leads daily, drafts emails nightly, and delivers approved messages on schedule. The founder reviews the dashboard once a day — 15 minutes to approve emails, flag interesting leads, and check responses. The rest runs automatically.

Results: What the System Produces

The numbers tell the story.

Lead volume. The system processes 10 to 25 new leads per day across all sources. The Lichess pipeline alone has processed hundreds of coach profiles. Club discovery adds another layer. Reddit scanning surfaces the highest-intent leads, though in smaller volumes.

Email quality. The review queue rejection rate dropped below 10 percent within the first month. Nine out of ten AI-drafted emails are approved with minor or no edits. The ones that get rejected are typically for leads that should not have been scored above threshold — a scoring refinement issue, not a drafting issue.

Response rates. Personalized outreach consistently outperforms industry cold email benchmarks. Leads who receive an email with a link to their own demo profile respond at significantly higher rates than leads who receive a generic pitch. The demo profile strategy — building a live preview using the lead's own data — is the single biggest conversion lever in the system.

Conversations started. The goal was never email volume. It was qualified conversations. The system regularly surfaces leads who reply with genuine interest — coaches who want to see a demo, clubs who need help building a website, creators who are actively looking for a platform. These conversations lead to booked consultations, free trial signups, and eventually paying customers.

Time savings. The founder went from spending 2 to 3 hours per day on outreach research and email writing to spending 15 minutes reviewing the dashboard. The system reclaimed 10 or more hours per week — time that now goes to product development and customer conversations.

Continuous improvement. Every piece of feedback tightens the system. A rejected email teaches the drafter. A non-responsive lead segment adjusts the scoring. A successful conversion reinforces the pattern. The system that runs today is meaningfully better than the one that launched, and it will be better next month than it is today.

How This Applies to Any Business

The chess outreach system is specific. The methodology is universal.

Every business has a version of this problem: there are people out there who need what you sell, but finding them, qualifying them, and reaching them with a relevant message takes more time than any founder or small team can spare.

Insurance agencies need to find small businesses without adequate coverage. The discovery source changes (state licensing databases instead of Lichess), but the pipeline is the same: discover, score, draft, review, send, follow up.

Recruiting firms need to identify candidates and client companies. Different data sources, same workflow: scrape job boards and LinkedIn, score against role requirements, draft personalized outreach, manage the pipeline.

SaaS companies need to find businesses using competitor products or manual processes. Different signals (tech stack detection instead of chess ratings), same structure: identify the prospect, understand their situation, craft a relevant message, track the conversation.

Real estate agents need to reach homeowners in specific neighborhoods. Different discovery (property records instead of API scraping), same pattern: find the lead, score the opportunity, personalize the message, manage follow-ups.

Consultants and freelancers need to find clients who have the problem they solve. Different verticals, same pipeline: discover where potential clients congregate, extract qualifying information, draft outreach that demonstrates understanding of their situation.

The technical stack adapts to each business. The discovery sources change. The scoring criteria change. The email templates change. But the architecture — automated discovery, algorithmic scoring, AI-drafted personalized emails, human-in-the-loop approval, CRM pipeline management, and continuous improvement from feedback — that architecture transfers directly.

We know it works because we run it ourselves. The chess outreach system is not a demo or a proof of concept. It is a production system that operates daily, generates real leads, and drives real revenue. When we build this for a client, we are not theorizing. We are replicating a system we already operate and adapting it to their industry.

The Stack

For the technically curious, here is what powers the system.

Claude Code is the execution engine. Custom skills handle each pipeline stage — discovery, scoring, drafting, and CRM management. Skills are composable: the discovery skill feeds the scoring skill, which feeds the drafting skill, which writes to Firestore. Skills run on schedule via Claude Desktop automated tasks or on demand when the founder triggers them.

Firestore is the CRM backend. Every lead is a document with structured fields: name, email, source, score, status, email draft, timestamps, and metadata. Firestore's real-time sync powers the dashboard. Cloud Functions handle triggered workflows — when a lead status changes, downstream actions fire automatically.

React dashboard is the human interface. Built into the existing admin panel, it shows the pipeline visually: leads by stage, emails pending review, response tracking, and conversion metrics. One-click approve, edit, or reject on every email.

n8n handles email delivery. SMTP workflows pick up approved emails from Firestore and send them through authenticated channels with proper SPF, DKIM, and DMARC configuration. Delivery tracking feeds back into the CRM.

Obsidian vault is the knowledge layer. Lead research, outreach strategy documents, email style guides, and ICP definitions live in markdown files that Claude Code reads for context. The vault is the institutional memory — it ensures every email drafted today reflects everything learned from every email sent previously.

This is not a heavyweight enterprise stack. It is a collection of tools that a solo founder can operate and a small team can scale. The total infrastructure cost is minimal — Firestore's free tier handles the volume, n8n runs on a small VPS, and Claude Code is the only meaningful line item. The ROI is measured in hours reclaimed and conversations started, not in software licenses.

Ready to see what AI can do for your business?

We build custom AI systems like the ones we write about. Fifteen minutes is all it takes to map your workflows and show you what is possible.

Book an AI Intro Consultation