Match the options to your policy
Rename the leave types to the ones your policy uses, add your notice period above the form if you have one, swap in your access key and publish the page on your intranet or a shared link.
Form template · Time Off Request Form Template
Updated · plan facts checked against /pricing
A time off request form lets an employee ask for leave in writing, with the dates, the type of leave and who covers their work, so the manager can approve or decline in one reply. This free leave request form has 10 fields, keeps sick leave to a single choice with no medical details, and emails every request.

This template is one of our free HTML form templates. See more form templates by industry.
No server, API route, or SDK — your Time Off Request Form posts straight to one endpoint.
Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it reaches you.
It's plain HTML you own — paste the Time Off Request Form snippet, swap in your access key, and ship.
Copy and ship
Plain HTML that posts to the /api/submit endpoint. Replace YOUR_ACCESS_KEY with the key from your dashboard; that's the only edit.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<input type="hidden" name="subject" value="New time off request">
<input type="hidden" name="form_loaded_at" id="form_loaded_at">
<fieldset>
<legend>Employee</legend>
<label>Full name <input type="text" name="employee_name" autocomplete="name" required></label>
<label>Work email <input type="email" name="email" autocomplete="email" required></label>
<label>Team or department <input type="text" name="department" required></label>
<label>Manager's name <input type="text" name="manager_name" required></label>
</fieldset>
<fieldset>
<legend>Type of leave</legend>
<label><input type="radio" name="leave_type" value="Vacation" required> Vacation / PTO</label>
<label><input type="radio" name="leave_type" value="Sick"> Sick</label>
<label><input type="radio" name="leave_type" value="Personal"> Personal</label>
<label><input type="radio" name="leave_type" value="Unpaid"> Unpaid</label>
<label><input type="radio" name="leave_type" value="Other"> Other (say which in the notes)</label>
</fieldset>
<fieldset>
<legend>Dates</legend>
<label>First day off <input type="date" name="start_date" id="start_date" required></label>
<label>Last day off <input type="date" name="end_date" id="end_date" required></label>
<label>Total hours requested
<input type="number" name="hours_requested" min="0.5" step="0.5" required>
</label>
</fieldset>
<label>Who will cover your work or shifts?
<textarea name="coverage" rows="3" placeholder="Name of the person covering, or the shifts that need covering"></textarea>
</label>
<label>Notes for your manager (optional). Please do not include medical details.
<textarea name="notes" rows="3"></textarea>
</label>
<!-- honeypot: leave empty -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
<button type="submit">Send time off request</button>
</form>
<script>
document.getElementById('form_loaded_at').value = Date.now();
// Stop the last day being set before the first day.
var start = document.getElementById('start_date');
var end = document.getElementById('end_date');
start.addEventListener('change', function () {
end.min = start.value;
if (end.value && end.value < start.value) end.value = start.value;
});
</script>Field by field
employee_name + emaildepartment + manager_name (required)leave_type (radio, required)start_date + end_datehours_requested (number, required)coverage (textarea)notes (optional)How to add it
To add a Time Off Request Form to your site you need three things: a free splitforms access key, the HTML snippet above, and your key pasted into it. No backend, database, or CAPTCHA library — the form posts to one URL and every submission lands in your inbox and dashboard.
Rename the leave types to the ones your policy uses, add your notice period above the form if you have one, swap in your access key and publish the page on your intranet or a shared link.
Every request is emailed on every plan, and the employee's email is the Reply-To. On paid plans, routing rules on department send each one to the right manager, and an auto-reply can confirm receipt to the employee.
Approve or decline by replying to the notification. On paid plans, export the CSV each month or send requests to Google Sheets to total hours by employee and leave type.
What's included
Time off requests usually arrive as a hallway question or a chat message, and the trouble starts later: nobody wrote down whether the Friday was a half day, who agreed to cover the shift, or when the manager said yes. A request form puts the same facts in front of the manager every time: first and last day, total hours, the type of leave and a named person covering the work. It also gives you a dated record of when each request was made, which matters when two people want the same week. Keep the form to scheduling facts. A sick day is a choice in a list, not a place for symptoms or doctor's notes; anything your local law or policy requires beyond that should go through HR directly. Dates, hours, leave type and cover in one request, with no medical questions. Check your local leave laws.

Where submissions go
Reply-to is wired to the visitor's email, so one tap on Reply answers them directly — while the built-in honeypot and automatic spam scoring filter out bots before they reach you. Every submission is emailed to your inbox and can forward to a webhook or Slack the moment a visitor hits send.

How SplitForms works
splitforms receives the submission, filters spam, saves it to your dashboard and emails you — then, on paid plans, sends it on to your webhooks and integrations. No backend infrastructure to build.

Point your form to your unique SplitForms endpoint. That's it.

We instantly capture and organize every submission in your inbox.

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

No credit card required. Set up in under 60 seconds.
Connect & automate
On paid plans, submissions can also go to Slack, Discord, Google Sheets, Notion, Airtable, Zapier or any signed webhook — and splitforms works on the platforms you build on, from WordPress and Shopify to Next.js. With Stripe connected, your forms can take payments too.

Questions
The employee's name and email, their team and manager, the type of leave, the first and last day, total hours (to cover half days), who will cover the work, and an optional note. This template has all of those and nothing medical.
Yes, in practice. Some companies say 'leave' for longer or statutory absences and 'time off' or PTO for vacation days, but the form asks the same questions. Rename the title and leave types to whatever your policy calls them.
This form does not ask. 'Sick' is a choice in the list, and the notes box asks people not to add medical details. What an employer may ask for, such as a doctor's note after a number of days, depends on local law and your policy, so check both.
That is your policy to set, within your local leave laws. Put your notice period in a line above the form so employees see it before they submit; the form records the time each request was received, so you can check notice was given.
This is an online form, not a Word or PDF file. You can print the published page from your browser for a blank copy, but the online form keeps every request, with the time it was sent, in one searchable list.
No. splitforms collects and stores the requests and emails them; approvals happen by reply and balances stay in your payroll or HR system. On paid plans the CSV export or Google Sheets integration gives you the hours to update those balances.
Each request is one submission, and the Free plan covers 500 in total, not per month, with email notifications included. Routing to managers, auto-replies and CSV export are on paid plans; Pro is $5 per month.
Simple pricing
Free gives you 500 submissions for $0 — no card, no time limit. Pro is $5/month for 5,000 submissions a month, and Annual is $49/year for 15,000 a month with every Pro feature.
For side projects and indie devs.
Every paid feature, for agencies and growing products.
Every Pro feature with triple the volume — $0.27 per 1,000 at full use.
No credit card required on Free • Cancel anytime • Full pricing and FAQ