> 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.

# Tool Selection

> Decision flows for choosing between GTM Tools' 60+ tools so your agent doesn't burn credits on calls it doesn't need.

GTM Tools has 60+ tools across five categories. Picking the cheapest tool that answers your question is the single biggest lever for keeping spend under control.

## Decision flow

### "I have a domain and want to know who works there"

1. **Qualify first.** Run `detect_signal` (free dispatch + 5/detector). If nothing fires, stop.
2. `get_linkedin_company_url` (2 credits): confirm the company has a LinkedIn page.
3. Pick the employee tool that matches your need:
   * `search_linkedin_company_employees` (**5 credits**): SERP-only, returns name + headline + LinkedIn URL. Best for discovery and high-volume passes.
   * `list_linkedin_company_employees` (30 credits): verified via Sales Navigator, returns location/current_company/etc. Best when you need richer fields. Always pass **boolean title filters**; the `limit` parameter doesn't reduce cost.

### "I have a name and a company"

1. `get_linkedin_profile_url` (5 credits): resolves to a profile URL.
2. `get_linkedin_profile` (2 credits): only if you need the full structured profile.

Don't call `list_linkedin_company_employees` to find one specific named person; that's 30 credits vs. 5.

### "I have a name and want their social accounts"

1. `get_social_profiles` (5 credits): returns LinkedIn, X, Instagram and TikTok handles in one call.

Use `get_linkedin_profile_url` instead if LinkedIn is all you need and you know the domain: same 5
credits, but it's cached, so a repeat lookup costs nothing and returns instantly. Reach for
`get_social_profiles` when you need the platforms LinkedIn tools can't reach, or when you don't have a
company domain to resolve against.

Pass `company`, `domain`, `location` or `keywords` whenever you have them. Context is corroborated
against each candidate's snippet before it is accepted, so it filters rather than merely re-ranks. On a
common name with no context, expect the highest-ranking namesake rather than your target.

### "I need this person's email"

1. `get_email` (5 credits): pass `name` + `domain`.
2. Check `status`. An `ok` is verified; a `not_found` carries a `reason` (`catch_all` means the domain accepts everything, so nothing can be confirmed).

### "I want to know what tech a company uses"

1. `signal_technologies_identified` (5 credits) with the specific `techs` array.
2. Don't run `detect_signal` if this is the only signal you care about, since the dispatch will run other detectors too.

### "I want to read posts from a company"

| You want                  | Use                                     | Credits |
| ------------------------- | --------------------------------------- | ------- |
| Recent official posts     | `list_linkedin_company_posts`           | 2       |
| One specific post         | `get_linkedin_post`                     | 2       |
| Posts from one employee   | `list_user_posts`                       | 5       |
| Posts from many employees | `list_linkedin_company_employees_posts` | **80**  |

`list_linkedin_company_employees_posts` is by far the most expensive LinkedIn tool. Only use it when you actually need the fanout; otherwise scope to specific profile URLs with `list_user_posts`.

## Free tools to lean on

| Tool                                      | Server   | Why                                                                               |
| ----------------------------------------- | -------- | --------------------------------------------------------------------------------- |
| `get_credit_balance`                      | Billing  | Check before launching a batch, and to verify auth wiring before spending credits |
| `list_invoices`                           | Billing  | Review historical spend                                                           |
| `list_connected_linkedin_accounts`        | LinkedIn | Confirm session is alive                                                          |
| `detect_signal`                           | Signals  | Dispatcher; only the detectors that run are charged                               |
| `get_signals_order` / `set_signals_order` | Signals  | Tune order to short-circuit on first hit                                          |

## Server selection

| Question                                            | Server   |
| --------------------------------------------------- | -------- |
| "How much will this cost?" / "Top up" / "Get a key" | Billing  |
| "Find a company / person / post / job on LinkedIn"  | LinkedIn |
| "Engage on Reddit / find threads / DM a user"       | Reddit   |
| "Verify an email address"                           | Email    |
| "Is this company in buying mode?"                   | Signals  |

Only point your MCP client at the servers you actually need. Adding them all is fine, but it grows your agent's tool list and risks the model picking the wrong one.

## Filter early, hydrate late

A common mistake is fetching full profiles for everyone in a list, then filtering in code:

```typescript
// Bad: 2 credits × 25 = 50 credits
const profiles = await Promise.all(
  employeeUrls.map(url => call("socials", "get_linkedin_profile", { profile_url: url }))
);
const decisionMakers = profiles.filter(p => /VP|Director|Head/.test(p.title));
```

Use `list_linkedin_company_employees` with `title_filters` instead: one 30-credit call gets you the filtered list directly:

```typescript
// Good: 30 credits
const { results } = await call("socials", "list_linkedin_company_employees", {
  domain: "gymshark.com",
  title_filters: "(VP OR Director OR Head) AND Sales NOT intern",
  limit: 25,
});
```

Then hydrate only the candidates you actually want to message.

## Next steps

#### [Credit Efficiency](/credit-efficiency)

Concrete patterns for keeping per-account spend low.

#### [Outbound](/outbound)

A worked example of qualified-then-prospect flow.