Subscription tools like PropStream, BatchLeads, and DataTree charge $99 to $499 a month plus per-skip fees — and you still get the same lists every other wholesaler in your market is calling. We build the engine underneath instead. Direct ArcGIS REST queries against county GIS endpoints, custom owner-enrichment pipelines, configurable scoring, and ranked cold-call CSVs — all owned outright. This is the same software stack that powers our productized LandIntel service. Here is how it works under the hood, and why a sophisticated buyer should commission a proprietary platform instead of renting one.
Every land flipper, wholesaler, and acquisition rep in the country starts the same way. They sign up for PropStream at $99 a month, hit it for absentee-owner lists, run skip traces at 8 to 25 cents apiece, and start dialing. Then six months in they discover the same painful truth: every other wholesaler in their county is calling the exact same list. The data is not proprietary. The filters are template filters. The skip-trace results are rate-limited. And the moment a SaaS vendor decides to raise prices or rate-limit your account, your business model takes a haircut.
The platforms themselves are not bad — they are general-purpose. The problem is that "general purpose" is structurally incompatible with edge in a cold-call market. Edge in cold-call comes from finding owners no one else has reached yet, with a buy-box that fits your specific operation, on a refresh cadence the competition cannot match. None of those things are configurable on a SaaS subscription.
A proprietary platform inverts the equation. You pay once for the engine. You query county GIS endpoints directly, the moment a parcel hits the assessor's roll. You apply your own scoring weights, your own absentee logic, your own "non-productive ag" filters. You skip-trace through whichever vendor is cheapest this quarter, swappable with one config change. And you walk into every market with data nobody else has formatted the way you have.
Most lead tools sit on top of a third-party data aggregator like ATTOM, CoreLogic, or DataTree. The aggregator licenses parcel data from each county, normalizes it, and rents it back to PropStream and friends. Every layer of indirection adds latency, cost, and missing fields. The proprietary platform we build skips all of that — it talks directly to the county source.
The engine has four hard-separated stages: discovery (find the data source for a county), extraction (pull and parse parcels), enrichment (attach owner, mailing, EMV, classification, geometry), and scoring (rank against the buy-box). Each stage writes JSONL to disk so any failure is recoverable and any run is reproducible.
# Stage 1: discovery — auto-detect endpoint type per county
COUNTIES = {
"Sherburne": {
"type": "arcgis_rest",
"url": "https://gis.co.sherburne.mn.us/.../FeatureServer/0",
"fields": ["PIN", "OWNER_NAME", "EMV_BLDG", "ACRES_DEED", "LAKENBR"],
},
"Wright": {
"type": "arcgis_online",
"url": "https://services2.arcgis.com/.../FeatureServer/0",
"fields": ["OWNNAME", "OWADR3", "TPCLS1_DSC", "EMV_TOTAL"],
},
"Meeker": {
"type": "shapefile",
"url": "https://resources.gisdata.mn.gov/.../shp_plan_meekerparcels.zip",
"vacant_proxy": "HOUSE_NUM IS NULL",
},
"Morrison": {
"type": "file_geodatabase",
"url": "https://resources.gisdata.mn.gov/.../fgdb_plan_parcels.zip",
"fields": ["Total_EMV", "Total_Acres", "PriClass"],
},
}Each county exposes data slightly differently. Sherburne has a polished ArcGIS REST endpoint with full attributes. Wright runs ArcGIS Online with different field names. Meeker only has a static shapefile zip from MN Geospatial Commons. Morrison ships a file geodatabase. Some counties — like Benton in Minnesota — strip owner data from public exports entirely, leaving only PIN and tax type. The engine knows the shape of each source and adapts, instead of paying a vendor to homogenize for us.
Real-world example: On May 6, 2026, a single run of this engine produced 1,878 vacant-land candidates across Sherburne (301), Wright (628), Meeker (597), and Morrison (352) counties. Filtered down to a top-30 cold-call list ranked by absentee + LLC/trust + low EMV-per-acre + classification signals — all geo-fenced to within 30 miles of a Cold Spring, MN headquarters. Total external cost: $0.
The single feature that separates a useful platform from a noisy one is filter expressiveness. Most subscription tools ship with a fixed set of filters — price range, acreage, owner state, occupancy. That covers maybe 30% of the signals a serious land buyer cares about. The rest live in the assessor's classification fields, the geometry, and cross-references against external lists.
EMV_BLDG = $0 OR HOUSE_NUM IS NULL OR classification matches "rural vacant", "unimproved", or "non-productive ag" — combined with no recent permit activity.
Owner mailing state ≠ parcel state. Bonus weight if owner is in a high-divestment state pattern (TX, AZ, CO, FL retirees holding inherited Midwest land).
Owner-name regex catches "TRUST", "LLC", "INC", "PROPERTIES", "FAMILY", "LEGACY", "REVOC" — the strongest signals of estate-holding entities ready to divest.
Flags parcels priced significantly below the county median — classic signal of non-productive land owners haven't bothered to sell (motivated when called).
Auto-excludes lakefront, wetland, seasonal-rec, and govt-owned parcels via Shapely intersect against waterway and protected-land layers.
Identifies adjacent parcels owned by the same entity or family — cold-call gets vastly higher response rates with bundle offers vs. single-parcel.
Filters compose. A typical buy-box might look like: "3–15 acres, EMV building $0, owner mailing ≠ MN, classification IN ('2B/1B RURAL VACANT', '4B4 UNIMPROVED', '2A AGRICULTURAL'), within 30 miles of headquarters, owner-name matches LLC or trust pattern, $/acre below county median." That predicate is one Pandas chain in our engine. In PropStream you would have to export a hundred lists and stitch them together by hand.
The county record gives you a name and a mailing address. The cold call needs a phone number, an alt address, and ideally a relative if the primary contact is unreachable. That is the skip-trace layer — and it is where SaaS tools nickel-and-dime customers the hardest. PropStream charges 8 to 25 cents per skip, BatchLeads bundles skips into tier limits, and TLOxp enterprise pricing starts in the four figures monthly.
Our proprietary stack treats skip tracing as a pluggable enrichment stage. The base layer pulls free public sources — TruePeopleSearch HTML scrapes, county recorder UCC filings, secretary of state corporate registry lookups for LLC officers. On top of that, the platform supports vendor adapters: BatchSkipTracing API, IDI, TLOxp, REIPro, or any provider with a JSON or CSV interface. Switch vendors with one config change.
# Owner enrichment with pluggable skip-trace adapters
async def enrich(parcel):
owner = parcel["owner"]
enrichment = {}
for adapter in SKIP_TRACE_PIPELINE:
result = await adapter.lookup(owner, parcel["mailing"])
if result.confidence >= 0.8:
enrichment.update(result.data)
break # cheapest sufficient match wins
return {**parcel, **enrichment}
# Configure pipeline: free first, paid only as fallback
SKIP_TRACE_PIPELINE = [
TruePeopleSearchScraper(),
UCCRecordsLookup(state="MN"),
SecretaryOfStateLLCRegistry(state="MN"),
BatchSkipAPI(api_key=os.environ["BATCH_KEY"]),
]Why does this matter? Because the public layer alone resolves contact info on roughly 40–60% of records at zero cost. The platform only spends money skipping the records that actually need a paid lookup. On a 2,000-parcel run, that is the difference between a $0 enrichment bill and a $200–$500 SaaS skip cost. Multiply by twelve months of operation.
Raw filtered records are not a deliverable. The deliverable is a ranked list with talking-point context, scored against your specific operation. Our ranking layer applies configurable weights across signals like:
The output is a CSV (or live web table) with one row per ranked target, plus a "why this lead" column auto-generated from the matched signals. A typical row reads: "Rank 1: Morrison County, KOENIG FAMILY REAL ESTATE TRUST LLC, Longmont CO mailing, 10 acres, $880/acre, classified non-productive rural vacant. OOS + LLC/Trust + non-productive ag stack." That single string of context is more useful on a cold call than fifteen template fields combined.
Per-lead talking-point cheatsheet auto-generates from the matched signals: out-of-state owner script, LLC/trust registered-agent contact path, non-productive ag pitch ("you can't farm it — let me take it"), bundle ask for adjacencies, railroad surplus contact line for BNSF/UP records, corporate tax-department mail flow for big OOS entities. The LandIntel productized service ships this cheatsheet alongside every list.
If you are spending more than $300 a month on subscription lead tools, the unit economics flip in favor of building your own engine within a single year. Here is the side-by-side breakdown of what a proprietary platform delivers vs. what the major SaaS players give you.
| Capability | Proprietary Platform | PropStream / BatchLeads / DataTree |
|---|---|---|
| Direct county GIS access | Yes — live REST queries | No — aggregator-relayed |
| Custom buy-box filters | Unlimited — any field, any logic | Fixed UI dropdowns |
| Geometry / spatial filters | Full PostGIS + Shapely | Basic radius only |
| Per-skip cost | $0 (public layer) / vendor cost passthrough | $0.08–$0.25 per skip + monthly fee |
| Bundle / adjacency detection | Native (Shapely intersect) | Manual export + sort |
| Tax delinquency cross-ref | Built into pipeline | Add-on or separate module |
| List freshness | Live — query when you ask | Aggregator refresh cadence (1–6 weeks) |
| Code & data ownership | 100% yours | Vendor's database, vendor's terms |
| Long-term cost (3 yr) | One-time build + hosting | $3,500–$18,000+ in subscription |
A list is not a campaign. The platform ships with an integrated cold-mail layer so the same engine that produced the ranked CSV can drop personalized letters into the mail stream. The mail layer supports merged variables (owner first name, parcel ID, parcel address, $/acre signal), template variants for A/B tests, USPS print-and-mail API integration via Lob or PostGrid, and per-record tracking via a unique landing-page slug per letter.
Owner first name, parcel address, and the auto-generated talking point fold into a personalized letter or 6x9 postcard. No mail merge in Word required.
Send variant A vs. variant B to randomly-split list halves. Dashboard tracks response rate per variant via unique-slug landing pages.
Lob or PostGrid integration drops every letter into the mail stream — first-class or standard, with delivery tracking and return-mail handling.
Each letter ships with a unique landing-page URL. Response dashboard pairs every reply — web, phone, or returned letter — back to the source parcel.
If you are running a land-acquisition operation, a wholesaling outfit, or any team whose unit economics depend on cold outreach, a proprietary platform pays for itself inside 12 months. We have built the engine once already — for our own pipeline and for our productized LandIntel service. We can stand up the same engine for your company, customized to your buy-box, your states, and your team's workflow.
Adapters for any county with a public ArcGIS REST endpoint, ArcGIS Online service, shapefile, or file geodatabase. We add new counties on request.
Configurable filters and ranking weights tuned to your exact acquisition criteria. Land flippers, mobile-home park hunters, infill builders — every buy-box is different.
Free public sources first, paid vendors as fallback, all swappable via config. You pay for what you actually need, not a flat seat fee.
Ranked CSV for dialers, merged letters for mail, web dashboard for live tracking. The same engine drives every outreach channel.
Every parcel and every owner stored in PostGIS so you can run spatial queries, build heatmaps, and re-rank historical data anytime.
Full source, full database, full hosting access on day one. No vendor lock-in. No monthly per-seat ransom. No data egress fees.
If you are spending real money on PropStream, BatchLeads, or DataTree — you are funding a vendor's roadmap instead of your own. Call or text Jacob at (320) 360-8285 to scope a proprietary cold-call platform for your buy-box, your states, and your operation. DM HUNT in the contact form for a same-day reply.