Pinpoint Jobs API
Query jobs from Pinpoint boards through one API — and how its postings.json feed delivers a whole board with no posting date at all.
Pinpoint is an ATS built for in-house talent acquisition teams, with boards at
<slug>.pinpointhq.com. Its public feed is one of the most generous in this pool:
a single unauthenticated GET returns the whole board with full descriptions,
structured compensation, benefits and responsibilities broken out as separate
fields. It also doesn't tell you when anything was posted.
Try it#
curl -G https://api.hyperjobs.io/v1/jobs \
-H "Authorization: Bearer $HYPERJOBS_KEY" \
--data-urlencode "source=pinpoint" \
--data-urlencode "limit=2"{
"data": [
{
"id": "pinpoint:88213",
"title": "Finance Business Partner",
"company": {
"slug": "harborview-group",
"name": "Harborview Group",
"domain": "harborviewgroup.co.uk",
"website": "https://harborviewgroup.co.uk",
"logo": "https://media.licdn.com/dms/image/…",
"industry": "Financial Services",
"employee_count": 400
},
"location": {
"remote": false,
"countries": ["United Kingdom"],
"cities": ["Newcastle"],
"regions": ["Tyne and Wear"],
"raw": ["Newcastle, Tyne and Wear"]
},
"employment_type": ["FULL_TIME"],
"work_arrangement": "Hybrid",
"salary": {
"min": 55000,
"max": 65000,
"currency": "GBP",
"unit": "YEAR",
"annual_min": 55000,
"annual_max": 65000,
"summary": "£55,000 – £65,000 depending on experience"
},
"skills": ["forecasting", "budgeting", "excel"],
"taxonomies": ["Finance & Accounting"],
"core_responsibilities": "Partner with department heads on budget cycles…",
"benefits": "Private healthcare, 27 days holiday, pension matching…",
"apply_url": "https://harborview.pinpointhq.com/en/postings/88213",
"url": "https://harborview.pinpointhq.com/en/postings/88213",
"source": "pinpoint",
"posted_at": null,
"expires_at": "2026-08-01T00:00:00.000Z",
"updated_at": "2026-07-13T12:04:19.000Z"
}
],
"total": 2,
"limit": 2,
"offset": 0
}`posted_at` can be null on this source, and `time_frame` filters on it
Pinpoint's feed publishes no posting date. There is no created_at, no
published_at, nothing. So a ?time_frame=7d filter — which measures against
posted_at — behaves differently here than on
Greenhouse or Ashby, where every posting has a
real date.
That's why the curl above doesn't use one. If you're building a "new jobs this week" view across sources, this is the source that will quietly under-report.
How Pinpoint boards actually work#
One GET. No auth, no pagination, no detail calls, whole board with bodies:
curl "https://<slug>.pinpointhq.com/postings.json"<slug> is the subdomain. Response is { "data": [...] }.
Per posting you get id, title, description, url, employment_type_text,
workplace_type_text (a clean Remote / Hybrid / On-site), location, and
structured compensation as four separate fields: compensation_minimum,
compensation_maximum, compensation_currency, compensation_frequency, plus a
free-text compensation summary alongside them. Real numbers and the prose,
which is unusual — most platforms make you choose.
Fields most platforms don't have#
Pinpoint breaks the job ad into parts on the way out:
| Field | Fill |
|---|---|
skills_knowledge_expertise | An HTML list — near 100% |
key_responsibilities | HTML — near 100% |
benefits | An HTML list — around 65% |
Those map more or less directly onto
core_responsibilities and benefits, which most sources
have to derive. Requisition id, department and division are nested one level down
under a job object rather than sitting at the top level.
deadline_at is an ISO application deadline — and it's the platform's only
date signal, which is a strange place to end up: Pinpoint tells you when a job
closes but not when it opened.
What bites you#
Roughly 42% of the "skills" bullets are sentences. skills_knowledge_expertise
is an HTML list, but employers write requirements into it, not tags. Harvest every
<li> and your skills index fills with whole sentences. A real skill is a term or
short phrase — we keep bullets that are short in both characters and words and
drop the rest, and let the enrichment pass derive skills from the description for
those postings instead.
location.name is a bare, ambiguous city. Newcastle — which one? The
structured city and province fields disambiguate it, and Pinpoint's API
carries no country at all, so province is the best hint available for
inferring one. Prefer the structured pair over the display name.
compensation_frequency is lowercase prose. year, hour — not an enum you
can pass straight through.
Or use ours#
Pinpoint is genuinely easy. One call, no auth, no pagination, no N+1. If you have a handful of Pinpoint boards, use the endpoint — this page is most of what you'd need to know.
What we add is narrower here than elsewhere, and it'd be dishonest to inflate it.
We track 350 Pinpoint boards, which is the reach you'd otherwise assemble by hand.
The skill bullets are filtered so sentences don't become tags. The structured
city/province is preferred over the ambiguous display name. And Pinpoint's rows
sit in the same salary and location shape as every other
source, so a GBP annual band from Pinpoint compares to an hourly USD one from
BambooHR without you writing the normalisation.
The date gap is real and we can't fill it: posted_at is null because Pinpoint
never published one. We'd rather say that than derive a plausible date and let you
build a freshness chart on it.
Pinpoint is in the fast refresh tier, attempted every cycle — see coverage.
Every source above normalises onto the same schema, with the hiring company already joined onto each posting.
Get an API key