Capture property and contact details first
Ask for name, email, and property, unit, or service address before anything else — a maintenance ticket without a unit number can't be dispatched.
Maintenance request form
Ready-made HTML that asks for property, request type, and urgency up front — so emergencies get flagged before anyone reads the full description.

Request type and urgency pre-sort every ticket into the right queue on submission.
The botcheck honeypot and form_loaded_at time-trap reject bot submissions before you see them.
Every request lands in your inbox and the splitforms dashboard — no server code.
Copy-paste HTML
Maintenance teams need triage before prose — request type and urgency route the ticket the moment it arrives, and a photo fieldset means fewer follow-up calls. Replace YOUR_ACCESS_KEY with the key from your dashboard. Building the intake into a property-management app instead of a static page? The same endpoint accepts a fetch() POST — see the API reference, or route every submission with a signed webhook.
<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 maintenance request" />
<input type="hidden" name="form_loaded_at" id="form_loaded_at" />
<fieldset>
<legend>Contact and property</legend>
<label>Name <input name="name" autocomplete="name" required /></label>
<label>Email <input name="email" type="email" autocomplete="email" required /></label>
<label>Property or unit
<input name="property" placeholder="Building, unit, or service address" required />
</label>
</fieldset>
<fieldset>
<legend>The request</legend>
<label>Request type
<select name="request_type" required>
<option value="">Choose one</option>
<option>Plumbing</option>
<option>Electrical</option>
<option>HVAC / heating / cooling</option>
<option>Appliance</option>
<option>General repair</option>
<option>Other</option>
</select>
</label>
<label>Urgency
<select name="urgency" required>
<option>Emergency - immediate attention</option>
<option>Today if possible</option>
<option>This week</option>
<option>Routine maintenance</option>
</select>
</label>
<label>Describe the issue
<textarea name="details" rows="5" required></textarea>
</label>
</fieldset>
<fieldset>
<legend>Photos (optional)</legend>
<label>Leak, damage, or appliance label photo
<input name="photo" type="file" accept="image/*" multiple />
</label>
</fieldset>
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<button type="submit">Submit maintenance request</button>
</form>
<script>
document.getElementById('form_loaded_at').value = Date.now();
</script>Step by step
Five steps from a blank page to requests landing in your dashboard and inbox, sorted by urgency.
Ask for name, email, and property, unit, or service address before anything else — a maintenance ticket without a unit number can't be dispatched.
Use select fields for request type (plumbing, electrical, HVAC, appliance, general repair) and urgency (emergency, today, this week, routine) so every request pre-sorts into the right queue on submission.
Set enctype="multipart/form-data" on the form and add an input type="file" field so tenants can attach a leak photo, damage picture, or appliance label — it helps the right trade get dispatched on the first visit.
Paste your access_key into the hidden field, leave the botcheck honeypot empty, and add the hidden form_loaded_at field (set by the one-line script below) so splitforms can reject submissions that arrive too fast to be human.
Submit a test request and confirm it lands in your dashboard and inbox. Connect Slack, email, or a webhook so emergency requests page the on-call tech, and send routine work to a queue in Sheets, Notion, or Airtable.
Routing logic
A maintenance request form template is ready-made HTML that tenants, guests, or internal staff use to report a repair — so the issue reaches you instead of getting lost in a text message. Point it at POST https://splitforms.com/api/submit with your access_key and every request lands in your dashboard and inbox. The urgency field feeds three queues without anyone re-typing, and you can route each one with a signed webhook.

Where requests go
Every request is emailed to you and saved to a searchable dashboard — spam filtered before it ever reaches you. Search, export to CSV, or forward it to Slack, a webhook, or property-management software.

Form fields
The difference between a ticket you can dispatch and one that triggers a follow-up call is a handful of fields. Ask for these up front and every request arrives ready to route.

How SplitForms works
Connect your form, collect every submission, and send data where it needs to go — without building backend infrastructure.

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
SplitForms works with the destinations you route to and the platforms you build on — from Slack and Sheets to WordPress, Shopify, and Next.js.

Trusted by indie teams and agencies shipping forms worldwide
Testimonials
40 quotes on record — from indie hacks to agency migrations.
“I replaced a Lambda + DynamoDB + SES contact form with six lines of HTML. It took eleven minutes, and the dashboard is better than what I was going to build.”
“We migrated 14 client sites off Formspree in a single weekend. The price is a third of what we paid, the API is more honest, and the spam filter actually works.”
“The webhook payload is signed, idempotent, and well-shaped. It reads like code from a competent team, not a CRUD app held together with duct tape.”
“I stopped reaching for Typeform on small marketing sites. splitforms covers 90% of the use case at none of the bloat.”
“I onboarded our whole agency in an afternoon. The MCP integration meant Cursor literally dropped the form straight into our client repos for us.”
“The free plan gave me 500 submissions before I paid a cent, and Pro is five dollars a month. I've spent more on coffee deciding which backend to use.”
“Spam went from forty junk entries a day to zero, with no reCAPTCHA puzzle ruining the form. The honeypot and time-trap just quietly do their job.”
“Point the form action at one endpoint and you're done. No SDK, no client library, no build step. This is how a form backend should feel.”
“Leads land in Slack the second someone submits, and a copy goes to Google Sheets for the sales team. I wired both up in under ten minutes.”
“I run a static Hugo site on a five-dollar VPS. splitforms gave it a real contact form without me standing up a single server.”
Questions
A useful maintenance request form includes name, contact details, property or unit, request type, urgency, issue description, permission-to-enter notes, and optional photo uploads. The urgency and request type fields are the most important for triage.
Yes. splitforms can email the request, store it in the dashboard, and forward it through a webhook to tools such as Airtable, Google Sheets, Notion, Slack, AppFolio, Buildium, Jobber, Housecall Pro, or a custom endpoint.
Yes. Add enctype="multipart/form-data" to the form and use an input type="file" field. Photo uploads run on the Storage integration (available on paid plans), which accepts up to 5 files per submission at 5 MB each — enough room for a few angles of a leak or an appliance data plate.
A maintenance request form is usually for existing tenants, customers, or internal facilities teams. A service request form is often lead capture for a contractor. The fields overlap, but maintenance forms need property/unit and urgency triage first.
Every submission passes through the botcheck honeypot — a hidden field that must stay empty — and the form_loaded_at time-trap, which rejects entries submitted too fast to be human. Add per-form allowed domains or strict origin mode, and turn on reCAPTCHA v2 with your own site key for extra coverage.
Free covers 500 requests a month with unlimited forms, email notifications, spam filtering, and the dashboard. Pro is $5/month for 5,000 submissions plus CSV/XML/PDF exports, webhooks, integrations, and an auto-responder. Pro is $5/month for 5,000 submissions with CC/BCC and priority support. The $59 3-Year plan covers 15,000/month. Larger portfolios can use Business (unlimited) — email hello@splitforms.com.
Yes. Add a hidden subject field to control the notification email's subject line, and a hidden redirect field with a URL to send tenants to a thank-you or next-steps page after they submit. Email notifications to your maintenance team are free on every plan, and you can connect Slack, Discord, Telegram, or a webhook so emergency requests reach the right channel right away.
Simple pricing
Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, and higher submission limits.
Free forever
For side projects and indie devs.
For agencies and growing products.
Pay $59. 3 years sorted.
No credit card required on Free • Cancel anytime