splitforms.com
guide · form types

Job Application Form in HTML (with File Upload for Resume)

A working HTML job application form with file upload for resume + cover letter, plus standard fields (name, email, role, LinkedIn, why-join). POSTs to splitforms; with Storage connected, file attachments are retained privately with signed links.

html
<form action="https://splitforms.com/api/submit"
      method="POST"
      enctype="multipart/form-data">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="hidden" name="_subject"   value="New job application" />

  <label>Full name<input name="name" type="text" required /></label>
  <label>Email<input name="email" type="email" required /></label>
  <label>Phone<input name="phone" type="tel" /></label>
  <label>LinkedIn URL<input name="linkedin" type="url" /></label>

  <label>
    Role applying for
    <select name="role" required>
      <option value="">— select —</option>
      <option>Frontend engineer</option>
      <option>Backend engineer</option>
      <option>Designer</option>
      <option>Marketing</option>
    </select>
  </label>

  <label>
    Why you'd be a fit
    <textarea name="why_fit" rows="4" required></textarea>
  </label>

  <label>
    Resume (PDF, DOCX — max 10MB)
    <input name="resume" type="file"
           accept=".pdf,.doc,.docx" required />
  </label>

  <label>
    Cover letter (optional)
    <input name="cover_letter" type="file"
           accept=".pdf,.doc,.docx" />
  </label>

  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
  <button type="submit">Submit application</button>
</form>

A job application form is a contact form with two extra requirements: file uploads for the resume (and optional cover letter), and structured fields for the role and qualifications. The trick is the `enctype="multipart/form-data"` attribute on the form — without it, file inputs don't actually upload. This is the #1 forgotten step.

With Storage connected, splitforms supports files up to 10 MB each, up to 5 files per submission. Retained files are private and can appear in notification/dashboard workflows and webhook payloads as signed download links.

Use the right input types for each field — `type="email"` for email (mobile keyboard, native validation), `type="tel"` for phone (numeric keypad on mobile), `type="url"` for LinkedIn. The `accept` attribute on file inputs filters the file picker to acceptable formats; pair with server-side validation since `accept` is advisory only.

For high-volume hiring, wire a webhook from splitforms to your ATS (Greenhouse, Lever, Workable) so applications populate the pipeline automatically. The webhook payload includes the structured fields as JSON and stored-file metadata you can fetch when Storage is connected.

How to set this up

Step 01

Set enctype="multipart/form-data"

Required for file uploads. Forms without it silently fail to upload attached files.

Step 02

Use accept to filter file types

accept=".pdf,.doc,.docx" restricts the file picker to acceptable resume formats.

Step 03

Add structured fields for the role

select element with predefined options is better than free-text — easier to filter applications in the dashboard.

Step 04

(Optional) Webhook into your ATS

Configure a webhook in splitforms pointing at your Greenhouse/Lever/Workable inbound webhook. Applications populate the pipeline automatically.

Storage-backed file uploads, 10 MB per file, webhook to your ATS.

Frequently asked questions

Can I upload a resume with this form?

Yes. The `<input type="file" name="resume">` accepts file uploads, the form's enctype="multipart/form-data" tells the browser to send the file in the request body, and splitforms accepts attachments up to 10 MB per file when Storage is connected.

Where do uploaded resumes go?

With Storage connected, retained resumes are stored privately and exposed through signed download links in notification/dashboard workflows and webhook payloads.

What file types should I accept?

.pdf, .doc, .docx are the standard set. Many candidates submit .pages (Apple Pages) — consider accepting it if your audience is Mac-heavy. Avoid accepting .exe or arbitrary types — splitforms blocks executable/script-like extensions, but it's safer to restrict at the form level too.

How do I limit file size?

The HTML accept attribute doesn't enforce size. splitforms enforces 10 MB per file server-side and rejects oversized submissions with a clear error. For a client-side check, add a JS handler on the input that rejects files over your limit before submission.

Can I integrate with Greenhouse/Lever/Workable?

Yes — splitforms ships signed webhooks on Starter and above. Configure a webhook URL pointing at your ATS's inbound webhook endpoint. Applications POSTed to splitforms forward as structured JSON to the ATS, populating the pipeline.

Related guides

Ship the form, not the backend.

Free for 500 submissions/month. Owner email delivery, AI spam filtering, and a real dashboard are included on Free. Starter adds signed webhooks. No credit card.

Get a free access key →