Lead-hunt
A public agency register turned into a scored list of leads.
Problem
KRAZ, the state register of employment agencies, is open to anyone and useless: several hundred entries with no phone, no website, and nothing that says whether the company does what you need.
Solution
A seven-stage pipeline that turns a list of names into a call queue. Contact details and ratings come from maps first. Then a language model reads each company's own website and answers what the register never says: does it house people, at what scale, in which sectors. A second pass drops whatever is not an agency, and a score from zero to a hundred sets the order. The result waits in a database until an agent reads it out on Discord.
What it does
- Pulls the public employment-agency register, several hundred names at a time
- Adds phone, website, rating and review count from maps
- A language model reads the company site and fills in housing, scale and sectors
- A second pass drops anything that is not an agency
- Scoring 0-100: housing 30, scale 25, reach 15, credibility 15, contact 15
- The result lands in a database an agent reads from Discord
How it's built
- Seven Python scripts run in order, each writing its own CSV
- Stage two resumes from a progress file, so an interruption does not cost the whole run
- Trafilatura extracts the company page, Gemini reads it across threads
- A separate classification pass answers only one question: is this an agency at all
- Scoring in plain pandas, with a ceiling for anything carrying a disqualifying marker
- The result lands in Firestore, read by the agent's own skill
What it changed
- 481 names from a public register turned into 214 leads carrying a phone, a website and a rating. 266 dropped out before anyone called them
- 480 companies scored in a single run; by hand that meant opening every one of their sites in turn
- That run took about a month: this is not an evening's work, it builds the calling queue once
- 209 confirmed as real agencies by a separate classification pass
- Mean score 34.3 of 100; highest 100. The call queue orders itself
- How many of those 214 picked up the phone is not recorded here: nobody measured it
Stack
- Python
- pandas
- Gemini
- trafilatura
- Firestore
- Google Sheets
Story
Scoring has a safety ceiling: if the model's note contains a disqualifying marker, the score cannot pass twenty-five whatever else is true. Without it, one well-written website pushed the wrong company to the top.