Gem Jobs API.
Every public Gem ATS career page, one endpoint. No per-customer onboarding.
Why people are confused about the Gem API
Gem started as a recruiting CRM and now ships a full ATS. Its API surface is built for customers - syncing candidates, sequences, and pipelines inside one account - not for reading job postings across every company that hires through Gem.
Gem ATS customers host public job boards on Gem-served career pages (jobs.gem.com and embedded boards on company domains). There is no public cross-customer index. JobsPipe discovers and normalizes public Gem boards into the same schema as our other sources.
Right for automating your own recruiting workflows inside your own Gem account. Scoped to one customer; not a cross-company postings feed.
Possible for boards you already know about, but there is no discovery mechanism and each embed is its own config.
Every public Gem board we discover, one endpoint, same JSON schema as 30+ other sources. Free tier included.
Sample request
curl https://api.jobspipe.dev/v1/jobs/search \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "source_or": ["gem"], "limit": 25 }'Sample response
{
"id": "gm_YTk2ZDU3NmItNGQx",
"source": "gem",
"tenant": "lattice-robotics",
"title": "Founding Product Engineer",
"company": "Lattice Robotics",
"location": {
"city": "San Francisco",
"region": "CA",
"country": "US",
"remote": true
},
"salary": {
"min": 150000,
"max": 205000,
"currency": "USD",
"period": "year",
"source": "explicit"
},
"employment_type": "full_time",
"posted_at": "2026-08-19T16:40:00Z",
"expires_at": null,
"apply_url": "https://jobs.gem.com/lattice-robotics/...",
"description": "Lattice Robotics is hiring a Founding Product Engineer to own our teleoperation stack ..."
}Every Gem job record is returned in the same JSON shape as every other JobsPipe source. The full schema is documented in the docs.
Skip the scraper - try the API right now
Live, normalized postings from Gem and 30+ other sources in one JSON schema. No key, no signup - this sandbox returns sample data in the exact live shape.
Press Test search to see normalized job records rendered here, and the raw JSON on the right.
POST /v1/sandbox/jobs/search{
"job_title_or": [
"software engineer"
],
"limit": 3,
"remote": true
}Advanced: edit the raw request, or copy it as curl
curl -X POST https://api.jobspipe.dev/v1/sandbox/jobs/search \
-H "Content-Type: application/json" \
-d '{"job_title_or":["software engineer"],"remote":true,"limit":5}'For live results, get a free key (1,000 jobs/month) and swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header - request and response shapes are identical.
Fields in every Gem job record
FAQ
Does Gem have a public jobs API?+
No. Gem's API is scoped to each customer's own account for recruiting workflow automation. JobsPipe covers the public postings side: every public Gem board, one endpoint.
How fresh is Gem data?+
Public Gem career pages are re-crawled at least every 24 hours.
Are Gem jobs deduped against other sources?+
Yes. A role posted on Gem and cross-posted to LinkedIn or Indeed resolves to one canonical record with per-source attribution.
Try Gem data free - key in 30 seconds.
Get a free API key