The short answer.
- Processing 1,000 leads properly costs roughly the price of a couple of coffees in per-row fees.
- The bill people actually get is dominated by seats and wasted volume, not by per-row price.
- The single biggest lever is filtering before the expensive step, not negotiating a lower rate.
- If you are charged for rows that failed, that is a real and often invisible cost line.
Ask what enrichment costs and you get a monthly subscription figure, which answers a different question. The useful number is cost per thousand usable leads, and it is worth building from the parts because the shape of it is not what most people expect.
The worked example
Start with 1,000 company domains and the goal of a qualified, personalised, deliverable list.
Realistic attrition, which matters more than any unit price:
- Around 780 of the 1,000 websites return usable content. The rest are parked, dead, JavaScript-only, or refusing automated requests. Somewhere between two thirds and four fifths is the normal range, and it is set more by how the list was built than by which tool reads it.
- Of those 780, around 400 pass an ICP filter. That figure is entirely a function of how good your list was to begin with.
- You personalise and verify only those 400.
| Step | Rows | Unit | Cost |
|---|---|---|---|
| Read 1,000 company websites | 780 succeeded | $0.005 / URL | $3.90 |
| Summarise and score | 780 | model cost x 1.25 + $0.0025 | ~$3 to $6 |
| Write a personalised line | 400 | model cost x 1.25 + $0.0025 | ~$3 to $8 |
| Verify email addresses | 400 | $0.01 / email | $4.00 |
| Total per 1,000 raw leads | roughly $14 to $22 |
The model-dependent rows are ranges because the cost of a generation step depends on the model and the prompt length, which vary by an order of magnitude between a short classification and a long personalised paragraph. Our cost calculator takes a row count and a model and gives the exact figure. The pricing structure itself is public: AI is the provider's raw cost times 1.25 plus a $0.0025 base fee per succeeded row, verification is $0.01 per email, and reading a URL is $0.002 to $0.0075 depending on how hard the page is to get.
Somewhere between fourteen and twenty-two dollars for a thousand raw leads turned into four hundred qualified, personalised, verified ones. That is around five cents per usable lead.
Why the real bill is bigger
If your enrichment spend looks nothing like the table above, one of these is why.
The expensive step ran on the whole list
Run personalisation on all 1,000 rows instead of the 400 that qualified and that line roughly triples, while producing 600 paragraphs about companies you will not contact. This is the most common and most expensive mistake, and it is invisible because the output looks like more work done rather than more money spent. Ordering the chain properly is the fix, and chaining steps so each one only sees qualified rows covers it.
Failed rows were charged
In the table, 220 unreadable websites cost nothing. That is a policy choice, not a law of nature, and it is worth checking against whatever you currently use: a tool that charges for an attempt rather than a result puts the cost of the internet's messiness on you. At a 22% failure rate on 1,000 rows, that is 220 rows of billing for nothing, every run.
Seats dominate at low volume
This is the honest arithmetic that per-row vendors, ourselves included, tend to skip.
| Monthly volume | Per-row cost | A $500/mo seat plan |
|---|---|---|
| 1,000 leads | ~$20 | $500 |
| 10,000 leads | ~$200 | $500 |
| 50,000 leads | ~$1,000 | $500 |
At high, steady volume a flat seat plan is genuinely the cheaper structure, and anyone telling you otherwise is selling. Per-row pricing wins on spiky volume, on small teams, and above all in the first three months when you do not yet know whether the channel works and a subscription is a bet on an unproven answer.
The costs that never appear on an invoice
Two lines dominate everything above and neither is billed.
Time spent on manual repair. An hour a week fixing a list is more expensive than the entire per-row bill in the table, at any salary. This is the actual reason to care whether failures are visible: not elegance, but whether someone has to hunt for them.
Reputational cost of bad rows. A personalised line generated from an empty scrape gets sent. Enough of those and the domain's deliverability suffers, which is expensive in a way that takes months to undo. Reducing bounce rate and the deliverability checklist cover the downstream damage.
How to work out your own number
- Take one real run and count rows that produced usable output, not rows processed.
- Add up every charge for that run, including rows that failed.
- Divide by usable rows. That is your true cost per lead.
- Add the subscription, divided by the month's usable rows. This is usually the moment the picture changes.
- Estimate the hours spent fixing the output and price them.
Most teams doing this for the first time find the per-row processing is the smallest line on the page.