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.
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
Set enctype="multipart/form-data"
Required for file uploads. Forms without it silently fail to upload attached files.
Use accept to filter file types
accept=".pdf,.doc,.docx" restricts the file picker to acceptable resume formats.
Add structured fields for the role
select element with predefined options is better than free-text — easier to filter applications in the dashboard.
(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 →