# Company enrichment API: domain to firmographics, providers compared on price and fill

Turn a domain into firmographics: industry, headcount, location, founding year, tech stack, funding. 30 providers do this job through one olywork.com key, from $0.0019 a call, with no seat fee and no annual contract. Your agent compares them on price and measured fill rate, picks one, and you pay only for the calls it makes.

## What's the best way to ask ChatGPT?

Setup line (paste into any agent): `set up olywork — https://olywork.com/llms.txt`

Then ask: "Using olywork, enrich these 30 domains into a table: company name, industry, headcount, country, founded year and tech stack. Show me the price first, and mark any field that came back empty."

- **Give the domain, not the name** A domain maps to one company. A name is ambiguous and matches the wrong one.
- **Ask for the fields you need** Some providers price per section requested. Asking for everything costs more.
- **Ask it to mark the blanks** An empty field is information. A quietly guessed one is not.
- **Batch when you can** Several providers have a bulk route at half the single-call price.

## Why go through olywork.com

- **No code to write** Connect once, keep the token server side, and call from any agent.
- **Nothing to integrate** No SDK, no OAuth dance per vendor, no seats.

## Behind the scenes: what ChatGPT sees before it calls

olywork.com does not choose for you. It hands ChatGPT this comparison and it picks, or you tell it how.

### Which is cheapest?

- Cheapest per found: The Companies API at $0.0019 (`thecompaniesapi.companies.enrich`)
- Cheapest per result: Bright Data at $0.0015 (`brightdata.x.companies-crunchbase`)
- Cheapest per call: HarvestAPI at $0.004 (`harvestapi.linkedin.company.profile`)

Those units are not interchangeable: one call can return many results, so compare on the unit you will actually be billed in.

### How do they compare?

#### Company data

| Provider | Price | Accepts | Verified |
|---|---|---|---|
| Bright Data | $0.0015 per result | dataset_id, format, input | unverified |
| Dropleads | $0.0018 per result | domains, companyNames | 2026-09-15 |
| The Companies API | $0.0019 per found | simplified, refresh, domain, email | unverified |
| Hunter | $0.0049 per found | domain, clearbit_format | 2026-07-31 |
| Tomba | $0.0089 per found | domain | 2026-08-20 |
| Openmart | $0.00894 per result | website, social_media_link, limit, estimate_total | 2026-09-17 |
| Icypeas | $0.0095 per found | url | 2026-08-20 |
| CompanyEnrich | $0.0098 per call | domain, expand, name, linkedinUrl, linkedinId, twitterUrl | 2026-08-20 |
| Sumble | $0.01 per result | organizations, filter, include_closed, select, limit, offset | 2026-09-09 |
| Findymail | $0.0198 per found |  | unverified |
| ContactOut | $0.02 per result | domains | 2026-09-09 |
| LimaData | $0.02 per found | domain, linkedin_url | 2026-09-17 |
| Datagma | $0.0226 per found | data, companyPremium, companyFull, personFull, phoneFull, deepTraffic | 2026-09-18 |
| Prospeo | $0.0245 per found | data | 2026-09-16 |
| Brand.dev | $0.025 per found | domain, maxSpeed, maxAgeMs, timeoutMS, force_language, name | 2026-08-20 |
| LeadMagic | $0.025 per found | company_domain, profile_url, company_name | 2026-07-31 |
| Apollo.io | $0.026 per found | domain, website, name, linkedin_url | unverified |
| Diffbot | $0.0299 per call | type, url, name, location, ip, phone | 2026-07-28 |
| Fiber AI | $0.04 per found | companyIdentifier, companyDomain, companyName | unverified |
| PredictLeads | $0.04 per call | id_or_domain | 2026-08-20 |
| Wiza | $0.05 per found | company_name, company_domain, company_linkedin_id, company_linkedin_slug | 2026-09-16 |
| Aviato | $0.15 per found | id, linkedinID, linkedinNumID, linkedinURL, website, preview | 2026-08-25 |
| Lusha | $0.25 per found | companies | 2026-07-31 |
| People Data Labs | $0.38 per found | website, name, profile, ticker, location, locality | 2026-07-31 |
| Coresignal | $0.392 per found | website, fields, id | unverified |
| Akta by Wokelo | $0.875 per found | company, sections | 2026-07-31 |
| Crustdata | $1.2 per result | domains, names, professional_network_profile_urls, fields | 2026-08-25 |
| Crunchbase | no dollar rate published | field_ids, card_ids, entity_id | unverified |
| Ocean.io | no dollar rate published | company, people, fields, domains, companyDataMapping, webhookUrl | 2026-08-20 |

#### LinkedIn

| Provider | Price | Accepts | Verified |
|---|---|---|---|
| HarvestAPI | $0.004 per call | url, universalName, search | 2026-09-10 |

Endpoints:

- `akta.companies.enrich`: olywork call akta.companies.enrich --query company=canva.com --query sections=location
- `apollo.companies.enrich`: olywork call apollo.companies.enrich --query domain=stripe.com
- `aviato.companies.enrich`: olywork call aviato.companies.enrich --query website=stripe.com --query preview=True
- `aviato.companies.enrich.bulk`: olywork call aviato.companies.enrich.bulk --data '{"lookups":[{"website":"stripe.com"}],"require":["name"]}'
- `branddev.brand.retrieve`: olywork call branddev.brand.retrieve --query domain=stripe.com --query maxSpeed=true
- `branddev.brand.retrieve-by-name`: olywork call branddev.brand.retrieve-by-name --query name=Anthropic
- `branddev.brand.retrieve-by-email`: olywork call branddev.brand.retrieve-by-email --query email=support@stripe.com --query maxSpeed=true
- `branddev.brand.retrieve-by-ticker`: olywork call branddev.brand.retrieve-by-ticker --query ticker=NVDA --query maxSpeed=true
- `branddev.brand.retrieve-by-isin`: olywork call branddev.brand.retrieve-by-isin --query isin=US0378331005 --query maxSpeed=true
- `brightdata.x.companies-crunchbase`: olywork call brightdata.x.companies-crunchbase
- `companyenrich.companies.enrich`: olywork call companyenrich.companies.enrich --query domain=stripe.com
- `companyenrich.companies.enrich.by_properties`: olywork call companyenrich.companies.enrich.by_properties --data '{"name":"Anthropic","linkedinUrl":"https://www.linkedin.com/company/anthropicresearch"}'
- `companyenrich.companies.enrich.batch`: olywork call companyenrich.companies.enrich.batch --data '{"domains":["stripe.com","anthropic.com"]}'
- `companyenrich.companies.get`: olywork call companyenrich.companies.get --query id=0192577c-1d7a-715c-a5b7-1b9b530445e0
- `contactout.companies.enrich`: olywork call contactout.companies.enrich --data '{"domains":["contactout.com"]}'
- `coresignal.companies.enrich`: olywork call coresignal.companies.enrich
- `coresignal.companies.collect`: olywork call coresignal.companies.collect
- `crunchbase.companies.enrich`: olywork call crunchbase.companies.enrich
- `crustdata.companies.identify`: olywork call crustdata.companies.identify --data '{"domains":["stripe.com"]}'
- `crustdata.companies.enrich`: olywork call crustdata.companies.enrich --data '{"domains":["stripe.com"]}'
- `datagma.companies.enrich`: olywork call datagma.companies.enrich --query data=algolia.com --query companyPremium=True --query companyFull=True --query personFull=False --query phoneFull=False --query deepTraffic=False --query debug=False
- `diffbot.companies.enrich`: olywork call diffbot.companies.enrich --query type=Organization --query url=https://www.diffbot.com --query size=1
- `diffbot.companies.bulk_enrich`: olywork call diffbot.companies.bulk_enrich --query name=olywork-verify --data '[{"type":"Organization","url":"diffbot.com"}]'
- `dropleads.companies.enrich`: olywork call dropleads.companies.enrich --data '{"domains":["example.test"]}'
- `fiber-ai.companies.enrich`: olywork call fiber-ai.companies.enrich --data '{"companyDomain":{"value":"stripe.com"}}'
- `findymail.search.company`: olywork call findymail.search.company --data '{"domain":"stripe.com"}'
- `harvestapi.linkedin.company.profile`: olywork call harvestapi.linkedin.company.profile --query universalName=google
- `hunter.companies.enrich`: olywork call hunter.companies.enrich --query domain=stripe.com
- `icypeas.companies.enrich`: olywork call icypeas.companies.enrich --query url=https://www.linkedin.com/company/stripe/
- `leadmagic.companies.enrich`: olywork call leadmagic.companies.enrich --data '{"company_domain":"leadmagic.io"}'
- `limadata.companies.enrich`: olywork call limadata.companies.enrich --data '{"domain":"example.com"}'
- `lusha.companies.enrich`: olywork call lusha.companies.enrich --data '{"companies":[{"domain":"lusha.com"}]}'
- `oceanio.companies.enrich`: olywork call oceanio.companies.enrich --data '{"company":{"domain":"stripe.com"}}'
- `oceanio.companies.lookup_bulk`: olywork call oceanio.companies.lookup_bulk --data '{"domains":["stripe.com"]}'
- `oceanio.companies.enrich_bulk`: olywork call oceanio.companies.enrich_bulk --data '{"companyDataMapping":{"c1":{"company":{"domain":"anthropic.com"}}},"webhookUrl":"https://example.com/olywork-webhook","fields":["domain","name","employeeCountOcean"]}'
- `openmart.companies.enrich`: olywork call openmart.companies.enrich --data '{"website":"example.invalid","limit":1}'
- `pdl.companies.enrich`: olywork call pdl.companies.enrich --query website=peopledatalabs.com
- `predictleads.companies.enrich`: olywork call predictleads.companies.enrich
- `prospeo.companies.enrich`: olywork call prospeo.companies.enrich --data '{"data":{"company_website":"intercom.com"}}'
- `sumble.organizations`: olywork call sumble.organizations --data '{"organizations":[{"url":"stripe.com"}],"select":{"attributes":["id","name","url","employee_count","industry"]}}'
- `thecompaniesapi.companies.enrich`: olywork call thecompaniesapi.companies.enrich
- `thecompaniesapi.companies.enrich_by_email`: olywork call thecompaniesapi.companies.enrich_by_email --query email=patrick@stripe.com
- `tomba.companies.enrich`: olywork call tomba.companies.enrich --query domain=stripe.com
- `wiza.companies.enrich`: olywork call wiza.companies.enrich --data '{"company_domain":"wiza.co"}'

## What people actually struggle with

Everybody wants the same thing here, and the arguments are about what comes back and what it costs. From ~180 Reddit and X posts in August 2026, with the vendor rings removed.

**The ask, in the buyer's own words**

> "I'll give it a company name/website and it will return company size, industry, founded, market cap, maybe leadership info, etc." (r/CRM, 17 points: https://www.reddit.com/r/CRM/comments/1si1jbw/crm_enrichment_apis/)

What this page can do about it: That is exactly this job, and 19 providers do it. The comparison below is about which fields each one actually fills, because the ask is identical everywhere.

**Resolution rate is not a buying signal**

> "Every provider resolves between 94.7% and 100% of domains. That spread is not a buying signal." (r/gtmengineering: https://www.reddit.com/r/gtmengineering/comments/1vl0kht/independent_open_source_benchmark_of_company/)

What this page can do about it: Right, so this page does not rank on it. Compare on what a filled record contains, what an empty one costs you, and the measured latency, which is where the real spread is.

**A guessed field is worse than a blank one**

> "A pipeline that appends fields without validating them just produces confident-looking wrong data, which is worse than an empty field" (r/Data_Enrichment: https://www.reddit.com/r/Data_Enrichment/comments/1vqoj48/what_is_data_enrichment/)

What this page can do about it: Most providers do not distinguish observed from inferred fields, and we will not pretend otherwise. Ask the agent to keep blanks blank, and treat headcount and revenue as estimates unless the provider says otherwise.

**Credits are not comparable between vendors**

> "Every vendor on this list uses the word “credit,” and none of them mean the same thing" (r/Data_Enrichment: https://www.reddit.com/r/Data_Enrichment/comments/1vrl2q4/data_enrichment_pricing_2026_august_update/)

What this page can do about it: Which is why every price on this page is in dollars per call, converted from each provider's own unit at their published rate, with the date we last verified it.

**Seat pricing kills small teams**

> "For a 5-person team, they quoted 15k-30k/year minimum. The pricing games are brutal." (r/coldemail: https://www.reddit.com/r/coldemail/comments/1tplckc/what_are_you_actually_paying_for_zoominfo_vs/)

What this page can do about it: Seat-based enrichment tools bill whether or not you pull a record. Every provider here bills per call with no seat, so a quiet month costs nothing and a busy one scales.


## What actually differs

- Headcount, revenue and industry are inferred by most providers, not observed, and almost none of them mark which is which. A confidently wrong headcount does more damage in a scoring model than a blank one, so ask your agent to keep the empties visible.
- The billing units are genuinely different products. Akta prices per section of the record you request; CompanyEnrich charges one credit per call and five more for the workforce expansion; Hunter charges only when name, size and location all come back; Ocean.io's bulk lookup is half the price of its single enrichment. The word credit means something different at every vendor, which is why this page prices everything in dollars per call.
- Use the deterministic route when you have a domain. CompanyEnrich's by-domain lookup maps one domain to exactly one company, while its by-properties route is a fuzzy match at the same price. The Companies API returns an empty object and charges nothing when a domain has no company behind it.

## What is a company enrichment API?

It resolves a domain, company name or LinkedIn URL to a structured company record: legal name, industry, employee count, headquarters, founding year, and depending on the provider the technology stack, funding history, web traffic and social profiles. It is what turns a signup email domain into a qualified account.

## Where it goes wrong

**Inferred headcount is often wrong** Most providers model employee count from job postings, LinkedIn, and traffic signals. Subsidiaries, international companies, and fast-growing teams are frequently misclassified. Treat headcount as a range, not a fact, and validate any record that will drive routing.

**Empty vs guessed fields** Some providers return a blank when they have no data; others return an inferred value with no flag. A confidently wrong industry or revenue estimate does more damage than a gap. Ask the agent to surface blanks, and know which providers distinguish observed from modelled.

**Fuzzy name match returns the wrong company** A company name like 'Acme' matches dozens of records; the provider picks one and you pay. A domain is deterministic: one input, one company, no ambiguity. Use the by-domain route when you have it.

**Billing units differ wildly** One provider charges per section of the record you request; another per company found; another only when name, size and location all return. Compare in dollars per call, not in credits, because a credit means something different at every vendor.


## Questions

**What do I send in?** A domain gives the highest match rate and is deterministic. Most providers also accept a company name, a LinkedIn URL or a work email, and a few take a stock ticker.

**Which fields can I count on?** Name, domain, industry, location and an employee range come back almost everywhere. Tech stack, funding, revenue and web traffic are provider-specific, and revenue in particular is usually modelled.

**What happens when a domain has no company?** It varies, and it is worth knowing before a batch: some return a 404, some an empty object, and the free-mail domains are refused outright. Several providers do not bill for a miss.

**Is this how I qualify signups?** Yes, that is the common use: turn the new user's work email domain into firmographics and route the account. One provider has a route that takes the email address directly.

HTML version: https://olywork.com/use-cases/enrich-a-company