Every outbound budget is quoted in the wrong unit. A contact database quotes per record, a seat licence quotes per person, a verifier quotes per lookup - and none of them quote the number that decides whether the channel works: what one reply costs.
Why cost per contact tells you nothing
Cost per contact answers "how cheaply can I buy rows". It has no opinion on whether the row belongs to a person, whether the mailbox still exists, or whether anyone will answer. Two campaigns can pay identical prices per contact and land at costs per reply an order of magnitude apart, because money spent on addresses that bounce never had a chance to produce a reply.
The published gap is not subtle:
- verified lists bounce 2-5%
- static, resold databases bounce 10-35%
On a 5,000-contact send that is somewhere between 100-250 dead addresses and 500-1,750 of them. All paid for, all exported, none reachable.
The arithmetic, with inputs you control
cost per replied lead = price per usable contact / reply rate
Both sides are yours, so this table is arithmetic rather than a benchmark:
| Reply rate | At $0.10/contact | At $0.30/contact | At $0.50/contact |
|---|---|---|---|
| 1% | $10 | $30 | $50 |
| 2% | $5 | $15 | $25 |
| 5% | $2 | $6 | $10 |
The price per contact moves the result by a factor of five. So does the reply rate. But only one of the two can be improved by cleaning a list before you send - which is the entire argument for paying for verification instead of paying for volume.
The same money, read as a seat
Published entry prices of the seat-based tools, converted at $0.30 per contact:
| Tool | Published entry price | Per year, 1 seat | Contacts at $0.30 |
|---|---|---|---|
| Apollo (Basic) | $49/user/mo billed annually | $588 | 1,960 |
| Hunter (Starter) | from $34/mo, 50 free credits | $408 | 1,360 |
| Lusha (Starter) | $49.90/mo | $598.80 | 1,996 |
| ZoomInfo | not published | quote only | - |
The point is not that one side is cheaper. A seat is paid for on a calendar; a contact is paid for on a decision. If the campaign pauses, the seat invoice does not - and the contacts you never looked up were never bought at all.
Three leaks that inflate cost per reply
- Paying for records that bounce. At 10-35% bounce you buy dead addresses at the same price as live ones. The fix is not a discount, it is checking the address before it enters the list.
- Paying twice for the same contact. One tool finds the address, another verifies it, and the export has to be reconciled between them. That is a second invoice for a step that fits inside the search that found the address.
- Paying for a stored snapshot. 23% of contacts change jobs every year (ZoomInfo, 2025), 40% of addresses are dead within two years (NeverBounce), and fresh data outperforms stored databases by 42% (Harvard Business Review, 2024). A snapshot bought in January is not the list you send to in June.
Report cost per replied lead per campaign upward. Rows, seats, credits and lookups are inputs that either earn their way into that number or do not.
Where the API sits
TAPAC finds the address and checks it over SMTP in the same request, so what you pay for is a contact with a state as of that moment, plus the source page it was found on. Catch-all domains come back as unknown and are never folded into the usable count.
npx -y @tapacapi/mcp # tools: tapac_find_contacts, tapac_status
# hosted: https://tapacapi.com/mcp
# REST: POST https://tapacapi.com/v1/contacts/search
100 free searches, then $0.10-0.50 per verified contact, pay-per-use.
Published from tapacapi.com — TAPAC is an MCP server and REST API for verified B2B contacts.
Top comments (0)