BotStudio9
Lead Gen & Scraper
Featured

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++20
modules/leadgen/module.cppc++20
1// VenueScan Lead Runner - Personal or Commercial — lead generation module
2//
3// A crawler that finds the people behind a website: fetch a page, tokenise the
4// HTML properly, pull out the emails, phone numbers and social profiles, and
5// append them to a deduplicated JSONL store where every record remembers the
6// URL it came from.
7//
8// leadgen.scrape one URL -> leads
9// leadgen.crawl a seed -> leads, breadth-first to a depth limit
10// leadgen.enrich a site -> leads, but only from contact/about/team pages
11// leadgen.export the store-> CSV (RFC 4180)
12// leadgen.campaign a named set of seeds -> leads + a JSON report
13//
14// Three rules this module will not bend:
15//
16// 1. robots.txt is fetched and obeyed before the first request to a host, and
17// there is no configuration switch that turns it off. If robots.txt is
18// 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:` in
21// 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 bits
67
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 is
90/// what &nbsp; 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 limit
96
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.

LicencePriceDeploymentsWhite-labelIncluded
Personal - Single deployment
This listing
$199 one-time1No
  • 1 person, 1 deployment
  • Personal, non-commercial use
  • No client resale
  • No white-label
Commercial - Team use
$499 one-time3No
  • Up to 3 deployments
  • Any number of users in one organisation
  • Commercial use, including services you sell
  • No source resale or sublicensing
  • No white-label
Agency Bundle - 5 Client Pack
$5,000 one-time
(all bots · contact sales)
Email to buy
5No
  • Up to 5 client deployments
  • Per-client keys
  • Agency use allowed
  • Email support
  • No white-label
Agency Unlimited ($7500 one-time)
$7,500 one-time
(all bots · contact sales)
Email to buy
UnlimitedNo
  • Unlimited deployments
  • Unlimited keys
  • Agency use allowed
  • Priority support
  • All future updates
  • No white-label
Enterprise / White-label (Custom)
CustomRequest a quoteUnlimitedYes
  • Everything in Agency Unlimited
  • Full white-label with your logo
  • Custom domain
  • Source code option
  • Dedicated support
  • Custom SLA

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

OptionPriceSource
This engine$199 Personal / $499 Commercial, oncethis page
Hunter.io Starter–Growth~$49–$149/moleadhaste.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?
Yes. The live terminal on this page runs the same engine the download ships, on our server. Paste your own numbers into it; nothing you type is kept.
+Does it run on Mac or Linux?
The download includes a ready-to-run program for Windows, Linux, macOS.
+Can my team use it?
Personal is 1 person, 1 deployment, not for business use. Commercial covers one organisation: any number of its staff, up to 3 deployments, commercial use including services you sell. Need more deployments or client use? The Agency licences in the table above are arranged by email.
+Are updates included?
You buy this version with its full source, and it keeps working without us. Personal and Commercial do not include future updates; Agency Unlimited does.
+What if it does not work?
Before you download, you can have a full refund within 14 days for any reason. After download, you are refunded if the archive does not build from its own README, a feature named on the listing is missing or broken, or the licence does not match - a fix is offered first. Full terms: refund policy.
Read from the source

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.

7 commands you can run
  • bot campaignRun a named set of seeds from the config
  • bot crawlBreadth-first crawl from a seed, obeying robots.txt
  • bot enrichLeads from a site's contact/about/team pages only
  • bot exportWrite stored leads to CSV
  • bot extractContacts and links from a saved HTML page (offline)
  • bot leadsShow stored leads
  • bot 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 you get

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

  1. 1Download the zip

    Unzip it anywhere. No installer, no account.

  2. 2Double-click START_HERE

    Or run the commands below from a terminal in that folder.

  3. 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
Personal
$199

One person, one deployment, personal use. The same program and source.

Commercial
$499

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.

New · one-click workspace

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.

The VenueScan workspace as it opens: an empty paste box, and each panel waiting for a page
As it opens: blank. No contacts, no links, nothing extracted until you load a page.
The same workspace after loading the sample contact page: 8 contacts (3 emails, 2 phones, 3 social profiles) and 9 links
No live web data - example shown after loading the sample contact page that ships with the program (a fictional company on example.com), all figures computed locally.
  • 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.html and 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

Real engine · server-side

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.

All commands →
bs9@botstudio9:~/venuescan-lead-runner-personal

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.

$
Commands to try - click to load, or copy
  • 7 leads: emails, phones and a LinkedIn page, de-duplicated
  • The newest three as JSON