How to Build a Real Estate Lead Form That Notifies on WhatsApp

Tutorials6 min read
Real estate lead form banner: budget, locality, WhatsApp delivery

Property buyers and renters already close details on WhatsApp. Your project or brokerage site still sends “contact us” emails that land after the evening walkthroughs are booked. This guide shows how to build a real estate lead form that notifies on WhatsApp: budget, locality, and intent fields in one HTML form, no CRM middleware on day one, and no backend on the marketing site.

You are not replacing a full CRM. You are capturing a site-visit or callback request with enough structure that an agent can reply in one tap while the buyer is still comparing listings.

What you’ll need

No PHP mailer, no “Zapier only works if the builder plugin is happy,” no serverless function per campaign.

Why “Call me” and bare contact forms lose site visits

Speed matters when two agents chase the same lead. Unstructured capture slows everyone down:

Capture method Typical failure
Phone number only No budget, no locality, cold callback
wa.me button Desktop friction; “Hi” with zero listing context
Generic contact form Free-text message, no budget band or BHK
Email-only notify Opens after the evening site visits are full

A lead form that forces budget and locality (and still notifies on WhatsApp) gives agents a filter before they dial. For when click-to-chat is enough versus when you need structured fields, see WhatsApp click-to-chat vs contact form. The general form-to-WhatsApp setup is in the pillar guide: send website form submissions to WhatsApp.

Field schema for a site-visit lead form

Stable name attributes matter more than pretty labels. WhatsApp and the dashboard show the keys you POST.

Field name Type Required Why
name text yes Buyer / renter name
phone tel yes Primary reach channel
email email optional Brochures and follow-up packs
intent select yes Buy / rent / invest / site-visit
locality text or select yes Area or project interest
budget select yes Band agents can filter on
property_type select optional Apartment, villa, plot, commercial
bhk select optional Configuration filter
preferred_date date optional Site-visit window
message textarea optional Timeline or loan status
api_key hidden yes FormsReach account routing

Tune budget and locality options to the market you sell in. Keep values short for chat readability ("50-75L", "whitefield", "2bhk").

Step 1: Copy the HTML lead form

Use the FormsReach submit endpoint and a hidden API key. Style with your landing-page CSS; the snippet is the data contract.

<form action="https://api.formsreach.com/submit" method="POST">
  <input type="hidden" name="api_key" value="YOUR_API_KEY" />

  <label>
    Full name
    <input type="text" name="name" required autocomplete="name" />
  </label>

  <label>
    Phone (WhatsApp)
    <input type="tel" name="phone" required autocomplete="tel" />
  </label>

  <label>
    Email
    <input type="email" name="email" autocomplete="email" />
  </label>

  <label>
    I want to
    <select name="intent" required>
      <option value="">Select</option>
      <option value="buy">Buy</option>
      <option value="rent">Rent</option>
      <option value="invest">Invest</option>
      <option value="site-visit">Book a site visit</option>
    </select>
  </label>

  <label>
    Locality / project
    <input
      type="text"
      name="locality"
      required
      placeholder="e.g. Whitefield, or project name"
    />
  </label>

  <label>
    Budget
    <select name="budget" required>
      <option value="">Select a range</option>
      <option value="under-50L">Under 50L</option>
      <option value="50-75L">50L - 75L</option>
      <option value="75L-1Cr">75L - 1Cr</option>
      <option value="1-2Cr">1Cr - 2Cr</option>
      <option value="2Cr-plus">2Cr+</option>
      <option value="rent-under-30k">Rent under 30k / mo</option>
      <option value="rent-30-60k">Rent 30k - 60k / mo</option>
    </select>
  </label>

  <label>
    Property type
    <select name="property_type">
      <option value="apartment">Apartment</option>
      <option value="villa">Villa / independent</option>
      <option value="plot">Plot</option>
      <option value="commercial">Commercial</option>
    </select>
  </label>

  <label>
    Configuration
    <select name="bhk">
      <option value="">Any</option>
      <option value="1bhk">1 BHK</option>
      <option value="2bhk">2 BHK</option>
      <option value="3bhk">3 BHK</option>
      <option value="4bhk-plus">4 BHK+</option>
    </select>
  </label>

  <label>
    Preferred site-visit date
    <input type="date" name="preferred_date" />
  </label>

  <label>
    Notes
    <textarea
      name="message"
      rows="3"
      placeholder="Timeline, loan pre-approval, parking needs…"
    ></textarea>
  </label>

  <button type="submit">Request a callback</button>
</form>

Replace YOUR_API_KEY with your dashboard key. Do not change the endpoint (https://api.formsreach.com/submit) or the hidden field name (api_key).

This works on static hosts and most builders the same way: browser POST, external API, site stays static. Details: contact form on a static website without a backend.

Step 2: Optional JS SDK for landing pages

Paid traffic landing pages often want stay-on-page success states. Use @formsreach/js:

<script src="https://unpkg.com/@formsreach/js/dist/formsreach.min.js"></script>
<script>
  FormsReach.init({ apiKey: 'YOUR_API_KEY' });
</script>

<form data-formsreach>
  <input type="text" name="name" required />
  <input type="tel" name="phone" required />
  <select name="intent" required>
    <option value="">I want to</option>
    <option value="buy">Buy</option>
    <option value="rent">Rent</option>
    <option value="site-visit">Site visit</option>
  </select>
  <input type="text" name="locality" required />
  <select name="budget" required>
    <option value="">Budget</option>
    <option value="50-75L">50L - 75L</option>
    <option value="75L-1Cr">75L - 1Cr</option>
    <option value="1-2Cr">1Cr - 2Cr</option>
  </select>
  <textarea name="message" rows="3"></textarea>
  <button type="submit">Request a callback</button>
</form>

Keep the same field names as the HTML version so WhatsApp templates of the message stay consistent across campaigns.

Step 3: Route notifications to the right agents

Email first: Free and Starter meter email (and free webhooks / workflow rules) from monthly credits. Free includes 500 credits per month (typically 1 credit per accepted submission + 1 per email).

WhatsApp on Pro and Agency: verify each agent number with OTP. You can attach multiple numbers per form (up to the plan limit) so site-visit leads hit the floor team, not a shared inbox nobody owns.

Practical routing tips:

  1. One FormsReach form per major project or city cluster if different teams own different inventories.
  2. Use a webhook (0 credits) into your sheet or CRM if ops already lives there; keep WhatsApp as the “reply now” channel.
  3. Test on the production domain after allowlisting it.

You do not need WhatsApp enabled to prove the form works. Turn chat on when agents ignore email.

What a good WhatsApp lead looks like

FormsReach WhatsApp notification for a new form submission, showing name, mobile, email, and a View Submission button

Same form API; extra keys appear like any other field. Useful when two campaigns share one project page.

Step 4: Smoke-test before spend goes live

  1. Submit as a fake buyer with a phone you control.
  2. Confirm every custom field in the FormsReach dashboard.
  3. Confirm email / WhatsApp content is readable on a phone screen (long budget labels wrap badly; keep values short).
  4. Block empty required fields in the browser; confirm spammy submissions are filtered without a CAPTCHA wall that kills conversion.
  5. Retest after the ad URL gets UTM parameters.

Troubleshooting

Agents say WhatsApp never fired
Plan must include WhatsApp (Pro/Agency), number OTP-verified, credits remaining for a WhatsApp send. Form acceptance and channel delivery are separate credit events.

Budget or locality missing in chat
Inspect the live HTML for name="budget" and name="locality". Builders sometimes rename fields to internal IDs.

Works on preview URL, fails on custom domain
Allowlist both hosts. Confirm production still has the hidden api_key after the builder publish step.

CORS errors after switching to fetch
Prefer classic form POST or the official FormsReach.init + data-formsreach path instead of hand-rolled fetch to the API.

Need the same recipe for clinic appointments
Different fields, same endpoint: clinic appointment form to WhatsApp.

Ship real estate leads without bolting on a CRM first

A real estate lead form that notifies on WhatsApp is structured fields (budget, locality, intent), a POST to https://api.formsreach.com/submit, and channel settings in a form API. FormsReach gives you that endpoint, spam filtering without CAPTCHA, email on Free (500 credits/month), free webhooks, and WhatsApp on Pro and Agency via Meta’s Business API. No backend on the project site, no plugin maze for a campaign that should have gone live yesterday.

Get your free API key →

#whatsapp#form-api#no-backend