Recruitee APImayflower.recruitee.com ↗
Retrieve the full structure of any Recruitee job application form — sections, field labels, input types, required flags, and choice options — via one API call.
What is the Recruitee API?
The Recruitee Application Form API exposes 1 endpoint, get_application_form, that returns the complete field structure of any published Recruitee job listing's application form. A single call returns all form sections in display order, every field's label, input type, and required flag, plus listing-level settings for CV, cover letter, phone, photo, and other standard fields — giving you the full schema a candidate would encounter when applying.
curl -X GET 'https://api.parse.bot/scraper/f1ec3622-3ef4-4efa-a136-bf164d890c12/get_application_form?company=mayflower&offer_slug=user-community-manager' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the application form for one published Recruitee job listing, identified by the company's Recruitee careers subdomain and the listing slug (the last path segment of the job URL). One page fetch per call. The result lists the form's sections in display order; each section carries its heading, helper text and fields. Standard fields (full name, email, phone, CV, cover letter) carry a stable `key`; additional screening questions carry `key` = open_question plus the numeric `question_id`, the question `kind` (observed: string, text, salary, number, single_choice, boolean; multi_choice also exists on the platform), `options` for choice/boolean questions, and `currency` for salary questions. `required` reflects the site's own required marker/setting. `field_settings` mirrors the listing's configuration for CV, cover letter, phone, photo, salutation and title (required/optional/off). Unpublished or unknown slugs return an input_not_found error; the form's hCaptcha and applicant submission are not part of this read-only endpoint.
| Param | Type | Description |
|---|---|---|
| companyrequired | string | Recruitee careers subdomain of the employer, e.g. the <company> in https://<company>.recruitee.com. Lowercase letters, digits and hyphens. |
| offer_slugrequired | string | Job listing slug: the path segment after /o/ in the listing URL. Lowercase letters, digits and hyphens. |
{
"type": "object",
"fields": {
"offer": "object: numeric listing id, slug, title, publication status, form language code, and the public apply page URL",
"company": "echo of the careers subdomain the form belongs to",
"sections": "array of form sections in display order, each with name, description and fields",
"total_fields": "integer count of fields across all sections",
"field_settings": "object: listing-level setting (required | optional | off) for cv, cover_letter, phone, photo, salutation, title",
"sections[*].fields": "array of fields: name (form field name), key (name|email|phone|cv|cover_letter|open_question|null), label, input_type (text|email|tel|file|number|radio|textarea), kind (string|text|phone|file|salary|number|single_choice|boolean|...), required, question_id (numeric, screening questions only), options (choice labels), accepted_file_types (MIME list, file fields only), placeholder, currency (salary questions only)"
},
"sample": {
"data": {
"offer": {
"id": 2010854,
"slug": "user-community-manager",
"title": "User Community Manager",
"status": "published",
"language": "en",
"apply_url": "https://mayflower.recruitee.com/o/user-community-manager/c/new"
},
"company": "mayflower",
"sections": [
{
"name": "My information",
"fields": [
{
"key": "name",
"kind": "string",
"name": "candidate.name",
"label": "Full name",
"options": [],
"required": true,
"input_type": "text",
"placeholder": "Full name",
"question_id": null,
"accepted_file_types": null
},
{
"key": "email",
"kind": "string",
"name": "candidate.email",
"label": "Email address",
"options": [],
"required": true,
"input_type": "email",
"placeholder": "Your email address",
"question_id": null,
"accepted_file_types": null
},
{
"key": "phone",
"kind": "phone",
"name": "candidate.phone",
"label": "Phone number",
"options": [],
"required": true,
"input_type": "tel",
"placeholder": "Your phone number",
"question_id": null,
"accepted_file_types": null
}
],
"description": "Fill out the information below"
},
{
"name": "CV or resume",
"fields": [
{
"key": "cv",
"kind": "file",
"name": "candidate.cv",
"label": "CV or resume",
"options": [],
"required": true,
"input_type": "file",
"placeholder": null,
"question_id": null,
"accepted_file_types": [
"application/pdf",
"text/plain"
]
}
],
"description": "Upload your CV or resume file"
},
{
"name": "Questions",
"fields": [
{
"key": "open_question",
"kind": "salary",
"name": "candidate.openQuestionAnswers.7482951.content",
"label": "Gross Monthly Salary Expectation (in Euros)",
"options": [],
"currency": "EUR",
"required": true,
"input_type": "number",
"placeholder": null,
"question_id": 7482951,
"accepted_file_types": null
},
{
"key": "open_question",
"kind": "single_choice",
"name": "candidate.openQuestionAnswers.7482952.content",
"label": "English level",
"options": [
"A1",
"A2",
"B1",
"B2",
"C1",
"C2"
],
"required": true,
"input_type": "radio",
"placeholder": null,
"question_id": 7482952,
"accepted_file_types": null
}
],
"description": "Please fill in additional questions"
}
],
"total_fields": 13,
"field_settings": {
"cv": "required",
"phone": "required",
"photo": "off",
"title": "off",
"salutation": "off",
"cover_letter": "optional"
}
},
"status": "success"
}
}About the Recruitee API
What the API returns
The get_application_form endpoint takes two required parameters: company (the Recruitee careers subdomain, e.g. mayflower from mayflower.recruitee.com) and offer_slug (the path segment after /o/ in the job listing URL). The response includes an offer object with the numeric listing ID, slug, title, publication status, form language code, and the public apply page URL, plus a company echo of the subdomain.
Sections and fields
The sections array lists every form section in the order a candidate sees them, each with a name, description, and fields array. Each field carries: name (the form field name), key (a semantic type such as name, email, phone, cv, cover_letter, open_question, or null for custom fields), label, input_type (values include text, email, textarea, select, checkbox, and others), required flag, and, where applicable, an array of choice options. The top-level total_fields integer gives a quick count across all sections.
Field-level settings
The field_settings object captures the listing-level configuration for six standard fields — cv, cover_letter, phone, photo, salutation, and title — each set to required, optional, or off. This lets you know upfront which attachments and personal data fields are active for a given listing without iterating through sections manually.
Coverage scope
The API covers published (public) Recruitee job listings accessible via a company's careers subdomain. One call retrieves one listing's form. There is no batch or search endpoint in the current surface; each listing is fetched individually by its slug.
The Recruitee API is a managed, monitored endpoint for mayflower.recruitee.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when mayflower.recruitee.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 mayflower.recruitee.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?+
- Pre-fill a custom application UI by reading each field's
label,input_type, andrequiredflag fromsections[*].fields - Validate candidate data client-side against the official form schema before submission
- Audit which standard fields (
cv,cover_letter,phone) a company has set torequiredvsoffviafield_settings - Compare application form complexity across multiple job listings by inspecting
total_fields - Detect open-ended questions (fields with
key: open_question) to prepare tailored written answers - Build a form-completion assistant that reads choice options for
selectorcheckboxfields and presents them to a candidate - Track form structure changes over time for a specific listing by polling
offer.slugperiodically
| 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 Recruitee have an official developer API?+
What does `get_application_form` return for the form fields?+
sections[*].fields includes a name, a semantic key (such as email, cv, or open_question), a label, an input_type (e.g. text, select, checkbox), a required boolean, and — for choice-based inputs — an array of valid options. The top-level field_settings object separately records the required | optional | off state for six standard fields: cv, cover_letter, phone, photo, salutation, and title.Can I retrieve application forms for multiple listings in one call?+
company and offer_slug. You can fork this API on Parse and revise it to add a batch endpoint that accepts multiple slugs and returns their forms in a single response.Does the API return candidate submissions or recruiter-side data?+
What happens if a listing is unpublished or the slug is wrong?+
offer object includes a publication status field. If the slug does not correspond to a currently published listing on the given subdomain, the endpoint will not return a valid form structure. Always verify the slug against the live job URL (the segment after /o/) before calling.