# Apollo API alternative for company data

Company data by domain for your own code, with no seats and no custom plan. Prepaid credits that never expire, from the first pack.

## What you pay

|  | Apollo | HappyFetch, by website domain |
|---|---|---|
| Lowest price per 1,000 | Not published | **$1.00** (Business pack, $500) |
| Cheapest plan, per 1,000 | Not published | $2.00 (Starter pack, $10) |
| How you pay | Seats, from $49 a month | Prepaid packs, from $10 |
| Unused credits | Reset each cycle | Never expire |
| Charges when no company is found? | No | Yes, 4 credits; free from our cache |
| Charges a call that fails? | — | No, refunded in the same request |

API access is on Custom plans. Credits per plan aren't published. Apollo doesn't publish a per-lookup price. Checked on October 12, 2026. Sources: [Apollo pricing](https://www.apollo.io/pricing), [API pricing](https://docs.apollo.io/docs/api-pricing).

Apollo sells seats, and its [pricing page](https://www.apollo.io/pricing) puts API access on Custom
plans. With us, the API works the same on every pack, from $10, and the credits stay
in your workspace until you use them. Domain lookups cost from $1.00 per
1,000 on our biggest pack, and half that for companies already in our cache. If you have the company's
LinkedIn URL, it's $0.50 per 1,000.

## How the calls compare

```text
Apollo       GET  api.apollo.io/api/v1/organizations/enrich?domain=stripe.com
HappyFetch   POST https://api.happyfetch.net/v1/domain   {"domain": "stripe.com"}
```

| | Apollo | HappyFetch |
|---|---|---|
| Your key goes in | The `x-api-key` header | The `Authorization: Bearer` header |
| Company fields | Under `organization` | Under `data`, with cost and freshness under `meta` |
| Company size | An estimated count | A count and a size band |
| Country | `United States` | `US` |

```bash tab="cURL"
curl https://api.happyfetch.net/v1/domain --max-time 120 \
  -H "Authorization: Bearer $HAPPYFETCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"domain":"stripe.com"}'
```

```javascript tab="JavaScript"
const res = await fetch("https://api.happyfetch.net/v1/domain", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.HAPPYFETCH_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(), // send the same key when you retry this call
  },
  body: JSON.stringify({
    "domain": "stripe.com"
  }),
  signal: AbortSignal.timeout(120_000),
});
const { data, meta, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
console.log(meta.request_id, meta.cache.status, data);
```

```python tab="Python"
import os, uuid, requests

res = requests.post(
    "https://api.happyfetch.net/v1/domain",
    headers={
        "Authorization": f"Bearer {os.environ['HAPPYFETCH_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # send the same key when you retry this call
    },
    json={
      "domain": "stripe.com"
    },
    timeout=120,
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
print(body["meta"]["request_id"], body["meta"]["cache"]["status"])
```

## Field map

| Apollo | HappyFetch |
|---|---|
| `organization.name` | `data.name` |
| `organization.short_description` | `data.description` |
| `organization.industry` | `data.industry` |
| `organization.website_url` | `data.websiteUrl` |
| `organization.primary_domain` | `meta.resolved.domain` |
| `organization.estimated_num_employees` | `data.employeeCount` |
| `organization.founded_year` | `data.foundedOn.year` |
| `organization.street_address` | `data.headquarter.street1` |
| `organization.city` | `data.headquarter.city` |
| `organization.state` | `data.headquarter.geographicArea` |
| `organization.postal_code` | `data.headquarter.postalCode` |
| `organization.country` | `data.headquarter.country`, as a two-letter code |
| `organization.phone` | `data.phone` |
| `organization.keywords` | `data.specialities` |
| `organization.linkedin_url` | `data.linkedInUrl` |
| `organization.linkedin_uid` | `data.linkedInId` |

We also return a size band and every office. Every answer carries the company's numeric id: one stable
key per company, even when it renames.

## A drop-in function

```js
const API = "https://api.happyfetch.net";

export async function companyByDomain(domain) {
  const res = await fetch(`${API}/v1/domain`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.HAPPYFETCH_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ domain }),
  });
  if (res.status === 404) return null; // no company at this domain
  const body = await res.json();
  if (!res.ok) throw new Error(`HappyFetch ${res.status}: ${body.error.code}`);
  return body.data;
}
```

## When Apollo is the better choice

If your reps want contact emails, phone numbers and outreach sequences in one sales tool, Apollo does all
of that. HappyFetch is for company data inside your own code, priced per call.
