Most enrichment pricing is a monthly allowance. Apollo's pricing page says it plainly: credits reset at the start of each billing cycle and do not roll over, and that applies to purchased add-on credits too. That works when leads arrive at a steady rate. Lists don't. They land in lumps, after a conference or a quarter-end CRM import, and then nothing for six weeks.
A lead enrichment api pay as you go inverts that. You buy credits when a list lands, spend them per call, and keep the rest. Here is how that works on CrawlForge, and how per-call billing lets you avoid paying full price for leads you were never going to call. One caveat first: CrawlForge reads company websites. It is not a contact database.
What makes a lead enrichment API pay as you go?
Three things, all checkable on the pricing page:
- No subscription is required. One-time credit packs run from $3 for 1,000 to $62.50 for 25,000. A new account starts with 1,000 credits, once; they never refill.
- Nothing resets. Pack credits don't expire, and monthly plan credits roll over while the plan is live.
- You pay for calls that worked. Credits are deducted after a successful call, so a timeout, an unreachable domain or a blocked page costs nothing.
How do you avoid paying full price for every lead?
Choose the depth per lead. A flat enrichment price treats a perfect-fit prospect and an obvious mismatch the same. Per-call billing doesn't have to.
Pass one runs extract_metadata on every lead's homepage for 1 credit, returning the title, meta description and H1s. That is usually enough to say "not our market". Pass two runs the 3-credit scrape with an extractive question, the call the no-sales-call post walks through, only on leads that pass.
const API = 'https://www.crawlforge.dev/api/v1/tools/'
const headers = {
'X-API-Key': process.env.CRAWLFORGE_API_KEY ?? '',
'Content-Type': 'application/json',
}
// Words that put a company in your market. Tune these to your own ICP.
const FIT = /\b(logistics|freight|warehous\w*|fleet)\b/i
async function call(tool: string, body: object) {
const res = await fetch(API + tool, { method: 'POST', headers, body: JSON.stringify(body) })
return res.ok ? res.json() : null // failed calls are not charged
}
export async function enrich(domain: string) {
// Pass 1, 1 credit: does the homepage describe a company you sell to?
const triage = await call('extract_metadata', { url: 'https://' + domain })
if (!triage) return null
const meta = triage.data.metadata
const blurb = [meta.basic.title, meta.seo.description, ...meta.seo.headings.h1].join(' ')
if (!FIT.test(blurb)) return { domain, fit: false, credits: triage.credits_used }
// Pass 2, 3 credits: only leads that fit get the full read.
const full = await call('scrape', {
url: 'https://' + domain,
formats: ['links', { type: 'question', question: 'What does this company sell, and to whom?' }],
})
return {
domain,
fit: true,
name: meta.basic.title,
sells: full?.data.formats.answer?.text ?? null,
credits: triage.credits_used + (full?.credits_used ?? 0),
}
}Every response carries credits_used, so the spend per lead lands in your CRM row beside the data.
What does a 1,000-lead list cost?
At the $0.003 rate of a 1,000-credit pack:
| Approach | Credits | ≈ Cost |
|---|---|---|
| Full scrape on every lead | 3,000 | $9.00 |
| Triage all, full read on the 25% that fit | 1,750 | $5.25 |
| Triage all, full read on the 10% that fit | 1,300 | $3.90 |
Triage pays for itself whenever fewer than two thirds of a list fits. Above that, skip pass one and scrape everything.
When is a subscription the better deal?
When volume is steady. Professional is $99 for 100,000 credits a month, about $0.001 a credit, against $0.0025 to $0.003 for packs. Once enrichment reliably passes about 40,000 credits a month, the plan is cheaper.
And when you need email addresses, you need a contact vendor, not this API. Some of those are pay-as-you-go too: on Hunter's pricing page, Data Platform credits are usable up to 12 months from purchase, and an Email Finder lookup that finds nothing is free. CrawlForge owns no emails, phone numbers, headcounts or org charts. It reads what a company says on its own site, today, and teams run it beside a contact database rather than instead of one.
Start free with 1,000 credits and triage your first list before you buy anything.