VenueScan Lead Runner - Personal or Commercial
Run the same check across many venues fast without losing work. C++20 task queue: 3.56μs, 281k/sec, one worker per core, 3 retries, durable journal to disk. Full source, 39 files, Win/Linux/macOS. Own it or subscribe.
- Latency (measured)
- 3.68 µs
- Throughput (measured)
- 271k/sec
- Price
- $199
Measured on win32-x64 (ZachsNitro · 13th Gen Intel(R) Core(TM) i5-13420H · 12 threads) · 2026-10-11 · 50,000 iterations · bot bench - task scheduler, 12 workers · per-task p50 2 µs, p95 4 µs, p99 4 µs
About this bot
Every lead list needs the same thing: run the same check across many venues, fast, with retries, without losing work.
I built VenueScan Lead Runner - a C++20 Lead Gen & Scraper engine.
WHAT IT DOES: One command runs a durable task queue: one worker per core, 3 retries on failure, journal to disk so tasks survive a crash. Measures 3.56μs mean / 281k ops/sec (3.39μs / 295k ops/sec win32-x64, 50k iterations, 12 workers).
Native C++20 - not Python Selenium that gets blocked. This is raw speed for scanning venues, validating leads, scraping with resilience.
WHAT YOU GET: - Full C++20 source project (39 files, 274KB clean source) - you get the whole project - Generates the matching project, builds to Windows, Linux, macOS - Full C++20 source, binaries, docs - Durable queue + journaling so you never lose a lead list on crash - The same engine running live in the terminal below
TWO WAYS TO BUY:
BUY ONCE - Own it forever Personal $99 - one person, one machine, personal lead gen only Commercial $499 - one org, any staff, up to 3 deployments, client lead services allowed
SUBSCRIBE - Always updated Personal $49/mo - personal use + all updates + support while active Commercial $99/mo - commercial use + priority support + scraper updates
No source resale. No white-label. Set by true-worth calculator $199 baseline.
Try it live below - that's the real C++ engine, not a demo.
Code preview
first 100 lines of modules/leadgen/module.cpp - c++201// VenueScan Lead Runner - Personal or Commercial — lead generation module2//3// A crawler that finds the people behind a website: fetch a page, tokenise the4// HTML properly, pull out the emails, phone numbers and social profiles, and5// append them to a deduplicated JSONL store where every record remembers the6// URL it came from.7//8// leadgen.scrape one URL -> leads9// leadgen.crawl a seed -> leads, breadth-first to a depth limit10// leadgen.enrich a site -> leads, but only from contact/about/team pages11// leadgen.export the store-> CSV (RFC 4180)12// leadgen.campaign a named set of seeds -> leads + a JSON report13//14// Three rules this module will not bend:15//16// 1. robots.txt is fetched and obeyed before the first request to a host, and17// there is no configuration switch that turns it off. If robots.txt is18// unreachable the host is treated as fully disallowed (RFC 9309 §2.3.1.4),19// because "the rules server is down" is not permission.20// 2. One host is hit no more often than `delay_ms`, and a `Crawl-delay:` in21// robots.txt raises that if it is larger.22// 3. Nothing is printed or stored that was not extracted from a real response.23// A page that could not be fetched produces no leads, not empty ones.24//25// Tuning lives in config/agent.json:26//27// "module": {28// "user_agent": "AcmeLeadBot/1.0 (+https://acme.example/bot)",29// "delay_ms": 750,30// "max_depth": 2,31// "max_pages": 25,32// "same_host_only": true,33// "campaigns": {34// "q3": { "seeds": ["https://example.com/"], "max_depth": 2 }35// }36// }37 38 39#include <algorithm>40#include <cctype>41#include <cstdlib>42#include <cstring>43#include <deque>44#include <filesystem>45#include <fstream>46#include <map>47#include <mutex>48#include <set>49#include <string>50#include <thread>51#include <unordered_map>52#include <unordered_set>53#include <vector>54 55#include "bs9/http.hpp"56#include "bs9/log.hpp"57#include "bs9/metrics.hpp"58#include "bs9/scheduler.hpp"59#include "leadgen.hpp"60 61namespace fs = std::filesystem;62 63namespace bs9::leadgen {64namespace {65 66// --------------------------------------------------------------- text bits67 68char lower_ascii(char c) {69 return static_cast<char>(std::tolower(static_cast<unsigned char>(c)));70}71 72std::string lower(std::string text) {73 for (char& c : text) c = lower_ascii(c);74 return text;75}76 77bool is_space(unsigned char c) {78 return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v';79}80 81std::string trim(const std::string& text) {82 std::size_t begin = 0;83 std::size_t end = text.size();84 while (begin < end && is_space(static_cast<unsigned char>(text[begin]))) ++begin;85 while (end > begin && is_space(static_cast<unsigned char>(text[end - 1]))) --end;86 return text.substr(begin, end - begin);87}88 89/// Collapses every run of whitespace — including a decoded U+00A0, which is90/// what becomes and which otherwise glues words together forever.91bool contains(const std::string& haystack, const std::string& needle) {92 return haystack.find(needle) != std::string::npos;93}94 95// --------------------------------------------------------------- rate limit96 97std::mutex& pace_mutex() {98 static std::mutex mutex;99 return mutex;100}This is the real file from the archive you receive, with your listing's metadata already substituted.
Licence options
Every licence ships the same source. What differs is how far you may deploy it and whether you may put your own brand on it.
Personal is for one person on one deployment, not for business use. Commercial costs more because it covers your whole organisation on up to 3 deployments, including services you sell to your own clients: the same code, with the rights a business needs.
This listing is $199 — Standard build tier. The price decides what is in the archive; the licence marked below decides what you may do with it, and is the one that ships in your LICENSE.txt.
| Licence | Price | Deployments | White-label | Included |
|---|---|---|---|---|
Personal - Single deployment This listing | $199 one-time | 1 | No |
|
Commercial - Team use | $499 one-time | 3 | No |
|
Agency Bundle - 5 Client Pack | $5,000 one-time (all bots · contact sales) Email to buy | 5 | No |
|
Agency Unlimited ($7500 one-time) | $7,500 one-time (all bots · contact sales) Email to buy | Unlimited | No |
|
Enterprise / White-label (Custom) | CustomRequest a quote | Unlimited | Yes |
|
Personal and Commercial are sold here. Agency and Enterprise cover every bot in the catalogue and are arranged by email: use the button on that row and we reply with a payment link. Questions first? Contact us.
Enterprise is quoted rather than listed. The licence that ships in your archive's LICENSE.txt is the one marked above. Licence prices are what each grant is worth; checkout charges this listing's price, once.
One-time, compared with subscriptions
| Option | Price | Source |
|---|---|---|
| This engine | $199 Personal / $499 Commercial, once | this page |
| Hunter.io Starter–Growth | ~$49–$149/mo | leadhaste.com |
Prices looked up 2026-09-27; check the source before relying on them. A hosted service gives you a web interface and its own support, which this does not; this gives you the source, offline use and no renewal.
Questions before you buy
+Can I try it before I buy?
+Does it run on Mac or Linux?
+Can my team use it?
+Are updates included?
+What if it does not work?
What's inside
Lead-generation engine: 99KB of source (2,306 lines of logic, 5 files), plus the shared agent core. Everything below is counted from that code — nothing on this list comes from the listing text.
bot campaignRun a named set of seeds from the configbot crawlBreadth-first crawl from a seed, obeying robots.txtbot enrichLeads from a site's contact/about/team pages onlybot exportWrite stored leads to CSVbot extractContacts and links from a saved HTML page (offline)bot leadsShow stored leadsbot scrapeExtract leads from one page
5 task handler(s), each with retries and a durable journal: leadgen.campaign (internal), leadgen.crawl, leadgen.enrich, leadgen.export, leadgen.scrape
- Tests
- 23 checks across 1 suite(s), all passing (run 2026-10-04)
- Output
- readable text · JSON · CSV · delivery to webhooks / endpoints
- Speed
- Measured: 3.68 µs mean / 271k/sec — win32-x64, 2026-10-11, 50,000 iterations, bot bench - task scheduler, 12 workers. The live test below runs on this site's server, which has fewer cores than the build machine, so its timings are lower than this.
What's inside the zip
The download is the real program and its full source, yours to keep. The terminal further down this page is a separate, read-only demo copy of the same engine: it keeps nothing and cannot write files.
lead-generation-engine/ (the START files are one folder up, beside App/; everything below is in App/) START_HERE.bat / start_here.command / start_here.sh opens the workspace in your browser workspace/ the workspace page, with the engine and a terminal inside it START_TERMINAL.bat / .command / .sh the program itself, in a terminal window COMMANDS.txt every command, with examples README.md build, run, test, licence notes bin/bot.exe (or bot-macos / bot-linux) the program, ready to run src/, include/ ... the full C++ source you own LICENSE.txt what your licence allows
How it works
- 1Download the zip
Unzip it anywhere. No installer, no account.
- 2Double-click START_HERE
Or run the commands below from a terminal in that folder.
- 3Read the output
It reads the sample contact page that ships with the program (a fictional company on example.com) and prints every email address, phone number and social profile on it. Offline: nothing is fetched.
All commands
Click one to put it in the live terminal below, or to copy it for the download. The full list, with every option, is COMMANDS.txt in the zip and bot --help.
- Contacts and links from the sample page that ships with the program, offline
- The same, as JSON
- A page you saved from your browser; --url is where it came from, so relative links resolve
- Fetch one live page (robots.txt checked first) and store its leads
- Only the site's contact, about and team pages
- Breadth-first crawl, one host, robots.txt and a per-host delay obeyed
- The leads stored so far
- Stored emails to CSV
Live output
Captured from a real run of bot extract modules/leadgen/examples/contact-page.html on linux-x64 (testit demo engine, same source as the download), 2026-09-30. Unedited.
- contacts : 8 (3 email, 2 phone, 3 social)
- email bookings@example.com (mailto:)
- email press@example.com (page text)
- email events@example.com (page text)
- phone +12025550143 (tel:)
- phone +12025550187 (page text)
- social https://www.linkedin.com/company/harbor-and-pine-example linkedin (LinkedIn)
- social https://www.instagram.com/harborandpine.example/ instagram (Instagram)
Full output
$ bot extract modules/leadgen/examples/contact-page.html source : modules/leadgen/examples/contact-page.html page : https://example.com/ title : Contact us — Harbor & Pine Event Venues links : 9 (5 on example.com) contacts : 8 (3 email, 2 phone, 3 social) email bookings@example.com (mailto:) email press@example.com (page text) email events@example.com (page text) phone +12025550143 (tel:) phone +12025550187 (page text) social https://www.linkedin.com/company/harbor-and-pine-example linkedin (LinkedIn) social https://www.instagram.com/harborandpine.example/ instagram (Instagram) social https://www.facebook.com/harborandpineexample facebook (Facebook) time : 0.081 ms to parse the page and extract (measured just now on this machine)
What the price buys
- ✓ The full C++ source - you own your copy
- ✓ A single ready-to-run program, no dependencies
- ✓ Pay once and keep it
- ✓ Runs offline, on your machine; your numbers never leave it
One person, one deployment, personal use. The same program and source.
One organisation, any number of its staff, up to 3 deployments, commercial use - including services you sell. No source resale, no white-label.
Both licences ship the identical archive; the difference is what you may do with it.
Unzip, double-click START_HERE, and it opens in your browser.
START_HERE opens workspace.html from your own disk: no install, no server, no network. The engine runs inside the page (the same C++ code as the program, compiled to WebAssembly) with its results, charts and a terminal on one screen.


- C++ engine, 23 automated checks across 1 test suite, all passing (2026-09-29). The tests ship in the download.
- Blank until you run it, then only real numbers. It opens empty. Every figure after that is computed by the engine while you watch, or is a dated measurement. No live web data, no pre-loaded leads, no invented counters.
- Nothing to set up. No Python, no pip packages, no admin rights, no account. It opens a web page; it does not install software or open a port.
- Terminal inside the page. Type
bot extract modules/leadgen/examples/contact-page.htmland the engine prints what the program prints, and fills the panels. The full program is in the same folder: START_TERMINAL runs it in a terminal window. - One-time licence available.
On screen: Extract from a page · Page · Contacts found · Links on the page · Terminal
TEST IT - LIVE RUN
Runs the Lead-generation engine this listing ships - compiled C++, on our server, right now. What you see is its real output and real timing. This server has fewer cores than the machine the listed figures were measured on, so expect lower numbers here. Scraping and crawling need the open internet, which the live test does not allow. The lead store here was produced by this engine scraping and crawling two fictional demo pages (see testit/leadgen/demo-site); leads and export run against it for real.
Pick a command below or type one, then press Enter. One command per run; this is a read-only demo copy of the engine, and nothing you type is kept.
- 7 leads: emails, phones and a LinkedIn page, de-duplicated
- The newest three as JSON
