# People Data Labs alternative for company data

Company data by domain without a monthly subscription. Prepaid credits that never expire, and a call we can't complete is refunded in the same request.

## What you pay

|  | People Data Labs | HappyFetch, by website domain |
|---|---|---|
| Lowest price per 1,000 | $80.00 (Pro, yearly) | **$1.00** (Business pack, $500) |
| Cheapest plan, per 1,000 | $100.00 (Pro, monthly) | $2.00 (Starter pack, $10) |
| How you pay | Subscription, from $100 a month | Prepaid packs, from $10 |
| Unused credits | — | Never expire |
| Bills a failed call? | No | No, refunded in the same request |

Pro yearly: $960 for 12,000 records. Pro monthly: $100 for 1,000. 1 credit per matched company. People Data Labs' prices come from its public pricing page, checked on October 12, 2026. Sources: [People Data Labs pricing](https://www.peopledatalabs.com/pricing/company), [Self-serve plans and credits](https://docs.peopledatalabs.com/docs/create-an-account), [Company Enrichment API](https://docs.peopledatalabs.com/docs/reference-company-enrichment-api).

People Data Labs sells company enrichment as a subscription, from $100 a month, and its lowest price per
company comes with a yearly plan. 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
People Data Labs   GET  api.peopledatalabs.com/v5/company/enrich?website=stripe.com
HappyFetch         POST https://api.happyfetch.net/v1/domain   {"domain": "stripe.com"}
```

| | People Data Labs | HappyFetch |
|---|---|---|
| Your key goes in | The `X-Api-Key` header | The `Authorization: Bearer` header |
| Company fields | At the top level | Under `data`, with cost and freshness under `meta` |
| Country | `united states` | `US` |
| Failed calls charged | No | No, refunded in the same request |

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

| People Data Labs | HappyFetch |
|---|---|
| `display_name` | `data.name` |
| `summary` | `data.description` |
| `headline` | `data.tagline` |
| `industry` | `data.industry` |
| `website` | `data.websiteUrl` |
| `employee_count` | `data.employeeCount` |
| `size` | `data.employeeCountRange`, with `start` and `end` as numbers |
| `founded` | `data.foundedOn.year` |
| `location.street_address` | `data.headquarter.street1` |
| `location.address_line_2` | `data.headquarter.street2` |
| `location.locality` | `data.headquarter.city` |
| `location.region` | `data.headquarter.geographicArea` |
| `location.postal_code` | `data.headquarter.postalCode` |
| `location.country` | `data.headquarter.country`, as a two-letter code |
| `locations` | `data.locations` |
| `tags` | `data.specialities` |
| `linkedin_url` | `data.linkedInUrl` |
| `linkedin_id` | `data.linkedInId` |
| `linkedin_slug` | `data.universalName` |
| `linkedin_follower_count` | `data.followerCount` |

Every answer also carries the company's numeric id: one stable key per company, whichever website or
address you started from, even when the company 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 People Data Labs is the better choice

Choose People Data Labs when you need person records with contact details, company fields we don't return, such as revenue
estimates or industry codes, or whole datasets delivered in bulk. HappyFetch is for company profiles, one
call at a time, priced per answer.
