I was paying $300 a month for a CRM I barely used. HubSpot had good features — workflows, lead scoring, email sequences — but I only needed 10% of them. The other 90% was interface bloat and integrations I'd never touch. I realized I could build exactly what I needed with Claude Code in about a week and eliminate the monthly subscription entirely.
Three months in, the system is working better than the CRM ever did. My sales email response rate went from around 12% to 17%, and I'm saving $3,600 a year. Here's how I built it and what's actually working.
What I Actually Needed from a CRM
Before jumping into Claude Code, I wrote down the five things I was actually using in HubSpot:
- Contact database — a structured place to store leads with tags and notes
- Email sequences — automated follow-ups triggered by specific actions (or lack of response)
- Personalization at scale — merging custom fields into templates so emails feel one-to-one
- Response tracking — knowing who opened, who replied, who went cold
- Pipeline view — a simple board showing where each lead sits in the funnel
That's it. I didn't need lead scoring algorithms, Salesforce sync, or a mobile app. I just needed clean automation for outbound sales emails and a way to track what was working.
The Build: A Google Sheet + Claude Code Scripts
The entire system runs on a single Google Sheet (contact database) and a set of Claude Code scripts that generate, send, and track emails. No fancy tech stack — just practical automation built in about 20 hours of focused work.
Contact Database (Google Sheet)
I set up a sheet with these columns: Name, Email, Company, Industry, Source, Stage, Last Contact Date, Next Follow-Up, Notes, and Tags. Each row is a lead. That's the whole database.
Claude Code reads this sheet via the Google Sheets API and uses it as the source of truth for who to email and when. If someone replies or books a call, I update their Stage manually (takes 10 seconds). The system handles everything else.
Email Sequence Generator
This is where Claude Code shines. I wrote a script that takes a lead's data — name, company, industry — and generates a personalized 3-email sequence. Each email is built from a template, but Claude Code customizes the opening line, the value prop, and the CTA based on the lead's profile.
The prompt structure looks like this:
You are writing a sales email for Alejandro Arce, an AI consultant in Vancouver.
Recipient: {{Name}} at {{Company}} ({{Industry}} sector)
Objective: Book a 20-minute AI audit call
Tone: Direct, helpful, no hype
Email 1: Cold intro (120 words max)
Email 2: Value-focused follow-up if no reply after 4 days (100 words)
Email 3: Final check-in if no reply after 7 more days (80 words, soft close)
For each email:
- Open with a specific observation about their industry or company
- One clear benefit of the AI audit
- One-sentence CTA
- No fluff, no generic consultant speak
Claude Code generates all three emails in one pass. I spot-check them, make minor edits if needed, and then the system schedules them for send. The whole batch takes about 15 minutes for 20 leads.
Automated Sending via Gmail API
Once the emails are generated, a second script handles delivery. It connects to my Gmail via API, pulls the next batch of scheduled emails from the sheet, and sends them one at a time with appropriate delays (I stagger sends by 2–3 minutes to avoid looking like a mass mailer).
The script also logs the send time in the sheet and sets a follow-up reminder. If someone replies, Gmail filters move the thread to a "Replied" folder, and I manually update their Stage to "Engaged."
This isn't fully hands-off — I still review replies and handle the next step myself — but it eliminates the repetitive part of writing and sending initial outreach.
What Improved After Switching
The biggest win wasn't cost savings (though that's nice). It was response quality. Because Claude Code personalizes every email based on real data about the lead, the messages feel more relevant. I'm not sending generic "I help businesses like yours" intros anymore — I'm opening with a specific observation about their industry or a recent company milestone.
Example: Instead of "I help e-commerce brands automate marketing," the email might say: "Saw you just launched a new product line — curious if you're handling abandoned cart emails manually or if that's automated yet." Much higher reply rate.
Second improvement: speed. In HubSpot, setting up a new sequence meant clicking through a workflow builder, configuring delays, and testing. Now I just add leads to the sheet, run the script, and emails go out the next day. The whole process takes 10 minutes instead of an hour.
Third: flexibility. If I want to test a new email angle or adjust the follow-up timing, I just edit the prompt or tweak a variable in the script. No need to rebuild a workflow in a drag-and-drop editor.
What This System Can't Do (And Why That's Fine)
I want to be clear about the limits. This isn't a full CRM replacement for every use case. If you have a sales team of 10 people who need shared pipeline visibility, real-time collaboration, and complex lead scoring, you probably still need HubSpot or Salesforce.
But if you're a solo consultant, freelancer, or small agency doing outbound sales, this approach works great. You lose the fancy UI, the built-in reporting dashboards, and the integrations with 50 other tools. What you gain is simplicity, full control, and zero monthly fees.
The other trade-off: this system requires a bit of technical comfort. You need to be able to work with APIs, run scripts, and troubleshoot when something breaks. If that sounds like a nightmare, stick with a paid CRM. But if you're comfortable with code (or willing to learn), the ROI is massive.
Actionable Takeaways
If you want to build something similar, here's where to start:
- Map your actual CRM usage — don't replicate features you don't use. Build only what you need.
- Start with email sequences — that's the highest-leverage automation. Get that working first, then expand.
- Use a spreadsheet as your database — it's simple, familiar, and integrates easily with Claude Code via Google Sheets API.
- Test on a small batch — run the first 10 leads manually to catch bugs and refine the email tone before scaling.
The system I built isn't perfect, but it does exactly what I need and nothing more. That's the whole point. If you're paying for CRM features you never touch, you might be a good candidate for this approach.
For more on how I use Claude Code to replace expensive SaaS tools, check out my posts on Claude Code vs. Zapier and building a custom CRM from scratch. And if you want help designing a sales automation system for your business, the FAQ covers how that engagement works.
The best CRM is the one you actually use. Sometimes that means building it yourself.