FormLoom

Framer lead capture form

Qualify inbound leads with company and budget context.

Recommended fields

FieldTypeRequired
nametextYes
emailemailYes
companytextNo
budgetselectNo
messagetextareaNo

The code

Add an Embed element to your Framer page, choose HTML, and paste a `<form method="POST">` block pointing at FormLoom. Include a small `<style>` block in the same embed so the form matches your site's design.

Plain HTML (no JavaScript)
contact.html
<form action="https://formloom.vercel.app/api/submit/YOUR_ACCESS_KEY" method="POST">
  <label>
    Name
    <input type="text" name="name" required />
  </label>
  <label>
    Work email
    <input type="email" name="email" required />
  </label>
  <label>
    Company
    <input type="text" name="company" />
  </label>
  <label>
    Budget
    <select name="budget">
      <option value="< $1k">< $1k</option>
      <option value="$1k–$10k">$1k–$10k</option>
      <option value="$10k–$50k">$10k–$50k</option>
      <option value="$50k+">$50k+</option>
    </select>
  </label>
  <label>
    What do you need?
    <textarea name="message"></textarea>
  </label>
  <!-- honeypot: bots fill this, humans don't see it -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
  <button type="submit">Send</button>
</form>
AJAX fetch (vanilla JS)
contact.html
<form id="contact-form">
  <label>
    Name
    <input type="text" name="name" required />
  </label>
  <label>
    Work email
    <input type="email" name="email" required />
  </label>
  <label>
    Company
    <input type="text" name="company" />
  </label>
  <label>
    Budget
    <select name="budget">
      <option value="< $1k">< $1k</option>
      <option value="$1k–$10k">$1k–$10k</option>
      <option value="$10k–$50k">$10k–$50k</option>
      <option value="$50k+">$50k+</option>
    </select>
  </label>
  <label>
    What do you need?
    <textarea name="message"></textarea>
  </label>
  <!-- honeypot: bots fill this, humans don't see it -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
  <button type="submit">Send</button>
</form>

<script>
const form = document.getElementById("contact-form");
form.addEventListener("submit", async (e) => {
  e.preventDefault();
  const res = await fetch("https://formloom.vercel.app/api/submit/YOUR_ACCESS_KEY", {
    method: "POST",
    headers: { "Content-Type": "application/json", Accept: "application/json" },
    body: JSON.stringify(Object.fromEntries(new FormData(form))),
  });
  const data = await res.json();
  if (data.success) {
    form.reset();
    alert("Thanks — we got your message.");
  } else {
    alert(data.message || "Something went wrong.");
  }
});
</script>
@formloom/client (typed SDK)
submit.ts
// npm i @formloom/client
import { createForm } from "@formloom/client";

type Contact = {
  name: string;
  email: string;
  company?: string;
  budget?: string;
  message?: string;
};

const form = createForm<Contact>("YOUR_ACCESS_KEY");

// End-to-end typed: TS errors if you send the wrong shape.
const { success, message } = await form.submit({
  name: form.name.value,
  email: form.email.value,
  company: form.company.value,
  budget: form.budget.value,
  message: form.message.value,
});

Tips

  • Forward to your CRM via webhook so leads land where sales works.
  • Use AI spam scoring to filter junk leads before they reach sales.

FAQ

Add a webhook pointing at your CRM's inbound endpoint (or Zapier/Make) — every submission is forwarded as JSON.
Framer lead capture form — copy-paste code + live demo · FormLoom