How HappyFetch bills: pay for answers
Every call has one public price. Calls we can't complete are refunded in the same request, and asking how old our data is costs nothing.
The HappyFetch team ·
One public price per call#
Every call has a fixed price in credits, the same for every customer, and it's on our pricing page:
| What you send | Fetched now | From our cache | Confirmed "no such company" |
|---|---|---|---|
| A LinkedIn company URL | 2 credits: $1.00 to $0.50 per 1,000 | 1 credit | 1 credit, free from our cache |
| A website domain | 4 credits: $2.00 to $1.00 per 1,000 | 2 credits | 4 credits, free from our cache |
| A web search | 1 credit: $0.50 to $0.25 per 1,000 | 1 credit | n/a |
The per-1,000 prices run from our smallest pack to our biggest.
Credits come in prepaid packs, from 20,000 credits for $10 to 2,000,000 for $500. They stay in your workspace until you use them.
What you pay for#
- A company profile by LinkedIn company URL: 2 credits when we fetch it now, 1 credit when it comes from our cache.
- A company profile by website domain: 4 credits when we fetch it now, 2 credits from our cache.
- A completed web search: 1 credit, even when it finds nothing. The search ran, and an empty list is its answer.
- A confirmed "no such company": 1 credit by LinkedIn company URL, 4 credits by website domain. That's an answer too: we looked, and there is none. When the same answer comes from our cache, it's free.
What you never pay for#
- A call we can't complete. When something goes wrong on our side, the charge is refunded in the same request. The error you get back already shows that nothing was charged.
- Input we reject before doing any work: an invalid LinkedIn company URL or domain, a missing key, an empty balance, a rate limit.
- A retry of a call that already worked. Give each call a retry key (see idempotency), and a retry gets the stored answer back instead of running again.
- Asking how old our copy is. The cache check is free, and it tells you what a lookup would cost right now:
{
"data": {
"lookup": "company",
"cached": true,
"answer": "company",
"fetched_at": "2026-09-20T09:14:02.000Z",
"age_seconds": 259200,
"max_age_seconds": 604800,
"from_cache": true,
"price_credits": 1,
"fetch_price_credits": 2
},
"meta": {
"request_id": "5d0a9c3e-71f2-4b86-a4e0-c29b8f1d6a37",
"endpoint": "cache",
"credits_charged": 0,
"credits_remaining": 200
}
}Every credit points at a request#
Every answer says what it cost. Calls that reach billing also carry it in these headers:
| Header | What it tells you |
|---|---|
X-Request-Id |
Ties the call to its charge and to the data it returned |
X-Credits-Charged |
What this call cost |
X-Credits-Remaining |
What's left in your workspace |
In the console, every call in your ledger links to the request behind it. When your balance runs low we email you, and you choose the level in the console. Every purchase comes with an invoice with your company details and VAT number.
Why we bill this way#
Code that calls an API usually runs unattended: a nightly job, a signup hook, an agent. When a call fails at three in the morning, nobody should have to file a ticket to get a credit back. So the refund is part of the request: you see it in the response, and your books stay right without anyone checking.
Prepaid packs follow the same idea. You decide what to spend up front, the balance never runs past zero, and there's no renewal to cancel.
In short#
| What happened | What it costs |
|---|---|
| A company profile, or a completed search | The call's price, or the cache price |
| A confirmed "no such company" | 1 credit by LinkedIn company URL, 4 credits by website domain, and nothing from our cache |
| A call we couldn't complete | Nothing: refunded in the same request |
| Rejected input, a missing key, an empty balance, a rate limit | Nothing |
| A retry of a call that already worked, or a cache check | Nothing |
More on this: Pricing
The HappyFetch team: We build HappyFetch, a company data API.
Try it on your own companies
200 credits free when you verify your email. No card needed, no subscription.