DEV Community

Axel Freeman
Axel Freeman

Posted on Originally published at tapacapi.com

Cost per contact is a lie: measure the price of one reply instead

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
Enter fullscreen mode Exit fullscreen mode

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

  1. 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.
  2. 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.
  3. 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
Enter fullscreen mode Exit fullscreen mode

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)