# Coresignal alternative for company data

Company data by domain with no subscription. Prepaid credits that never expire, a fixed price per lookup, and a refund when a call fails.

## What you pay

|  | Coresignal | HappyFetch, by website domain |
|---|---|---|
| Lowest price per 1,000 | $4.50 (Elite, yearly) | **$1.00** (Business pack, $500) |
| Cheapest plan, per 1,000 | $196.00 (Mini, $49 a month) | $2.00 (Starter pack, $10) |
| How you pay | Subscription, from $49 a month | Prepaid packs, from $10 |
| Unused credits | Yearly plans: valid 12 months | Never expire |
| Bills a failed call? | No | No, refunded in the same request |

Elite yearly: $54,000 for 120M credits. Mini: 2,500 credits. A basic company record is 10 credits, the full record 20. Coresignal's prices come from its public pricing page, checked on October 12, 2026. Sources: [Coresignal pricing](https://coresignal.com/pricing/), [Credit costs](https://docs.coresignal.com/pricing/pricing), [Company data bundles](https://docs.coresignal.com/company-data/api/collect).

Coresignal sells subscriptions, monthly or yearly, from $49 a month, and its lowest price per company
comes with its largest plan, paid yearly. With us, you buy a pack when you need one, 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
Coresignal   GET  api.coresignal.com/cdapi/v2/company_multi_source/enrich?website=stripe.com
HappyFetch   POST https://api.happyfetch.net/v1/domain   {"domain": "stripe.com"}
```

| | Coresignal | HappyFetch |
|---|---|---|
| Your key goes in | The `apikey` header | The `Authorization: Bearer` header |
| Company fields | At the top level | Under `data`, with cost and freshness under `meta` |
| Founding year | A string | A number |
| Size band | `501-1000 employees` | `start` and `end` as numbers |

```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

| Coresignal | HappyFetch |
|---|---|
| `company_name` | `data.name` |
| `description` | `data.description` |
| `tagline` | `data.tagline` |
| `industry` | `data.industry` |
| `website` | `data.websiteUrl` |
| `website_domain` | `meta.resolved.domain` |
| `employees_count` | `data.employeeCount` |
| `size_range` | `data.employeeCountRange`, with `start` and `end` as numbers |
| `founded_year` | `data.foundedOn.year`, as a number |
| `hq_street` | `data.headquarter.street1` |
| `hq_city` | `data.headquarter.city` |
| `hq_state` | `data.headquarter.geographicArea` |
| `hq_zipcode` | `data.headquarter.postalCode` |
| `hq_country_iso2` | `data.headquarter.country` |
| `company_phone_numbers` | `data.phone`, one number |
| `categories_and_keywords` | `data.specialities` |
| `company_locations_full` | `data.locations` |

Every answer also carries the company's numeric id: one stable key per company, even when it renames.

## A drop-in function

```python
import os

import requests

API = "https://api.happyfetch.net"


def company_by_domain(domain: str) -> dict | None:
    res = requests.post(
        f"{API}/v1/domain",
        headers={"Authorization": f"Bearer {os.environ['HAPPYFETCH_API_KEY']}"},
        json={"domain": domain},
        timeout=120,
    )
    if res.status_code == 404:
        return None  # no company at this domain
    res.raise_for_status()
    return res.json()["data"]
```

## When Coresignal is the better choice

Choose Coresignal when you need employee or job-posting data next to your company records, or whole
datasets delivered in bulk. HappyFetch is for current company profiles, one call at a time, priced per
answer.
