How work moves through the system
The workflow is easiest to understand as a sequence of gates.
1. A weekly task maintains the market thesis
Outbound quality is downstream of market selection.
If the target segment does not have an expensive recurring problem, an accessible buyer, a credible reason to act now, and a project V12 Labs can deliver well, better personalization will not save the campaign.
The weekly market-thesis task reviews what the engine is learning:
- which discovery path produces accounts that survive review
- which segments repeatedly end in Watch or Reject
- which proposed wedges collide with mature incumbent software
- where explicit buying intent appears
- which messages earn replies
- where procurement or compliance makes a small engagement unrealistic
This gives the system a slow strategic clock. The daily workers execute the current thesis; the weekly worker asks whether the thesis still deserves resources.
2. Three daily scouts search different opportunity surfaces
We split discovery into three lanes because the signals and the commercial motion are different.
Software Buyers looks for problems that require a broader product or internal system. Examples include portals, operations apps, integration layers, custom dashboards, and spreadsheet-to-application migrations.
AI Automation Buyers looks for narrower recurring workflows. Examples include intake, exception handling, research, reconciliation, reporting, routing, and follow-up preparation.
Creator Opportunities looks for a different distribution model. The target may be a coach, community operator, educator, or practitioner with a concentrated audience and a repeated problem.
The first offer may be a paid validation cohort or an internal delivery tool rather than cold outbound to each end customer.
Each scout uses both account-first and people-first discovery.
Account-first discovery begins with operating conditions such as expansion, technology migration, recurring administrative work, customer-experience failures, or a current process described in a company source.
People-first discovery begins with attributable intent: an operator asking for a recommendation, describing a broken workflow, seeking an implementation partner, or explaining a recurring manual process in a public community or social post.
The second path has often produced stronger opportunities because it begins with a real person expressing a real problem.
It also demands stricter identity resolution. A social post is a signal, not proof that the author is the buyer or that the company is qualified.
3. Freshness is a gate, not a scoring bonus
One of the most consequential changes we made was separating signal freshness from lead score.
A company can look perfect on paper and still be a poor outbound target if the underlying event is old. We use these working tiers:
| Freshness tier |
Signal age |
How we treat it |
| Hot |
0-7 days |
Preferred for explicit intent and fast-decaying requests |
| Fresh |
8-21 days |
Usually usable with adequate company evidence |
| Aging |
22-45 days |
Requires judgment; stronger for durable change than transient intent |
| Stale |
46-90 days |
Cannot support signal-led outreach without a meaningful recent revalidation |
| Expired |
More than 90 days |
Historical context only; a separate current trigger is required |
Explicit requests for a vendor, freelancer, tool, or agency decay particularly fast. A 35-day-old "looking for help" post is not current buying intent merely because a search engine surfaced it today.
Durable events behave differently. A facility expansion, system migration, acquisition program, or multi-location rollout can remain relevant longer, but we still look for current corroboration before treating it as an active trigger.
This rule prevents a common outbound failure: giving an old signal a high score and allowing the score to launder the staleness.
4. The account reviewer tries to disprove the opportunity
The scouts are optimized to find plausible opportunities. The reviewer is optimized to challenge them.
For every new or materially changed record, the account reviewer checks:
- Is the source current and attributable?
- Is the problem observed, or merely inferred from the industry?
- Is there a narrow project we could deliver in weeks rather than a vague transformation?
- Does an incumbent product already solve the proposed wedge?
- Does the company have an internal team that owns the exact capability?
- Is the likely buyer accessible?
- Would procurement, security, or compliance overwhelm a small initial project?
- Is there contrary evidence that should kill the hypothesis?
It then returns one of four operational decisions:
- Proceed: enough evidence, fit, timing, and whitespace to justify enrichment
- Watch: promising, but a named evidence gap must be resolved before spending more resources
- Reject: a fatal problem such as stale intent, incumbent overlap, weak economics, or poor delivery fit
- Duplicate: the account already exists elsewhere in the system
This adversarial step is why the engine can produce zero usable accounts on a run and still be working correctly. We would rather preserve an empty queue than manufacture pipeline from weak evidence.
5. Enrichment happens only after qualification
Contact data is not free, and the cost is not limited to API credits. A wrong buyer wastes research, produces awkward personalization, and can create reputational damage.
The lead enricher therefore works only on reviewed accounts. Its job is to:
- identify the likely buying role
- resolve a real person to the company with public evidence
- find a source-backed public contact route
- record uncertainty or conflicts rather than silently choosing one identity
- avoid spending enrichment credits on Watch or Reject records
This is the same principle behind AI account research automation: assemble evidence into a usable brief, retain source links, and let missing evidence remain missing.
Where Hunter and Apollo fit
We do not ask Apollo or Hunter to decide which companies deserve outreach. That decision has already passed through signal discovery and account review.
The enrichment tools answer a narrower question: given a qualified company and a likely buyer, can we resolve a current professional identity and a contact route with enough confidence to use it?
Our practical enrichment waterfall is:
- Check the company site, public team pages, the buyer's public profile, and other attributable sources.
- Confirm that the person still holds the relevant role and that the company domain is correct.
- Use Hunter to search the domain or named person and verify a professional email when the public route is incomplete.
- Use Apollo selectively when the account is valuable enough to justify a paid enrichment lookup or when another provider cannot resolve the record.
- Compare provider results with the public evidence rather than accepting the first returned address.
- If the identity or address remains uncertain, leave email blank and use a supported public route—or do not contact the account.
Hunter's Domain Search can return professional contacts associated with a company domain.
Its Email Verifier reports whether an address is valid, accept-all, or unresolved. In the runs we reviewed, Hunter resolved named buyers when a direct public route was missing.
We record that verification result. A returned address is not automatically safe to use.
Apollo's People Enrichment can match a person from a name, company domain, or email. Depending on the returned data, it may consume credits.
Apollo therefore sits late in the waterfall. We reserve it for reviewed accounts where wider coverage is worth the cost.
The enrichment run we reviewed used Hunter fallbacks but consumed no paid Apollo credits. Apollo is an escalation path, not a dependency or a claim that every lead was enriched there.
The providers improve coverage, but they do not become the source of truth. We persist:
- the person and current role we intended to reach
- the company and normalized root domain
- the provider used
- the returned email and verification status
- public sources supporting the identity match
- any conflicting title, company, or domain evidence
- the date the route was checked
This catches an easy-to-miss failure mode: a tool can return a deliverable address for the right person at the wrong company. Deliverability alone does not make the route relevant.
6. Writing and reviewing are separate jobs
The outreach writer receives a qualified record, its evidence, the proposed problem, the project wedge, and the likely buyer context. It does not start from a bare company name.
The writer produces a concise first-touch message grounded in observed facts. It avoids pretending that we know the prospect has a specific problem when the evidence only supports a question.
The outreach reviewer then checks the message independently:
- Does every material claim trace back to evidence?
- Does the message distinguish observation from inference?
- Is the proposed wedge relevant to the cited trigger?
- Is it written to the right person and company?
- Is it concise, natural, and free of generic AI phrasing?
- Does it avoid sensitive or regulated claims?
- Has this person or account already been contacted?
- Should the message be auto-send eligible, human approval only, revised, or rejected?
This separation lets us measure draft acceptance and find where quality is breaking. If the reviewer rejects many drafts for weak positioning, the fix belongs upstream in research or thesis design, not in the Gmail sender.
7. Approval policy decides the route to Gmail
Not every message carries the same risk.
The engine can route low-risk, fully evidenced records through a stricter autonomous-send policy. Ambiguous, strategically important, or sensitive records go to human-reviewed Gmail drafts.
The approval layer also creates a valuable learning signal. Human edits reveal more than whether a draft was technically valid. They show whether the tone, angle, ask, or account choice felt right.
The system should retain that decision as structured feedback. Otherwise the writer will repeat the same mistake tomorrow.
Gmail is both the action layer and the execution ledger
Gmail is not connected as a simple final send email tool. The integration closes the loop between planned pipeline state and what actually exists in the mailbox.
For human-review records, the approval task creates a Gmail draft and confirms that it remains unsent with the DRAFT label.
It writes the Gmail draft, message, and thread identifiers back to the record. A reviewer can inspect the recipient, subject, body, and thread context before sending from Gmail.
For autonomous-eligible records, the sender still re-reads Gmail. It checks for an existing message or reply, validates the address and body, and confirms that the shared cold-send ceiling has capacity.
After a send, the next reconciliation pass does not trust the spreadsheet's planned state. It reads Gmail's actual SENT message and captures its timestamp and identifiers.
Only then does it update Last Contacted, Pipeline Status=Sent, and Lifecycle Stage=Contacted.
A Gmail draft and its sent message are not the same object. Google's draft documentation says sending removes the draft and creates a sent message with a new ID.
Persisting draft and thread context lets the workflow reconcile a message that a human sent manually instead of losing it between systems.
The Gmail integration therefore supports six distinct operations:
- Create: create a real draft for a human-approved message.
- Validate: confirm recipient, subject, paragraph formatting, draft label, and unsent state.
- Reconcile: detect when a human has sent a draft and write the actual Gmail event back to the pipeline.
- Send: deliver only an auto-approved message that still passes every last-mile check.
- Monitor: read new thread activity and classify replies, referrals, objections, out-of-office messages, and opt-outs.
- Suppress: stop pending first touches or follow-ups when Gmail shows that the relationship state has changed.
Gmail is the authority for mailbox facts. If the sheet says Approval Draft Ready but Gmail shows a sent message, the system reconciles the record to Sent.
A Gmail reply, opt-out, or active human conversation also overrides a scheduled follow-up.
8. Hourly senders clear queues without creating demand
Our senders run hourly, but that does not mean they send every hour.
Their job is to reconcile the approved queue with the actual mailbox and current account state. Before sending, they recheck conditions such as:
- approval state is still valid
- the account has not replied since the draft was prepared
- the message is not a duplicate
- the daily account or mailbox ceiling has not been reached
- required address and thread data are present
- formatting is valid at the final Gmail boundary
- Gmail does not already contain the same send or a newer human-owned conversation
When nothing is eligible, the correct output is no send.
This distinction matters. The hourly cadence reduces latency after approval; it does not authorize the sender to invent more volume.
9. Replies and follow-ups use a separate loop
First-touch outbound and follow-up are different workflows.
The reply classifier monitors for responses and assigns an operational meaning: interested, referral, objection, timing issue, unsubscribe, wrong person, automated response, or another state that needs human interpretation.
The follow-up agent runs daily to find contacted records that are due. A reviewer checks whether another message is justified and continues the existing context.
The hourly follow-up sender clears only the approved, due queue.
Separating these stages prevents a dangerous pattern: a timer firing a follow-up even though a reply, referral, or opt-out changed the relationship.
Out-of-office messages are not ordinary non-replies. A return date can suppress follow-up until the person is available, while a referral can transfer the thread to a new buyer.
A clear "stop" becomes a permanent do-not-contact state. A manual human reply makes the thread human-owned and removes it from cold automation.