Deel APIjobs.deel.com ↗
Retrieve published job postings and application form definitions from any Deel-hosted job board. Two endpoints return titles, locations, compensation, and form fields.
What is the Deel API?
The jobs.deel.com API provides 2 endpoints that expose every published job posting on a Deel-hosted job board alongside the full application form definition for any individual listing. list_job_postings returns all active postings in a single call — including titles, work arrangements, locations, departments, and compensation ranges where disclosed — while get_application_form delivers the complete form structure with section-level field metadata for a given posting.
curl -X GET 'https://api.parse.bot/scraper/c6a40cb4-fd8e-47cd-aa6b-cd9ec2442897/get_application_form?org_slug=dfns&job_posting_id=57111b23-a6c4-4c50-8ecd-ba49b80e088a' \ -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. Posting ids come from list_job_postings. A posting id that does not resolve to a published job on that board (including a posting that has since been closed) 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 list_job_postings.postings[*].job_posting_id (also the segment after /job-details/ in the job board URL). |
{
"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 API covers
Both endpoints target Deel-hosted job boards at jobs.deel.com. Each board is identified by an org_slug — the path segment immediately after jobs.deel.com in the board URL (for example, dfns from jobs.deel.com/dfns). There is no pagination: list_job_postings returns the full set of currently published postings for the given org in one response, along with a total count and per-posting metadata including job_posting_id, form_id, created_at, updated_at, and a job object containing work_arrangement, employment_types, locations, departments, teams, and a compensation object with currency, min_amount, and max_amount.
Application form structure
get_application_form accepts org_slug and a job_posting_id (the UUID returned by list_job_postings) and returns the complete form definition. The response groups fields into three named sections: personal_information (standard contact fields), profile (file-upload fields with accepted_formats), and details — an array of custom sections, each carrying an id, title, page_title, and a fields array. Each custom field includes id, label, type, required, rich_text, an options array (non-null for choice-type questions), and a sensitive flag. A separate demographic_section object exposes the title and helper_text of the voluntary demographic section when one is configured on the form.
Identifiers and linking
Every posting carries both a job_posting_id (the UUID that get_application_form consumes) and a job_id (the underlying job UUID on the employer's Deel account). The org_slug is echoed back in every response, making it straightforward to attribute results when querying multiple boards. Compensation data is included in the response structure regardless of endpoint, but the min_amount and max_amount values are only populated when the posting's public listing actually discloses a salary range.
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?+
- Aggregate open roles across multiple Deel-hosted company boards into a unified job feed, using
work_arrangement,locations, anddepartmentsfields for filtering. - Track when new postings appear or existing ones are updated by comparing
created_atandupdated_attimestamps fromlist_job_postings. - Extract compensation range data (
currency,min_amount,max_amount) from postings that disclose pay to power salary benchmarking tools. - Map application form custom fields from
sections.details[].fieldsto build pre-fill or form-testing automation for ATS research. - Monitor department-level hiring velocity for a company by counting postings grouped by
departmentsand tracking changes over time. - Identify which postings include sensitive or choice-type questions (
sensitive,options) in their custom detail sections for compliance auditing. - Build a recruiter dashboard that surfaces all active listings for a given board with their employment types and team assignments in one call.
| 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 public API for jobs.deel.com job boards?+
https://developer.deel.com covering contractor management, payroll, and HR workflows, but it does not include endpoints for the public job board data at jobs.deel.com. This Parse API covers the public job board surface.What does `get_application_form` return beyond basic job details?+
get_application_form returns the full form definition broken into three sections. personal_information and profile cover standard and file-upload fields respectively. details is an array of custom sections where each field carries a type, required flag, rich_text content, options for choice questions, and a sensitive flag. A separate demographic_section object includes the title and helper text of any voluntary demographic block on the form.Does `list_job_postings` support filtering by location, department, or employment type?+
locations, departments, teams, employment_types, and work_arrangement fields, so filtering can be applied client-side on the returned array.Is historical or closed job posting data available?+
list_job_postings results, and get_application_form will not return data for postings that are no longer live. You can fork this API on Parse and revise it to add an endpoint that tracks previously seen postings by caching results over time.