Independent operator Outbound, CRM & revenue systems Rev 2026.08

Most companies don't
have a lead problem

The list The CRM The follow-up nobody owns

They have a system nobody owns.

Preamble — the seam

A list gets bought. A CRM gets half-configured. A campaign gets launched. Each part works. The seams between them are where the revenue leaks out, and the seams are what nobody is assigned to.

I do the unglamorous middle. I take the messy export, reconcile it, decide what a record actually is for your business, and put it somewhere a salesperson can work it. Then I connect the sending, the tracking, and the follow-up so the whole thing runs on a schedule instead of on somebody's memory.

I'm not an agency and I don't sell retainers for activity. I build a specific machine, document it, hand you the keys, and stay available for the parts that break. If what you need is a campaign run for you every month, I'll tell you that and point you elsewhere.

  1. Primary build surface: GoHighLevel — custom fields, pipelines, opportunity stages, workflows.
  2. Cold email infrastructure: Instantly — inbox rotation, warmup, suppression, reply routing.
  3. Data layer: Airtable and Google Sheets as the source of truth upstream of any CRM.
  4. Scheduling and orchestration: scripted jobs, scheduled tasks, and API glue where the tools stop.

A list is not a pipeline. A pipeline is not a process.

The approach — four working rules

Four rules I don't bend.

Every one of these came from watching a build go sideways. Open any of them [ + ]

01 The work starts in the data, not the copy.

Nobody wants to hear that the problem is a spreadsheet. It usually is. Before a single line of copy matters, the list has to answer boring questions: what is one record, what makes two records the same record, and what happens when a field is empty.

What that looks like in practice

Deciding whether the business or the human is the primary record — for B2B it's almost always the business, with a decision-maker attached as optional. Keeping name fields for actual humans instead of stuffing a company name into them. Catching the shared phone numbers and franchise main lines that will silently merge two real companies into one contact on import.

A partial record is still worth having. A business with a name and a city is a lead you can enrich later. A record you can't trust is worse than no record, because someone will act on it.

02 The system has to run when you're asleep.

Anything that depends on a person remembering to do it on a Tuesday is not a system — it's a habit, and habits decay under load. The test I use: if you took a two-week vacation, what would still happen on its own, and what would quietly stop?

The parts I automate first

Enrichment and list hygiene. Sending cadence and inbox rotation. Stage movement when a reply lands. Follow-up dates that create themselves instead of waiting for someone to set a reminder. Weekly metrics that arrive whether or not anyone asked.

And what I deliberately don't

Anything where a wrong automated action is expensive and hard to reverse — sending to a suppressed contact, marking a deal closed, deleting records. Those stay manual, with a human confirming. Automation should remove tedium, not judgment.

03 I build the machine. You keep it.

Build

A CRM configured around how you actually sell — fields, pipeline stages, and opportunity types that match your real motion, not a template's. Lead data reconciled, deduplicated, and imported clean. Campaigns wired to the CRM so a reply changes a stage instead of sitting in an inbox.

Document

Written down in plain language: what each field means, what each automation does, what breaks it, and how to undo an import. If the documentation only makes sense to me, I haven't finished.

Hand off

You own every account, every key, and every record. There is no piece of the system that only works while I'm being paid. That's the point — the engagement should end.

04 Deliverability is a compliance problem before it's a marketing one.

The fastest way to lose a domain is to treat suppression as a nice-to-have. Do-not-contact lists get imported and tagged before a campaign goes live, not after the first complaint. Unsubscribes propagate everywhere, not just in the tool that received them.

Authentication (SPF, DKIM, DMARC), sending domains kept separate from your primary domain, warmup that isn't rushed, volume that climbs slowly. None of it is clever. All of it is the difference between a channel that compounds and one that burns down in six weeks.

I'll say no to sends I think will get you blocked. That's part of what you're hiring.

Position · opinionated · revised as I learn

Everything above reduces to one question.

kl://approach/premise.py
# the only question that matters at handoff:
# does this keep working without me in the room?
def healthy(system):
    if system.owner is None:
        return False          # unowned = already broken
    return (
        system.documented
        and system.runs_on_schedule
        and system.reversible      # every import, every send
    )

Exhibit A — one system, in numbers

The numbers below are from a system I built and still run: a full outbound stack for Padoori, Inc., from raw scraped list to a working sales pipeline.

0

Contacts live in the CRM after reconciliation — from 6,263 source rows across two import passes, with 51 records merged on shared phone numbers and every one of them traceable back to the master by ID.

  • 0 Source rows reconciled across 48 columns, from scrape to import-ready. Master dataset
  • 0 Custom CRM fields designed around the actual sales motion, not a template. GoHighLevel
  • 0 Pipeline stages, New through Closed Won — each with a defined entry condition. Opportunity model
  • 0 Scheduled jobs running the content and reporting side without a human trigger. Automation layer

The through-line

Build the thing that keeps working after the consultant leaves.

Every engagement is scoped to end. If you still need me in a year, it should be because you're building something new — not because the last thing can't stand up on its own.

Appendix — the stack I build on

Tools, not religion.

I have preferences, and I'll argue for them. But I'll work in what you already own if switching costs more than it returns.

Start a project

Tell me what's leaking.

The most useful first message describes the mess, not the solution. What's the list, where does it live, what happens to a reply today, and what should be happening instead.

I read everything and reply to anything I can actually help with — usually within two business days.

Prefer email? hello@kelseylauni.com

Colophon

This page is one long argument rather than a set of tabs, because that's closer to how the work actually goes — one thing leading to the next, with the boring middle included instead of hidden.

Set in Geist, Geist Mono and Newsreader. Built as static HTML and CSS with no framework, no tracking, and no cookie banner, because it doesn't need any of them.