Leads land in your CRM sorted, with no retyping.

For owners whose leads live in spreadsheets and inboxes: rules that clean, sort and check every record before it reaches the CRM. The live demo sorts one Colorado city's newest registrations onto a board, each run capped at 45 seconds.

LiveScrape to CRM

/api/scrape/status

Colorado cities to pick from
8
time limit per run
45 s

Source: Colorado Secretary of State, business entities (data.colorado.gov)

Board columns

  1. Call this week
  2. New
  3. Parked

Push to outside CRMs

  • HubSpot push: On request
  • Airtable push: On request
  • Notion push: On request
  • Pipedrive push: On request

Checked Open the full demo

Sound familiar

Every Monday: export, clean it in a spreadsheet, import. Leads from forms and calls wait their turn. Some vanish, follow-ups slip, and that is money bleeding out of your pipeline. We build the version where no one retypes it.

The live board below does that with public data. A local-service word in a business name sends it to Call this week; nonprofits and holding companies go to Parked.

What you get

Stop being the go-between. Your website and chat feed the CRM, with leads going on to your phone app and your inbox.

  • Clean public leads. Every lead is captured, deduped and dropped in the right pipeline column by plain rules. The live demo's source is marked public domain and its requests respect the robots file. [robots.txt, kanban]
  • Call controls. A call list push to the phone app starts as a practice run that leaves records untouched, with up to 200 people a run and no one listed twice. Do-not-call is read from two separate sources, with no switch to turn it off.
  • Email when a lead lands. An email goes out the moment a lead arrives, and every send attempt is logged. We also email the details when a chat visitor asks for a person. [Resend, SMTP]
  • Automatic jobs. Five trigger types can start a job: a tag, a button, a timer, a field change or a message from another app. Each job rechecks its conditions first, and one queue records what ran.
  • Rules you can edit. We keep each rule as a short template that anyone on your team edits. A button on a record opens the phone app with the number loaded, and you press Call. [simple SOPs]
  • Data out of a platform. We pull your records out through an API or a spreadsheet export, convert them in bulk and load them into a database you own. [API, CSV]

See it run

Someone on your team copies business names off a website and retypes them into the CRM. The first demo does that job for real, sorting records on the way in.

Showing a recorded run from 30 Oct 2026. Press Run it live for a fresh one.

Snapshot frame

Recorded run, 30 Oct 2026: the demo server's screenshot of its light CRM board for Denver, 8 in Call this week, 2 in New, 0 in Parked. Business names are covered on this copy.

Recorded run, 30 Oct 2026: the server's screenshot of its light CRM board, 1040×1012 px, taken in 1974 ms. Business names are covered on this copy; a live run shows them.

Progress

  1. ok Scrape the registry API 275 ms
  2. ok Write to the light CRM (SQLite) 7 ms
  3. ok Photograph the kanban page with Playwright 1974 ms
  4. On request Push to HubSpot
  5. On request Push to Airtable
  6. On request Push to Notion
  7. On request Push to Pipedrive

Recorded run: finished in 2.3 s of the 45 s limit. The source answered in 275 ms.

HubSpot push On request
Airtable push On request
Notion push On request
Pipedrive push On request

Light CRM board

Call this week 8

name withheld LLC · Denver 80202 · formed 2026-10-28 service word in the name: medicine
name withheld LLC · Denver 80227 · formed 2026-10-28 service word in the name: realty
name withheld LLC · Denver 80203 · formed 2026-10-28 service word in the name: services
name withheld LLC · Denver 80247 · formed 2026-10-28 service word in the name: medical
name withheld LLC · Denver 80237 · formed 2026-10-28 service word in the name: services
name withheld LLC · Denver 80205 · formed 2026-10-28 service word in the name: accounting
name withheld LLC · Denver 80222 · formed 2026-10-28 service word in the name: cleaning
name withheld LLC · Denver 80229 · formed 2026-10-28 service word in the name: cleaning

New 2

name withheld LLP · Denver 80202 · formed 2026-10-28 no rule matched
name withheld LLC · Denver 80203 · formed 2026-10-28 no rule matched

Parked 0

none
  • Nonprofit entity types go to Parked.
  • A local-service word in the name (roofing, plumbing, cleaning, salon, dental, law, design, ...) goes to Call this week.
  • Holding, capital, investment or trust names go to Parked.
  • Everything else stays in New.
  • I keep the top of the list: Call this week first, then New, and at most two Parked so you can see the decision.

Server log, streamed

[0.00s] GET data.colorado.gov/resource/4ykn-tg5h.json  city=Denver, last 30 days, limit 60[0.28s] 200 OK  60 rows in 275 ms  ->  60 unique registrations[0.28s] filter: upper(principalcity)='DENVER' AND principalstate='CO' AND entitystatus='Good Standing' AND entityformdate > '2026-09-30T00:00:00'[0.29s] triage of 60: call this week 8, new 48, parked 4[0.29s] kept the top 10: INSERT 10 rows into leads (SQLite)  7 ms[0.29s] playwright: open our own /api/scrape/board/7b0d59375e04ce82, screenshot[0.29s] HubSpot: not connected yet, no request made[0.29s] Airtable: not connected yet, no request made[0.29s] Notion: not connected yet, no request made[0.29s] Pipedrive: not connected yet, no request made[2.26s] kanban screenshot 1040x1012, 113 KB in 1974 ms[2.26s] done in 2.3 s (budget 45 s)

Live on this server: the newest registrations for one of 8 Colorado cities land on a CRM board inside a 45-second limit.

Open the public business records demo and watch the board fill.

Leadflow workflow /n8n-lead-crm/ Captured

Sandbox

n8n lead capture to CRM sandbox ("Leadflow")

Sandbox: Leadflow cleans leads, scores them by fixed rules and routes them hot, warm or cold in six visible steps.

Open

Its message panel accepts a correctly signed event, refuses a forged one and ignores a repeat. See the public-feed importer.

What is connected today

EspoCRM runs our deepest CRM build. Its lead record carries 66 custom fields, and a rule run before every save enforces call logging and do-not-call. It is open source, a publicly shared project, customized here. [EspoCRM, Postgres 16, Podman]

We connect the push adapters for HubSpot, Pipedrive, Airtable and Notion to your account during the job. [adapters]

We set up the CRM you already use to work with a phone app and sign-ups. We wire your apps and chatbot to it the same way. The connection matrix shows each platform's evidence, and the contractor CRM build shows the call and sign-up rules.

Client work

We delivered this kind of work for clients. Our own sales reps work their leads in the EspoCRM build above, with call logging and do-not-call enforced before every save.

How it is built

Skip the technical part

This part is for the technical reader.

Jobs wait in one queue that is also the record of what ran. Each worker claims a job in a single database statement, so two workers never take the same job. A run over its cap is refused, and a tag added by one automation can never start another. [Postgres, FOR UPDATE SKIP LOCKED]

New sign-ups start with a practice run that changes nothing. One match converts the lead to a customer and keeps its history, several matches go to a person, and no match creates a fresh record. [dry run by default, exit codes 0, 1 and 2]

Messages from another app are saved before processing and accepted only with a valid signature, and each event applies once. With no signing secret set, every message is refused. [webhooks, HMAC-SHA256]

How it is tested

A missed do-not-call flag can put the wrong number on a call list. These checks cover the CRM tools and the services around them.

  • 174 test functions across 12 files CRM tooling checks Code audit Checked
  • Failure on any of 25 conditions Health conditions checked Health script Checked
  • 14 dumps, checked by reading their contents lists Nightly backups retained Backup tooling Checked

10 queue tests, 2 of them with real competing workers, check that two workers never take the same job.

Start small

Your leads are leaking. Step one is a paid pipeline audit: where leads arrive, where someone copies them and where follow-ups slip. We find the leaks and plug the worst one first; commitment comes second.

Tell us what you would change.

One sentence about the project is enough. Name the tools you already use, or point at an example on this site.

Start a project