EVANS LIST

Action Plan: AI-Driven Lead Generation Engine

Prepared forNick Lassor, CGO & Partner
Prepared byEvan Foster
Last UpdatedJuly 27, 2026

Objective

Build an internal, automated lead generation system that replaces reliance on external partners by leveraging Amazon marketplace data to identify, segment, enrich, and activate high-fit brand prospects — resulting in a repeatable pipeline of qualified outreach targets on a monthly cadence, aligned to SmartScout's monthly data refresh (first weekend of each month). Send volume is intentionally conservative: ~15–20 emails/day across 6 mailboxes, supporting a goal of 3–5 new partners/quarter. Volume can be increased if needed, but is not required for the current target.

Live Pipeline
 brands ingested
 brands scored
 awaiting review
 contacts enriched

Project snapshot: 159 billed hours (work above that absorbed as a discount) · 7–8 week timeline · 7 phases · kickoff May 28, 2026

Scope of Work

Discovery & Data Access
Week 1 ✅ Complete
26 hrs

Establish access to all required systems and data sources. Understand the Smart Scout API schema, available fields, and rate limits. Align on segmentation criteria and campaign logic with Nick and the sales team. Initialize the TypeScript project and trigger.dev environment so the dev setup is correct before any pipeline code is written.

✅ Phase 1 complete. All tasks done as of May 29: SmartScout API explored, trigger.dev configured, credentials confirmed, segmentation spreadsheet reviewed. SPF/DKIM/DMARC verified across all 3 domains — all 6 mailboxes showing 100% warm-up reputation in Smartlead. Warm-up is now complete (ran ~3–4 weeks from May 28) — all 6 mailboxes are ready to send.

TaskHours
✅ Kickoff meeting & requirements alignment2
✅ Smart Scout API access, documentation review & data exploration6
✅ Coordinate with Justin on internal tools & system access2
✅ Segment definitions live (criteria & bands model from the June 11 session) and calibrated — Nick & Jeremy signed off on the scoring (live config v43), all six segments (A–F) wired and launched in Smartlead. Pipeline reads config directly from D1 — no file transfer needed.4
✅ Evaluate enrichment platforms (Apollo.io, LinkedIn)4
✅ Evaluate Go High Level setup & configuration3
✅ Initialize TypeScript project + trigger.dev CLI setup — connect to Nick's trigger.dev account, configure tunnel, env vars, task structure; install trigger.dev AI tools (install-mcp, skills, install-rules)4
✅ SPF/DKIM/DMARC verified on all 3 domains — all 6 mailboxes confirmed 100% warm-up reputation in Smartlead Foundation Pool (May 29)1
Data Ingestion Pipeline
Weeks 2–3 ✅ Complete
33 hrs

Build the automated pipeline that pulls Amazon brand data from the SmartScout API, normalizes it, and fans out to per-brand scoring tasks. Deduplication checks the suppression list in D1 (existing clients + lost/fired, matched by name and Amazon store slug) before processing — no current Navira client enters the pipeline. Snowflake is deferred to Q3; in the interim the full cohort (with raw signals) persists to Cloudflare D1, the pipeline state store, so it can be re-scored without re-pulling SmartScout.

✅ Complete: Full pipeline live — SmartScout ingestion, D1 dedup (100 suppressed: existing clients + lost/fired), D1 state store wired, monthly cron scheduled (first weekend of every month), batchTrigger fan-out to enrichment. End-to-end test passed May 29, 2026: 100 brands fetched and written to D1 in 19 seconds.

TaskHours
✅ Design data model — Snowflake schema (brands, scores, contacts, campaign_logs, pipeline_runs)4
✅ Add conversion tracking fields to brands schema (converted_at, score_at_conversion, signals snapshot)1
✅ Build SmartScout API ingestion task in TypeScript12
✅ Implement pagination, data validation & normalization4
✅ Deduplication at ingestion — reads the D1 suppression list each run (existing clients + lost/fired), matched by name + Amazon store slug; matches excluded before they hit Apollo2
✅ Configure trigger.dev scheduled runs (first weekend of every month) + fan-out via batchTrigger()4
✅ Testing & iteration against live data6
Brand Segmentation Engine
Weeks 3–4 ✅ Complete
42 hrs

Implement the logic that scores and buckets brands based on the agreed-upon criteria, automatically assigning them to prospect segments. Each brand runs as its own trigger.dev task — if one fails, only that brand retries, not the whole pipeline.

✅ Built + deployed — the criteria & bands model is LIVE. Following the June 11 working session, the weight sliders were replaced by the "criteria & bands" model the team aligned on: each segment is defined by must-haves, nice-to-haves, value bands, and deal-breakers, in plain language (e.g. Segment D's locked decision: 4–10 third-party sellers as the sweet spot, eligible to 20). The definitions from the meeting were saved and re-scored on the new engine (now config v43), and the cohort has grown to ~43,981 brands after onboarding ~8,100 previously-missed 1P / Vendor-Central brands (they have no Amazon storefront, so the original ingest skipped them). What's in the Review Queue now is the criteria model, end to end, with ~36,000 non-suppressed brands. Live signals: annual revenue, YoY & MoM growth, 3P sellers per listing (+ the sweet-spot band), catalog size, Prime-coverage gap, Vendor Central dominance (now measured by dominant-seller coverage — the literal "Amazon owns X% of the brand" number), and Brand/page score (covers ~72% of brands while the product backfill finishes). The Scoring page's Step 2 draws every band over a live sample of real brands (drag the band directly on the chart), can back-solve bands from example brands you name, and re-scores real companies in the preview as you adjust — including the now-live Segment F — 1P in Decline, which targets Vendor-Central brands Amazon dominates (~480 brands land in it after calibration). ✅ Calibration complete — Nick and Jeremy signed off on the scoring. The first criteria run was deliberately wide; the calibration passes since then tightened it to the live config v43 — Hot now sits at ~15,600 (down from ~24,000), with ad-spend/TACoS sharpening Segment E's "growth + margin pressure" gate, score thresholds set, and Segment A's bands closed. All six segments (A–F) are now wired and launched in Smartlead.

TaskHours
segment-leads trigger.dev task — wired, deployed to production2
✅ Scoring Configurator UI — criteria & bands model in two phases (define → re-score → act), live preview of real companies per segment that re-score as you tune (expand any brand for its breakdown), live bucket totals that show how many brands land Hot/Warm/Cold per segment as you move the thresholds, cloud save → D1 (pipeline reads config directly, no file transfer needed)8
✅ Build scoring rules — multi-signal engine (revenue, growth, seller mix, Prime/Vendor presence, lifecycle, catalog size, Product Page Score gap, category fit); 5 mutually-exclusive segments. Product backfill complete — Product Page Score gap now scored10
✅ Implement 1P vs. 3P seller classification4
✅ Bucketing logic — auto-assign brands to hot / warm / cold / suppress; categoryFit inert until allow-list set4
✅ Conditional chaining — hot/warm brands automatically trigger enrichment task2
✅ Backtest scoring against the existing partners — built into the Scoring UI (back-solve bands from named example brands; live preview re-scores real companies as you tune)4
✅ Validation against known brand examples — the Sequences page types any company to show which segment it scores into; used during Nick & Jeremy's sign-off4
Contact Enrichment
Weeks 4–5 ✅ Live — enrichment running (Apollo)
28 hrs

Enrich segmented brand leads with real contact information for decision-makers at target companies. Apollo.io rate limits are handled automatically via trigger.dev's concurrency limiting and exponential backoff retry — no manual intervention needed if Apollo throttles. Note: LinkedIn API access is enterprise-only and heavily restricted — Phase 4 runs Apollo-only by default. LinkedIn is deprioritized unless access is confirmed before Phase 4 begins.

✅ Logic built May 31 — wired to the live Apollo API & verified June 10. Apollo.io enrichment complete — seniority/title/email ranking selects the best decision-maker contact per brand; brand_contacts table live in D1; idempotent upsert (safe to re-run). On June 10 the master Apollo API key came through: the integration was reworked to Apollo's current API (the original people-search endpoint had been deprecated) and proven with a single live test — one real decision-maker with a verified email landed in brand_contacts. Batch enrichment is now live (ENRICH_MODE=production — its own switch, separate from the outreach gate) — ~620 decision-maker contacts across ~618 brands enriched so far, each flowing into the Review Queue for sign-off before anything touches Smartlead. You control the spend: the Scoring page caps enrichment per tier — the top % or top # of brands by score — and shows the running Apollo-credit estimate live, so a run costs exactly what you choose (e.g. only the top few percent of Hot), in line with the 3–5 partners/quarter target.

TaskHours
✅ Build Apollo enrichment task — trigger.dev task deployed with concurrency limit, 5-attempt retry, exponential backoff8
✅ Apollo enrichment logic — seniority/title/email ranking; best contact per brand stored to D1 brand_contacts; reworked to Apollo's current API + live-verified with the master key (June 10); batch enrichment now live in production (~620 contacts)6
⏳ LinkedIn data discovery & integration — deprioritized; LinkedIn API is enterprise-only and heavily restricted6
✅ Match enriched contacts to segmented brands — contact keyed to brand_id; review.html shows contact alongside score4
✅ Data quality checks & deduplication — seniority rank + email-status filter; upsert-safe, idempotent4
Campaign Triggers & CRM Integration
Weeks 5–6 ✅ Live — all 6 segments launched in Smartlead
36 hrs

✅ Pre-started + confirmed May 29: All 6 mailboxes live and showing 100% warm-up reputation in Smartlead Foundation Pool. Identities: Morgan Capri & Keira Loren (navirabrands.com), Levi Matthews & Leo Strawley (navirapartners.com), Emma Carter & Megan Brooks (navirahq.com). 4F/2M split — recommended 60–70% women. Warm-up is now complete — all 6 mailboxes are ready and campaigns can fire as soon as the cohort is approved.

✅ Live — all six segments (A–F) launched in Smartlead. Each segment, wired in one click from the Scoring page: (1) creates its Smartlead campaign, (2) loads the approved email copy straight from the Sequences page — all 6 steps, with per-brand data merge-fields (revenue, growth, seller count, Prime coverage, page score, etc.), and (3) attaches a reply webhook. At enrollment, approved & enriched contacts go in with those personalization fields filled. Replies, unsubscribes, and bounces flow back automatically so a brand is never contacted twice — and an out-of-office auto-reply correctly does not count as a reply. Positive replies hand off to HubSpot via Smartlead's native CRM integration, and a bounce-rate alert emails the team before Smartlead's 5% auto-pause. Wins are detected automatically — approved brands are matched against HubSpot, so converted partners surface in the dashboard's Partners view with no manual step. All six campaigns are now ACTIVE — Nick and Jeremy approved the scoring and copy, and sends are ramping conservatively (in line with the ~15–20/day plan) under the human review queue.

⚠ Safety model: A PIPELINE_MODE env var gates all Smartlead enrollment — it stayed on dry_run (logs only, no Smartlead API calls) through the entire build, and was flipped to production only after Nick and Jeremy signed off on scoring and copy. The human review queue still gates every brand before it enrolls, and sends ramp conservatively rather than firing the whole cohort at once.

Connect the segmented, enriched lead data to the outreach platform so campaigns fire automatically based on segment assignment. Smartlead.ai handles cold outreach and mailbox rotation, while HubSpot (the CRM) takes over after a reply or booked call. For the first 2–3 weeks post-launch, hot/warm brands land in a human review queue before enrollment — giving Nick a chance to sanity-check output before campaigns fire at scale.

TaskHours
✅ Smartlead.ai account set up — 6 mailboxes connected across 3 domains (navirapartners.com, navirabrands.com, navirahq.com); warm-up started May 28 (Week 1) and is now complete; all 6 mailboxes ready to send8
✅ Campaign enrollment + per-brand personalization — wiring a segment creates its paused Smartlead campaign, auto-loads the approved Sequences copy (all 6 steps, merge tags), and enrolls approved/enriched contacts with their data fields filled. Verified against Smartlead's live API June 16; now live in production — all six campaigns ACTIVE6
✅ Human review queue — review.html live May 31; Nick approves/holds/rejects per brand; nothing moves to Smartlead without sign-off; email notification on new batch (Resend live)5
✅ Smartlead reply webhook — records replies / unsubscribes / bounces so a brand is never re-contacted (out-of-office auto-replies excluded); positive replies hand off to HubSpot via Smartlead's native CRM integration; bounce-rate alert email before the 5% auto-pause. Signed & deployed June 166
✅ Automatic win detection — matches the brands we approved against HubSpot wins to mark converted partners (no manual button); sets converted_at and snapshots score + signals at conversion; feeds the dashboard Partners view. Shipped June 263
✅ Sequence copy → Smartlead — the 6 segment sequences (A–F) from sequences.html push into the matching campaign on wire (toggle off to use your own copy)2
✅ End-to-end live — segment → enrich → Smartlead → HubSpot is running in production; all six campaigns ACTIVE and sending (conservative ramp)6
Dashboard & Deployment
Weeks 6–7 ✅ Complete
31 hrs

Build an internal-facing dashboard giving the sales team real-time visibility into the pipeline and customizable hit lists. Nick can also be given view-only access to trigger.dev to monitor pipeline health directly.

✅ Dashboard is live — the Dashboard tab (navira.evanslist.tech) is built and in use. Shipped: the brand board with live pipeline counts, a Partners view of converted brands — wins are auto-detected (matching approved brands against HubSpot wins; built in Phase 5), so partners surface here automatically with their score + signals at conversion; pause/resume of Smartlead campaigns without leaving the page; and bounce resolution + deliverability health (open / bounce / unsubscribe with the 5% warning, including resolving a bounced contact in place and re-enriching it). Dashboard & deployment complete. A few optional extras were intentionally left out of v1 as unnecessary: standalone disqualification/snooze filters (per-brand holds & suppression already happen in the Review Queue) and a trigger.dev shortcut button (the Pipeline Map already gives live pipeline visibility). trigger.dev view-only access for Nick is available on request. The dashboard runs on navira.evanslist.tech until NAVIRA's migration of the system onto its own infrastructure completes (agreed at the July 17 handoff) — the final domain lands with NAVIRA then.

TaskHours
✅ Dashboard design & layout (brand lists, segment views, key metrics, hit list)4
✅ Build dashboard frontend (Cloudflare Pages)12
✅ Partners view — all converted brands, conversion date, score at conversion2
✅ Per-brand holds & suppression handled in the Review Queue — standalone dashboard disqualification/snooze filters not needed for v13
✅ Deliverability health panel — bounce rate, open rate, unsubscribe rate per cohort; warning at 5% bounce3
✅ Live pipeline visibility provided by the Pipeline Map — a separate trigger.dev button wasn't needed1
✅ Deploy trigger.dev tasks to production2
✅ Cloudflare Pages deployment — live on navira.evanslist.tech · NAVIRA-owned domain lands with NAVIRA's migration onto internal infrastructure (agreed July 17)2
✅ Dashboard access live; trigger.dev view-only for Nick available on request (not required for current use)2
QA, Handoff & Documentation
Weeks 7–8 ✅ Complete
18 hrs

Final testing, documentation, and knowledge transfer to ensure the system runs reliably without ongoing intervention.

✅ Complete. The pipeline has run end-to-end in production since launch; a security review and code cleanup were completed the week of June 22; and the documentation set is done — an agent & team Handoff doc, 11 per-stage troubleshooting guides, runbooks, the Pipeline Map, and a public Changelog. The handoff walkthrough was held July 17, 2026 with Justin Shuster (Director of Technology): the codebase is shared with NAVIRA's GitHub access and migration onto NAVIRA-internal infrastructure is underway, with this instance running in parallel until the new environment is verified.

TaskHours
✅ Full pipeline integration testing — running end-to-end in production since launch6
✅ Bug fixes & refinements — security review + code cleanup completed (week of June 22)6
✅ Documentation — Handoff doc, 11 troubleshooting guides, runbooks, Pipeline Map, Changelog4
✅ Handoff walkthrough — held July 17, 2026 with Justin (Director of Technology); repo shared, migration to NAVIRA infrastructure underway2
Archived Proposal

The original proposal is available for reference and download. View archived proposal or download as Markdown.

Timeline

Estimated duration: 7–8 weeks

Phases overlap where possible. All seven phases are complete — the handoff walkthrough was held July 17, 2026 with Justin (Director of Technology), and migration onto NAVIRA-internal infrastructure is underway. Kickoff was May 28, 2026; final delivery targeted by ~July 23, 2026 (7–8 weeks from kickoff).

Actual results: the engine sent its first live customer email on June 24, 2026, and V1 shipped on June 29, 2026. That's about 4½ weeks from kickoff against a 7–8 week estimate, landing the full build roughly three weeks ahead of schedule, live in production and already sending. 🚀

What I Need from Your Team

The major sign-offs are done — Nick approved the scoring calibration and Jeremy approved the sequence copy, and all six segments are live in Smartlead. What's left is the migration of the system onto NAVIRA's own infrastructure, agreed at the July 17 handoff walkthrough.

✅ Completed — archived (14 items)
  • Nick: scoring calibration + category sign-off — calibration pass complete (Segment E gate tightened with ad-spend/TACoS, score thresholds set, Segment A's open bands closed, excluded categories unticked); scoring approved and live at config v43 (~36,000 non-suppressed, ~15,600 Hot)
  • Jeremy: sequence copy sign-off (A–F) — all 36 emails (6 steps × 6 segments) reviewed and approved; copy auto-loads into each segment's Smartlead campaign on wire. All six campaigns are now live
  • Smartlead “Stop sequence on reply” configured — Nick & Evan set every live campaign to stop sending once a lead replies; the pipeline also tracks reply status separately and won't re-enroll a replied lead
  • Existing-client dedup → D1 — GHL retired (redundant to HubSpot); the dedup list now lives in the pipeline database, seeded from NAVIRA's client + lost/fired lists
  • trigger.dev setup — correct project selected and local environment configured
  • Sending domains confirmed — Nick provided navirapartners.com, navirabrands.com, navirahq.com
  • trigger.dev environment variables set — SmartScout, Snowflake, Apollo, and Smartlead credentials loaded in prod + staging
  • SmartScout ingestion task builtingest-leads task ready with discover + ingest modes
  • Local environment fully configured — all API keys and credentials in .env
  • Smartlead.ai setup started — Nick connecting mailboxes; warm-up ran from May 28 and is now complete
  • Apollo.io API access — master API key live June 10; integration reworked to Apollo's current API and verified with a single live contact test
  • SPF/DKIM/DMARC verified + warm-up running clean — confirmed May 29; all 6 mailboxes at 100% reputation in Smartlead Foundation Pool; warm-up ran from May 28 (~3–4 weeks) and is now complete. Mailboxes: Morgan Capri & Keira Loren (navirabrands.com), Levi Matthews & Leo Strawley (navirapartners.com), Emma Carter & Megan Brooks (navirahq.com) — 4F/2M split per recommended 60–70% women strategy
  • Existing-client + lost/fired lists loaded — cleaned and loaded into the pipeline database (D1) as the dedup source (100 brands); dedup check live in ingestion; backtest dataset ready for Phase 3
  • Smartlead API access — connected & verified — The Scoring Configurator's Step 4 wires each segment to Smartlead directly: ⚡ Wire creates the (paused) campaign, or the “link existing” dropdown lists your real Smartlead campaigns — no copy-pasting, no risk of a typo breaking enrollment. The Smartlead API key is active and confirmed working. The dropdown populates automatically once Jeremy's campaigns exist in Smartlead. Nothing further needed from your side.

Waiting on SmartScout

One open item remains with SmartScout's API team (their engineer Zach is responsive — most answers land within a day or two). It doesn't block anything live; it unlocks a specific upgrade when it ships. Updated June 29.

✅ Answered & resolved — archived (3 items)
  • Seller records lookup — solved June 17. SmartScout's seller data includes the seller's country, name, and brand count, and we cracked the brand→top-seller join (their API needed a specific request shape, since confirmed working). This unlocks four of your CEO's asks at once: the China-based-seller flag, "seller name matches brand name", "only brand in their storefront", and the Review Queue filter for targeting every brand a weak seller manages. The one-time pull across ~29,700 sellers (an overnight job) is ready to run on our side.
  • Buy-box suppression — confirmed June 24. Zach confirmed the field is the percent of time Amazon suppressed the Buy Box for a listing, and it's in the product data our pipeline already pulls. That makes "Amazon suppresses your listing X% of the time" a ready-to-build Day-1 email hook for Vendor Central brands — we'll wire it in at enrollment for targeted brands.
  • Buy-box price — clarified June 24 (not a bug). Zach confirmed average and current buy-box price were intentionally combined: the value is the average Buy Box price over the last 30 days, which is exactly what we'd want, so it's usable as-is. A separate price-volatility signal would need per-listing history (a one-at-a-time pull we can add later if it proves worth it).

Everything else previously open with SmartScout has been answered and is already built in — ad-spend/TACoS (live in scoring), the v2 API migration, and confirmation of which fields are placeholders we deliberately never use.

Evans List — Next Steps

Ordered action items for Evans List covering all project phases. Items marked with a blocker are waiting on a dependency from Navira’s side.

✅ Completed — archived (13 items)
  • Phase 7: handoff walkthrough — held July 17, 2026 — with Justin Shuster (Director of Technology): repo shared to NAVIRA GitHub access, migration model agreed (NAVIRA's team migrates the system onto its internal EC2/MySQL infrastructure), API key rotation set for migration completion. Closes out the build.
  • Phase 6: dashboard & deployment — complete — the Dashboard is built and in use (live pipeline counts, Partners view with automatic win detection, pause/resume campaigns, bounce resolution + deliverability health). Optional extras (standalone disqualification/snooze filters, a trigger.dev shortcut, view-only access) were left out of v1 as unnecessary; the NAVIRA-owned domain lands with the migration onto NAVIRA infrastructure (agreed July 17).
  • Phase 7: QA + documentation — complete — pipeline running end-to-end in production; security review & code cleanup done (week of June 22); full docs shipped (agent & team Handoff, 11 troubleshooting guides, runbooks, Pipeline Map, Changelog).
  • Phase 5: outreach live — all six segments (A–F) wired and launched in Smartlead; campaign enrollment, per-brand merge-field personalization, reply webhook, bounce alerts, and the human review queue are all in production. End-to-end path (ingest → score → enrich → review → Smartlead → HubSpot) running live; sends ramping conservatively.
  • Load existing-client + lost/fired lists into D1 — cleaned and loaded as the dedup source for every run (matched by name + Amazon store slug); also the backtest dataset for Phase 3
  • Run ingest-leads in discover mode — confirmed exact API response structure and all real field names directly against the live API
  • Update ingestion field mappings — replaced all placeholder field names in src/ingestion/__init__.py with confirmed SmartScout fields; revenue filter enabled and tested (100 brands pulled successfully)
  • Dedup check live in ingestion task — reads the D1 suppression list every run (name + Amazon store-slug match); skips matched brands before they hit Apollo. GHL retired.
  • Configure scheduled runs + fan-outscheduled-ingest cron live (first weekend of every month); batchTrigger() fans out one enrich-leads task per brand; PRODUCTION environment only
  • Phase 2 end-to-end testing — live test passed May 29: 100 brands fetched from SmartScout, dedup checked against the suppression list, D1 state store populated — completed in 19 seconds
  • Phase 3: brand segmentation engine — multi-signal criteria/bands scorer, 6 mutually-exclusive segments (A–F), Hot/Warm/Cold/Suppress buckets; built + deployed (migrated weighted→criteria June 11–12; Segment F added June 17), Product Page Score gap added after the June 7 backfill. Backtest is built into the Scoring UI (back-solve bands from named brands; live preview), and Nick & Jeremy signed off on the scoring (config v43).
  • Phase 3: scoring results view (Navira-facing) — per-brand scoring output is now live on the Review Queue (the standalone Results page was merged in). After each scoring run it lists every brand, its single best-match segment, score, Hot/Warm/Cold/Suppress bucket, and mapped Smartlead campaign — so Nick can review the cohort before Apollo credits are spent. Reads the pipeline database directly; nothing to install, no access to grant.
  • Phase 4: Apollo enrichment — logic built May 31; reworked to Apollo's current API and live-verified June 10 when the master API key arrived (one single-brand test, 1 credit, verified email in brand_contacts); seniority/title/email ranking; batch enrichment now live in production (~620 contacts, ENRICH_MODE is its own switch separate from outreach). Review queue (review.html) live for Nick's sign-off before Smartlead enrollment.
Copied to clipboard