Token Efficiency

Tokens are reserved up front and refunded on failure, but a 30-token employee search that finds nothing useful is still 30 tokens spent. Here are the patterns that compound.

Qualify before you prospect

Running list_linkedin_company_employees (30 tokens) on a company with no buying signal is the most expensive mistake in this stack. Always front-load detect_signal (free dispatch, ~15 tokens median) and skip accounts that don’t fire.

Bad: list_linkedin_company_employees × 100 accounts = 3,000 tokens ($30)
Good: detect_signal × 100 + list_linkedin_company_employees × 20 qualified = ~2,100 tokens ($21)

The savings grow as your hit rate drops. At a 10% qualification rate, you save 60%+.

Set signal order to short-circuit

If you can act on the first signal that fires, configure set_signals_order to put the highest-precision detectors first. Then break out of the loop in your code as soon as one fires — detect_signal won’t help you here, but the individual detectors will.

1// Run the ordered list; stop at the first hit
2const order = (await call("signals", "get_signals_order")).order;
3for (const sig of order) {
4 const result = await call("signals", sig, { domain });
5 if (result.fired) {
6 return { domain, signal: sig, evidence: result.evidence };
7 }
8}
9return { domain, signal: null };

In a 5-detector run where the first one hits, you spent 5 tokens instead of 25.

Use filters, not pagination

list_linkedin_company_employees charges 30 tokens regardless of limit or page. The cost is the search itself, not the row count.

  • Always pass title_filters. Empty filters return everyone — you’ll usually scroll past the right person.
  • Use boolean syntax (AND, OR, NOT, ()) to narrow precisely.
  • Set limit to what you actually want to look at. It doesn’t reduce cost, but it reduces noise.

Avoid the 80-token tool unless you need it

list_linkedin_company_employees_posts (80 tokens) fans out across the whole employee list. Use it only when:

  • You’re tracking a small set of accounts and want a full activity feed.
  • You’ve exhausted cheaper alternatives.

Cheaper alternatives:

GoalUseTokens
Watch one employee’s postslist_user_posts5
Watch official company contentlist_linkedin_company_posts5
Watch 5 known employees5 × list_user_posts25

5 known employees costs 25 tokens instead of 80 if you already know the profile URLs.

Cache profile lookups

get_linkedin_profile_url (5) and get_linkedin_profile (4) return stable data. Cache the URL → profile mapping per org. The CLI doesn’t do this automatically, but a few minutes of caching in your code saves a lot of tokens on repeated runs.

Don’t double-check

Anti-patternWhy it costs you
Running get_linkedin_profile after list_linkedin_company_employees for everyoneThe list response already has names and titles; only hydrate the people you’ll actually contact.
Calling get_email for the same (name, domain) twiceThe result is deterministic; cache it for at least a week.
Calling detect_signal, then individual detectors to “confirm”detect_signal already returns the evidence.

Use the ping endpoints

ping is free on every server. Wire it into your deploy / CI checks so you catch broken auth or downtime before a real workload spends tokens.

Watch your invoices

list_invoices shows top-ups and charges. Audit weekly to spot drift — a misconfigured loop calling list_linkedin_company_employees_posts in a tight retry can burn through $50 fast.

Token budget cheat sheet

WorkflowMedian tokensCost
Qualify one account (detect_signal)15$0.15
Find a single named person (get_linkedin_profile_url)5$0.05
Verify one email (get_email)5$0.05
Full prospecting flow (qualify → search → 3× email)75–80$0.75–0.80
Daily signal sweep over 50 accounts750$7.50

Next steps