Volunteer application form template
When they are free, what they would like to help with, and why they want to volunteer.
Reviewed by Ritu Fadadu · Last reviewed
Preview and code
Preview
Code — replace YOUR_ENDPOINT_ID with your form's ID
<style>
.fb-form { display: grid; gap: 1rem; max-width: 36rem; }
.fb-field { display: flex; flex-direction: column; gap: 0.375rem; }
.fb-fieldset { margin: 0; padding: 0; border: 0; min-width: 0; }
.fb-label { font-weight: 600; }
.fb-optional { font-weight: 400; color: #6b7280; }
.fb-help { margin: 0; font-size: 0.875rem; color: #6b7280; }
.fb-input { box-sizing: border-box; width: 100%; padding: 0.625rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.5rem; background: #fff; color: #111827; font: inherit; }
.fb-input:focus { border-color: #2563eb; outline: 2px solid #2563eb; outline-offset: 1px; }
.fb-options { display: flex; flex-direction: column; gap: 0.5rem; }
.fb-option { display: flex; align-items: center; gap: 0.5rem; }
.fb-check { width: 1.125rem; height: 1.125rem; margin: 0; accent-color: #2563eb; }
.fb-button { justify-self: start; min-height: 44px; padding: 0.625rem 1.25rem; border: 0; border-radius: 0.5rem; background: #2563eb; color: #fff; font: inherit; font-weight: 600; cursor: pointer; }
.fb-button:hover { background: #1d4ed8; }
.fb-button:focus-visible { outline: 2px solid #2563eb; outline-offset: 2px; }
.fb-button:disabled { opacity: 0.6; cursor: wait; }
.fb-status { margin: 0; min-height: 1.5em; }
@media (min-width: 640px) {
.fb-form { grid-template-columns: 1fr 1fr; }
.fb-field, .fb-button, .fb-status { grid-column: 1 / -1; }
.fb-field--half { grid-column: auto; }
}
</style>
<form id="fb-form" class="fb-form" action="https://formboost.app/f/YOUR_ENDPOINT_ID" method="POST">
<div class="fb-field fb-field--half">
<label for="fb-name" class="fb-label">Full name</label>
<input type="text" id="fb-name" name="name" class="fb-input" required autocomplete="name">
</div>
<div class="fb-field fb-field--half">
<label for="fb-email" class="fb-label">Email</label>
<input type="email" id="fb-email" name="email" class="fb-input" required autocomplete="email">
</div>
<div class="fb-field fb-field--half">
<label for="fb-phone" class="fb-label">Phone <span class="fb-optional">(optional)</span></label>
<input type="tel" id="fb-phone" name="phone" class="fb-input" autocomplete="tel">
</div>
<div class="fb-field fb-field--half">
<label for="fb-city" class="fb-label">
Town or city
<span class="fb-optional">(optional)</span>
</label>
<input type="text" id="fb-city" name="city" class="fb-input" autocomplete="address-level2">
</div>
<fieldset class="fb-field fb-fieldset">
<legend class="fb-label">
When are you available?
<span class="fb-optional">(optional)</span>
</legend>
<div class="fb-options">
<label class="fb-option">
<input type="checkbox" name="availability" value="weekday-mornings" class="fb-check">
<span>Weekday mornings</span>
</label>
<label class="fb-option">
<input type="checkbox" name="availability" value="weekday-afternoons" class="fb-check">
<span>Weekday afternoons</span>
</label>
<label class="fb-option">
<input type="checkbox" name="availability" value="weekday-evenings" class="fb-check">
<span>Weekday evenings</span>
</label>
<label class="fb-option">
<input type="checkbox" name="availability" value="weekends" class="fb-check">
<span>Weekends</span>
</label>
</div>
</fieldset>
<fieldset class="fb-field fb-fieldset">
<legend class="fb-label">
What would you like to help with?
<span class="fb-optional">(optional)</span>
</legend>
<div class="fb-options">
<label class="fb-option">
<input type="checkbox" name="interests" value="events" class="fb-check">
<span>Events</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="fundraising" class="fb-check">
<span>Fundraising</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="admin-and-office" class="fb-check">
<span>Admin and office</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="outreach" class="fb-check">
<span>Outreach</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="anything-useful" class="fb-check">
<span>Anything useful</span>
</label>
</div>
</fieldset>
<div class="fb-field">
<label for="fb-motivation" class="fb-label">Why would you like to volunteer with us?</label>
<textarea id="fb-motivation" name="motivation" class="fb-input" required rows="4"></textarea>
</div>
<div class="fb-field">
<label for="fb-experience" class="fb-label">
Any relevant experience?
<span class="fb-optional">(optional)</span>
</label>
<textarea id="fb-experience" name="experience" class="fb-input" rows="3"></textarea>
</div>
<div class="fb-field">
<label class="fb-option">
<input type="checkbox" id="fb-consent" name="consent" value="yes" class="fb-check" required>
<span>I agree to be contacted about volunteering opportunities</span>
</label>
</div>
<!-- Honeypot: keep it hidden. People never see it; bots fill it in and get flagged as spam. -->
<div
aria-hidden="true"
style="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden"
>
<label for="fb-honey">Leave this field empty</label>
<input type="text" id="fb-honey" name="_honey" tabindex="-1" autocomplete="off">
</div>
<input type="hidden" name="_subject" value="New volunteer application">
<button type="submit" class="fb-button">Apply to volunteer</button>
</form>
<style>
.fb-form { display: grid; gap: 1rem; max-width: 36rem; }
.fb-field { display: flex; flex-direction: column; gap: 0.375rem; }
.fb-fieldset { margin: 0; padding: 0; border: 0; min-width: 0; }
.fb-label { font-weight: 600; }
.fb-optional { font-weight: 400; color: #6b7280; }
.fb-help { margin: 0; font-size: 0.875rem; color: #6b7280; }
.fb-input { box-sizing: border-box; width: 100%; padding: 0.625rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.5rem; background: #fff; color: #111827; font: inherit; }
.fb-input:focus { border-color: #2563eb; outline: 2px solid #2563eb; outline-offset: 1px; }
.fb-options { display: flex; flex-direction: column; gap: 0.5rem; }
.fb-option { display: flex; align-items: center; gap: 0.5rem; }
.fb-check { width: 1.125rem; height: 1.125rem; margin: 0; accent-color: #2563eb; }
.fb-button { justify-self: start; min-height: 44px; padding: 0.625rem 1.25rem; border: 0; border-radius: 0.5rem; background: #2563eb; color: #fff; font: inherit; font-weight: 600; cursor: pointer; }
.fb-button:hover { background: #1d4ed8; }
.fb-button:focus-visible { outline: 2px solid #2563eb; outline-offset: 2px; }
.fb-button:disabled { opacity: 0.6; cursor: wait; }
.fb-status { margin: 0; min-height: 1.5em; }
@media (min-width: 640px) {
.fb-form { grid-template-columns: 1fr 1fr; }
.fb-field, .fb-button, .fb-status { grid-column: 1 / -1; }
.fb-field--half { grid-column: auto; }
}
</style>
<form id="fb-form" class="fb-form" action="https://formboost.app/f/YOUR_ENDPOINT_ID" method="POST">
<div class="fb-field fb-field--half">
<label for="fb-name" class="fb-label">Full name</label>
<input type="text" id="fb-name" name="name" class="fb-input" required autocomplete="name">
</div>
<div class="fb-field fb-field--half">
<label for="fb-email" class="fb-label">Email</label>
<input type="email" id="fb-email" name="email" class="fb-input" required autocomplete="email">
</div>
<div class="fb-field fb-field--half">
<label for="fb-phone" class="fb-label">Phone <span class="fb-optional">(optional)</span></label>
<input type="tel" id="fb-phone" name="phone" class="fb-input" autocomplete="tel">
</div>
<div class="fb-field fb-field--half">
<label for="fb-city" class="fb-label">
Town or city
<span class="fb-optional">(optional)</span>
</label>
<input type="text" id="fb-city" name="city" class="fb-input" autocomplete="address-level2">
</div>
<fieldset class="fb-field fb-fieldset">
<legend class="fb-label">
When are you available?
<span class="fb-optional">(optional)</span>
</legend>
<div class="fb-options">
<label class="fb-option">
<input type="checkbox" name="availability" value="weekday-mornings" class="fb-check">
<span>Weekday mornings</span>
</label>
<label class="fb-option">
<input type="checkbox" name="availability" value="weekday-afternoons" class="fb-check">
<span>Weekday afternoons</span>
</label>
<label class="fb-option">
<input type="checkbox" name="availability" value="weekday-evenings" class="fb-check">
<span>Weekday evenings</span>
</label>
<label class="fb-option">
<input type="checkbox" name="availability" value="weekends" class="fb-check">
<span>Weekends</span>
</label>
</div>
</fieldset>
<fieldset class="fb-field fb-fieldset">
<legend class="fb-label">
What would you like to help with?
<span class="fb-optional">(optional)</span>
</legend>
<div class="fb-options">
<label class="fb-option">
<input type="checkbox" name="interests" value="events" class="fb-check">
<span>Events</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="fundraising" class="fb-check">
<span>Fundraising</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="admin-and-office" class="fb-check">
<span>Admin and office</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="outreach" class="fb-check">
<span>Outreach</span>
</label>
<label class="fb-option">
<input type="checkbox" name="interests" value="anything-useful" class="fb-check">
<span>Anything useful</span>
</label>
</div>
</fieldset>
<div class="fb-field">
<label for="fb-motivation" class="fb-label">Why would you like to volunteer with us?</label>
<textarea id="fb-motivation" name="motivation" class="fb-input" required rows="4"></textarea>
</div>
<div class="fb-field">
<label for="fb-experience" class="fb-label">
Any relevant experience?
<span class="fb-optional">(optional)</span>
</label>
<textarea id="fb-experience" name="experience" class="fb-input" rows="3"></textarea>
</div>
<div class="fb-field">
<label class="fb-option">
<input type="checkbox" id="fb-consent" name="consent" value="yes" class="fb-check" required>
<span>I agree to be contacted about volunteering opportunities</span>
</label>
</div>
<!-- Honeypot: keep it hidden. People never see it; bots fill it in and get flagged as spam. -->
<div
aria-hidden="true"
style="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden"
>
<label for="fb-honey">Leave this field empty</label>
<input type="text" id="fb-honey" name="_honey" tabindex="-1" autocomplete="off">
</div>
<input type="hidden" name="_subject" value="New volunteer application">
<button type="submit" class="fb-button">Apply to volunteer</button>
<p class="fb-status" role="status" aria-live="polite" data-fb-status></p>
</form>
<script>
document.getElementById("fb-form").addEventListener("submit", async (event) => {
event.preventDefault();
const form = event.currentTarget;
const status = form.querySelector("[data-fb-status]");
const button = form.querySelector('button[type="submit"]');
const fields = new FormData(form);
// Formboost accepts JSON or url-encoded bodies, not multipart, so send JSON.
const data = Object.fromEntries(fields);
// Multiple-choice fields can hold several values; send them as arrays.
data.availability = fields.getAll("availability");
data.interests = fields.getAll("interests");
// Makes the notification email replyable; the address still shows in the field table.
if (data.email) data._replyto = data.email;
button.disabled = true;
status.textContent = "Sending…";
try {
const response = await fetch(form.action, {
method: "POST",
headers: { "Content-Type": "application/json", Accept: "application/json" },
body: JSON.stringify(data),
});
if (response.ok) {
form.reset();
status.textContent = "Thank you for applying — we'll be in touch.";
} else if (response.status === 429) {
status.textContent = "Too many attempts. Please wait a minute and try again.";
} else {
status.textContent = "Something went wrong. Please try again.";
}
} catch {
status.textContent = "Could not send. Check your connection and try again.";
} finally {
button.disabled = false;
}
});
</script>
import { useState } from "react";
// Your form's endpoint, from the Formboost dashboard.
const ENDPOINT = "https://formboost.app/f/YOUR_ENDPOINT_ID";
export default function VolunteerApplicationForm() {
const [sending, setSending] = useState(false);
const [message, setMessage] = useState("");
async function handleSubmit(event) {
event.preventDefault();
const form = event.currentTarget;
const fields = new FormData(form);
// Formboost accepts JSON or url-encoded bodies, not multipart, so send JSON.
const data = Object.fromEntries(fields);
// Multiple-choice fields can hold several values; send them as arrays.
data.availability = fields.getAll("availability");
data.interests = fields.getAll("interests");
// Makes the notification email replyable; the address still shows in the field table.
if (data.email) data._replyto = data.email;
setSending(true);
setMessage("Sending…");
try {
const response = await fetch(ENDPOINT, {
method: "POST",
headers: { "Content-Type": "application/json", Accept: "application/json" },
body: JSON.stringify(data),
});
if (response.ok) {
form.reset();
setMessage("Thank you for applying — we'll be in touch.");
} else if (response.status === 429) {
setMessage("Too many attempts. Please wait a minute and try again.");
} else {
setMessage("Something went wrong. Please try again.");
}
} catch {
setMessage("Could not send. Check your connection and try again.");
} finally {
setSending(false);
}
}
return (
<form
className="grid max-w-xl gap-4 sm:grid-cols-2"
action={ENDPOINT}
method="POST"
onSubmit={handleSubmit}
>
<div className="flex flex-col gap-1.5">
<label htmlFor="fb-name" className="text-sm font-semibold text-gray-900">Full name</label>
<input
type="text"
id="fb-name"
name="name"
className="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
required
autoComplete="name"
/>
</div>
<div className="flex flex-col gap-1.5">
<label htmlFor="fb-email" className="text-sm font-semibold text-gray-900">Email</label>
<input
type="email"
id="fb-email"
name="email"
className="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
required
autoComplete="email"
/>
</div>
<div className="flex flex-col gap-1.5">
<label htmlFor="fb-phone" className="text-sm font-semibold text-gray-900">
Phone
<span className="font-normal text-gray-500">(optional)</span>
</label>
<input
type="tel"
id="fb-phone"
name="phone"
className="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
autoComplete="tel"
/>
</div>
<div className="flex flex-col gap-1.5">
<label htmlFor="fb-city" className="text-sm font-semibold text-gray-900">
Town or city
<span className="font-normal text-gray-500">(optional)</span>
</label>
<input
type="text"
id="fb-city"
name="city"
className="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
autoComplete="address-level2"
/>
</div>
<fieldset className="flex flex-col gap-1.5 sm:col-span-2 m-0 min-w-0 border-0 p-0">
<legend className="text-sm font-semibold text-gray-900">
When are you available?
<span className="font-normal text-gray-500">(optional)</span>
</legend>
<div className="flex flex-col gap-2">
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekday-mornings"
className="h-4 w-4 accent-blue-600"
/>
<span>Weekday mornings</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekday-afternoons"
className="h-4 w-4 accent-blue-600"
/>
<span>Weekday afternoons</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekday-evenings"
className="h-4 w-4 accent-blue-600"
/>
<span>Weekday evenings</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekends"
className="h-4 w-4 accent-blue-600"
/>
<span>Weekends</span>
</label>
</div>
</fieldset>
<fieldset className="flex flex-col gap-1.5 sm:col-span-2 m-0 min-w-0 border-0 p-0">
<legend className="text-sm font-semibold text-gray-900">
What would you like to help with?
<span className="font-normal text-gray-500">(optional)</span>
</legend>
<div className="flex flex-col gap-2">
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="events"
className="h-4 w-4 accent-blue-600"
/>
<span>Events</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="fundraising"
className="h-4 w-4 accent-blue-600"
/>
<span>Fundraising</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="admin-and-office"
className="h-4 w-4 accent-blue-600"
/>
<span>Admin and office</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="outreach"
className="h-4 w-4 accent-blue-600"
/>
<span>Outreach</span>
</label>
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="anything-useful"
className="h-4 w-4 accent-blue-600"
/>
<span>Anything useful</span>
</label>
</div>
</fieldset>
<div className="flex flex-col gap-1.5 sm:col-span-2">
<label htmlFor="fb-motivation" className="text-sm font-semibold text-gray-900">
Why would you like to volunteer with us?
</label>
<textarea
id="fb-motivation"
name="motivation"
className="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
required
rows={4}
></textarea>
</div>
<div className="flex flex-col gap-1.5 sm:col-span-2">
<label htmlFor="fb-experience" className="text-sm font-semibold text-gray-900">
Any relevant experience?
<span className="font-normal text-gray-500">(optional)</span>
</label>
<textarea
id="fb-experience"
name="experience"
className="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
rows={3}
></textarea>
</div>
<div className="flex flex-col gap-1.5 sm:col-span-2">
<label className="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
id="fb-consent"
name="consent"
value="yes"
className="h-4 w-4 accent-blue-600"
required
/>
<span>I agree to be contacted about volunteering opportunities</span>
</label>
</div>
{/* Honeypot: keep it hidden. People never see it; bots fill it in and get flagged as spam. */}
<div
aria-hidden="true"
style={{ position: "absolute", left: "-9999px", width: "1px", height: "1px", overflow: "hidden" }}
>
<label htmlFor="fb-honey">Leave this field empty</label>
<input type="text" id="fb-honey" name="_honey" tabIndex={-1} autoComplete="off" />
</div>
<input type="hidden" name="_subject" defaultValue="New volunteer application" />
<button
type="submit"
className="min-h-11 justify-self-start rounded-lg bg-blue-600 px-5 py-2.5 font-semibold text-white hover:bg-blue-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600 disabled:opacity-60 sm:col-span-2"
disabled={sending}
>
Apply to volunteer
</button>
<p className="min-h-6 text-sm text-gray-700 sm:col-span-2" role="status" aria-live="polite">
{message}
</p>
</form>
);
}
<form
id="fb-form"
class="grid max-w-xl gap-4 sm:grid-cols-2"
action="https://formboost.app/f/YOUR_ENDPOINT_ID"
method="POST"
>
<div class="flex flex-col gap-1.5">
<label for="fb-name" class="text-sm font-semibold text-gray-900">Full name</label>
<input
type="text"
id="fb-name"
name="name"
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
required
autocomplete="name"
>
</div>
<div class="flex flex-col gap-1.5">
<label for="fb-email" class="text-sm font-semibold text-gray-900">Email</label>
<input
type="email"
id="fb-email"
name="email"
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
required
autocomplete="email"
>
</div>
<div class="flex flex-col gap-1.5">
<label for="fb-phone" class="text-sm font-semibold text-gray-900">
Phone
<span class="font-normal text-gray-500">(optional)</span>
</label>
<input
type="tel"
id="fb-phone"
name="phone"
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
autocomplete="tel"
>
</div>
<div class="flex flex-col gap-1.5">
<label for="fb-city" class="text-sm font-semibold text-gray-900">
Town or city
<span class="font-normal text-gray-500">(optional)</span>
</label>
<input
type="text"
id="fb-city"
name="city"
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
autocomplete="address-level2"
>
</div>
<fieldset class="flex flex-col gap-1.5 sm:col-span-2 m-0 min-w-0 border-0 p-0">
<legend class="text-sm font-semibold text-gray-900">
When are you available?
<span class="font-normal text-gray-500">(optional)</span>
</legend>
<div class="flex flex-col gap-2">
<label class="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekday-mornings"
class="h-4 w-4 accent-blue-600"
>
<span>Weekday mornings</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekday-afternoons"
class="h-4 w-4 accent-blue-600"
>
<span>Weekday afternoons</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="availability"
value="weekday-evenings"
class="h-4 w-4 accent-blue-600"
>
<span>Weekday evenings</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input type="checkbox" name="availability" value="weekends" class="h-4 w-4 accent-blue-600">
<span>Weekends</span>
</label>
</div>
</fieldset>
<fieldset class="flex flex-col gap-1.5 sm:col-span-2 m-0 min-w-0 border-0 p-0">
<legend class="text-sm font-semibold text-gray-900">
What would you like to help with?
<span class="font-normal text-gray-500">(optional)</span>
</legend>
<div class="flex flex-col gap-2">
<label class="flex items-center gap-2 text-gray-800">
<input type="checkbox" name="interests" value="events" class="h-4 w-4 accent-blue-600">
<span>Events</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input type="checkbox" name="interests" value="fundraising" class="h-4 w-4 accent-blue-600">
<span>Fundraising</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="admin-and-office"
class="h-4 w-4 accent-blue-600"
>
<span>Admin and office</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input type="checkbox" name="interests" value="outreach" class="h-4 w-4 accent-blue-600">
<span>Outreach</span>
</label>
<label class="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
name="interests"
value="anything-useful"
class="h-4 w-4 accent-blue-600"
>
<span>Anything useful</span>
</label>
</div>
</fieldset>
<div class="flex flex-col gap-1.5 sm:col-span-2">
<label for="fb-motivation" class="text-sm font-semibold text-gray-900">
Why would you like to volunteer with us?
</label>
<textarea
id="fb-motivation"
name="motivation"
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
required
rows="4"
></textarea>
</div>
<div class="flex flex-col gap-1.5 sm:col-span-2">
<label for="fb-experience" class="text-sm font-semibold text-gray-900">
Any relevant experience?
<span class="font-normal text-gray-500">(optional)</span>
</label>
<textarea
id="fb-experience"
name="experience"
class="w-full rounded-lg border border-gray-300 bg-white px-3 py-2.5 text-gray-900 focus:border-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-600/30"
rows="3"
></textarea>
</div>
<div class="flex flex-col gap-1.5 sm:col-span-2">
<label class="flex items-center gap-2 text-gray-800">
<input
type="checkbox"
id="fb-consent"
name="consent"
value="yes"
class="h-4 w-4 accent-blue-600"
required
>
<span>I agree to be contacted about volunteering opportunities</span>
</label>
</div>
<!-- Honeypot: keep it hidden. People never see it; bots fill it in and get flagged as spam. -->
<div
aria-hidden="true"
style="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden"
>
<label for="fb-honey">Leave this field empty</label>
<input type="text" id="fb-honey" name="_honey" tabindex="-1" autocomplete="off">
</div>
<input type="hidden" name="_subject" value="New volunteer application">
<button
type="submit"
class="min-h-11 justify-self-start rounded-lg bg-blue-600 px-5 py-2.5 font-semibold text-white hover:bg-blue-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600 disabled:opacity-60 sm:col-span-2"
>
Apply to volunteer
</button>
</form>
About this template
A volunteer application is closer to a conversation than a job application. This template asks the two things a coordinator plans around — when someone is available and what they would like to do — as multiple-choice questions, so you can filter the export for everyone free on weekends who is interested in events.
Motivation is the one required free-text question, because it is what a coordinator reads first. Experience is optional: many of the best volunteers have none, and a required experience box quietly tells them not to apply.
Both multiple-choice questions send arrays from the HTML + JS and React versions, collected with getAll(), so a volunteer who ticks three time slots arrives with all three — not just the last one ticked.
Fields in this template
| Field | Name | Type | Required | Why it is there |
|---|---|---|---|---|
| Full name | name | Short text | Yes | Required. |
email | Yes | Required, named email for Auto Reply. | ||
| Phone | phone | Phone | No | Optional. |
| Town or city | city | Short text | No | Optional, to match people to local opportunities. |
| When are you available? | availability | Multiple choice | No | Multiple choice, sent as an array by the script versions. Optional, because a browser cannot require “at least one box” without JavaScript. |
| What would you like to help with? | interests | Multiple choice | No | Optional multiple choice, also sent as an array. |
| Why would you like to volunteer with us? | motivation | Long text | Yes | Required. The answer coordinators read first. |
| Any relevant experience? | experience | Long text | No | Optional, so nobody is put off for having none. |
| I agree to be contacted about volunteering opportunities | consent | Checkbox | Yes | Required permission to contact them. |
Each name becomes a column in your dashboard and a row in the notification email. The hidden _honey field is the honeypot; _subject sets the email's subject line. Both are reserved fields and never appear in the field table.
Make it yours
- Replace the interest areas with your organisation's real roles.
- Add an
over_18checkbox if some roles require adult volunteers. - Link to your safeguarding or volunteer policy next to the consent checkbox.
- Ask about references or background checks in your follow-up conversation, not on the form: it keeps the first step light, and those details belong in a more private channel.
- Use the success message to say what happens next — an introductory call, a training date — so applicants are not left wondering.
Where the submissions go
- Each application is stored and emailed to the coordinator; export to CSV on every plan.
- On Starter and above, build a volunteer roster in Google Sheets automatically.
- Welcome every applicant straight away with Auto Reply on Starter and above.
Job Application Forms: plans, destinations and a worked setup →
Before you publish it
- Create a form in the Formboost dashboard and replace
YOUR_ENDPOINT_IDwith its ID. - Pick one variant: HTML posts and reloads, HTML + JS and React send JSON with
fetch()and stay on the page. - For the plain HTML version, add a hidden
_redirectwith anhttps://thank-you page on the same site as the form — anything else falls back to Formboost's page. - Submit it once from the live page and check the submission in your dashboard. Every request is acknowledged, so the dashboard is the real test. Troubleshooting covers the rest.
More form templates
Job application form template
The role, a link to the résumé, portfolio and LinkedIn, and consent to keep the application on file.
Registration form template
Personal details, address, the course or programme, and agreement to the terms.
Event registration form template
Attendee details, how they will attend, and the two questions organisers always forget to ask.
All form templates
Every template, in HTML, React and Tailwind.
Put the volunteer application form live
Free forever: 500 submissions a month across 10 forms, no card.