JM
All demos
03B2B lead pipelineReal run · cached replay

Qualified B2B leads, with the evidence attached

The one field that qualifies a church-giving SaaS prospect — which donation platform they use today — isn’t for sale. This 11-stage pipeline reads it off each church’s own site and ranks them for outreach.

932 → 317
discovered → scored
0
hallucinations shipped
~$0.04
per evidenced lead
Watch it run

A real scan of North County San Diego, replayed

Every number is from one end-to-end run in July 2026. Press replay to watch 932 raw map records compress to 317 scored, evidenced prospects.

North County San Diego · 932 churches
Discover churches
Overture Maps · open, licensed data
found
Qualify & dedupe
has a website · in region · is a congregation
kept
Probe live sites
skip the dead; hold bot-blocked for review
live
Locate the giving page
the click-path a human would take
found
Fingerprint the platform
32 platforms · 189 signals, surface-scoped
detections
Extract & verify contacts
AI reads staff pages; every field re-checked in code
kept · 241 rejected
Score & bucket
priority-ranked for outreach
ranked

This replays a real scan in seconds. The live pipeline runs politely over ~2–3 hours across ~500 church servers — which is exactly why this page is cached and not a live button.

Where the money is

The 317, sorted into outreach buckets

The payoff is the 37 “rails-only” churches — on a bare PayPal or Venmo button with no church tool. They’ve proven they want digital giving and have nothing purpose-built doing it. A column no purchased list contains.

37
Top prospects
Greenfield — rails only
Bare PayPal / Venmo / Zelle, no church software. The top prospects.
128
On a competitor
Pushpay, Planning Center… a switch play.
91
Needs review
JS-rendered give page, awaiting a browser pass.
33
Greenfield — offline
No online giving at all.
28
Already a customer
On the incumbent — suppress.
Why it's smart

A machine built to distrust itself

A confidently-wrong prospect list doesn’t just waste a call — it burns the account and teaches sales to distrust the data. So a verbatim tripwire re-checks every fact the model returns against the page it read, and threw out 241 of the model’s own answers to ship zero hallucinated contacts.
1,664
Contacts kept
241
Rejected by tripwire
0
Hallucinations shipped
$2.93
Total LLM spend
whole county
The funnel

932 raw records → 317 scored prospects

932
Discovered
from open map data
563
Qualified
real site, in region
357
Live & crawled
154 dead · 52 held for review
242
Give page found
located the click-path
317
Scored
bucketed & ranked
What they run today

Detected platforms — 1,208 evidenced detections

Fingerprinted against 32 platforms and 189 signals — and only inside a real surface (a script src, an iframe, the give button’s destination), never loose prose.

Planning Center Giving
58
Tithe.ly
33
PayPal (direct)
31
Pushpay
27
Subsplash
18
Vanco
10
Breeze ChMS
7
Venmo (direct)
5
Zelle (direct)
5
EasyTithe
4
Stripe (direct)
4
Shelby Systems
4
Real output

Sample classifications (names withheld)

Real rows with the church name removed. The pipeline extracts names and emails, but a public demo shouldn’t publish a targeting list of real congregations or the people who work there.

Church (generalized)Platform detectedBucket
Non-denominational · Vista · smallPayPal (direct)Top prospect
Adventist · Oceanside · smallVenmo (direct)Top prospect
Episcopal · Escondido · smallPayPal (direct)Top prospect
Non-denominational · San Diego · smallPlanning Center GivingSwitch play
Episcopal · Del Mar · smallBreeze ChMSSwitch play
Episcopal · Vista · smallTithe.lySuppress
Non-denominational · Oceanside · micro— none foundGreenfield
Methodist · Encinitas · smallunresolved (JS-rendered)Review
A judgment call, not a shortcut

Why I threw out the obvious data source

Google Maps Platform ToS 3.2.3 forbids storing Places names and addresses outside the service — exactly what a prospecting pipeline does. Overture (CDLA-Permissive / Apache-2.0 / CC0) is licensed for it, and returns more churches and an email for 6 in 10.

On the same regionGoogle PlacesOverture (chosen)
Religious places found9131,019
Have a website82%82.7%
Have an org email0%61%
Cost per lead~$0.17$0
Licensed for this useProhibitedPermitted
What I'd do with this

I’d work the buckets in order. The 37 rails-only churches go first — the pitch writes itself (“I noticed you take gifts through a PayPal button”), no incumbent to displace, small enough to decide fast, and every rep opens with a true, specific observation that earns the meeting.

The 128 on a competitor are a second wave; the 28 existing customers get suppressed. Because every row carries the evidence and source URL, a rep verifies any claim in one click. The unlock is the economics: ~$0.04 per evidenced lead makes it a repeatable engine I can point at any metro.

Limits & honesty

A proof of concept I built for myself — no client, no NDA. Here's where it's honest about what it can and can't do.

Accuracy is in-sample, not proven
Some fingerprints were added after seeing the tuning churches, so no headline 'accuracy' number is claimed — a held-out test set is needed for a defensible figure.
The 'review' bucket is genuinely uncertain
91 churches render their give page in JavaScript — that's 'not yet determined,' not 'no platform.' Held for a browser pass rather than guessed into a bucket.
Size is estimated, not measured
Size band comes from staff count, service times, and campus mentions — a direction, not an attendance figure. Denomination is inferred from the name.
Cost is data-production cost only
The ~$0.04/lead is LLM spend over 317 churches — it excludes my time, email verification, and any CRM or sending infrastructure.
It can't see behind a login
Public GET/HEAD only. It can't read a give page needing more than one click, and when it can't verify an email it withholds the address rather than guess.
Real people's data stays private
The pipeline extracts names and emails, but none are published here — every figure is aggregate or has the church name removed.