✉️ Contact Form Backend

A contact form that actually works,
on any website — free

Stop duct-taping mailto: links. Point your form's action at a FormLM endpoint and every message is stored, browsable, and queryable. No server. No JavaScript required.

The contact form is the oldest unsolved problem on static sites

Every portfolio, landing page, and documentation site needs one. Few can run one.

The contact form is the single most requested feature for sites that have no backend: portfolios on GitHub Pages, agency landing pages, documentation sites, one-pagers. And it's where the workarounds get ugly — mailto: links that fail silently on webmail-only machines and feed your address to scrapers, contact details as plain text that visitors must copy by hand, or a full backend project (server, domain, deployment, TLS) just to receive messages.

A contact form backend collapses all of that into one URL. Your page stays exactly as static as it is today; the form's action points at your FormLM endpoint, and submissions arrive as structured records — with name, email, and message as separate, sortable columns rather than a blob in an inbox.

The contact form, complete

Copy, paste, replace the token, done.
<form action="https://formlm.me/api/v3/share/YOUR_TOKEN/form" method="POST">
  <label>Name</label>
  <input name="name" required>

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

  <label>How can we help?</label>
  <textarea name="message" rows="5" required></textarea>

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

<!-- Native HTML POST: no JavaScript, works on any static host. -->
Store, don't just forward

Messages become structured records — browse, filter, and export CSV from FormLM instead of dredging email threads.

Query API when you outgrow the inbox

Pull submissions over HTTP into a CRM, a Slack webhook, or a spreadsheet on a schedule.

Auto-created fields

Add a "company" or "budget" input later — the new name becomes a new column on the next submission. No reconfiguration.

Zero JavaScript

The native form POST works with JS blocked. Add a fetch handler later only if you want a custom thank-you state.

One caution worth stating plainly: a public endpoint stores whatever it's sent, so don't put passwords or payment data in a contact form — same rule as any contact form on the web.

Beyond contact: the same endpoint, more value

A contact form is the entry point. The data can do more than sit there.

Because submissions are structured records inside FormLM's engine, the same endpoint can grow into more than a message box. A consulting site's form can become a qualified intake questionnaire — extra fields for context, a link in the auto-reply, and eventually weighted scoring with a personalized PDF report per submission. A training site's form can become a short self-assessment. You keep the same two-line integration; the form's brain gets an upgrade.

And if your contact form lives on an AI-generated site — or you'd like an AI agent to triage incoming messages — the endpoint's ?help documentation makes the data readable to agents without any glue code. See the Data API for AI agents guide.

Frequently asked questions

How do I add a contact form to my website for free?

Create a free FormLM form, enable the Data API on the Publish tab, and set your HTML form's action attribute to the endpoint URL with method POST. The contact form starts storing submissions immediately — no server and no payment required.

Do contact form submissions get emailed to me?

Submissions land in your FormLM dashboard as structured records rather than an email you can lose or that gets spam-filtered. You can browse them, export CSV, and enable the query API to pull them into any tool — including automations that forward them wherever you like.

Can I use a contact form without a backend or PHP?

Yes. The endpoint accepts a native HTML form POST, so classic PHP-style form handling is unnecessary. Your page remains plain HTML on any static host — the storage happens on FormLM's side.

What fields should a contact form have?

The essentials: name, email, and message — plus optional subject or company. With auto-create fields enabled, whatever input names you use become the stored columns automatically, so you can tailor the form to your site without reconfiguring anything.

Is my visitors' data private?

Submissions are stored under your FormLM account, protected by your endpoint's token, and governed by FormLM's privacy policy. Do not place sensitive data like passwords in a public contact form.

Related guides

Your contact form works in the next 10 minutes

Free endpoint, native HTML support, records you can query.

Create your free endpoint →