# What prospecting costs

Prospecting spends on model calls: reading sources, extracting claims, scoring against your brief, and writing an opening. `prospect_cost_router` decides how much of that a given prospect is worth, and its test is not importance but consequence — would a deeper pass change what happens next. The spend appears in the same usage record as every other AI call.

- **Status:** Available
- **Audience:** both
- **In the app:** #/prospects, #/billing, #/activity
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/prospects/prospect-costs/

## What costs and what does not

**Reading and extracting** — The bulk of it. Public sources are fetched and read, and claims are extracted with the source attached to each one.
**Scoring** — Small per prospect, large in aggregate, because it runs on everything discovery returns rather than on what survives.
**A deeper pass** — The expensive item, which is why it is routed rather than scheduled. It reads more, from more places, about one organisation.
**Writing an opening** — One call per prospect at the point of outreach, not at discovery. A prospect you never write to never pays this.
**Storing and counting** — Nothing. Records, evidence and the headline numbers are database work.
**Re-research** — Whatever the first pass cost, again — which is the reason freshness is routed through the same control.

> **Note** Sending costs are separate and belong to the channel: a message goes out through a mailbox you own, under the daily allowance, and is metered as email rather than as prospecting.

## How the router decides

The router asks one question about each candidate pass: could the answer change a decision that is actually about to be made? A claim that would move a prospect across the qualification line is worth proving. A fourth corroborating source for a prospect already comfortably qualified is not, however interesting it would be to read.

| Situation | Depth | Reason |
|---|---|---|
| Prospect about to receive first outreach | Deepest available for that prospect | The message is built from these claims and will be read by a person |
| Prospect sitting near the qualification threshold | Deeper | One more proved claim decides in or out |
| Prospect clearly qualified on strong evidence | Stop | More reading cannot change the outcome |
| Prospect clearly outside the brief | Stop early | Spending to confirm a no is the commonest waste in prospecting |
| Prospect nobody has opened since discovery | Minimum | No decision is pending, so nothing is at stake |
| Converted prospect | None | A live deal is worked by people, not refreshed by research |

The consequence is that two prospects in the same list can carry visibly different amounts of research, and that asymmetry is the design working. A list where every row has been researched to the same depth has overspent on the rows that were never going to matter.

## Seeing what was spent

1. Open Plan & Usage at `#/billing`.
   - Result: AI usage for the workspace is there, in the same ledger as assistant work, drafting and voice — prospecting is not billed in a private corner.
2. Use the activity trail for a specific run.
   - Result: Discovery and research appear as recorded work with their outcomes, so a run that produced few prospects can be told apart from a run that produced many cheaply.
3. Compare against the counts above the list.
   - Result: Cost per qualified prospect is the number worth watching. Cost per row discovered rewards a brief that returns noise.

> **Careful** An AI budget can stop paid model work when it is reached. Prospecting is discretionary work and is among the first things a budget will refuse, which reads on screen as discovery producing nothing. Check the budget before concluding your brief is at fault.

## Spending less without getting less

- Narrow the brief before widening the run. A precise description spends the same per candidate and wastes far fewer candidates.
- Set a real location scope. Distance is the cheapest filter there is, because it removes candidates before anything reads them.
- Do not ask for a standing refresh of the whole list; refresh the part you are about to use.
- Run deep research on the handful of organisations where the answer decides something, and treat it as a decision rather than a setting.
- Fix a brief that keeps returning your own customers — identity resolution will discard them, but only after research has been paid for.

## Questions

### Does a prospect with no address still cost money?

Yes, and it is not wasted. The research proved something about a real organisation, which is why the prospect is kept rather than discarded. What it does not do is go on to pay for an opening that could never be sent.

### Can I cap prospecting spend on its own?

The controls are the workspace's AI budget and its plan allowances rather than a prospecting-only dial. In practice the brief and the location scope are the stronger levers, because they act before any model is called.

### Why did one prospect cost far more than the rest?

It was near a decision — about to be written to, or sitting on the qualification line — so the router bought more evidence for it. That is the intended shape of the bill, not an anomaly.

## Related

- [Prospecting in Connect](https://connectbyjbrh.com/docs/prospects/)
- [Deep research on a prospect](https://connectbyjbrh.com/docs/prospects/deep-research/)
- [Keeping prospect research fresh](https://connectbyjbrh.com/docs/prospects/prospect-freshness/)
- [Spending research budget where it changes a decision](https://connectbyjbrh.com/research/research-cost-routing/)
- [Location and scope](https://connectbyjbrh.com/docs/prospects/location-scope/)
- [Discovery returned nothing](https://connectbyjbrh.com/docs/troubleshooting/no-prospects-found/)

## What this page is based on

- `docs-source/sources/CHANNELS.md` §4 — research cost routing
- `docs-source/sources/GENERAL.md` §4 — metering and the daily ledger
- `backend/app/prospect_cost_router.py`, `backend/app/metering.py`
- Connect capability registry (`docs-source/facts.py`)
