Scrapes local businesses, ranks them by website weakness Γ traction, crawls each site for emails, drafts personalized cold-email sequences with on-device Apple Intelligence, sends through your own Mail.app, auto-pauses on reply, tracks A/B performance per copywriting framework.
100% local. No SaaS subscription. No API keys for sending. Your domain reputation, your data.
Most lead-gen tools are $400/month SaaS. They leak your data to their servers. Their AI writes cold emails that sound like ChatGPT. Their sender pools share IP reputation with thousands of strangers, so your deliverability tanks the first time someone else gets reported.
This is a native Mac app. Runs locally. Costs nothing to operate. Uses Apple Intelligence on-device so the AI never leaves your machine. Sends through your own Mail.app so DKIM/SPF align to your domain, not a shared pool.
Built by an ex-HVAC tech who switched to coding β so the AI knows how to talk to the small-business operators you're actually pitching.
# 1. Generate the .xcodeproj
cd LeadScraperMac && xcodegen generate
# 2. Open in Xcode 26+ and run (βR)
open LeadScraperMac.xcodeprojFor the full setup (Apple Intelligence, Mail.app, Python backend), see
dist/SETUP-GUIDE.md.
To cut a notarized release: see dist/README.md.
To populate the app with mock data for demos:
python3 dist/generate-mock-data.py- 50+ industries pre-configured across 7 categories (Health, Home Services, Professional, Auto, Personal Care, Food, Retail)
- Categorized industry picker β pick from a structured menu or type any free-form industry; the scraper resolves it via OSM tags + fuzzy matching
- County-based bounding boxes for fast OpenStreetMap queries (Florida counties pre-mapped, easy to add more)
- Free by default β no API tokens required for OSM; optional Apify API token for Google Maps fallback if you want richer data
- Trust-weighted scoring algorithm combines website weakness with business traction (rating Γ log(reviews)) plus bonuses for phone / pain signal / outreach hook
- Color-coded scores in the table β red β₯80, orange β₯50, yellow β₯20 β so the buy-today leads surface at the top automatically
- Five filter chips (All / No site / Bad / Okay / Good) + sortable columns + search
- Tries 9 common contact paths per site (
/,/contact,/about,/get-in-touch,/team, etc.) in parallel with short timeouts - Decodes Cloudflare email-protection (XOR cipher) so addresses
hidden behind
data-cfemail=blobs are extracted - De-obfuscates common evasions (
info [at] foo [dot] com,info(at)foo(dot)com,info AT foo DOT com) - Scoring system:
mailto:+50, CF-protected +30, apex-domain match +20, role-prefix +10, spam-trap β100 β best score wins - MX-validated role-address inference as final fallback β
[email protected]if the domain has working MX
- On-device Apple Intelligence via Foundation Models (zero API cost, no data leaves your Mac)
- Five copywriting frameworks the model rotates through for A/B testing: PAS, Question Hook, Pattern Interrupt, Numbers Hook, 3Cs
@Generable-constrained schema with five fields: subject, specific observation, body, ask, P.S. β each with strict word limits enforced at the decode layer- Personal style guide (
EmailStyleGuide.swift) β five lines you write that shape every email's voice. The 5-min edit that 10x's reply rates.
- Drip campaigns (Day 0 cold + Day 3 nudge + Day 7 final) drafted in one batch per lead
- Sent through your Mail.app via AppleScript β your account, your IP, your domain. No SMTP setup. No API keys.
- Auto-pause on reply β
ReplyDetectorpolls Mail.app inbox every 60s, intersects sender addresses with active recipients, pauses matching sequence and posts a macOS notification - Bulk drafting: select N leads β β₯βS β AI drafts all sequences in parallel with auto-rotated hook frameworks (true A/B)
- A/B stats: reply rate per hook framework, real data after ~30 sends so you know which voice works for your niche
- For prospects with no email, generate a phone pitch with five sections: opener, pain mention, value prop, ask, and an "if-they-say-email-me" fallback line
- One-tap Call Now button opens
tel:directly
- Recurring scheduled scraping β auto-scrape dentists every Monday at 8am, wake up to fresh pipeline
- Follow-up reminders via
UserNotificationsβ set 1d / 3d / 1w / 2w follow-ups with action buttons on the notification (Snooze / Mark Won / Mark Lost) - MenuBarExtra HUD β pulsing bolt icon showing hot-lead count + upcoming reminders + next scheduled scrape, even with main window closed
- Liquid Glass material system throughout (iOS 26 / macOS Tahoe) with proper Regular variant adherence β no glass-on-glass nesting, hierarchical SF Symbol rendering, scroll edge effects on the Table
- NavigationSplitView with sidebar (runs) + Table + Inspector
- Hierarchical SF Symbols with
.symbolEffect(.pulse)and.variableColor.iterativeduring long-running ops @Observablemacro throughout for fine-grained state updates
Two pieces talking via JSON:
ββββββββββββββββββββββββββββββββ spawns ββββββββββββββββββββββββββ
β LeadScraperMac (SwiftUI) β βββββββββββββββΆ β run.py (Python) β
β β β β’ OSM Overpass query β
β β’ NavigationSplitView UI β β β’ Apify fallback β
β β’ @Observable state stores β β β’ Site-quality check β
β β’ AppleScript β Mail.app β β β’ Anthropic for hooks β
β β’ Foundation Models AI β βββββββββββββ¬βββββββββββββ
ββββββββββββββββ¬ββββββββββββββββ β
β β
βΌ polls every 3s βΌ writes
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β dashboard/public/runs/ β latest.json, index.json, β
β <run_id>.json β the source of truth β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
LeadScraperMac/β SwiftUI macOS app (the UI you use)- Python scraper backend in the sibling repo at
Deegan4/agentic-workflowsβ spawned as a subprocess, writes JSON todashboard/public/runs/
The Mac app polls the runs folder every 3 seconds and reflects new scrapes immediately. No FSEvents, no IPC, no headache.
| Lead Scraper Pro | Apollo / Hunter / Snov | Smartlead / Instantly | |
|---|---|---|---|
| Cost | One-time $79 | $99β$400 / mo | $49β$200 / mo |
| Data lives | Your Mac | Their servers | Their servers |
| AI drafting | On-device (free) | OpenAI behind a wrapper | Cloud LLM |
| Sender | Your Mail.app (your IP, your DKIM) | Their shared pool | Their shared pool |
| Source code | Open + forkable | Closed SaaS | Closed SaaS |
| Works offline | β (except scrape itself) | β | β |
| Privacy | Nothing leaves device | All your leads on their DB | All your leads on their DB |
| Customizable voice | 5-line edit, recompile | Limited template fields | Limited template fields |
The trade-off: this app only runs on macOS 26+ with Apple Silicon. The SaaS tools run anywhere. If you're on a non-Mac team, the SaaS options are your only choice.
- Apple Silicon Mac (M1, M2, M3, M4, or newer) β Apple Intelligence is Apple Silicon only. Intel Macs can launch the app for the scrape/sequence features but AI drafting is gated.
- macOS 26 (Tahoe) or later
- 8 GB RAM minimum (Apple Intelligence requirement)
- Python 3.10+ β usually pre-installed on modern Macs
- Mail.app set as default mail client (System Settings β General)
- Anthropic API key (free $5 credit on signup) β used by the Python scraper to generate pain signals + outreach hooks per lead
Do I need any paid API subscriptions?
Only one: a one-time Anthropic API key (used by the scraper backend to write pain signals per lead). They give you $5 free on signup β enough for ~2,500 leads. After that, ~$0.002/lead.
No OpenAI bill. No Apify required (free OpenStreetMap by default). No Mail-send API (your Mail.app handles delivery).
Why Mac-only? Why not a SaaS / web app?
Three reasons:
- Privacy β local processing means your leads, your contacts, and your email drafts never leave your machine. SaaS tools store everything on their servers.
- Sender reputation β sending through your own Mail.app uses your domain's DKIM/SPF. SaaS sender pools share IPs with thousands of strangers; one bad actor tanks deliverability for everyone.
- Cost β Apple Intelligence is free on-device. Running the same AI through OpenAI/Anthropic at scale would be $100+/mo per user.
If you're on Windows or Linux, this app won't help β the SaaS alternatives are your only path.
How do reply rates compare to generic cold-email tools?
Generic AI templates from Hunter/Apollo's drafting features land 1β3% reply rates because every prospect gets variations of the same "I noticed your businessβ¦" opening.
After personalizing EmailStyleGuide.swift with your voice + a
specific credibility hook, expect 5β10%. The @Generable schema forces
a specific observation about each lead (not generic flattery) and a
P.S. line (the most-read line in any cold email).
The A/B stats panel shows reply rate per hook framework so you can double down on what's working for your niche.
Can I scrape outside Florida?
Yes β edit workflows/lead-scraper/run.py in the sibling repo and add
your county / city to the COUNTIES and CITY_BBOX dicts. Bounding
boxes from boundingbox.klokantech.com.
Takes ~30 seconds per new region.
What if Apple Intelligence isn't enabled yet?
The app detects the exact reason (not-enabled / model-not-ready / device-not-eligible / region-not-supported) and shows a purple Liquid Glass card with a deep-link button straight to the right System Settings pane. One click + ~5-min model download and you're done.
If Apple Intelligence isn't available at all (Intel Mac), the AI features show a graceful banner and the rest of the app (scraping, sequences via mailto: fallback, call scripts via copy-paste) still works.
How does the email crawler handle Cloudflare protection?
Cloudflare's "email protection" XOR-encodes addresses behind
data-cfemail= blobs. The crawler decodes the cipher (first byte is
the XOR key) and treats hits with +30 score because the site
deliberately hid the address β strong signal it's a real, current
inbox.
Cloudflare has used the same cipher since 2014. Decoding it is seven lines of Swift.
iScrapper/
βββ LeadScraperMac/ β SwiftUI macOS app (main project)
β βββ project.yml β xcodegen config
β βββ LeadScraperMac/ β Swift source files (~30 files)
βββ dashboard/ β legacy Tauri/React dashboard (deprecated,
β kept for reference β the Mac app replaces it)
βββ dist/ β release pipeline + setup guide + mock data
β βββ package-and-notarize.sh
β βββ SETUP-GUIDE.md
β βββ generate-mock-data.py
β βββ capture-screenshots.sh
βββ docs/
βββ screenshots/ β README images
Sibling repo (Python scraper backend):
Deegan4/agentic-workflows
The source is open β clone, build, customize, fork. Forever free if you're willing to:
- Pay $99/year for an Apple Developer ID to sign + notarize your own builds
- Spend an afternoon following
dist/SETUP-GUIDE.md - Edit
EmailStyleGuide.swiftwith your own voice - Maintain the Python scraper backend separately
The polished bundle is paid at buymeacoffee.com/Deegan4:
- Pre-notarized .app (Gatekeeper-accepted, no warnings on first launch)
- Python backend + one-shot installer
- 12-section setup PDF with screenshots
- EmailStyleGuide template with worked examples
- 30 days of direct founder support
One closed $1500 web-design client pays back the bundle 19 times over.
Source available. Personal and educational use is free. Commercial redistribution of the binary requires a license β buy the bundle at buymeacoffee.com/Deegan4 or contact for terms.
See LICENSE for the full text (TBD; treat as "all rights reserved, ask for commercial use" until then).
Architecture notes for AI assistants working in this repo:
see CLAUDE.md.


