splitforms.com
REAL ESTATE · CONTACT FORM TEMPLATE

Rental Application Form (Tenant Inquiry)

Showing every prospect who emails about a rental wastes a Saturday. The pre-application form filters on move-in date, income, and pet status before you hand out the lockbox code.

1,000/mo free·no card·works on any host
form.htmlhtml53 lines
01<form action="https://splitforms.com/api/submit" method="POST">
02 <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
03 <input type="hidden" name="subject" value="New rental inquiry">
04
05 <label for="name">Full name *</label>
06 <input id="name" type="text" name="name" placeholder="Priya Patel" required>
07 <label for="email">Email *</label>
08 <input id="email" type="email" name="email" placeholder="priya@example.com" required>
09 <label for="phone">Phone *</label>
10 <input id="phone" type="tel" name="phone" placeholder="+1 415 555 0142" required>
11 <label for="property">Property of interest *</label>
12 <input id="property" type="text" name="property" placeholder="1247 Valencia St — Unit 3" required>
13 <label for="move_in">Desired move-in date *</label>
14 <input id="move_in" type="date" name="move_in" required>
15 <label for="household">Household size *</label>
16 <select id="household" name="household" required>
17 <option value="">Choose…</option>
18 <option>1</option>
19 <option>2</option>
20 <option>3</option>
21 <option>4</option>
22 <option>5+</option>
23 </select>
24 <label for="pets">Pets</label>
25 <select id="pets" name="pets">
26 <option value="">Choose…</option>
27 <option>No pets</option>
28 <option>Cat</option>
29 <option>Small dog</option>
30 <option>Large dog</option>
31 <option>Multiple</option>
32 </select>
33 <label for="employment">Employment status *</label>
34 <select id="employment" name="employment" required>
35 <option value="">Choose…</option>
36 <option>Full-time</option>
37 <option>Part-time</option>
38 <option>Self-employed</option>
39 <option>Student</option>
40 <option>Other</option>
41 </select>
42 <label for="notes">Anything we should know?</label>
43 <textarea id="notes" name="notes" placeholder="References, special needs, etc."></textarea>
44
45 <!-- honeypot — bots fill every field -->
46 <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
47
48 <button type="submit">Send</button>
49</form>
50
51<p style="margin-top:12px;font-size:11px;color:#888;text-align:right">
52 Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="noopener">splitforms</a>
53</p>
1,000
submissions / mo, free
9
fields, ready to ship
5
code outputs
60s
from copy to inbox
Rental Application Form (Tenant Inquiry) — example splitforms template with submissions inbox
§ 01Why it mattersthe qualifying-fields argument

Landlords waste hours on showings to applicants who don't qualify on the basics — income below 2.5x rent, move-in date six weeks past the listing's start, three large dogs in a no-pets unit. The pre-application form runs the first filter cheaply: monthly income, employment, occupants, pets, requested move-in date, why they're moving. Applicants who clear the pre-screen get the showing; the rest get a polite 'unfortunately not a fit'. Property managers running multiple units route by ZIP and bedroom count — one form, many properties, all webhook to AppFolio / Buildium.

Webhooks into AppFolio / Buildium / RentRedi · Fair Housing-safe field set.
✦ at a glance
  • Rental application inquiry · 9 fields
  • HTML, JS, React, PHP, cURL outputs
  • One POST endpoint, no SDK
  • Honeypot + classifier, no CAPTCHA
§ 02Live previewinteractive · sandboxed · no key required

See exactly what your visitors see — and you’ll receive.

Left: the rendered form, fully interactive in a sandboxed iframe. Right: the email and dashboard view that lands the moment a visitor submits.

preview · rental-application-formlocalhost:3000
✦ what you’ll see in your inbox

Every submission becomes an email plus a dashboard row. The fields below are the exact payload your form will send. Reply-to is wired to the visitor’s email so hitting reply goes back to them.

dashboard · new submission14ms · 200 OK
SUBJECT · New rental inquiry
Full name
Maya Iyer
Email
maya@studio71.co
Phone
+1 415 555 0142
Property of interest
Desired move-in date
2026-05-15
Household size
1
Pets
No pets
Employment status
Full-time
Anything we should know?
Loved your last open house in Hayes — looking for similar with parking. Pre-approved through Wells Fargo.

Iframe is sandboxed — submit doesn’t actually fire. Get your access key to wire it up live.

§ 03Three steps3 steps · ~60 seconds

Generate, embed, receive.

Three actions stand between you and your first lead. None of them require a backend, a database, or a CAPTCHA library.

STEP 01GENERATE

Capture pre-screen basics

Required: requested move-in date, monthly income (or 2.5x rent ratio), employment status, number of occupants, pets, current housing situation.

Create your form
key=sk_live_••••••••
STEP 02EMBED

Filter before showing

Auto-respond with the property's specific qualifying criteria. Applicants who self-select out save the landlord a Saturday afternoon. Qualified leads schedule a showing via the auto-responder.

snippethtml
<form action="https://splitforms.com/api/submit" method="POST">
  …
</form>
STEP 03RECEIVE

Push to property management

Webhook to AppFolio / Buildium / TenantCloud / RentRedi. Lead lands as an inquiry on the specific property with pre-screen data attached, ready for the formal application.

inbox · 1 newjust now
FROM contact@yoursite.com
New rental inquiry
Maya Iyer maya@studio71.co
Loved your last open house in Hayes — looking for similar with parking. Pre-approved through Wells Fargo.
§ 04Copy & ship5 languages · same endpoint

Five outputs. One backend.

HTML by default. Click open the language you ship in — every variant POSTs to the same /api/submit endpoint.

01HTMLform.html53 lines
<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 rental inquiry">

  <label for="name">Full name *</label>
  <input id="name" type="text" name="name" placeholder="Priya Patel" required>
  <label for="email">Email *</label>
  <input id="email" type="email" name="email" placeholder="priya@example.com" required>
  <label for="phone">Phone *</label>
  <input id="phone" type="tel" name="phone" placeholder="+1 415 555 0142" required>
  <label for="property">Property of interest *</label>
  <input id="property" type="text" name="property" placeholder="1247 Valencia St — Unit 3" required>
  <label for="move_in">Desired move-in date *</label>
  <input id="move_in" type="date" name="move_in" required>
  <label for="household">Household size *</label>
  <select id="household" name="household" required>
    <option value="">Choose…</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5+</option>
  </select>
  <label for="pets">Pets</label>
  <select id="pets" name="pets">
    <option value="">Choose…</option>
    <option>No pets</option>
    <option>Cat</option>
    <option>Small dog</option>
    <option>Large dog</option>
    <option>Multiple</option>
  </select>
  <label for="employment">Employment status *</label>
  <select id="employment" name="employment" required>
    <option value="">Choose…</option>
    <option>Full-time</option>
    <option>Part-time</option>
    <option>Self-employed</option>
    <option>Student</option>
    <option>Other</option>
  </select>
  <label for="notes">Anything we should know?</label>
  <textarea id="notes" name="notes" placeholder="References, special needs, etc."></textarea>

  <!-- honeypot — bots fill every field -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">

  <button type="submit">Send</button>
</form>

<p style="margin-top:12px;font-size:11px;color:#888;text-align:right">
  Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="noopener">splitforms</a>
</p>
02JavaScriptform.js69 lines
<form id="lf-form">
  <label for="name">Full name *</label>
  <input id="name" type="text" name="name" placeholder="Priya Patel" required>
  <label for="email">Email *</label>
  <input id="email" type="email" name="email" placeholder="priya@example.com" required>
  <label for="phone">Phone *</label>
  <input id="phone" type="tel" name="phone" placeholder="+1 415 555 0142" required>
  <label for="property">Property of interest *</label>
  <input id="property" type="text" name="property" placeholder="1247 Valencia St — Unit 3" required>
  <label for="move_in">Desired move-in date *</label>
  <input id="move_in" type="date" name="move_in" required>
  <label for="household">Household size *</label>
  <select id="household" name="household" required>
    <option value="">Choose…</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5+</option>
  </select>
  <label for="pets">Pets</label>
  <select id="pets" name="pets">
    <option value="">Choose…</option>
    <option>No pets</option>
    <option>Cat</option>
    <option>Small dog</option>
    <option>Large dog</option>
    <option>Multiple</option>
  </select>
  <label for="employment">Employment status *</label>
  <select id="employment" name="employment" required>
    <option value="">Choose…</option>
    <option>Full-time</option>
    <option>Part-time</option>
    <option>Self-employed</option>
    <option>Student</option>
    <option>Other</option>
  </select>
  <label for="notes">Anything we should know?</label>
  <textarea id="notes" name="notes" placeholder="References, special needs, etc."></textarea>
  <button type="submit">Send</button>
</form>

<p style="margin-top:12px;font-size:11px;color:#888;text-align:right">
  Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="noopener">splitforms</a>
</p>

<script>
  document.getElementById('lf-form').addEventListener('submit', async (e) => {
    e.preventDefault();
    const data = new FormData(e.target);
    data.set('access_key', 'YOUR_ACCESS_KEY');
    data.set('subject', 'New rental inquiry');

    const res = await fetch('https://splitforms.com/api/submit', {
      method: 'POST',
      body: data,
      headers: { Accept: 'application/json' },
    });

    const json = await res.json();
    if (json.success) {
      e.target.reset();
      alert('Sent!');
    } else {
      alert('Error: ' + (json.message || 'Try again'));
    }
  });
</script>
03React / Next.jsForm.tsx84 lines
'use client';

import { useState, type FormEvent } from 'react';

export default function RealEstateRentalForm() {
  const [status, setStatus] = useState<'idle' | 'sending' | 'sent' | 'error'>('idle');

  async function onSubmit(e: FormEvent<HTMLFormElement>) {
    e.preventDefault();
    setStatus('sending');

    const data = new FormData(e.currentTarget);
    data.set('access_key', 'YOUR_ACCESS_KEY');
    data.set('subject', 'New rental inquiry');

    const res = await fetch('https://splitforms.com/api/submit', {
      method: 'POST',
      body: data,
      headers: { Accept: 'application/json' },
    });

    const json = await res.json();
    setStatus(json.success ? 'sent' : 'error');
    if (json.success) e.currentTarget.reset();
  }

  if (status === 'sent') return <p>Thanks — we&rsquo;ll be in touch.</p>;

  return (
    <>
    <form onSubmit={onSubmit}>
      <label htmlFor="name">Full name *</label>
      <input id="name" type="text" name="name" placeholder="Priya Patel" required />
      <label htmlFor="email">Email *</label>
      <input id="email" type="email" name="email" placeholder="priya@example.com" required />
      <label htmlFor="phone">Phone *</label>
      <input id="phone" type="tel" name="phone" placeholder="+1 415 555 0142" required />
      <label htmlFor="property">Property of interest *</label>
      <input id="property" type="text" name="property" placeholder="1247 Valencia St — Unit 3" required />
      <label htmlFor="move_in">Desired move-in date *</label>
      <input id="move_in" type="date" name="move_in" required />
      <label htmlFor="household">Household size *</label>
      <select id="household" name="household" required>
        <option value="">Choose…</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5+</option>
      </select>
      <label htmlFor="pets">Pets</label>
      <select id="pets" name="pets">
        <option value="">Choose…</option>
        <option>No pets</option>
        <option>Cat</option>
        <option>Small dog</option>
        <option>Large dog</option>
        <option>Multiple</option>
      </select>
      <label htmlFor="employment">Employment status *</label>
      <select id="employment" name="employment" required>
        <option value="">Choose…</option>
        <option>Full-time</option>
        <option>Part-time</option>
        <option>Self-employed</option>
        <option>Student</option>
        <option>Other</option>
      </select>
      <label htmlFor="notes">Anything we should know?</label>
      <textarea id="notes" name="notes" placeholder="References, special needs, etc." />

      <button type="submit" disabled={status === 'sending'}>
        {status === 'sending' ? 'Sending…' : 'Send'}
      </button>

      {status === 'error' && <p>Something went wrong. Try again.</p>}
    </form>

      <p style={{ marginTop: 12, fontSize: 11, color: '#888', textAlign: 'right' }}>
        Powered by <a href="https://splitforms.com" target="_blank" rel="noopener" style={{ color: '#888', textDecoration: 'none' }}>splitforms</a>
      </p>
    </>
  );
}
04PHPsubmit.php28 lines
<?php
// Drop into a PHP page. Receives a form POST and proxies it to splitforms.com.
// Useful when you want to add server-side validation or rate limiting.

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $allowed = ['name', 'email', 'phone', 'property', 'move_in', 'household', 'pets', 'employment', 'notes'];
    $payload = ['access_key' => 'YOUR_ACCESS_KEY'];
    $payload['subject'] = 'New rental inquiry';

    foreach ($allowed as $f) {
        if (isset($_POST[$f])) $payload[$f] = $_POST[$f];
    }

    $ch = curl_init('https://splitforms.com/api/submit');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json']);
    $response = curl_exec($ch);
    $status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    header('Content-Type: application/json');
    http_response_code($status);
    echo $response;
    exit;
}
?>
05cURLtest.sh13 lines
curl -X POST https://splitforms.com/api/submit \
  -H "Accept: application/json" \
  -d "access_key=YOUR_ACCESS_KEY" \
  -d "subject=New rental inquiry" \
  -d "name=Jane Builder" \
  -d "email=jane@example.com" \
  -d "phone=+15555555555" \
  -d "property=Jane Builder" \
  -d "move_in=2026-05-15" \
  -d "household=1" \
  -d "pets=No pets" \
  -d "employment=Full-time" \
  -d "notes=Hello from cURL" 

Replace YOUR_ACCESS_KEY with the key from your dashboard. That’s the only edit.

§ 06FAQ4 answered

Things people ask before they ship.

Direct answers, no marketing fluff. Missing one? Email hello@splitforms.com.

01Is asking about income discriminatory?
No — income-to-rent ratio is a standard underwriting check protected by federal Fair Housing law (income source can't be discriminated against; income amount can). What you can't do is screen on family status, race, disability, etc. Stick to income, employment, occupants, pets, and move-in date.
02What about Fair Housing compliance?
Don't ask about national origin, religion, family status (married/unmarried), disability, or any protected class. The standard pre-screen fields (income, employment, occupants count, pets, move-in date, references) are all safe. Run your final form past your local landlord-tenant attorney.
03Can I integrate with AppFolio / Buildium / RentRedi?
Yes — webhook the JSON. AppFolio and Buildium both accept inbound leads via Zapier; RentRedi has a direct webhook receiver. The lead lands on the property record ready for the formal background-check application.
04Should I collect Social Security on this form?
No — never on a public form. SSN belongs on the formal application after the pre-screen passes, on a secure portal with the background-check service. Public forms collecting SSN are a data-breach lawsuit waiting to happen.
✻ ✻ ✻

Ship your rental application form (tenant inquiry) in 60 seconds.

1,000 free submissions per month. No credit card. Copy the snippet, paste your access key, watch leads land in your inbox.

Get free access key →Browse all 60 templates →
v0.1 · founders pricing locked in · early access open