every morning it reads about 70 public sources: sec filings, job boards, changelogs, trust pages, github, hugging face, product hunt, customer walls, status pages, press. it keeps every event as its own dated observation, resolves the company to a domain only when a trusted source says so, scores fit against a client's icp and hands sales the sentence, the date and the link to quote. copy variables come from the source's own words. every crm write passes a gate, so nobody emails a customer.
about a million observations on 561k domains · 481 scripts · 581 prs · live every day for one client since late september: 1,101 accounts reached, 59 meetings, 9 closed-won from outbound
the lake itself.six columns, one row per observation, keyed on the source's own id so a filled-in domain can never split a row. bitemporal: first seen, last seen, times seen. a sqlite mirror with full-text search over every payload.
~1m rows · 70 sources · 561k domainslake.csv + lake.db
a resolver that never guesses.company name to domain through hand fixes, a corpus of 11 million names, clearbit and logo.dev on whole-name matches only, wikidata, apollo. a guess stays a candidate. 130k earlier guesses were pulled back out of the lake.
11.2m names in the corpus · 12m domains in the firmographic indexresolve_domains, merge_domains, company_corpus
prospect exclusion and the crm gate.customers, live deals, competitors, partners, people who said no: one register, rebuilt daily, synced to the crm and the sequencers nightly. every create goes through the gate. rules live in a json file, never in code.
company + contact registers · 30-day cooling · 90-day not-interested holdsbuild_exclusions, contact_exclusions, apollo_pe_sync
plays, launch list, copy variables.one csv per pain: who has it right now, the sentence to quote, its date and link. the launch list gates by size and agent depth into waves. copy variables are mined phrases from the source, never written: an empty cell beats an invented one.
24 plays · 5 warm-again plays · e1 / e2 / e3 rendered and checked per contactplays, launch_list, mined_vars, copy_render
the outbound feedback loop.the client's own outcomes, cold only, back onto the lake: lift per signal, shrunk toward one, then a lookalike score on every company in the universe that sets the launch order.
787 cold accounts · cv auc 0.65 · customers of agent-infra vendors answer 2.5xoutbound_feedback
the contact watch.job changes, dead addresses, movers' new emails and mobiles, from the vendor deltas, gravatar, github, bluesky, a leadmagic profile check, dns. a person who left is dropped from every list the same day. slack alerts on changes only.
85k contacts watched at 2.5k accounts · 437k people with a mobile in the phone indexcontact_health, contact_signals, email_bridge, contact_refind
the email infra monitor.every sending inbox and domain: warmup, reputation, spf / dkim / dmarc, blacklists asked through their own nameservers, domain age and expiry, a 0 to 100 risk score, a ready-pool forecast and a batch planner.
150 inboxes · 50 domains · every 3 hoursemail_infra · infra tab
competitor watch and battlecards.rivals' pricing pages, headlines, changelogs, releases, news, job boards, stars and downloads, priced against the client on four usage scenarios. public complaints tied to the companies that wrote them. the client's own deal record per rival.
pricing on 4 scenarios · complaints from github, forums, hn, redditcompetitor_watch, complaint_miner, battlecards
the closed-won check.every won deal back through the pollers: which lanes fired before the meeting, which during the cycle, which routes no lane watches. the missed routes become the next lanes.
37 won deals · 5 intent routes with no lanewon_analysis · closed won tab
the crm migration and its hygiene.a whole crm moved in a day: dedupe on domain, email and deal id, every address verified first, lifecycle rules, exclusion fields on every record. now a daily live sync, enrichment within 15 minutes of any new record, owners assigned from the first call.
debounce then bounceban · 161 archived on failed verificationcrm_migrate, hubspot_migrate, crm_enrich_now
the ae dealdesk.every weekday at 07:30 the lake picks 10 to 20 send-now accounts per rep, gates them, finds buyer-persona people with verified emails, creates them in the crm round robin with the intent and copy fields, builds the rep's crm and apollo lists and emails a brief. a calling cycle rotates accounts through 7 days on, 14 off.
live to 3 aes since october 27 · first run 29 accounts, 71 peopleae_morning, ae_desk
inbound, in 3 minutes.website form to calendly to the lake to the crm: contact and company through the gate, owner chosen, form answers and the lake's brief on the record, the meeting reused or created, enriched, one slack line.
polls every 3 minutes · per-booking ledger, so a failed step retriescalendly_inbound
events arm.guest lists and rsvps become a ledger, a profile of who comes, and an event-ready score over every contact we hold: invite lists per metro, nurture and lost accounts ready for a re-engage, all onto crm marketing events.
8 events · 2,687 ready people at 239 accounts on the first runluma_sync, event_ready, event_hubspot
the sec arm.edgar's daily index into five lanes: crowdfunding raises, reg a, ipo registrations, new officers and directors, deregistrations. every sec bulk data set copied to s3 the day it posts, so quarterly needs no calendar.
one row per raise or person, amendments folded insec_daily_poll, sec_bulk_sync
the lake app.fourteen tabs on a stdlib http server, read only: pollers, leads, plays, competitors, closed won, company pages, deals, nurture, contacts, exclusions, calls, domain quality, infra, events, growth tools, feedback. every cached file reloads when it changes.
localhost:8765lake_app
lake workspaces.the multi-client version: one workspace per icp, an agency view, client views redacted on the server (a source shows as what it looks for plus a code). a new workspace is a name and a website; a headless claude session researches it and runs the map.
tam maps run for 8 prospects · 12m domains in the universelake_workspaces, tam_map, firmo_index
the lake's own crm.my pipeline in one google sheet, filled by the lake daily: size, signals, best verified contact, stage flags. a stdlib sheets client (jwt signed through openssl). a touch log reads my texts, gmail and heyreach and suggests the stage.
3 tabs: crm, gtme hiring, complaint minerlake_crm_sheet, gsheets, lake_crm_touches
the content engine.one inbox of what we built and wrote each week (session recaps, prs, docs, a startup gossip feed, lake counts), drafted into linkedin, x and substack posts, a friday newsletter and lead magnets, in a voice guide rebuilt from my own posts. a review queue: edit, approve, schedule, posted. drafts only, it never posts on its own.
privacy guard blocks every client name before a draft existscontent_engine, content_app
the gossip feed.who quietly shut down, got acquired, laid people off, restated: news, warn notices, 8-k bad items, logos gone from customer walls, 1,500 homepages a week read for acquired, parked or dead.
6 lanes · juice 1 to 5gossip
runs that heal themselves.every step recorded with its counts. a red run is red. network failures retry, a killed run resumes, a repair job re-runs what failed under the same name so the app shows it fixed. two hosts, and a role flag so only one ever spends or pushes.
daily at 07:00 · weekly heavy · nightly exclusion sync · mac mini primary since october 30run_all, run_heavy, run_repair, run_metrics