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; the file attachments land in your inbox and dashboard.

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.

splitforms supports file uploads on every plan, including free. Files up to 10 MB each, up to 5 files per submission. The uploaded resume lands as an email attachment AND is downloadable from the dashboard, AND is included in the webhook payload as a signed URL. No need for separate file-hosting setup.

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 the file attachments as signed URLs you can fetch.

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.

File uploads on free tier, 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.

Where do uploaded resumes go?

Three places. (1) Email attachment — you get the resume in your inbox along with the application data. (2) splitforms dashboard — downloadable from the submission record. (3) Webhook payload — a signed URL you can fetch programmatically.

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 will scan and reject malware, but it's safer to restrict at the form level.

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 every plan. 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

HTML forms

HTML Form — How to Build and Submit Forms in HTML

Form types

Application Form in HTML — Working Code Template

Ship the form, not the backend.

Free for 1,000 submissions/month. Email delivery, AI spam filtering, signed webhooks, real dashboard — all on the free plan. No credit card.

Get a free access key →