Outbound Sales Flow

The canonical agent flow for outbound prospecting using GTM Tools. This is the version you’d put in an agent’s system prompt or skill definition.

The flow

INPUT: target domain
1. detect_signal (qualify the account)
↓ (if any signal fires)
2. get_linkedin_company_url (resolve LinkedIn page)
3. list_linkedin_company_employees (find decision-makers, filtered by signal type)
4. get_email (verify email per top candidate)
5. send_linkedin_invitation (or hand off to outbound platform)
OUTPUT: contacted lead with provenance

Decision rules for the agent

When to skip the account

If detect_signal returns no fired signals, abort. The account isn’t actively in market. Note it for re-checking next month.

How to pick the title filter

Match the highest-confidence fired signal to a decision-maker title:

SignalTitle filter
signal_trustpilot_negative_support_reviews(VP OR Director OR Head) AND (CX OR Support OR "Customer Experience") NOT intern
signal_hiring_sales_rep_repost(VP OR Director OR Head) AND Sales NOT intern
signal_hiring_support(VP OR Director OR Head) AND (CX OR Support OR Operations)
signal_hiring_sales_leadership(CRO OR "Chief Revenue") OR ((VP OR Head) AND Sales)
signal_socials_spike(VP OR Director OR Head) AND (Marketing OR Brand OR Growth)
signal_technologies_identifiedUse the title most likely to evaluate the matched stack (e.g. RevOps for analytics tools)

When to skip the email step

If the candidate’s profile already exposes an email on LinkedIn, or your CRM already has it cached, skip get_email and save 5 tokens.

If is_catch_all: true comes back, do not auto-send. Hand off to a human reviewer or use a soft-touch channel (LinkedIn invite) where being wrong is cheap.

When to write back

After contact, log:

  • The signal evidence (URLs, snippets) — gives downstream reps something to reference.
  • The verified email + catch-all flag.
  • The LinkedIn profile URL.
  • The token spend (get_token_balance delta).

Personalization handles

Each tool surfaces a piece of personalization material. The richer the message, the higher the response rate.

FromUse as
signal_*.evidence[].snippetQuote in the cold message (“noticed your CX team mentioned…”)
signal_hiring_*.evidence[].title + .urlReference the specific job posting
list_linkedin_company_employees.results[].headlineMirror the recipient’s framing
list_linkedin_company_posts.results[].textReference recent company posts

Anti-patterns

  • Skipping the signal step. Going straight to list_linkedin_company_employees (30 tokens) on unqualified accounts is the single most common waste.
  • Hydrating before filtering. Don’t get_linkedin_profile (4 tokens) every employee — list_linkedin_company_employees already returns name/title/headline.
  • Re-checking the same domain daily. Signal data rarely shifts day-to-day. Weekly is enough; daily wastes tokens.
  • Auto-sending on catch-all hits. False-positive emails hurt sender reputation. Always gate on is_catch_all.

Token budget per qualified prospect

StepTokens
detect_signal (median)15
get_linkedin_company_url2
list_linkedin_company_employees30
get_email × 315
send_linkedin_invitation5
Total67

Budget ~$0.67 per fully-researched and contacted prospect.