applytojob APIbambooworks.applytojob.com ↗
Retrieve structured JazzHR job application forms from applytojob.com careers pages. Get field labels, types, options, and required flags for any listing.
What is the applytojob API?
The get_application_form endpoint returns the complete application form for any JazzHR-hosted job listing on applytojob.com in a single call, surfacing 8 structured response fields including job title, company name, job attributes, and three field sections — personal_information, profile, and details — each with every form field's label, type, options, and required status. Supply the job code and subdomain to retrieve the full form structure without visiting the page.
curl -X GET 'https://api.parse.bot/scraper/ea23c0ec-b764-4ba9-87d2-a91808110f9b/get_application_form?job_id=8mnXlgpSA2&subdomain=bambooworks' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the application form for one JazzHR job listing in a single round trip. The result carries the job header (title, company, location/type/experience attributes), whether a human-check widget must be completed on submission, and three sections: personal_information (name, email, phone and, when the company enables them, address fields), profile (resume upload/paste and any other non-question fields), and details (the employer's screening questionnaire, in the order shown on the page). Each field carries its label, input type (text, email, tel, textarea, select, checkbox_group, resume), whether it is required, its answer options for select/checkbox_group fields (the placeholder 'No answer' option is omitted), and a question_id for questionnaire fields. A job that has been closed or never existed yields a stale_input / input_not_found error. The form is read-only here; this endpoint never submits an application.
| Param | Type | Description |
|---|---|---|
| job_idrequired | string | The JazzHR job code that follows /apply/ in the listing URL (e.g. 8mnXlgpSA2). The trailing title slug is not needed. |
| subdomainrequired | string | The company's careers-site subdomain on applytojob.com, i.e. the <subdomain> in https://<subdomain>.applytojob.com/apply/... Lowercase letters, digits and hyphens. |
{
"type": "object",
"fields": {
"job_id": "JazzHR job code as read from the form's hidden job field",
"company": "company name shown in the careers-page header",
"sections": "object with three arrays of field objects: personal_information, profile, details",
"job_title": "job title from the listing header",
"subdomain": "careers-site subdomain the form was fetched from",
"field_count": "total number of fields across the three sections",
"job_attributes": "object of header attributes keyed by their site label (location, type, experience); keys present only when the listing shows them",
"sections.*[].name": "form field name as posted by the site's own form",
"sections.*[].type": "one of text, email, tel, textarea, select, checkbox_group, resume (other native input types pass through)",
"sections.*[].label": "question or field label as displayed",
"human_check_required": "boolean, true when the form contains a human-verification widget that must be completed to submit",
"sections.*[].options": "array of answer strings for select and checkbox_group fields, empty otherwise",
"sections.*[].field_id": "DOM id of the form control",
"sections.*[].required": "boolean, true when the site marks the field with a required asterisk",
"sections.*[].max_length": "integer maxlength when the control declares one, else null",
"sections.*[].question_id": "numeric questionnaire id string for details fields, null for built-in fields"
},
"sample": {
"data": {
"job_id": "8mnXlgpSA2",
"company": "Bamboo Works",
"sections": {
"details": [
{
"name": "resumator-questionnaire[2977673]",
"type": "select",
"label": "How many years of hands-on experience do you have with Salesforce Pardot / Marketing Cloud Account Engagement?",
"options": [
"Less than 2 years",
"2-3 years",
"3-5 years",
"5+ years"
],
"field_id": "resumator-questionnaire-q2977673",
"required": true,
"max_length": null,
"question_id": "2977673"
},
{
"name": "resumator-questionnaire[2977676]",
"type": "checkbox_group",
"label": "Which Pardot / Marketing Cloud Account Engagement capabilities have you personally configured and managed?",
"options": [
"Engagement Studio programs",
"Automation Rules",
"None of the above"
],
"field_id": "resumator-questionnaire-q2977676",
"required": true,
"max_length": null,
"question_id": "2977676"
}
],
"profile": [
{
"name": "resumator-resume-value",
"type": "resume",
"label": "Resume",
"options": [],
"field_id": "resumator-resume-value",
"required": true,
"max_length": null,
"question_id": null
}
],
"personal_information": [
{
"name": "resumator-firstname-value",
"type": "text",
"label": "First Name",
"options": [],
"field_id": "resumator-firstname-value",
"required": true,
"max_length": null,
"question_id": null
},
{
"name": "resumator-phone-value",
"type": "tel",
"label": "Phone",
"options": [],
"field_id": "resumator-phone-value",
"required": true,
"max_length": 50,
"question_id": null
}
]
},
"job_title": "Salesforce Marketing Cloud Consultant (SFMC & Pardot)",
"subdomain": "bambooworks",
"field_count": 19,
"job_attributes": {
"type": "Full Time",
"location": "Remote",
"experience": "Experienced"
},
"human_check_required": true
},
"status": "success"
}
}About the applytojob API
What the API Returns
The single get_application_form endpoint takes two required inputs: job_id (the alphanumeric code that appears after /apply/ in the listing URL, such as 8mnXlgpSA2) and subdomain (the company-specific prefix of the careers site, e.g. bambooworks from bambooworks.applytojob.com). The trailing title slug in the URL is not needed and should be omitted.
Response Structure
The response includes top-level fields for job_title, company, subdomain, job_id, and field_count (total fields across all three sections). The job_attributes object contains contextual metadata from the listing header — keys like location, type, and experience appear only when the listing itself displays them, so their presence is not guaranteed. A flag also indicates whether a human-check widget is required on submission.
Form Sections and Field Objects
The sections object contains three arrays: personal_information, profile, and details. Each element in these arrays exposes name (the field name as the form posts it), label (the display label or question text), type (one of text, email, tel, textarea, select, checkbox_group, resume, or other native input types), and the required flag. Select and checkbox_group fields include their available options. This structure is sufficient to render or validate a form programmatically or to analyze what a given employer asks applicants.
The applytojob API is a managed, monitored endpoint for bambooworks.applytojob.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bambooworks.applytojob.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 bambooworks.applytojob.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?+
- Aggregate field structures across multiple JazzHR job listings to compare what applicant information employers collect
- Validate that required fields like resume upload and email are present before directing candidates to apply
- Build an autofill or application-assistant tool that pre-populates form fields by mapping to a candidate profile
- Audit careers pages to check whether job_attributes such as location or work type are consistently populated
- Extract job_title and company data for job board indexing without scraping HTML
- Map select and checkbox_group options to normalized taxonomy for job requirements analysis
- Track form changes over time by polling get_application_form and diffing the sections field_count and field labels
| 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 JazzHR have an official developer API?+
What does get_application_form return for fields with predefined choices?+
select or checkbox_group include the available options in the field object alongside the label, name, and required flag. Free-text fields such as text, email, tel, and textarea do not carry an options list. The resume type identifies the file-upload field specifically.Does the API cover job listings from all applytojob.com subdomains?+
subdomain and job_id. Listings behind password protection or those that have been closed or removed will not return form data, as the underlying listing is no longer publicly accessible.