Lead capture forms

Point any form on your website at KruxCRM. Plain HTML or JSON, with built-in spam protection.

The idea

Your website keeps its own form — KruxCRM gives it somewhere useful to go. Create a form under Settings → Lead forms, point your form's submit at the endpoint URL, and every submission becomes a tagged lead (or an update to an existing contact) with the message on their timeline.

Plain HTML — no JavaScript needed

<form action="https://kruxcrm.com/api/forms/YOUR_FORM_TOKEN" method="POST">
  <input type="email" name="email" required placeholder="Email">
  <input type="text" name="name" placeholder="Name">
  <input type="tel" name="phone" placeholder="Phone (optional)">
  <input type="text" name="address" placeholder="Address (optional)">
  <textarea name="message"></textarea>

  <!-- honeypot: keep hidden, leave empty -->
  <input type="text" name="_gotcha" style="display:none" tabindex="-1">

  <!-- optional: your own thank-you page -->
  <input type="hidden" name="_redirect" value="https://yoursite.com/thanks">

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

Or JSON

await fetch("https://kruxcrm.com/api/forms/YOUR_FORM_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ email, name, message, _gotcha: "" })
});
// => { "ok": true }

Fields

email is required. Optional: name (or first_name / last_name), phone, company, job_title, address, interest (a "reaching out as…" choice, prepended to the message), and message (shown on the contact's timeline).

Spam protection, built in

  • Domain allowlist — submissions are only accepted from the website domains you list on the form.
  • Honeypot — bots that fill the hidden _gotcha field are silently dropped.
  • Rate limiting — bursts from a single visitor are rejected.
  • Deduplication — a known email updates the existing contact instead of creating duplicates; existing data is never overwritten.

Pause a form anytime — its endpoint immediately stops accepting.