# Hireology Jobs API

> Query jobs from Hireology boards through one API with ?source=hireology — plus how Hireology's public careers API really behaves.

Source: https://hyperjobs.io/ats/hireology

Hireology is a hiring platform for multi-location US businesses: auto dealer
groups, healthcare, retail, hospitality. Boards live at
`careers.hireology.com/<path>`, and behind them sits the best-shaped source in
this pool. Descriptions arrive **inline at 100 rows per request**, so a whole
board is one or two calls with no detail fetch and no HTML parsing. There are
23,905 Hireology postings in this dataset — a number that moves hourly, so read
it from [`/v1/meta`](/docs/api-reference/meta) rather than trusting this sentence.

## Try it

```bash
curl -G https://api.hyperjobs.io/v1/jobs \
  -H "Authorization: Bearer $HYPERJOBS_KEY" \
  --data-urlencode "source=hireology" \
  --data-urlencode "time_frame=7d" \
  --data-urlencode "limit=2"
```

```json title="Illustrative — the shape, not a live response"
{
  "data": [
    {
      "id": "hireology:8412337",
      "title": "Salesperson",
      "company": {
        "slug": "6thavenuehonda",
        "name": "6th Avenue Honda",
        "domain": "6thavenuehonda.com",
        "website": "https://6thavenuehonda.com",
        "logo": "https://media.licdn.com/dms/image/…",
        "industry": "Motor Vehicle Manufacturing",
        "employee_count": 62
      },
      "location": {
        "remote": false,
        "countries": ["United States"],
        "cities": ["Stillwater"],
        "regions": ["OK"],
        "raw": ["Stillwater, OK"]
      },
      "employment_type": ["FULL_TIME"],
      "work_arrangement": null,
      "seniority": null,
      "salary": {
        "min": 24000,
        "max": 60000,
        "currency": null,
        "unit": "YEAR",
        "annual_min": 24000,
        "annual_max": 60000,
        "summary": null
      },
      "skills": ["sales", "customer service"],
      "taxonomies": ["Sales"],
      "apply_url": "https://careers.hireology.com/6thavenuehonda/8412337/description",
      "url": "https://careers.hireology.com/6thavenuehonda/8412337/description",
      "source": "hireology",
      "posted_at": "2026-07-09T13:32:51.875Z",
      "expires_at": null,
      "updated_at": "2026-07-14T06:11:02.000Z"
    }
  ],
  "total": 2,
  "limit": 2,
  "offset": 0
}
```

## How Hireology boards actually work

One call per 100 postings, bodies included:

```bash
curl "https://api.hireology.com/v2/public/careers/<path>?page=1&page_size=100"
```

`<path>` is the segment from `careers.hireology.com/<path>`; the
`<slug>.hireology.careers` hostname maps to the same value. `page_size` is
genuinely honored here (the default is a needlessly chatty 10), so most boards
are a single request. `job_description` is full HTML on the list row. No N+1.

### The `apiToken` is decorative

The board HTML embeds an `apiToken` JWT in its `startingData`, positioned exactly
like a credential you are supposed to mint, cache, refresh and pass. It isn't one.

<Note title="The API returns byte-identical responses with no Authorization header">
  Verified against a live board: same rows, same descriptions, same everything,
  with the token and without it. There is no token refresh to build, no expiry to
  handle, and no 401 waiting for you at 3am when a JWT you didn't need lapses.

  This is worth knowing precisely because the token looks so much like the hard
  part. It's the kind of thing you build a whole auth path around before noticing
  the endpoint never asked.
</Note>

## What bites you

**`job_family` is an object, not a string.** This is the one that costs real
money. It arrives as `{ id, name, depth }`, and passing it straight through puts
an object into a scalar column — every insert dies and the board stores **zero
jobs**.

The reason it's worth a warning rather than a footnote is how it fails. A probe
that checks the field is populated reports `department: 100%`, because an object
is truthy. So the board reports perfect health while writing nothing at all. Take
`.name`.

**`comp_frequency` is not the pay unit.** `comp_period` is the unit (`"hour"`).
`comp_frequency` is the payroll cadence (`"biweekly"`). They sit next to each
other, they both look like the answer, and reading the wrong one annualizes a
$13/hour job by 26 and invents six-figure car-wash salaries. Also: `"0.0"` is
Hireology's empty, not free labour.

**There's no currency code.** The API doesn't publish one. Hireology is US-only in
practice, but the field is genuinely absent rather than implied, so `currency`
comes back `null` rather than a guessed `USD`.

**The API never tells you who the employer is.** The board token is
`6thavenuehonda` and that is the entire identity the source hands over. There is
no employer name field and no employer domain on the posting.

<Warning title="This is a real gap, and it nearly became a much worse one">
  Hireology has **no tier-1 company-domain route** — the platform publishes
  nothing to resolve a board to a company with, so the identity has to be inferred
  from outside the source.

  The near-miss is instructive. An early identity pass graded Hireology
  `TRUSTED 6/8 (75%)` — and 6 of those 6 domains were `hireology.com` and
  `hireology.careers`. The board pages' `og:url` points at the ATS, so the highest
  confidence grade we had was about to stamp **"Hireology" as the employer of
  every job on every one of its boards**. Filtering the vendor's own domains
  collapses that 75% to an honest **0%**.

  A name that comes back as the token, title-cased, is not information. We'd
  rather show you the token than a confident wrong answer.
</Warning>

## Or use ours

The fetch is one call per 100 rows. Everything around it is the work.

Our queue tracks 2,508 Hireology boards, and the discovery is the reason that
number exists: Hireology has no public customer index, and the Wayback CDX index
yields **2,271 live boards from 58% of its candidates**, against 350 from Common
Crawl. Assembling that list is a bigger job than reading the API ever was.

You get `job_family` unwrapped to its name instead of zeroing a board, salary read
off `comp_period` rather than the cadence next to it, `"0.0"` treated as empty,
structured city/state locations, Hireology rows deduplicated against the same job
on [LinkedIn](/ats/linkedin) or elsewhere, expiry by board diffing, and whatever
[company identity](/docs/objects/company) we can resolve from outside a source
that publishes none. On the last point, see the warning above: we'd rather be
straight with you about what Hireology does not give us.

Query it with `?source=hireology`.
[Quickstart](/docs/quickstart), then [pricing](/pricing).
