BambooHR APIjobbatical.bamboohr.com ↗
Retrieve job application form structure from any BambooHR careers site. Get sections, fields, requirements, and custom questions for any job opening by ID.
What is the BambooHR API?
The BambooHR Job Application Form API exposes 1 endpoint — get_application_form — that returns the complete application form definition for any public BambooHR job opening. A single call yields 9 top-level response fields including the form's full section breakdown (personal information, profile, details, EEO, and other), field-level metadata such as labels and required flags, employer-specific custom questions, and core job metadata like title, department, and employment type.
curl -X GET 'https://api.parse.bot/scraper/a9c22b87-68ea-4ee6-9a49-f27377ffe9de/get_application_form?job_id=65&company=jobbatical' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the application form for one BambooHR job opening in a single round trip: job summary (title, status, department, employment type, public URL) and the form fields grouped into sections as laid out on the apply page — personal_information (name, email, phone, address, city, state, ZIP, country), profile (resume, date available, desired pay), details (website, LinkedIn URL) — plus eeo (self-identification fields when the employer enables them, otherwise empty), other (any field the site adds outside these groups), and custom_questions (employer-specific questions, empty when none are configured). Each field carries its wire key, display label, whether it is required, and an options list for select fields (country lists all countries by id; state is empty until a country is chosen and is returned as given). A job id that does not exist on the company's careers site yields a stale_input (input_not_found) error.
| Param | Type | Description |
|---|---|---|
| job_idrequired | string | Numeric job opening id as it appears in the careers URL <company>.bamboohr.com/careers/<job_id>. |
| companyrequired | string | The employer's BambooHR careers subdomain, i.e. the <company> part of <company>.bamboohr.com/careers (lowercase letters, digits, hyphens). |
{
"type": "object",
"fields": {
"job_id": "string, the requested job opening id",
"company": "string, the requested careers subdomain",
"job_url": "string, public URL of the job opening",
"sections": "object with keys personal_information, profile, details, eeo, other; each an array of field objects {key, label, required, options} where options is an array of {id, label} for select fields or null",
"job_title": "string, job opening name",
"department": "string or null, department label",
"job_status": "string, e.g. Open",
"employment_type": "string or null, employment status label such as Full-Time",
"custom_questions": "array of employer-specific custom question objects as provided by the site (empty when none)"
},
"sample": {
"data": {
"job_id": "65",
"company": "jobbatical",
"job_url": "https://jobbatical.bamboohr.com/careers/65",
"sections": {
"eeo": [],
"other": [],
"details": [
{
"key": "websiteUrl",
"label": "Website, Blog or Portfolio",
"options": null,
"required": false
},
{
"key": "linkedinUrl",
"label": "LinkedIn URL",
"options": null,
"required": false
}
],
"profile": [
{
"key": "resumeFileId",
"label": "Resume",
"options": null,
"required": true
},
{
"key": "dateAvailable",
"label": "Date Available",
"options": null,
"required": false
},
{
"key": "desiredPay",
"label": "Desired Pay",
"options": null,
"required": false
}
],
"personal_information": [
{
"key": "firstName",
"label": "First Name",
"options": null,
"required": true
},
{
"key": "countryId",
"label": "Country",
"options": [
{
"id": "1",
"label": "United States"
},
{
"id": "82",
"label": "Germany"
}
],
"required": true
}
]
},
"job_title": "Account Executive - German Market (DACH)",
"department": "Revenue Team",
"job_status": "Open",
"employment_type": "Full-Time",
"custom_questions": []
},
"status": "success"
}
}About the BambooHR API
What the API Returns
The get_application_form endpoint takes two required parameters: job_id (the numeric ID from the careers URL path) and company (the employer's BambooHR subdomain). It returns a single structured object covering both the job's metadata and the full apply form layout. The job metadata fields include job_title, department, job_status (e.g. Open), employment_type (e.g. Full-Time), and job_url — the canonical public URL for the opening.
Form Sections and Field Structure
The sections object organizes fields into five named groups: personal_information (name, email, phone, address, city), profile, details, eeo, and other. Each section contains an array of field objects with keys key, label, required, and options. This lets you inspect exactly which fields are mandatory, what dropdown or selection options exist, and how the form is laid out before a candidate sees it.
Custom Questions
The custom_questions array carries any employer-defined questions appended to the standard form. When the employer has not added custom questions, this array is empty. When present, each element reflects the structure provided by the careers site for that opening, including question text and any associated options.
Scope and Coverage
The API covers any job opening accessible via a public BambooHR careers subdomain. You supply the subdomain and the job ID from the URL — for example, jobbatical and 65 from jobbatical.bamboohr.com/careers/65. Only public, unauthenticated job listings are reachable; internal or draft postings that require login are not exposed.
The BambooHR API is a managed, monitored endpoint for jobbatical.bamboohr.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jobbatical.bamboohr.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official jobbatical.bamboohr.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Audit required fields across all open roles at a company to compare application complexity
- Detect whether EEO fields are present on a specific job opening using the
eeosection - Mirror a BambooHR application form in a custom candidate portal by mapping
sectionsfield definitions - Check
employment_typeanddepartmentprogrammatically to classify roles in a job aggregator - Validate that a job listing is still active by inspecting the
job_statusfield before directing candidates - Extract
custom_questionsfrom multiple job IDs to analyze what employer-specific information is being collected - Build a diff tool that compares application form fields across two job openings at the same company
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does BambooHR have an official developer API?+
What does the `sections` object actually contain?+
personal_information, profile, details, eeo, and other. Each key maps to an array of field objects. Every field object includes key (machine-readable identifier), label (display text), required (boolean), and options (array of selectable values when applicable, empty otherwise). Sections with no fields for a given job may return an empty array.Can I retrieve all job openings for a company in one call?+
job_id. There is no listing or search endpoint that enumerates all active jobs for a given company subdomain. You can fork this API on Parse and revise it to add a job-listing endpoint that returns all open roles for a subdomain.Are closed or draft job postings accessible?+
job_status field in the response reflects the status of the opening as publicly shown — for example, Open.