OSINT: Business Lead Identification

Turns public property records into a ranked list of business owners and the people who run them.

LinkedIn: carlservice Contact: dot.card GitHub: cservicode

demo

Open the interactive demo

Reads the parcel exports that city and county assessors publish through ArcGIS REST and Socrata open-data APIs. The tool labels each owner name, merges spelling variants, and groups the owner's properties in those records into one portfolio, largest first. Across about 486,000 properties in 8 cities, that narrowed 414,000 owners to about 23,500 businesses and conglomerates to target as outreach leads.

For the top owners, it pulls state business filings to name the managers, members and officers behind each LLC. Every fact links to the record it came from.

How it works

Flowchart: Assessor parcel exports, one per municipality; Feed guard, row checks, safe cache swap; Owner classifier, 9 tiers; Portfolios, group by owner, rank by size; State business filings, entity record, officers; Local dashboard, 127.0.0.1 only

Built with

Python 3 (standard library only) · SQLite · ArcGIS REST and Socrata open-data APIs · HTML, CSS, JavaScript · pytest

Selected code

FileWhat it shows
leads/classify.pyOrdered tier rules, word-boundary matching, and how couples are told apart from small businesses.
leads/portfolio.pyOne portfolio per owner: merges spelling variants, ranks by size, sets trusts aside.
leads/local_server.pyDashboard security: loopback-only bind, Host-header check, Origin and CSRF checks on writes, no CORS, strict CSP.
leads/feed_guard.pyStops the run when a source fails or returns nothing, and keeps the last good data.
tests/58 offline tests: tiering edge cases, portfolio totals, feed failures, and attacks on the local server.
tools/make_demo_corpus.pyBuilds the demo data set with the same classifier and portfolio code.

Design notes