EVANS LIST

Action Plan: AI-Driven Lead Generation Engine

Prepared forNick Lassor, CGO & Partner
Prepared byEvan Foster
Last UpdatedJune 12, 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 1–2x/month cadence, aligned to SmartScout data refresh frequency. 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: 194 estimated hours · 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 running passively, no action needed until it finishes (~3–4 weeks from May 28).

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, saved + scored June 12) · ⏳ remaining: Nick's calibration pass in scoring.html — tune Segment E's gate, score thresholds, and Segment A's open bands, wire each segment to its Smartlead campaign (Step 4), and untick any excluded categories. 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 (1st of 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 (1st of month, 2 AM ET) + 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 (config v10) and all 35,671 brands re-scored on the new engine June 12 — what's in the Review Queue now is the criteria model, end to end, with ~29,100 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 proposed 1P-in-Decline segment (inactive until it gets a campaign). ⏳ Still open — the calibration pass: the first criteria run is deliberately wide (23,971 brands score Hot — Segment E's growth-only gate captures most of them), so Hot doesn't prioritize yet. Nick's remaining pass: tighten Segment E (ad-spend/TACoS data is now confirmed available to make "growth + margin pressure" measurable), nudge score thresholds, close Segment A's three open bands, untick excluded categories, and wire each segment to its Smartlead campaign — see "What I Need from Your Team."

TaskHours
segment-leads trigger.dev task — wired, deployed to production2
✅ Scoring Configurator UI — step-by-step guide (6 steps × 5 segments), live preview of real companies per segment that re-score as you tune (expand any brand for its full per-signal breakdown), weight distribution bar, 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 47 existing partners — ready to run now that the full scored cohort is live in D14
⏳ Unit testing & validation against known brand examples (Phase 7)4
Contact Enrichment
Weeks 4–5 ✅ Built · live-verified June 10 — batch gated
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. Total spend to date: 1 Apollo credit. Batch enrichment has not run — it stays gated (ENRICH_MODE=dry_run — its own switch, separate from the outreach gate, so turning it on cannot send any email) until the team gives the go-ahead, after Nick has reviewed the scored cohort. Once enabled, enriched contacts flow directly into the Review Queue for Nick's sign-off before anything touches Smartlead.

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 gate active6
⏳ 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 ⏳ In progress
33 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. By the time Phase 5 begins, warm-up will be complete and campaigns can fire immediately.

⚠ Test safety: A PIPELINE_MODE env var gates all Smartlead enrollment. Default is dry_run — logs what would be sent without calling any Smartlead APIs. Only when explicitly set to production do real leads enroll in campaigns. Phases 2–4 never touch Smartlead regardless of this setting. The human review queue (see below) adds a second layer before any email fires.

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); will be complete before Phase 5 campaigns fire8
Build campaign trigger logic (segment → Smartlead campaign mapping)6
✅ Human review queue — review.html live May 31; Nick approves/holds/rejects per brand; nothing moves to Smartlead without sign-off; email/Slack notification on new batch (needs RESEND_API_KEY set)5
Smartlead webhook → event tracking — Cloudflare Worker writes email events (sent, opened, bounced, replied) to Snowflake campaign_events in Q3; interim tracking via Smartlead analytics dashboard6
Template coordination with sales team2
End-to-end testing of segment → enrich → Smartlead → HubSpot flow6
Dashboard & Deployment
Weeks 6–7
34 hrs

Build an internal-facing dashboard at prospects.navira.io 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.

TaskHours
Dashboard design & layout (brand lists, segment views, key metrics, hit list)4
Build dashboard frontend (D3 / Cloudflare Pages)12
"Mark as Partner" button — sets converted_at, snapshots score + signals at conversion, moves brand to Partners view3
Partners view — all converted brands, conversion date, score at conversion2
Disqualification filters — minimum revenue, seller type, suppress/snooze per brand3
Deliverability health panel — bounce rate, open rate, unsubscribe rate per cohort; warning at 5% bounce3
"Pipeline status →" button linking to trigger.dev runs page (opens in new tab)1
Deploy trigger.dev tasks to production2
Cloudflare Pages deployment & domain configuration (prospects.navira.io)2
User access setup — trigger.dev view-only for Nick + dashboard access2
QA, Handoff & Documentation
Weeks 7–8
18 hrs

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

TaskHours
Full pipeline integration testing6
Bug fixes & refinements6
Documentation (system overview, runbooks, troubleshooting)4
Handoff walkthrough with Nick & team2
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. With ~40 hours available in Week 1, Phase 1 can be completed and Phase 2 can begin immediately. Kickoff: May 28, 2026. Final delivery targeted by ~July 23, 2026 (7–8 weeks from kickoff).

What I Need from Your Team

✅ Completed — archived (11 items)
  • 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 clock running as of May 28
  • 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 running passively from May 28 (~3–4 weeks); no action needed until 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

Open items with SmartScout's API team (their engineer Zach is responsive — most answers have landed within a day or two). None of these block the current calibration → sequences → wiring path; each one unlocks a specific upgrade when it lands. Updated June 12.

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 (9 items)
  • 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 (1st of month, 2 AM ET); 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 scorer (8 signals live + Category fit on the target-category list), 5 mutually-exclusive segments (A–E), Hot/Warm/Cold/Suppress buckets; built + deployed, Product Page Score gap added after the June 7 backfill. Backtest against the 47 existing partners is ready to run now that the cohort is scored.
  • 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 gated behind ENRICH_MODE (outreach stays separately locked). Review queue (review.html) live for Nick's sign-off before Smartlead enrollment.
Copied to clipboard