Run cold email domain rotation on one drag-and-drop board

By General Input

See every sending domain as Active, Reserve or Retiring, watch your bench against the 20 to 25 percent target, and refill it before a domain burns.

Integrations

  • InfraForge
  • Smartlead
  • Slack Bot
  • General Input Database

Type

App

Categories

  • Sales
  • Operations

Build me a domain rotation board for the cold email fleet I run. Today I track which sending domains are active, resting or burned in a spreadsheet that is always stale, and the whole point of this app is that the board itself becomes the record. The model is the three pool rotation serious senders use: Active domains carrying live campaign volume, Reserve domains fully warmed and sitting on the bench with light warmup traffic until they are needed, and Retiring domains on their way out. I open this board to plan capacity, not to read stats, so it has to answer one question instantly: if a domain burned today, do I have something warm to swap in.

The board has three columns, Active, Reserve and Retiring, and every domain in my InfraForge account appears as a card in exactly one of them. Load domains with InfraForge List Domains and mailboxes with InfraForge List Mailboxes, grouping each mailbox onto its domain by address. A card shows the domain name, the workspace it belongs to from InfraForge List Workspaces, its mailbox count and its warmup read. InfraForge has no concept of pools, so the pool assignment lives in the app's own database keyed by domain, and any domain the app has not seen before lands in Active by default so nothing is ever silently missing from the board.

The warmup read on a card is the worst trend among that domain's mailboxes, because one burning inbox is what takes the domain down. Match InfraForge mailboxes to Smartlead sending accounts by email address using Smartlead List Email Accounts, then pull Smartlead Get Warmup Stats for each matched account, which returns the last seven days of warmup activity. Reduce each mailbox to a simple health read from sent volume and the share landing in spam versus inbox, then show the worst one on the card with the mailbox that produced it named underneath. If a domain has mailboxes with no Smartlead match at all, say so on the card rather than showing a healthy looking blank.

I move cards between columns by dragging them, and the move persists immediately with an optimistic update so the board never snaps back while it saves. Across the top sits a header bar that tracks the bench: reserve domains as a percentage of active domains, measured against a 20 to 25 percent target I can change in settings. Show the current number, the target band, and whether I am under, inside or over it, and count the mailboxes behind each pool too so I am reading capacity rather than card counts. When reserve drops under the band, make it loud, because that is the moment a burn would leave a gap in sending.

A card in the Retiring column gets a two step wind down. First, Detach from campaigns: work out which campaigns the domain's mailboxes send from with Smartlead List Campaigns and Smartlead List Campaign Email Accounts, show me exactly which addresses are attached to which campaigns, and detach them with Smartlead Remove Email Account from Campaign. Then, once nothing is attached, Delete mailboxes with InfraForge Delete Mailbox, behind a confirmation that names every address being deleted and the campaigns they were just pulled from. Enforce the order: never offer delete on a card whose mailboxes are still attached to a running campaign.

From the Reserve column I can shop the pre warmed pool without leaving the board. A panel lists what is available from InfraForge List Pre-Warmed Domains with its live price and how many mailboxes come attached, filterable by price and by how closely a name matches the domains I already run. Buying uses InfraForge Purchase Pre-Warmed Domains, which charges my credit balance immediately with no separate checkout, so show my balance from InfraForge Get Credit Balance Settings and the running total before I confirm, and note that credit amounts are whole US dollars rather than cents. That purchase can create a sibling workspace named after the original with prewarmed appended when the pre warmed pool sits on a different mail server, and the response returns both a requested workspace id and the workspace the domains actually landed in, so reconcile both and show the real workspace on the new cards instead of the one I asked for. Newly bought domains land in Reserve.

Add a Refill the bench button that starts a background agent. I give it a budget in dollars and optionally the client or workspace to refill. The agent reads the current active to reserve ratio from the board, checks available credit with InfraForge Get Credit Balance Settings, and stops with a clear message if the budget is more than the balance can cover. It browses InfraForge List Pre-Warmed Domains and picks domains whose naming style matches that client's existing domains, so a client running short two word brand variants does not end up with a bench of unrelated names. It buys them with InfraForge Purchase Pre-Warmed Domains, attaches mailboxes with InfraForge Buy Mailboxes following the mailbox naming pattern already used on that client's active domains, and writes a purchase summary back into the app: what it bought, what each domain cost, the total spend, the mailboxes created, the workspace they landed in and the new reserve percentage. It posts that same summary to Slack with Slack Bot Send a Message. Show the agent's status on the board while it runs, drop the new domains straight into Reserve when it finishes, and keep the rest of the board usable throughout.

Design nuance: this is a planning surface, so favour density over decoration and let me see thirty or more domain cards at once. Keep purchase history visible somewhere on the board, since knowing what the bench cost this month is part of deciding whether to keep buying. Load the Smartlead account, campaign and warmup lookups once per board render and cache them rather than fetching per card. Handle the empty bench properly: a board with an empty Reserve column should lead with the refill action instead of an empty box.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonChat quality review board for LiveChat support leadsCompetitor LinkedIn ad watchlist with a permanent archiveLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts from