Repository navigation
Add leads to a running campaign, a per-row import report, and lead screening - #124
Merged
Merged
Conversation
…reening
Append: POST /api/v1/autogtm/campaigns/{id}/leads takes up to 5,000 leads
(JSON or the CSV itself), skips people already in the campaign or its
project and anyone on a suppress list, and shares one code path with the
new-campaign import. UI on the product page, `og leads add`, MCP
add_leads_to_campaign.
Report: every row that did not simply become a lead is stored with what
happened (rejected, skipped, flagged) and the column or check behind it;
returned inline, readable at .../import/{task}/report, downloadable as CSV.
Screening: generated names (Borer853), relay mailboxes (passmail, aleeas,
simplelogin...), temp-mail domains (known, or one domain shared by 3+
unrelated leads), bot/agent/test accounts and role inboxes are flagged at
import and held back from cold outreach through the policy engine
(personScreenedOut), on every send path, until a human allows them.
Webmail is never taken as a company domain. Migration 0051.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explee cannot append to a campaign, and its import skipped rows without saying which or why. This brings both into OutreachGraph, plus the lead screen we ran by hand on the profullstack user export.
Append to an existing campaign
POST /api/v1/autogtm/campaigns/{id}/leadswithleads(Explee's columns, plusname,updated_at) orcsv(the file itself), up to 5,000 per call.skip_project_duplicates, default true), and anyone on a suppress list or unsubscribed.POST /campaigns/import(importIntoCampaign), which now also skips suppressed people and reports.og leads add <campaignId> <file.csv> --consent-source .... MCP:add_leads_to_campaign.Per-row import report
contact_import_rejectsgainsoutcome(rejected/skipped/flagged), so one table is the whole report. Every row that did not simply become a lead is stored with the reason and the column or check behind it (required column "email" is empty,already a lead in "Earlier list" in this project,on the suppress list "Do not contact"...).GET /autogtm/campaigns/import/{task}/reportandGET /contacts/imports/{id}/report, and as CSV with?format=csv. The /import page and the product page link the download.og leads report <task> [--csv], MCPget_import_report.Lead screening
packages/domain/src/lead-screen.ts: generated names (Borer853), relay hosts (passmail, passinbox, passfwd, aleeas, simplelogin.*, slmail, mozmail, duck.com, addy.io/anonaddy, hidingmail, agentmail.to...), temp-mail domains (maildock.store, fake.legal, or one domain shared by 3+ leads where nobody names it as their company and the addresses are not names), bot/agent/test accounts, role inboxes.lead_screens, and held back from cold outreach through the policy engine (personScreenedOuton theperson_ineligiblegate), so approval, autopilot, cadences and card generation all refuse the same person with the same reason. A follow-up on a conversation they opened is never blocked.POST /autogtm/leads/{person_id}/screening {allow}), or for the whole import (allow_flagged). An allow survives a re-import. UI list with Allow buttons;og leads screened|allow|hold; MCPlist_screened_leads,allow_screened_lead.isConsumerMailDomain); the API's private freemail list is gone.Migration 0051 (both dialects): a new empty table and three
ADD COLUMNs with constant defaults. No index on an existing table.Tests
packages/domain/src/lead-screen.test.ts, policy gate test,apps/api/src/append-leads.test.ts(append, dedupe, suppress, report rows, CSV download, screened list, override, approval refused with the screening reason), CLI and MCP tests.🤖 Generated with Claude Code