On-site applications

View as Markdown

How the on-site application form is built from each job's Workable questions, what happens on submit, and where failed attempts are logged.

With an API token saved, candidates apply on your job pages instead of leaving for Workable. Each application is sent straight to Workable through its API and shows up in Workable as a new candidate on that job.

Turning it on

  1. Generate a Workable API token with the r_jobs and w_candidates scopes. The steps are in Installation.
  2. Save it under Workable Jobs → Settings → API access token.
  3. Leave Applications on Automatic, or choose On-site application form.

Open any job page. The Apply on Workable button is replaced by the application form.

Job page apply area showing the Apply on Workable button used when no API token is configured
Without a token, job pages show the Apply on Workable button; once you save a token, the on-site application form appears in its place.

When applications are taken on your site, the job pages’ JobPosting markup also includes directApply: true, which tells Google that candidates can apply directly on the page.

What the form contains

The form is built from the application form you set up for each job in Workable, so different jobs can ask different questions. The fields appear in this order:

  1. First name, Last name, Email, Phone. Always shown. Name and email are required. Phone is required only when the job asks for it in Workable.
  2. Resume and Cover letter. Always offered. When the job’s Workable form includes them, Workable’s settings decide whether they are required.
  3. The job’s other profile fields, such as headline, summary or address.
  4. The job’s screening questions.
  5. The consent checkbox, when turned on under Workable Jobs → Settings → Privacy.

Workable field and question types map to form inputs like this:

Workable typeForm input
Short textText box
Free textText area
Multiple choice, one answerRadio buttons
Multiple choice, several answersCheckboxes
DropdownDropdown
Yes/NoA checkbox, or Yes and No radio buttons when the question is required
NumberNumber box
DateDate picker
FileFile upload

Not supported in 1.0

  • Experience and education sections. Workable’s structured work-history and education fields are not shown on the form. If a job requires them in Workable, Workable may refuse the application. Make them optional on jobs you publish through this plugin, or use the Send applicants to Workable mode.
  • Profile photo. The avatar field is not shown.

File uploads

A file field accepts the file types and size Workable lists for it. When Workable does not say, the defaults are PDF, DOC, DOCX, TXT, RTF and ODT files up to 5 MB. Your server’s PHP upload limit still applies on top of that, so check upload_max_filesize if large files fail.

Files are held on your server only for the moment it takes to send them to Workable, then deleted.

When you change a job’s questions in Workable

Each job’s form is cached for an hour. To see a change straight away, use Clear cache under Workable Jobs → Settings → Tools.

What happens when someone applies

The form submits in the background and shows the result without reloading the page. Without JavaScript it submits as a normal form and works the same way.

Before anything is sent to Workable, the plugin checks:

  • the form’s security token,
  • a hidden honeypot field that bots tend to fill in,
  • the Turnstile or reCAPTCHA answer, when one is configured,
  • a rate limit of 5 applications per 10 minutes from the same IP address,
  • that the job is still open on your site,
  • required fields, file types and file sizes.

Then the application is sent to Workable. The applicant sees one of these outcomes:

OutcomeWhat the applicant sees
Workable accepts it“Thank you — your application has been submitted.”
Workable rejects a fieldThe fields Workable named are highlighted, with “Please correct the highlighted fields and try again.”
Workable is over its rate limit“Workable is busy right now. Please try again in a moment.”
Anything elseA general error. The details are recorded in Submissions.

If Workable rejects the token when an application is sent, an admin notice in wp-admin says the form is showing but applications are failing, and names the fix, as described in Installation. When the form itself cannot be fetched, the job falls back to the Apply on Workable button and the notice says that instead.

The Submissions log

Workable Jobs → Submissions lists the last 50 application attempts, newest first, when Log submissions is on. Each entry has:

  • the time, the job and its shortcode,
  • success or error, with the message,
  • the applicant’s IP address, shortened,
  • on success, the Workable candidate id and a View candidate in Workable link.

The log does not store the applicant’s name, email, answers or files. Those go only to Workable. A Clear log button empties it.

If the WP Logs plugin is active, each attempt is also written to its log.

Developer hooks

HookTypeUse it to
wkjb_application_fieldsfilterChange the whole form: add, remove or reorder groups of fields. Receives the groups and Workable’s raw form.
wkjb_map_application_fieldfilterChange how one Workable profile field becomes a form input.
wkjb_map_application_questionfilterChange how one Workable question becomes a form input.
wkjb_candidate_payloadfilterChange the candidate data sent to Workable. Receives the payload, the field groups and the submitted values.
wkjb_allowed_file_typesfilterChange the default file extensions, used when Workable does not list its own.
wkjb_max_upload_sizefilterChange the default maximum upload size, in bytes. Default 5242880 (5 MB).
wkjb_application_validation_errorsfilterAdd your own field checks.
wkjb_application_success_messagefilterChange the thank-you message.
wkjb_application_rate_limitfilterChange the number of applications allowed per IP address. Default 5.
wkjb_application_rate_windowfilterChange the rate limit window, in seconds. Default 600.
wkjb_application_form_ttlfilterChange how long a job’s form is cached, in seconds. Default 3600.
wkjb_application_form_failure_ttlfilterChange how long a rejected token is remembered before Workable is asked again, in seconds. Default 300.
wkjb_client_ipfilterChange how the applicant’s IP address is detected, for example behind a proxy.
wkjb_recaptcha_score_thresholdfilterChange the minimum reCAPTCHA v3 score. Default 0.5.
wkjb_application_submittedactionRun code after Workable accepts an application. Receives the job shortcode, the job and Workable’s candidate record.
wkjb_application_loggedactionRun code after any attempt is logged. Receives the log entry.

Example: email the site admin whenever Workable accepts an application:

add_action( 'wkjb_application_submitted', function ( $job_id, $job ) {
	wp_mail(
		get_option( 'admin_email' ),
		'New application: ' . $job['title'],
		'A candidate applied through the website. Open Workable to review them.'
	);
}, 10, 2 );

Your Workable jobs, live on your own site.

Real job pages, Google for Jobs markup and on-site applications — on your own domain.

Coming soon