NewSearch millions of jobs from your AI agent with MCP
Source · SmartRecruiters

SmartRecruiters API.

SmartRecruiters' Posting API is public and keyless, one company at a time. JobsPipe collects every public SmartRecruiters board into one endpoint with the same record shape as the other collected boards.

Public SmartRecruiters postings
discovered_at, last_seen_at and verified_at on every record
Closed postings kept, with closed_at and closed_reason

Why people are confused about the SmartRecruiters API

SmartRecruiters ships a documented public Posting API at api.smartrecruiters.com/v1/companies/<companyId>/postings. For customers who enable it, the endpoint returns published postings as JSON with no authentication. The catch is tier-dependent: customers on lower SmartRecruiters plans do not have the public feed turned on, there is no list endpoint that enumerates which customers have it, and the companyId must be known per customer.

The full SmartRecruiters API (jobs, candidates, applications, hiring teams, the Marketplace API for partners) requires X-SmartToken headers minted inside the customer's admin or partner OAuth credentials. Either way it is customer-scoped and not built for cross-customer aggregation.

JobsPipe collects every public SmartRecruiters board it can identify, on jobs.smartrecruiters.com and on customer domains running SmartRecruiters embeds, and serves the postings through one endpoint in the same record shape as Workday, Greenhouse and the other collected boards.

Workaround
Use the public Posting API per customer

Works when the customer has the public feed enabled. You must know the companyId, write per-customer fetches, and handle the silent case where the feed is not enabled. No customer-discovery surface.

Workaround
OAuth onboarding per customer

Get partner credentials from each SmartRecruiters customer individually. Workable for one or two named accounts, not feasible across hundreds.

JobsPipe
Use JobsPipe

Every public SmartRecruiters board, one endpoint, one key. Same schema as Workday, Greenhouse, Lever, Indeed and the other collected boards. Free tier of 1,000 jobs a month.

Does SmartRecruiters have an API?

Yes, and it is one of the friendlier ATSs to build on. The Posting API at api.smartrecruiters.com/v1/companies/<companyId>/postings is public, keyless and returns a flat JSON list of published postings with title, location, department, industry, employment type, custom fields, a creation date and the apply URL, with /postings/<id> for the full description. Behind it sit the authenticated Recruiting API (jobs, candidates, applications, hiring teams, X-SmartToken), the Marketplace API for OAuth partners, and the SmartCRM API. All are per company; the public feed is also per plan tier. JobsPipe collects every public SmartRecruiters board and serves them together.

Is the SmartRecruiters API free?

The public Posting API is free and needs no key, but only for customers whose SmartRecruiters plan has the public feed enabled, and it is rate-limited per IP. The Recruiting and Marketplace APIs carry no separate price and are only reachable with customer- or partner-scoped credentials. JobsPipe's free tier returns 1,000 jobs a month across every collected board, SmartRecruiters included, and the sandbox at POST /v1/sandbox/jobs/search needs no key.

How do I get a SmartRecruiters API key?

For public postings you do not need one. For one customer's private data, an admin of that customer creates an API key under Settings / Admin, then Apps and Integrations, then API Credentials, and you send it as the X-SmartToken header against api.smartrecruiters.com. Marketplace partners register an app and use OAuth 2.0 client credentials, still consented customer by customer. Neither reads other companies' postings. For postings across the SmartRecruiters customer base, create a JobsPipe key and send it as a Bearer token to POST /v1/jobs/search with "source_or": ["smartrecruiters"].

What does the SmartRecruiters API documentation cover?

developers.smartrecruiters.com documents the Posting API (list postings, get a posting, the fields and the per-IP limits), the Customer API for jobs, candidates, applications, hiring teams, offers, reports and webhooks under X-SmartToken auth, the Marketplace API and OAuth flow for partner apps, the Job Ad and Job Distribution APIs for boards that receive jobs from SmartRecruiters, and the SmartCRM API for sourcing. The docs are public even though most endpoints are not. They do not document a way to enumerate customers or read across companies. JobsPipe's docs at /docs cover the one record shape returned for SmartRecruiters rows and every other collected board.

What JobsPipe returns for SmartRecruiters

A POST /v1/jobs/search with "source_or": ["smartrecruiters"] returns SmartRecruiters postings as JobsPipe records: id (the SmartRecruiters posting id), job_title, company, company_domain, url on jobs.smartrecruiters.com, date_posted, discovered_at, last_seen_at, verified_at, status with closed_at and closed_reason once a posting closes, ghost_score, seniority, min_annual_salary_usd and max_annual_salary_usd when a range is stated, technology_slugs and keyword_slugs parsed from the description, and sources[0].provider set to smartrecruiters. SmartRecruiters customers are global and enterprise-heavy, so job_country_code_or and isic_division_or are the filters that do the work; the data section below shows the measured salary, remote and seniority shares.

Companies using SmartRecruiters

SmartRecruiters serves a globally distributed mix of enterprise customers across automotive, payments, quick-service restaurants, telecom and tech, plus a long tail of mid-market companies. JobsPipe's coverage spans every public SmartRecruiters board it can identify, so the distinct company values in the response to POST /v1/jobs/search with "source_or": ["smartrecruiters"] are the live customer list, each with a company_domain you can pass to GET /v1/companies/{key} or POST /v1/stack/scan.

SmartRecruiters postings by the numbers

Measured on the SmartRecruiters rows in the JobsPipe index and published as shares rather than counts. Use them to decide whether SmartRecruiters carries the fields your product needs before you filter on source_or.

5.3%
Postings with a salary
a stated range on the posting
3.8%
Remote postings
26.3%
Postings with a seniority label
parsed from title or text
  • Entry7.3%
  • Senior9.4%
  • Lead and above5.4%
Seniority mix as a share of SmartRecruiters postings. The remainder carry no seniority label or sit between the bands.

Try the official SmartRecruiters endpoint

SmartRecruiters exposes public postings per company with no key. Swap in any company identifier.

curl "https://api.smartrecruiters.com/v1/companies/visa/postings"

That covers one company at a time. For every SmartRecruiters board at once, in the same schema as the other boards JobsPipe collects, use the JobsPipe request below.

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": ["smartrecruiters"], "status": "active", "limit": 25 }'

Sample response

{
  "id": "744000012345678",
  "job_title": "Embedded Software Engineer",
  "company": "Bosch",
  "company_domain": "bosch.com",
  "url": "https://jobs.smartrecruiters.com/Bosch/744000012345678-embedded-software-engineer",
  "date_posted": "2026-09-01",
  "discovered_at": "2026-09-01T08:00:12+00:00",
  "last_seen_at": "2026-09-08 00:52:08",
  "verified_at": "2026-09-08 01:14:46",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 18,
  "seniority": "mid",
  "cities": [
    "Stuttgart"
  ],
  "state_code": null,
  "min_annual_salary_usd": null,
  "max_annual_salary_usd": null,
  "technology_slugs": [
    "c",
    "embedded-linux",
    "autosar"
  ],
  "keyword_slugs": [
    "automotive",
    "embedded"
  ],
  "sources": [
    {
      "provider": "smartrecruiters",
      "url": "https://jobs.smartrecruiters.com/Bosch/744000012345678-embedded-software-engineer"
    }
  ]
}

Every record is returned in the same JSON shape regardless of the board it came from. The full schema is documented in the docs.

Skip the scraper - try the API right now

Sample data from SmartRecruiters and 30+ other sources in the exact live JSON shape. No key needed.

LIGWLA
LinkedIn, Indeed, Greenhouse + 30 more
Workplace
Number of results
Results

Run the search to see normalized results.

request
{
  "job_title_or": [
    "software engineer"
  ],
  "limit": 3,
  "remote": true
}

Live results are one free key away - same request against /v1/jobs/search.

Fields in every job record

idjob_titlecompanycompany_domainurldate_posteddiscovered_atlast_seen_atverified_atstatusclosed_atclosed_reasonghost_scoresenioritycitiesstate_codemin_annual_salary_usdmax_annual_salary_usdtechnology_slugskeyword_slugsesco_skillssources

FAQ

Does SmartRecruiters have a public API?+

Yes. api.smartrecruiters.com/v1/companies/<companyId>/postings returns a company's published jobs as JSON with no key, with a companion /postings/<id> for full detail, paged with limit and offset. It serves one company per call and only for customers whose plan has the public feed enabled. JobsPipe collects those public boards and serves them together.

Is the SmartRecruiters API free?+

The public Posting API is free for customers who enable it, which depends on their SmartRecruiters plan. The full Recruiting and Marketplace APIs are bundled with the customer's subscription and gated by tokens. JobsPipe's free tier covers every public SmartRecruiters board at 1,000 jobs a month regardless of the customer's tier.

How do I get a SmartRecruiters API key?+

Inside the customer's SmartRecruiters admin, go to Settings / Admin, Apps and Integrations, then API Credentials, and mint an X-SmartToken; partners use OAuth 2.0 client credentials from the Marketplace program. Both are scoped to one customer. The public Posting API needs no key at all when the customer has enabled it. JobsPipe needs no SmartRecruiters credentials.

How do I find a SmartRecruiters companyId?+

It is set when the customer signs up and is visible inside their admin. From the outside it is usually the company segment of the jobs.smartrecruiters.com/<CompanyName> URL, but not always. JobsPipe sidesteps this: query by company name with "company_name_partial_match_or": ["bosch"] in the POST /v1/jobs/search body and keep "source_or": ["smartrecruiters"].

What is SmartRecruiters' rate limit?+

The public Posting API is rate-limited per IP, with thresholds documented per endpoint at developers.smartrecruiters.com. The authenticated API has per-customer quotas tied to the plan. JobsPipe does the SmartRecruiters polling on its side, so you only see JobsPipe's own limits.

Can I filter SmartRecruiters jobs by location or employment type?+

Yes. In the JSON body of POST /v1/jobs/search, use "job_country_code_or": ["DE"] for Germany-only postings (or any ISO country code) and "employment_type_or": ["full-time"], with "source_or": ["smartrecruiters"]. The full filter list is in the docs.

Which SmartRecruiters customers does JobsPipe cover?+

Every public SmartRecruiters board JobsPipe can identify, including customers that run SmartRecruiters embeds on their own domain. The live list is the distinct company values returned by POST /v1/jobs/search with "source_or": ["smartrecruiters"].

Try SmartRecruiters data free - key in 30 seconds.

Get a free API key