Skip to content
Lead Gen May 15, 2026 · 11 min read

How to Build a Solo-Realtor CRM in 90 Minutes with ConvertKit + n8n (No Code)

A real solo agent's playbook: build a buyer/seller CRM with email nurture, AI follow-up, and SMS handoff for $59/mo. Workflow JSON included.

ShareTwitterLinkedInReddit
How to Build a Solo-Realtor CRM in 90 Minutes with ConvertKit + n8n (No Code)

Editorial note: I get a small commission if you sign up for ConvertKit or n8n through the links here. You’d pay the same either way. The stack below is what I actually run my $1.4M GCI solo practice on as of May 2026.

In June 2025 I was paying BoldTrail $479/month, and the CRM was, by my count, sending eight emails a week to my database that I had not written, did not endorse, and which used the phrase “exclusive market insights” in seven of those eight subject lines. I knew this because three different leads forwarded them to me and asked, more or less, “are you okay?”

I cancelled at the end of the month, and for about ten days I was running my pipeline on a Google Sheet, a series of recurring calendar reminders, and panic. Then I spent a Saturday afternoon building this stack. Eleven months later, it’s still what I use. It costs me $59/month all-in. It has sent 4,200 nurture emails that I did write. It has flagged 31 hot leads in real time. And it has not, to my knowledge, embarrassed me once.

Here’s exactly how to build it. Plan on 90 minutes if you focus, three hours if you’re getting distracted by the dog.

The stack and what it does

Three tools:

  • ConvertKit ($9–$25/mo depending on subscriber count): email list, sequences, forms, tagging.
  • n8n ($20/mo Cloud Starter, or free if self-hosted): the automation hub that connects everything.
  • A simple property form (free — we’ll use ConvertKit’s built-in forms).

Optional add-ons I run:

  • OpenPhone ($19/mo): for the SMS handoff piece. You can substitute Twilio if you’re cheap.
  • A Claude or OpenAI API key ($5–$15/mo of actual usage): for the AI follow-up email drafting.

Total: $59/mo on the minimum config, $89/mo with everything turned on. Compare to $479/mo for BoldTrail or $649/mo for Sierra Interactive.

What this CRM does, end to end:

  1. A lead fills out a “what’s my home worth” form on your site.
  2. n8n catches the form submission, calls a home-valuation API, drafts a personalized response email with Claude, and sends it via ConvertKit within 90 seconds.
  3. The lead is tagged in ConvertKit and dropped into one of three nurture sequences — buyer, seller, or “just curious” — based on form responses.
  4. If the lead clicks an email link, opens 3+ emails in a week, or returns to your site, their lead score goes up.
  5. When their score crosses a threshold, n8n texts your phone with the lead’s name, address, and what they did.
  6. You call them. They are warm and impressed. You close.

That’s the whole loop. Everything else is plumbing.

Step 1: Set up ConvertKit (20 minutes)

Sign up for ConvertKit here. The Creator plan starts at $9/mo for up to 300 subscribers. You’ll outgrow that fast if you’re a working agent — expect to be at the $25/mo tier within a quarter.

Once you’re in:

Create three tags. Settings > Subscribers > Tags. Make:

  • lead-buyer
  • lead-seller
  • lead-curious

Create three sequences. Sequences > New Sequence. Make:

  • Buyer Nurture (8 emails over 60 days)
  • Seller Nurture (10 emails over 90 days)
  • Curious Nurture (4 emails over 30 days)

Don’t write the emails yet. You’re going to use Claude or Jasper to draft them in step 4. For now, just create the empty sequences and set the sending schedule.

Set up a form. Grow > Landing Pages & Forms > New. Create an inline form titled “Home Value Estimate.” Add fields for: First name, Email, Property address, “Are you thinking about: Selling / Buying / Just curious”, and (optional) Phone.

In the form’s Settings > Incentive, set the redirect URL to a /thank-you page on your site. We’ll use the webhook in step 3.

Get your API key. Settings > Account > Advanced > API & Webhooks. Copy your API Secret. Save it somewhere — a password manager, ideally.

Step 2: Set up n8n (15 minutes)

Sign up for n8n Cloud Starter here at $20/mo. If you want to self-host, install instructions are on their docs site, but for most agents Cloud is fine.

Once you’re in your n8n workspace:

Add your ConvertKit credential. Click Credentials > New > ConvertKit. Paste the API Secret from step 1. Save.

Add your Anthropic or OpenAI credential. Same flow. You’ll need an API key from console.anthropic.com (Claude) or platform.openai.com (OpenAI). Top up with $20 to start — that will last you months at solo agent volume.

Add your OpenPhone or Twilio credential if you’re doing the SMS piece.

That’s the setup. The actual workflow goes in step 3.

Step 3: Build the workflow (30 minutes)

Here is the full n8n workflow JSON. Copy this. In n8n, create a new workflow, click the three-dot menu, choose “Import from File” — paste the JSON. You’ll see seven nodes appear on the canvas.

{
  "name": "Solo Realtor CRM - Lead Intake",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "convertkit-lead",
        "responseMode": "onReceived"
      },
      "name": "Webhook: ConvertKit Form Submission",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json[\"fields\"][\"intent\"]}}",
              "value2": "selling"
            }
          ]
        }
      },
      "name": "Route by Intent",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 1,
      "position": [480, 300]
    },
    {
      "parameters": {
        "url": "https://api.tophap.com/v1/property/value",
        "queryParametersUi": {
          "parameter": [
            {
              "name": "address",
              "value": "={{$json[\"fields\"][\"property_address\"]}}"
            }
          ]
        }
      },
      "name": "Get Property Valuation",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [720, 220]
    },
    {
      "parameters": {
        "resource": "message",
        "operation": "create",
        "model": "claude-3-5-sonnet-20241022",
        "maxTokens": 800,
        "prompt": "You are a thoughtful real estate agent writing a personalized email response. The lead is: {{$json[\"fields\"][\"first_name\"]}}, interested in {{$json[\"fields\"][\"intent\"]}} a home at {{$json[\"fields\"][\"property_address\"]}}. Property valuation data: {{$node[\"Get Property Valuation\"].json}}. Write a warm, specific 4-paragraph email that references the property's neighborhood, recent comps, and one observation about current market conditions in that area. End with an offer to walk through the data on a 15-minute call. Sign as 'Your Name'. Do NOT use the phrases 'exclusive insights' or 'reach out'."
      },
      "name": "Draft Email with Claude",
      "type": "n8n-nodes-base.anthropic",
      "typeVersion": 1,
      "position": [960, 220]
    },
    {
      "parameters": {
        "resource": "subscriber",
        "operation": "addSubscriberToSequence",
        "sequenceId": "={{$json[\"sequence_id\"]}}",
        "email": "={{$json[\"fields\"][\"email_address\"]}}",
        "additionalFields": {
          "firstName": "={{$json[\"fields\"][\"first_name\"]}}",
          "tags": ["lead-seller"]
        }
      },
      "name": "Add to ConvertKit Sequence",
      "type": "n8n-nodes-base.convertKit",
      "typeVersion": 1,
      "position": [1200, 220]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openphone.com/v1/messages",
        "headerParametersUi": {
          "parameter": [
            {"name": "Authorization", "value": "Bearer YOUR_OPENPHONE_TOKEN"}
          ]
        },
        "bodyParametersUi": {
          "parameter": [
            {"name": "to", "value": "+1YOURPHONENUMBER"},
            {"name": "text", "value": "NEW HOT LEAD: {{$json[\"fields\"][\"first_name\"]}} at {{$json[\"fields\"][\"property_address\"]}}. Intent: {{$json[\"fields\"][\"intent\"]}}. Call within 5 min."}
          ]
        }
      },
      "name": "Send SMS Alert",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [1440, 220]
    },
    {
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{$json[\"lead_score\"]}}",
              "operation": "largerEqual",
              "value2": 50
            }
          ]
        }
      },
      "name": "Lead Score >= 50?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [1200, 400]
    }
  ],
  "connections": {
    "Webhook: ConvertKit Form Submission": {
      "main": [[{"node": "Route by Intent", "type": "main", "index": 0}]]
    },
    "Route by Intent": {
      "main": [
        [{"node": "Get Property Valuation", "type": "main", "index": 0}],
        [{"node": "Add to ConvertKit Sequence", "type": "main", "index": 0}]
      ]
    },
    "Get Property Valuation": {
      "main": [[{"node": "Draft Email with Claude", "type": "main", "index": 0}]]
    },
    "Draft Email with Claude": {
      "main": [[{"node": "Add to ConvertKit Sequence", "type": "main", "index": 0}]]
    },
    "Add to ConvertKit Sequence": {
      "main": [[{"node": "Lead Score >= 50?", "type": "main", "index": 0}]]
    },
    "Lead Score >= 50?": {
      "main": [[{"node": "Send SMS Alert", "type": "main", "index": 0}]]
    }
  }
}

A few things to fix after import:

  1. Update the webhook URL. When you open the Webhook node, it shows a URL like https://yourworkspace.app.n8n.cloud/webhook/convertkit-lead. Copy that.
  2. Wire it to ConvertKit. In ConvertKit, go to Settings > Account > Webhooks. Add the URL you just copied. Trigger: “Subscriber Confirmed.”
  3. Plug in your TopHap API key in the Get Property Valuation node, or swap for HomeBot, Estated, or whatever valuation API you prefer. The cheapest reliable one I’ve found is TopHap at ~$0.04/lookup.
  4. Replace YOUR_OPENPHONE_TOKEN and +1YOURPHONENUMBER with your real values.
  5. Hardcode your sequence IDs in the ConvertKit node — pull them from the URL when you open a sequence in ConvertKit.

Now click “Active” on the workflow. The webhook is live.

Step 4: Draft the nurture emails (15 minutes — yes, really)

I used to spend a weekend writing email sequences. Now I use Claude or Jasper to draft and edit them down.

Open Claude or ChatGPT. Paste this prompt, modifying for your market:

You are writing an 8-email buyer nurture sequence for a solo real estate agent in [YOUR CITY, YOUR STATE]. The agent’s tone is warm, direct, and never uses the phrases “exclusive insights,” “reach out,” “in today’s market,” or “I hope this email finds you well.” Each email should be 150-200 words. The sequence runs over 60 days. Email 1 sends immediately, email 2 at day 3, email 3 at day 7, email 4 at day 14, email 5 at day 21, email 6 at day 30, email 7 at day 45, email 8 at day 60. Each email should have a specific subject line, a single clear point or piece of value, and a soft CTA (not always a “let’s chat” — vary it). The audience is buyers who filled out a property valuation form but said they’re “thinking about buying.” Avoid generic content — reference real things about [YOUR CITY]: specific neighborhoods, school districts, commute realities, recent market patterns.

You’ll get a draft sequence in about 90 seconds. Read it. Cut the bottom 30%. Rewrite the subject lines in your voice. Paste each email into ConvertKit’s sequence builder.

Repeat the prompt with adjustments for the seller and “just curious” sequences.

This is the step everyone skips, and it’s the most important one. The automation is plumbing. The emails are the actual product. If your nurture sequence sounds like a generic Compass blast, nothing else matters.

Step 5: Lead scoring (10 minutes)

ConvertKit has built-in subscriber tagging. We’re going to use it to score.

Go to Automations > New Automation. Build three:

Automation 1: Email click adds 10 points.

  • Trigger: Subscriber clicks a link in an email.
  • Action: Add tag score-+10.
  • Action: Run a custom n8n webhook (we’ll wire this in a sec) that increments their lead score.

Automation 2: Email opens count toward score.

  • Trigger: Subscriber opens 3+ emails in 7 days.
  • Action: Add tag score-+15.

Automation 3: Return visit to site.

  • Trigger: Form submission, return visitor (use ConvertKit’s site tracking or a simple JavaScript snippet).
  • Action: Add tag score-+20.

You can do this scoring entirely with tags. Or, if you want a numeric score, run a small n8n workflow that reads the tags every 6 hours and assigns a number. I do tags only — it’s simpler and ConvertKit’s filter views let you see “subscribers with score-+10 and score-+15 in the last 14 days,” which is effectively the same thing.

When a lead hits two scoring tags in 14 days, the n8n SMS workflow fires. You get a text. You call them.

What it costs and what it earns

Monthly cost:

  • ConvertKit Creator (up to 1,000 subs): $25
  • n8n Cloud Starter: $20
  • OpenPhone: $19
  • TopHap API: ~$2-5 at solo volume (50 lookups/mo)
  • Anthropic/OpenAI API: ~$5
  • Total: ~$71/mo

Compare to:

  • BoldTrail: $479-$649/mo
  • Sierra Interactive: $499-$799/mo
  • Chime: $399-$599/mo

So you’re saving roughly $400/mo, or $4,800/yr.

What does it earn? Last year, this CRM was the first touch on six closed deals. Average commission per side at my volume: ~$8,400. That’s roughly $50,400 in commission from leads who came through this funnel, against $852/yr in stack cost. Your mileage will vary — those numbers are not magic from the tool, they’re a product of writing decent nurture emails and actually calling the hot leads when the SMS fires.

The point isn’t that this stack made me six deals. It’s that this stack let me run a real lead-nurture operation without the $5,700/yr CRM fee.

What breaks and how to handle it

In 11 months running this, here’s what’s gone wrong:

ConvertKit rate-limited me once. Sent 200 form submissions in 4 hours during a Facebook ad spike. The API throttled. n8n’s error workflow texted me. I added a 2-second delay node before the ConvertKit call. Fixed.

Claude returned a weird email twice. Once with a hallucinated comp (“the property next door sold for $890,000” — there was no such sale). Now I have a review step: the draft sits in ConvertKit as a draft for 5 minutes before sending, and a second n8n workflow alerts me if any draft contains ”$” amounts that don’t match the TopHap valuation. Two-minute fix.

OpenPhone webhook died for 6 hours. Their service had an outage. I didn’t get hot-lead alerts during that window. Now I have a heartbeat workflow that pings OpenPhone every 30 min and texts me if it fails. Belt and suspenders.

The system is not zero-maintenance. It’s low-maintenance. Plan on 30 minutes a month of tinkering.

When you should NOT use this stack

  • You hate technical fiddling. This is a no-code stack, but no-code doesn’t mean no-effort. If clicking around OAuth screens makes you want to scream, pay BoldTrail or Homesage.ai and move on.
  • You do <30 transactions a year. The savings don’t justify the setup time at that volume.
  • You don’t want to write your own emails. The whole edge here is that you control the voice. If you’re outsourcing that to AI raw, the off-the-shelf platforms have nicer templates.

If you do want to build it: the ConvertKit free trial is 14 days, n8n’s is 14 days too. Build it on a quiet Saturday. Worst case you spent four hours and you go back to your old setup. Best case you save $4,800 a year and your nurture emails stop using the phrase “in today’s market.”

Frequently asked questions

  • Cost. Those platforms run $300-$650/mo and you're locked into their lead source. This stack costs $59-$89/mo total, and you own the data and the workflow. The tradeoff is you have to maintain it. If you'd rather pay $400/mo to not think about plumbing, those platforms are fine. This is for agents who'd rather save $4K a year.

ShareTwitterLinkedInReddit

Keep reading