The problem
At Prevision, building a prospecting list meant someone sitting with a spreadsheet and a browser, searching for companies one at a time, copying addresses and contact details by hand. It was slow, it was inconsistent between people doing it, and the resulting data had exactly the quality you would expect from repetitive manual entry.
The bottleneck was not effort. It was that the work was structurally repetitive, which meant it should not have been done by a person at all.
The approach
I split the problem into two stages, each a small Python program that does one thing.
Stage one — address resolution. Reads a spreadsheet of business names, queries the Google Maps API for each, and writes back a spreadsheet with resolved addresses and place identifiers. Built on pandas, so the input and output stay in the format the commercial team already worked in.
Stage two — enrichment and discovery. Takes those resolved addresses and searches within a configurable radius for businesses in the target segment, returning name, website, formatted address, and rating. This is the stage that turns a known list into a larger qualified one, because it finds companies nobody had thought to search for.
Keeping the stages separate mattered. Address resolution is cheap and idempotent; radius search is the expensive call. Splitting them meant stage two could be re-run with different radii or segments without paying for stage one again.
Outcome
Manual research time dropped by roughly half, and the prospecting database grew substantially — not because anyone worked harder, but because the search space expanded beyond what manual research could cover. Data quality improved as a side effect: API-sourced addresses are consistent in a way hand-copied ones are not.
Both stages are open source.


