Local lead scorer: rank Google Maps leads with Gemma on your own machine A developer released Local Lead Scorer, a 300-line, standard-library-only Python CLI that ranks Google Maps business leads for a specific sales offer using the open-weight Gemma 3 model run locally through Ollama. The tool reads leads from an Apify Google Maps Email Extractor Actor or CSV/JSON exports, asks the model for a strict JSON verdict (0-100 fit score, one-line reason, best contact channel), and writes a ranked CSV plus Markdown summary, falling back to a deterministic heuristic when no model is running. In a test on eight fake businesses with gemma3:4b on a 4-core CPU, the run took 125 seconds and scored the restaurant leads at 85 while giving a closed business a 0 without invoking the model. Disclosure: written with AI assistance. I built the Apify Actor the tool can use; the test numbers are from real runs. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle https://dev.to/challenges/hacktoberfest-week2-2026-10-12 A small command-line tool that turns a pile of Google Maps business leads into a ranked call list for one specific offer, using an open-weight model that runs locally. You tell it what you sell and to whom, for example --offer "I sell online booking software to restaurants" . It reads leads from my Google Maps Email Extractor https://apify.com/highbrow fame/google-maps-email-extractor Apify Actor, either by starting a run on your own Apify account or by loading a CSV/JSON export, and asks Gemma 3 through Ollama for a strict JSON verdict on every business: a 0-100 fit score, a reason in one line and the best contact channel. It writes a ranked CSV and a Markdown summary. If no model is running it falls back to a deterministic heuristic, so it always produces a ranking. Who would pay for it? The people who already pay for lead scrapers: freelancers and small agencies doing cold outreach, and the solo founder who scraped 300 restaurants and now has to decide which 30 to actually email. Scraping is cheap; the expensive part is a human reading 300 rows. The scorer does the first pass for the price of electricity. The whole thing is one Python file 300 lines, standard library only , MIT licensed, with a pytest suite and a fake sample dataset so it runs without any key. No hosted demo, by design: the point is that it runs on your machine. The fake sample ships in the repo, so this works on a laptop with no API key a few minutes on a CPU, seconds on a GPU : git clone https://github.com/projectworks007/apify-data-mcp cd apify-data-mcp/examples/local-lead-scorer ollama pull gemma3:4b python lead scorer.py --offer "I sell online booking software to restaurants" --input sample leads.json --model gemma3:4b cat out/summary.md Output on the eight fake businesses in sample leads.json names and domains are invented, example.com addresses : | | Score | Business | Category | Channel | Why model, verbatim | |---|---|---|---|---|---| | 1 | 85 | Example Bistro Alpha fake | Italian restaurant | | Italian restaurant with modern website and high engagement – ideal booking software fit. | | 2 | 85 | Example Vegan Kitchen Theta fake | Vegan restaurant | | Vegan restaurant with modern website and high email deliverability – ideal fit. | | 3 | 85 | Example Pizzeria Beta fake | Pizza restaurant | website | Pizza restaurant, operational, good rating – a strong fit for online booking software. | | 4 | 85 | Example Steakhouse Epsilon fake | Steak house | website | Steakhouse with online bookings is a good fit; website quality is a concern. | | 5 | 85 | Example Café Delta fake | Cafe | visit | Small cafe, food & beverage, operational - ideal online booking target. | | 6 | 35 | Example Hair Salon Eta fake | Hair salon | visit | Hair salons are not restaurants; no relevant contact channels available. | | 7 | 25 | Example Dental Clinic Gamma fake | Dentist | website | Dental clinics are not restaurants; low contact data and no online presence. | | 8 | 0 | Example Sushi Zeta fake, closed | Sushi restaurant | | fallback: Business is closed | That is gemma3:4b on a 4-core CPU, 125 seconds for the eight rows. The closed sushi place never reaches the model; the code gives it a 0. The 85s are a tie the CSV breaks with the heuristic column, where the two e-mail-verified restaurants come out on top. The same run with --no-model gives the heuristic ranking, and --query "restaurants in Budapest" --max-results 25 with an APIFY TOKEN fetches real leads first. Ready-made remote MCP servers that give Claude, ChatGPT, Cursor, VS Code and other MCP clients live data tools: job ads, property, car and marketplace listings, Google Maps business leads, AI-search brand visibility, YouTube transcripts and more. Each tool is an Apify https://apify.com Actor, served by Apify's hosted MCP server mcp.apify.com . Connect with your Apify account the client opens a sign-in page, or send Authorization: Bearer