LKAUTOMATE
Louis Kowal · AI and automation systems

Systems that keep running when nobody is watching.

I build the systems that answer every lead, reply and quote: quote follow-up, outbound that reaches the inbox, instant lead response and booking reminders. Every system I ship tells you the moment something breaks.

Example logOvernight
  1. After-hours call answered. Marked urgent, on-call staff texted with the caller's details.
  2. New lead already in the CRM. Existing record updated, no duplicate created.
  3. Nightly deliverability report posted to the team channel.
  4. Email check couldn't run. Alert sent:
Email check couldn't run
Step
Verify the lead's email address
Reason
The lookup service's monthly quota is used up
Affected
3 new leads, marked "Check failed". Nothing lost.
To fix
Top up the plan, then re-run those 3 rows.
What a failure looks like in a system I build: plain English, and what to do next.
  • Top Rated on Upwork
  • 100% Job Success Score
  • HubSpot certified
  • English and French
  • UK based · clients in the US, UK and Europe
Who I help

Businesses where a missed call, a lost lead or a spam folder costs real money.

My clients don't share an industry. They share a problem: work that depends on someone remembering, copying or checking by hand. These are the situations I'm called in for most.

Clinics and practices

Calls after hours, emergencies that can't wait until morning, and a front desk that can't answer everything. I build phone agents that triage, book into the practice system and reach the right person.

Seen in: veterinary phone intake

Coaches and service firms on GoHighLevel

Pipelines, follow-ups and CRM syncs that don't drop or double people, and newsletters that land in the inbox instead of junk.

Seen in: nurture engine, CRM sync, deliverability

Distributors and importers

Quotes that go out and never get chased, a shared inbox, customers asking where their order is. I run this work myself at a small B2B equipment importer.

Agencies that sell through cold email

Finding the businesses, finding the person, sending, and handling the replies, run as one system and watched around the clock.

Seen in: outbound engine

Nonprofits and small teams

The spreadsheet that runs everything, turned into a proper database with forms, a dashboard and a weekly report that sends itself.

Seen in: grant pipeline, venue operations

Founders building a product

Multi-tenant apps, billing, deploys and the automated tests that keep them standing once real customers arrive.

Seen in: veterinary platform, public code

Selected work

What I've built, and the part that was hard.

Most of my client work is private, so clients are described rather than named unless they've been public about working with me. Every detail below is from the real build.

Veterinary AI startup, USLead systems architectDec 2025 to 2026

Phone intake and triage for veterinary clinics

Pilot stage

A phone agent that answers a clinic's calls, works out how urgent the problem is, and books the visit or gets a vet involved. I built it and rebuilt it as the company's own platform.

Online reputation firm, USOutbound systemsSince Aug 2026

A cold email engine that finds, sends and answers on its own

Live

The firm wins its clients by email. I built the whole chain, from finding the businesses to answering the replies, so the team's time goes on booked calls.

What I built

  • Scraping and ranking of target businesses, with a quote picked for each email and a linter that rejects bad ones
  • Decision-maker lookup across two data providers, with a check that the domain actually receives mail before a lookup credit is spent
  • Campaign building and upload, a watchdog that runs every 15 minutes and a nightly deliverability report
  • A reply worker that sorts replies, answers a plain "yes" with the booking link, confirms the booking in the same thread and sends a reminder two hours before the call

The hard part

Replies don't wait for office hours, and a wrong automatic answer to a prospect can't be taken back. So the worker answers only the clear cases itself, and the sorter is held to a fixed test set.

Python · Cloudflare Workers · Instantly · Apollo · Hunter · Supabase · Google Sheets · Slack

From target to booked call
Find and rank businessesquote picked and linted per email
does the domain take mail?
Look up the decision-makertwo providers, credit spent only if yes
Build the campaign and send
a reply arrives
Reply workersorts every reply
Plain yesbooking link sent
Bookedconfirmed, reminder 2h before
Anything elsedrafted for the team
watchdog every 15 minnightly deliverability report
47reply cases in the sorter's test set, zero mismatches

Financial services firm, NetherlandsGoHighLevel2026

Follow-ups that check the deal is still open before they fire

Delivered

When a deal goes into nurturing, the advisor should hear about it again at the right time, and never about a deal that has already moved on.

What I built

  • A workflow that starts when a deal enters the Nurturing stage, with a guard against enrolling the same deal twice
  • Five follow-up horizons, from 7 days to 12 months, carried in tags, so adding a horizon means adding one tag and one branch
  • After each wait, a re-check that the deal is still in Nurturing, then a dated task for the assigned advisor and every nurturing tag cleared

The hard part

The re-check after the wait. Without it, an advisor gets a task about a deal that closed three months ago, and the team learns to ignore the task list.

GoHighLevel workflows · pipeline stages · tags · tasks

One deal through the workflow
Deal enters Nurturing
already enrolled? stop
Read the horizon tag
7 days1 month3 months6 months12 months
Wait
still in Nurturing?
YesDated task for the advisor, tags cleared
NoExit quietly, no task

Coaching business, UKCRM automationJan to Mar 2026 · fix Sep 2026

A two-way CRM sync that doesn't bounce changes back and forth

Handed over

Contacts lived in GoHighLevel and in Kit, and someone was copying them between the two by hand. I replaced that with a sync in both directions.

What I built

  • New contacts, tags and unsubscribes carried across in both directions
  • Moved onto the client's own automation account in April 2026, so they own it outright
  • Came back in September 2026 when the unsubscribe path was failing every run, fixed it, and closed the loop between the two systems

The hard part

Two systems that are both allowed to write the same record will keep copying each other's changes. The sync has to tell its own writes apart from real ones.

n8n · GoHighLevel API · Kit API · Python

Both directions, one rule
GoHighLevel
Syncmy own echo? drop it · real change? write it
Kit
0 errorsin 54 runs the week after the fix. Before it, the unsubscribe path failed 18 runs out of 18.
The same pattern, rebuilt in public with 29 tests: sync-ledger

US coaching business · a solo author's newsletterEmail deliverabilityAug to Oct 2026

Email that lands in the inbox, diagnosed from real headers

Delivered · second in progress

In both cases the authentication records were already clean. The fixes were in which systems were sending, and who the mail was going to.

What I did

  • Found four systems sending as the domain where the brief named two, and moved marketing mail onto its own sending subdomain
  • Turned on DMARC reporting across three domains, verified Postmaster, built an engaged-contacts segment and proved at send time that it held
  • Fixed a broken unsubscribe link, and rebuilt six DNS records the registrar dropped in the middle of the project
  • For the newsletter: tested placement across five mailbox providers, showed Gmail was placing mail reader by reader, and moved sends to people who actually read it

Google Workspace · GoHighLevel · DNS · SPF, DKIM, DMARC · Postmaster Tools

What the headers said
Authentication-Results:
  spf=pass
  dkim=pass
  dmarc=pass

Records clean. Look elsewhere:
sending systems, sending identity,
and who is on the list.

Nonprofit foundation, USAirtableOct 2026

A grant pipeline the board runs from one screen

Delivered

Applications arrived through a form and lived in a spreadsheet. Six days from kickoff to walkthrough, the board had a database instead.

What I built

  • Applications, organisations and funding rounds as linked tables, with the board's spreadsheet imported and reconciled against the original to the cent
  • Each application matched to its charity by tax ID, then website, then name
  • Form submissions arriving by webhook, stage history recorded, and a status email to the directors every Thursday
  • A dashboard with stage counts and an action-required view, plus a three-page guide for the people using it

The hard part

The same charity turns up under slightly different names from one year to the next. Matching on tax ID first, then website, then name keeps one charity as one record.

Airtable interfaces and automations · form webhook · Python import scripts

How an application finds its charity
New application arrives by webhook
match on
Tax ID
no match
Website
no match
Name
then
Linked to its charity and funding year, stage history starts

Loughborough United Reformed ChurchOperations and systems managerJan 2024 to Sep 2026

Running the systems for a multi-room community venue

Handed over

A church building with rooms hired out through the week. For almost three years I designed and ran the systems behind it.

What I built

  • Centralised bookings and invoicing, standard templates for every message to hirers, and automated workflows around them
  • Reporting in the shape funders ask for
  • A new website with room pages, a 50-post blog and a safeguarding page, built to WCAG AA
  • A funding system: grants tracker, a reusable bid pack and drafted applications

HTML, CSS and JS · GitHub Pages · Python

Live

The venue's new website

Room pages, blog and safeguarding, rebuilt from scratch and handed over.

louiskowal.github.io/lurc-connect
Also built
  • Sustainability assessment portalsClient and assessor portals with enforced separation, dashboards and evidence libraries on Airtable and Softr. The database is written by a script that can resume and re-check the live base.
  • Dental practice systems, USBuilt for a dental practice handling patient health information under a signed business associate agreement. The details stay with the client.
  • Automations for a paid courseBuilt the automations taught inside another operator's course, and coached its students to apply them to their own businesses. Under NDA.
  • GoHighLevel funnelA three-page funnel with an upsell and the automations behind it, live on the client's domain.
Try it yourself
Live demo

WhatsApp-style sales agent

It interviews you about your business, then switches into selling your offer to you. A browser preview of the agent logic, built to run on WhatsApp Business.

Message it
Live demo

Funding assessment

A multi-step eligibility check scored by a rules engine against five finance products. The AI only explains the result. It never makes the decision.

Take the assessment
On request

Phone agents by industry

Trades, dental, real estate, legal and hospitality, each with its own way of sorting urgent from routine. Tell me your business and I'll send the number for yours.

Ask on a call
Check my code
Public repository · 25 tests

multitenant-postgres

Tenant isolation in Postgres and the four ways it silently fails, tested against a real Postgres 16 in Docker. Audit logging in a trigger, and migrations that don't take the app down.

github.com/louiskowal/multitenant-postgres
Public repository · 29 tests

sync-ledger

Two-way sync without the duplicate loop: deterministic identity keys, echo suppression and a dead-letter table. No dependencies.

github.com/louiskowal/sync-ledger

Reference implementations, rebuilt clean. No client code and no client data.

What clients said

In their words.

What sets Louis apart is his ability to understand complex systems quickly and translate ideas into clean, functional implementations without unnecessary friction. … I never felt like I had to micromanage him. Louis takes ownership and executes.

Founder, US veterinary AI startupVerified Upwork review · Jan 2026

“Louis communicated great, very nice and kind, and he went above and beyond when I asked him. He didn't have to but he did. Would def hire again.”

Brandon BachikGoHighLevel funnel build · Upwork, 5.0

“What impressed me most was his transparency.”

Owner, US coaching businessEmail deliverability project · Upwork, 5.0 · Sep 2026
How I work

Four steps, in this order.

I'd rather tell you not to automate something than build the wrong thing well.

  1. Find the bottleneck

    One call about the part of the business that costs the most. If automation isn't the fix, or the task takes an hour a week, I'll say so.

  2. Prove it by hand

    Before anything runs on its own, I run it once on your real data and we check the output together.

  3. Build it with alarms

    Every step that can fail gets its own alert: what broke, why, and what to do, sent where you already look.

  4. Hand it over

    It runs in your accounts, with written documentation. You own it, and you can call me when you want more.

Fixed price when the scope is clear, with the hours and the arithmetic shown. Available 9am to 9pm UK time, Monday to Saturday.
Field notes

Things I check that most builds skip.

Each of these comes from a system that broke, nearly broke, or would have broken quietly.

Silent failure costs more than downtime.

Wrong output running for three weeks costs more than a clean stop. So every step that can fail sends an alert.

Duplicates before sequences.

Leads arrive from several places, so the same person enters twice. Two reps calling one lead is worse than a slow follow-up.

The AI never does the maths.

Prices, capacities and emergencies are decided by plain code. The model handles the conversation.

Re-check after every wait.

A reminder about a deal that closed three months ago teaches the team to ignore the system.

Two leads in the same second can share a row.

Some spreadsheet appends count the rows, then write. Leads that arrive together collide and one disappears without an error. I test with simultaneous submissions.

Clean DNS is where deliverability starts.

Gmail places mail reader by reader, from each reader's history with you. Who you send to matters as much as your records.

A phone agent never quotes a price.

It collects, triages and books. Prices and promised times come from a person, which keeps a real deployment out of trouble.

A human says yes to anything irreversible.

Money, legal documents, messages to customers and ad spend wait for an approval step.

About

I'm Louis Kowal.

I'm French, I live in the UK, and I work in English and French. I started LKAUTOMATE in 2023.

Most of what I build has to keep working after handover, with nobody watching it. That's why every system I ship comes with alerts and written documentation, and why I test against real data before anything goes live.

Alongside client work, I spent almost three years running the operational systems for a community venue in Loughborough. I've been classically trained on harpsichord and organ since I was five, and I'm an Ironman finisher. The discipline transfers more than people expect.

I work alone or with a small circle of people I trust. Clear scope, fast iteration, no surprises, no upselling. I'd rather be the second AI builder you hire, and the last.

Based
United Kingdom
Languages
English, French
Hours
9am to 9pm UK, Monday to Saturday
Upwork
Top Rated, 100% Job Success Score
Certified
HubSpot
Works in
GoHighLevel, n8n, Make, Airtable, Supabase and Postgres, Python, Next.js, Vapi, Twilio, the Claude and OpenAI APIs
Work with me

Tell me which part of the business costs you the most.

A 30-minute call, no prep needed. If there's a fit, you'll get a clear scope and a price. If there isn't, you'll leave with at least one useful suggestion.

Book a 30-minute call
Or email louis@lkautomate.com