Deel APIjobs.deel.com ↗
Retrieve job posting details and full application form definitions from any Deel-hosted job board (jobs.deel.com) in a single API call.
What is the Deel API?
This API exposes 1 endpoint — get_application_form — that returns both the job summary and the complete application form definition for any posting on a Deel-hosted job board. A single call returns over 15 structured fields covering job metadata (title, work arrangement, locations, compensation range), form sections (personal information, profile, custom detail questions), and demographic survey configuration. It accepts an org_slug and job_posting_id pulled directly from the job board URL.
curl -X GET 'https://api.parse.bot/scraper/c6a40cb4-fd8e-47cd-aa6b-cd9ec2442897/get_application_form?org_slug=dfns&job_posting_id=2b1bc708-414d-4ad1-870f-bd3f608f6cf5' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the application form for one job posting on a Deel-hosted job board in a single round trip. The result carries job summary data (title, work arrangement, employment types, locations, departments, teams, compensation range when the posting shows it), form metadata, and three field groups: personal_information (first name, last name, email, phone with the site's required flags), profile (LinkedIn profile URL and the resume upload, present only when the form shows a resume field), and details, an array of the employer's custom question sections in display order, each with its questions (label, question type such as Paragraph, required and rich-text flags, options when the question type has choices). Standard personal/profile field keys are fixed by the site; custom questions carry the site's question ids. A posting id that does not resolve to a published job on that board yields a stale_input not-found error; a malformed id or slug yields a stale_input format error.
| Param | Type | Description |
|---|---|---|
| org_slugrequired | string | Company slug from the job board URL, the path segment right after jobs.deel.com (e.g. dfns). |
| job_posting_idrequired | string | Job posting UUID from the job board URL (the segment after /job-details/). |
{
"type": "object",
"fields": {
"job": "object: work_arrangement, employment_types[], locations[], departments[], teams[], compensation {currency, min_amount, max_amount} or null when hidden",
"form": "object: application form id, title, description (may be null), status, revision_id, updated_at",
"job_id": "underlying job UUID on the employer's Deel account",
"org_slug": "job board slug as passed in",
"sections": "object with personal_information {title, fields[]}, profile {title, fields[]}, details[] (custom sections: id, title, page_title, fields[])",
"job_title": "posting title",
"job_posting_id": "posting UUID as passed in",
"demographic_section": "object: title and helper_text of the voluntary demographic section configured on the form",
"sections.profile.fields": "array of {key, label, type, required, accepted_formats (file fields only)}",
"sections.details[].fields": "array of {id, label, type, required, rich_text, options (null unless the question type has choices), sensitive}",
"sections.personal_information.fields": "array of {key, label, type, required}"
},
"sample": {
"data": {
"job": {
"teams": [
"Marketing"
],
"locations": [
"Paris"
],
"departments": [
"Departments"
],
"compensation": {
"currency": "USD",
"max_amount": 240000,
"min_amount": 140000
},
"employment_types": [
"Full-time"
],
"work_arrangement": "REMOTE"
},
"form": {
"id": "75ed2968-a161-4f08-a8db-ce29a89eb296",
"title": "Default Application Form",
"status": "PUBLISHED",
"updated_at": "2026-07-14T16:04:24.613Z",
"description": null,
"revision_id": "411cc724-1d7f-4d4f-8e74-9819349a285a"
},
"job_id": "2b9876dc-373f-4af0-a648-7de75c9a401f",
"org_slug": "dfns",
"sections": {
"details": [
{
"id": "3db7f0d8-61f9-43ef-ad8f-a25fb325892c",
"title": "Untitled section",
"fields": [
{
"id": "74c0714c-1dc0-472d-b70c-1b766b163754",
"type": "Paragraph",
"label": "Cover letter",
"options": null,
"required": false,
"rich_text": false,
"sensitive": false
}
],
"page_title": "Page name 1"
}
],
"profile": {
"title": "Profile",
"fields": [
{
"key": "linkedin_profile_url",
"type": "url",
"label": "LinkedIn profile",
"required": true
},
{
"key": "resume",
"type": "file",
"label": "Please upload your resume (preferably as a PDF file)",
"required": true,
"accepted_formats": [
".PDF"
]
}
]
},
"personal_information": {
"title": "Personal information",
"fields": [
{
"key": "first_name",
"type": "text",
"label": "First name",
"required": true
},
{
"key": "last_name",
"type": "text",
"label": "Last name",
"required": true
},
{
"key": "email",
"type": "email",
"label": "Email",
"required": true
},
{
"key": "phone_number",
"type": "phone",
"label": "Phone number",
"required": false
}
]
}
},
"job_title": "Head of Marketing",
"job_posting_id": "2b1bc708-414d-4ad1-870f-bd3f608f6cf5",
"demographic_section": {
"title": "Demographic information",
"helper_text": "Completion of the demographic information is entirely voluntary and will not influence any employment-related decision-making. The information you choose to provide will be aggregated and used solely for analytical and reporting purposes. All personal data will be maintained confidentially and in compliance with applicable personal data protection laws."
}
},
"status": "success"
}
}About the Deel API
What the endpoint returns
get_application_form takes two required path-style parameters: org_slug (the company identifier in the jobs.deel.com URL, e.g. dfns) and job_posting_id (the UUID following /job-details/). The response bundles a job object containing work_arrangement, employment_types, locations, departments, teams, and a compensation block with currency, min_amount, and max_amount when the posting discloses salary. It also returns a form object with the application form's id, title, description, status, revision_id, and updated_at timestamp.
Form sections and question shapes
The sections field is the core of the response. sections.personal_information and sections.profile each carry a title and a fields array. Profile fields include key, label, type, required, and accepted_formats for file-upload fields (such as resume or portfolio). sections.details is an array of custom sections the employer has configured — each with its own id, title, page_title, and a fields array where every field exposes id, label, type, required, rich_text, options (populated only for choice-type questions), and a sensitive flag.
Demographic section
The response also includes a demographic_section object with the title and helper_text of the voluntary equal-opportunity survey configured on the form. This section is defined at the form level, not per-question — individual demographic response options are not enumerated in the current response shape.
Identifiers returned
Beyond the form and job objects, the response surfaces job_id (the employer's internal Deel job UUID), org_slug (echoed back), job_posting_id (echoed back), and job_title as a top-level convenience field, making it straightforward to correlate results across multiple postings without parsing nested objects.
The Deel API is a managed, monitored endpoint for jobs.deel.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jobs.deel.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 jobs.deel.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?+
- Mirror a company's Deel job board into an internal applicant tracking system by pulling form field definitions for each active posting.
- Audit compensation transparency across Deel-hosted job boards by collecting
compensation.min_amount,max_amount, andcurrencyfields. - Pre-fill or validate a custom application UI by reading required fields and accepted file formats from
sections.profile.fields. - Identify which postings include custom screening questions by inspecting
sections.details[].fieldsfor non-standard question types. - Track application form changes over time using the
form.revision_idandform.updated_atfields. - Extract location, work arrangement, and employment type data from job postings to power a job aggregator or alert system.
- Check whether a posting's demographic survey is configured by reading
demographic_section.titleandhelper_textwithout submitting an application.
| 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 Deel provide an official developer API for job board data?+
Does the `get_application_form` endpoint return the full list of open job postings for a company, or only a single posting?+
job_posting_id UUID. There is no listing endpoint in the current API that enumerates all active postings for an org_slug. You can fork this API on Parse and revise it to add a job-listing endpoint that returns all open postings for a given company.What does the `demographic_section` field actually contain?+
title and helper_text strings that appear above the voluntary demographic survey on the application form. The individual question options within that survey (e.g. specific gender or ethnicity choices) are not included in the current response shape. You can fork this API on Parse and revise it to surface the per-question options if your use case requires them.Is compensation data always present in the response?+
compensation object with currency, min_amount, and max_amount is only populated when the employer has chosen to display salary information on the posting. When the posting does not disclose pay, that block will be absent or contain null values.