> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://gtm-tools.sh/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://gtm-tools.sh/_mcp/server.

# Outbound Sales Flow

> End-to-end pattern: domain → signals → decision-maker → email → outreach

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:

| Signal                                       | Title 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_identified`             | Use 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 credits.

If `status: "not_found"` comes back with `reason: "catch_all"`, there is no verified address to send to. Do **not** auto-send a guessed one: hand off to a human reviewer, or switch to a soft-touch channel (LinkedIn invite) where being wrong is cheap.

### When to write back

After contact, log:

* The signal evidence (URLs, snippets), which gives downstream reps something to reference.
* The verified email + catch-all flag.
* The LinkedIn profile URL.
* The credit spend (`get_credit_balance` delta).

## Personalization handles

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

| From                                                 | Use as                                                          |
| ---------------------------------------------------- | --------------------------------------------------------------- |
| `signal_*.evidence[].snippet`                        | Quote in the cold message ("noticed your CX team mentioned...") |
| `signal_hiring_*.evidence[].title + .url`            | Reference the specific job posting                              |
| `list_linkedin_company_employees.results[].headline` | Mirror the recipient's framing                                  |
| `list_linkedin_company_posts.results[].text`         | Reference recent company posts                                  |

## Anti-patterns

* **Skipping the signal step.** Going straight to `list_linkedin_company_employees` (30 credits) on unqualified accounts is the single most common waste.
* **Hydrating before filtering.** Don't `get_linkedin_profile` (2 credits) 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 credits.
* **Auto-sending guessed addresses.** False positives hurt sender reputation. Gate on `status == "ok"`, and treat any `not_found` reason as "no address".

## Credit budget per qualified prospect

| Step                              | Credits |
| --------------------------------- | ------- |
| `detect_signal` (median)          | 15      |
| `get_linkedin_company_url`        | 2       |
| `list_linkedin_company_employees` | 30      |
| `get_email` × 3                   | 15      |
| `send_linkedin_invitation`        | 5       |
| **Total**                         | **67**  |

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