All platforms

GoHire Jobs API

Query jobs from GoHire boards through one API with ?source=gohire — plus how GoHire's widget endpoints really behave.

?source=gohiresource reference

GoHire is hiring software aimed at small businesses and startups — the kind of employer with one person doing recruitment alongside three other jobs. Boards live at jobs.gohire.io/<slug>-<clientHash>, and the careers widget those boards embed is backed by two undocumented public endpoints.

What the adapter reads#

Both are unauthenticated, and both are mandatory:

BASH
# List — the whole board
curl "https://api2.gohire.io/widget-jobs/<clientHash>"
 
# Detail — one job
curl "https://api.gohire.io/widget-job?clientHash=<hash>&jobId=<id>"

Note api. for the detail and api2. for the list. That is not a typo, and it is the first thing you'll get wrong.

Neither call is skippable, because each one holds exactly what the other lacks:

ListDetail
Posting dateThe only sourceNo date field at all
Description"" on 56 of 56 rowsThe only source
LocationFree textStructured city / county / country
Employer nameclient.name

So it's a hard N+1 with no way out. No pagination exists — the list returns the whole board (16, 16 and 24 jobs on the boards sampled), though the largest board we've seen is 24, so a cap can't be ruled out.

The clientHash is the 8-character token from the board URL, and it's case-insensitive at the API (DE5JLHJO and de5jlhjo return byte-identical responses) — which matters only because it means you must normalize it before using it in a dedup key, or the same board arrives twice.

What bites you#

An unknown board returns {} at 200, never 404#

Pass a hash that doesn't exist, or pass the full slug by mistake instead of just the hash, and the API returns HTTP 200 with an empty envelope. No 404, no error, no message.

An empty envelope is the only failure signal this API gives. That means "wrong token" and "board with nothing open" are byte-identical, and a typo in a board list reads as a company that isn't hiring — quietly, forever, until someone checks by hand.

sitemap.txt is a honeypot#

Do not build discovery on this file

jobs.gohire.io/sitemap.txt exists, returns 200, and lists 20,173 URLs. It looks exactly like the global board index that this platform otherwise lacks, and it is worthless.

Every URL is on a dead legacy {slug}-{numeric-clientId} scheme. 0 of 20 board roots sampled resolve, and the numeric id in them is not the clientHash the API needs — so even the ones you can map are unusable against the endpoints above.

There is no usable global index for GoHire. Boards have to be found the hard way, like nearly everywhere else. WeRecruit's sitemap is real and enumerates its whole platform; HireHive just hands you every tenant. GoHire looks like it does and doesn't.

Structured location fields repeat themselves#

Tenants routinely fill city, county and country with the same value, producing "North America, North America, US" when joined naively. Dedupe case-insensitively before you join, or the geocoder gets a string no place matches.

Dates are zone-less human strings#

"10 June, 2026". Not ISO, not a timestamp, and no zone anywhere. Date.parse reads that at your server's local midnight, which shifts the date a day west for anyone running in Europe. It needs a bare-calendar-date parser, and the day-month-year order needs reordering before most of them will take it.

There is no JSON-LD#

Job pages carry none, so the usual schema.org fallback — the thing that rescues JazzHR and half this pool — isn't available. The widget endpoints are the entire surface.

Where GoHire is kind: client.name on the detail is the real employer name, which matters more than it sounds. The board token is an opaque hash, so without that field a GoHire posting cannot be attributed to a company at all. Salary arrives as free text ("Competitive", "£35,031.40 per annum") and is kept verbatim rather than guessed at. Descriptions came back at 100% on the boards tested (16/16 and 24/24).

Where this stands#

?source=gohire is served today, and the queries on this page return rows.

What bounds this platform is the honeypot section, not the fetching: the widget endpoints are cheap to read, and there is no cheap way to learn which boards exist. Breadth on GoHire grows a board at a time, which is the bottleneck here.

The keys of /v1/meta.sources are the live vocabulary — the values ?source= actually accepts, with counts, and the only thing worth coding against. Sources & coverage says the same in prose.

See all platforms · quickstart.

Every source above normalises onto the same schema, with the hiring company already joined onto each posting.

Get an API key