Developer guides

List of companies using Greenhouse, Workday, Lever or Ashby: how to build one and why counts disagree

No ATS vendor publishes a list of its customers, so every "companies using Greenhouse" list is measured, and the published counts for the same vendor differ by a factor of ten because each method counts something different. Source: Arcadium Data, data as of .

HR-tech sales teams, integration partners, recruiters choosing tools and investors all want a list of companies on a given applicant tracking system. A vendor's marketing page names a few dozen logos. The real list can only be built from outside: which companies have a public job board hosted by that vendor, and which of those boards are alive.

That is a measurement, and measurements disagree. For Ashby we have seen public counts of "500+", about 2,000, 2,800 and about 5,000 for the same period. The numbers are not wrong in the same way; they answer different questions. This guide shows how to build your own list and how to read someone else's.

How a customer list is built

Step 1: collect candidate boards

curl

# Common Crawl URL index: Greenhouse board pages in one crawl, first 5 results
curl -s "https://index.commoncrawl.org/CC-MAIN-2026-43-index?url=boards.greenhouse.io/*&output=json&limit=5"

Python

import json
import requests

def greenhouse_tokens(crawl: str = "CC-MAIN-2026-43", limit: int = 1000):
    r = requests.get(
        "https://index.commoncrawl.org/" + crawl + "-index",
        params={"url": "boards.greenhouse.io/*", "output": "json", "limit": limit},
        timeout=120,
    )
    r.raise_for_status()
    tokens = set()
    for line in r.text.splitlines():
        url = json.loads(line)["url"]
        parts = url.split("/")
        if len(parts) > 3 and parts[3] and parts[3] not in {"embed", "robots.txt"}:
            tokens.add(parts[3].lower())
    return sorted(tokens)

print(len(greenhouse_tokens()))

TypeScript

const url =
  'https://index.commoncrawl.org/CC-MAIN-2026-43-index?url=' + encodeURIComponent('jobs.lever.co/*') + '&output=json&limit=1000';
const text = await (await fetch(url)).text();
const tokens = new Set(
  text
    .split('\n')
    .filter(Boolean)
    .map((l) => new URL((JSON.parse(l) as { url: string }).url).pathname.split('/')[1]?.toLowerCase())
    .filter(Boolean),
);
console.log(tokens.size, 'candidate Lever boards in this slice');

Step 2: validate that a board is alive

A URL in an archive proves that a board once existed. Call the vendor's public endpoint (see the job board guide) and keep boards with at least one open job. In our own validation of about 34,000 candidates from eight crawls, 61% of Common Crawl candidates still had an open job; discovery from Common Crawl was roughly fifty times cheaper than probing domain guesses.

Step 3: attach the board to a company

The token is not the company. Map it to a domain from evidence in the board itself (links in job descriptions, the hosted board's own website field, the apply links' custom domain), and keep the evidence and a confidence. A name-only match is how "nuro" the Greenhouse board ends up under the wrong country.

Step 4: audit a sample before you trust the list

Whether you built a list or bought one, test it. Draw 100 rows at random and check three things by hand or by script: the board still has open jobs (liveness), the company on the row is the company that owns the board (attribution), and the vendor named is the one that serves the apply link (identification). Report the share that passes each check; a list that is 95% alive but 70% correctly attributed is a list of boards, not of companies. Repeat the audit when the source changes, because new discovery passes bring in different kinds of mistakes. Staffing agencies and job boards that list other employers' jobs belong in a separate column, not in a customer count.

Why published counts disagree

Why published counts disagree

When you buy or quote a list, ask for four things: the definition of "using", the date, the sample, and how a board is tied to a company.

The fast route: market share, vendor pages and keyed lists

Arcadium Data publishes the measurement and its definition. Our boards come from Common Crawl discovery plus domain probing, validated against the vendor endpoints, and every board is tied to a company domain with evidence and a confidence.

Share and movement per vendor since February 2023: GET /v1/ats/market returns monthly share, the number of employers observed, wins (new employers), losses and dated switches in and out. The anonymous tier answers one vendor at a time with at most five rows:

Calls on this page work without a key from one IP (10 requests a minute, 100 a day, short answers, point lookups). A free key lifts the limits: sign up. Routes, parameters and fields: OpenAPI.

curl

curl -s "https://api.arcadiumdata.io/v1/ats/market?ats=greenhouse"

Response (abridged)

{
  "series": "core4",
  "country": "ALL",
  "sizeBand": "all",
  "note": "Share among the employers we observe in the Common Crawl public web archive (5 ATS host zones), not the whole market ...",
  "data": [{
    "month": "2023-02-01",
    "crawlId": "CC-MAIN-2023-06",
    "ats": "greenhouse",
    "share": 0.46380026,
    "employers": 1946,
    "wins": 0,
    "losses": 0,
    "switchesIn": 0,
    "switchesOut": 0
  }]
}

Read the note field: it states what the share is a share of, which crawls are included and where Lever drops out of the archive. With a key, country, sizeBand, from and to cut the series; live adds today's share among the ten ATS we crawl directly.

The lists themselves. The site publishes them as pages: /ats/ has one page per vendor with counts by country and department and the top companies, and the companies index lists every company by vendor, A to Z. Per-company lookups use GET /v1/companies/{domain} (see the ATS detection guide). Searching jobs by system needs a key:

curl

curl -s "https://api.arcadiumdata.io/v1/jobs?ats=workday&country=GB&limit=50" \
  -H "Authorization: Bearer $ARCADIUM_API_KEY"

Python

import requests

r = requests.get("https://api.arcadiumdata.io/v1/ats/market?ats=ashby", timeout=30)
r.raise_for_status()
body = r.json()
print(body["note"][:120])
for row in body["data"]:
    print(row["month"], row["ats"], round(row["share"], 3), row["employers"])

TypeScript

const res = await fetch('https://api.arcadiumdata.io/v1/ats/switches?domain=stripe.com');
const body = (await res.json()) as { count: number; note: string };
console.log(body.count, body.note);

Bulk lists for a licence (company, ATS, board URL, country, open jobs, last seen) are described on the data licence page, with samples. Our counts are a floor: companies we cannot tie to a domain are left out of switches and lists.

Comparison

Vendor logo pageBuild from Common CrawlArcadium Data
Complete?No, selected logosDepends on your crawls and validationBoards we found and tied to a domain (a floor)
Definition of "using"MarketingYoursBoard with open jobs; stated in the API note
Dated and sourcedNoYou keep the datesYes, per month and crawl
Share over timeNoYou compute it/v1/ats/market since 2023
Switches between vendorsNoHard/v1/ats/switches
EffortNoneDays to weeksOne call or a licence file

Get the data without the plumbing

Arcadium Data serves these datasets from one REST API and one MCP server, with sources, licences and dates on every answer. No key is needed to try the routes in this guide.

Sources

Last updated 2026-10-25. This guide is ours and independent of the organisations it describes. Found a mistake? Tell us and we correct it.

Questions

Is there a public list of companies that use Greenhouse?

No official one. Greenhouse names some customers on its site, but the full list can only be measured from outside, for example from the public job boards hosted on its domains.

Why do different sources give such different customer counts?

They count different things: boards ever seen versus boards with open jobs, boards versus companies, a crawl sample versus a census, and different time windows. Ask for the definition and the date.

How do I get ATS market share over time?

From a repeated measurement. Our /v1/ats/market route gives monthly share, wins, losses and switches for Greenhouse, Workday, Ashby and SmartRecruiters since February 2023, among the employers a public web crawl observes.

Is the market share data representative of all companies?

No. It covers employers observed in the Common Crawl archive, which leans to technology companies and English-language sites. The API note states this on every answer.

Can I download the full list?

The site shows the top companies per vendor and an A to Z index. Full lists with board URLs, countries and open jobs are available under a data licence; samples are on the licence page.

Cite as: Arcadium Data, "List of companies using Greenhouse, Workday, Lever or Ashby: how to build one and why counts disagree", https://arcadiumdata.io/guides/companies-using-an-ats-greenhouse-workday-lists/, data as of 2026-10-25.