Gem APIjobs.gem.com ↗
Retrieve the complete application form for any job posting on jobs.gem.com, including standard applicant fields, custom screening questions with answer options, and optional demographic survey sections. Use this to understand exactly what information employers are requesting from candidates before applying.
curl -X GET 'https://api.parse.bot/scraper/efb4aac5-67a6-4f13-a9f5-04f292acf83a/get_application_form?board_slug=senndertechnologies-gmbh&job_post_id=am9icG9zdDow-hl-MZiIibYQLtscNrmG' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the application form for one jobs.gem.com job posting in a single round trip, identified by the two path segments of its listing URL (https://jobs.gem.com/<board_slug>/<job_post_id>). The payload carries posting context (title, requisition id, company, department, employment and location type, locations) and a `sections` object with four groups: `personal_information` (the standard identity/contact fields: first name, last name, email, phone, location), `profile` (career-profile fields such as LinkedIn URL and resume upload), `details` (the employer's custom screening questions, each with its answer type, display type, required flag and answer options with stable option ids), and `demographic_survey` (null when the posting has no voluntary demographic survey; otherwise the survey id, type and questions in the same question shape). Every standard field carries `field_type` (the site's field code, e.g. FIRST_NAME), a display `label` and `is_required`. `total_fields` counts all fields and questions across sections. Postings with no custom questions return an empty `details` array. An unknown board or posting id yields a not-found input error. Uploading a resume or submitting the form is not supported.
| Param | Type | Description |
|---|---|---|
| board_slugrequired | string | The employer's job board path segment, i.e. the first path segment of a jobs.gem.com listing URL (letters, digits, '-' or '_'). |
| job_post_idrequired | string | The job posting identifier, i.e. the second path segment of a jobs.gem.com listing URL (letters, digits, '-' or '_'). Echoed back unchanged as `job_post_id` in the payload. |
{
"type": "object",
"fields": {
"title": "job posting title",
"company": "employer display name",
"sections": "object with personal_information (array of standard fields), profile (array of standard fields), details (array of custom questions), demographic_survey (object or null)",
"locations": "array of posting locations with name, city, ISO-3 country and is_remote",
"board_slug": "job board path segment the form belongs to",
"department": "department name, null when absent",
"eeoc_config": "object of booleans race_and_gender, veteran_status, disability_status describing which EEOC parts the template enables",
"job_post_id": "posting identifier as used in the listing URL",
"total_fields": "integer count of all fields and questions across sections",
"includes_eeoc": "true when the posting includes an EEOC self-identification form",
"location_type": "site work-location code such as IN_OFFICE",
"requisition_id": "employer requisition reference shown under the form, null when absent",
"employment_type": "site employment type code such as FULL_TIME",
"is_application_form_hidden": "true when the employer hides the form on the posting page"
},
"sample": {
"data": {
"title": "Head of Product Operations (Maternity cover, 1 year contract)",
"company": "sennder Technologies GmbH",
"sections": {
"details": [
{
"text": "Are you currently based in Berlin, Barcelona or Amsterdam?",
"options": [
{
"value": "Yes",
"option_id": "cXVlc29wdDoYn1kst792uiea0nUnGeKn"
},
{
"value": "No",
"option_id": "cXVlc29wdDqT-882Gpvg2na7veKgHw1G"
}
],
"file_type": null,
"answer_type": "SINGLE_SELECT",
"description": null,
"is_required": true,
"question_id": "cXVlczqSixGvsy7fja1xV6NLqbP1",
"display_type": "RADIO_BUTTON",
"numeric_rating_range": null
}
],
"profile": [
{
"label": "LinkedIn URL",
"field_type": "LINKEDIN_URL",
"is_required": false
},
{
"label": "Resume",
"field_type": "RESUME",
"is_required": true
}
],
"demographic_survey": null,
"personal_information": [
{
"label": "First name",
"field_type": "FIRST_NAME",
"is_required": true
},
{
"label": "Last name",
"field_type": "LAST_NAME",
"is_required": true
},
{
"label": "Email",
"field_type": "EMAIL",
"is_required": true
},
{
"label": "Phone number",
"field_type": "PHONE",
"is_required": false
},
{
"label": "Location",
"field_type": "LOCATION",
"is_required": false
}
]
},
"locations": [
{
"city": "Barcelona",
"name": "Barcelona, Spain",
"country": "ESP",
"is_remote": false
}
],
"board_slug": "senndertechnologies-gmbh",
"department": "Technology ",
"eeoc_config": {
"veteran_status": false,
"race_and_gender": true,
"disability_status": false
},
"job_post_id": "am9icG9zdDow-hl-MZiIibYQLtscNrmG",
"total_fields": 8,
"includes_eeoc": false,
"location_type": "IN_OFFICE",
"requisition_id": "R7458",
"employment_type": "FULL_TIME",
"is_application_form_hidden": false
},
"status": "success"
}
}About the Gem API
The Gem API on Parse exposes 1 endpoint for the publicly available data on jobs.gem.com. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.