Agentic Sales Portal

AI agents that prospect, enrich, and score leads

Built inside the Waterside App on its own dedicated database. Claude agents run on Anthropic's Managed Agents platform to find waterfront property buyers, enrich their contact details across eight sources, and score them against per-business ideal-customer profiles, with every step streamed to a live run viewer.

Next.js · Anthropic Managed Agents · Claude Sonnet 4.6 · Claude Haiku 4.5 · Supabase · Upstash QStash · Steel · Playwright · Apollo · Voyage AI

Agentic Sales Portal, recreated 1:1 in code from the production codebase. Sample data.
Leads discovered by the agents
Qualified against the ICPs
Reached by email or phone
Agent runs executed

Prospecting at Flying Bridge Marina and Longfellow Design Build was human work that never scaled: someone had to comb property records for waterfront homes with dock access, then dig for a phone number or email that actually reached the owner, then guess whether the person was a real buyer. Done by hand, it was slow enough that most of the market never got looked at.

I built the Agentic Sales Portal inside the Waterside App itself, on its own dedicated Supabase database that the main app reaches into, so it lives behind the same login and permissions as everything else while keeping the agent workload isolated. Staff open it from Lead Generation under the Sales department.

The agents run on Anthropic's Managed Agents platform: a persistent cloud environment, server-side sessions, and streamed events, with the built-in toolset narrowed to web search and web fetch plus each agent's own tools. Waterfront Discovery finds canal-front and lakefront homes with dock access in configured regions. Territory Discovery widens the net to recent buyers and sellers for the boat club, service, and brokerage. The Vetting agent enriches each lead across eight sources in parallel (Apollo, people-search sites, LinkedIn, Facebook and Instagram via search, and state business records) and then checks Coast Guard vessel documentation, yacht-club directories, boating forums, building permits, and prior MLS listings before scoring.

Scoring is a 100-point rubric across prospect quality, contact reachability, existing-boater signals, and intent, with a 70-point qualification threshold. The judgment calls are written into the prompt as explicit guardrails: reachability is a routing signal rather than a kill switch, and a waterfront owner with a covered boat lift stays qualified even when enrichment comes back empty, because wealthy prospects suppress their personal data on purpose.

Because agents are database rows rather than hardcoded constants, adding one is a migration and a config row instead of a deploy. The full pipeline shards discovery by city into child runs queued through Upstash QStash so each gets its own execution window, then reconverges through an atomic claim that lets exactly one finishing child trigger the vetting stage. A run that hits its time budget is marked as timed out with its session preserved, then resumes exactly where it left off.

  • Claude agents on Anthropic's Managed Agents platform: persistent cloud environment, server-side sessions, streamed events
  • Waterfront Discovery, Territory Discovery, Alternate Contact Finder, Vetting, and a Steel browser-automation agent
  • Contact enrichment fans out to eight sources in parallel, including Apollo, people-search, SERP social lookups, and FL Sunbiz
  • Vetting scores 0 to 100 across prospect quality, contact reachability, existing-boater signals, and intent, with a 70-point qualification threshold
  • Pipeline shards discovery by city through QStash, with an atomic claim so exactly one child triggers the vetting stage
  • Timeout-and-resume: a paused session keeps its id and continues exactly where it left off
  • Live run viewer streams every agent thought, tool call, and save; full run history with per-step detail
  • Its own Supabase project, with mutations audited back into the main portal's activity log
  • Per-business ICP scoping so a marina run never sees construction profiles

Non-technical staff run the pipeline themselves, watch every agent thought and tool call stream into a live run viewer, and stop a run mid-flight. Human review sits where it matters: Claude proposes the column mapping on a spreadsheet upload and a person confirms it, and the email hub generates drafts but sends nothing on its own.

The agents have discovered 3,941 leads and qualified 783 of them against the ideal-customer profiles, across 2,907 runs and 233,728 logged steps. Contact enrichment reached an email or a phone number for roughly three quarters of them.

The most useful result was still a number I did not like. Run history made the unit economics legible, and the cost per qualified lead came out too high to keep running, so I shut the pipeline down and commissioned a cost model in dollars per qualified lead across every provider it touches before it goes back on. Knowing when to turn something off is part of leading AI adoption, and it is the reason I care about cost visibility as much as capability.