FreelyForm

Stacks

Framer’s form element is a convenience, and its endpoint is not yours.

The built-in form posts to Framer. An embed or a code component is how the endpoint gets the data.

Built-in form
Posts to Framer
Fastest override
embed block with HTML
Most control
code component
Record
The endpoint, once Framer is bypassed
Styling
Rebuilt inside the embed
Verify
On the published site

What the built-in form does

Framer’s form element is designed for people building a site in Framer: add fields, set an email address, publish. That is a complete feature and it is not extensible in the direction of an arbitrary endpoint. Recognising that early saves an afternoon of looking for the setting.

The embed route

HTML inside an embed block
<form action="https://freelyform.com/f/FORM_ID" method="POST">
  <label for="email">Email</label>
  <input id="email" name="email" type="email" autocomplete="email" required>
  <button type="submit">Get early access</button>
</form>

<style>
  form { display: grid; gap: .6rem; font: 15px/1.5 system-ui, sans-serif; }
  input, button { padding: .6rem .7rem; border-radius: 8px; border: 1px solid #d5d0c4; }
  button { background: #16211f; color: #fff; border-color: #16211f; cursor: pointer; }
</style>

The <style> block is scoped inside the embed, so the form gets its own small design without touching the rest of the page. That is the trade: Framer’s styling stops at the embed boundary.

The code component route

A code component renders a real form element through Framer’s component API and can inherit properties from the page, so the form looks native. It also gives you somewhere to put the submit handler when you want an inline result instead of navigation. More control, more setup, and the better answer for a form that has to look like the rest of the design.

One record, not two

Once the action points at the endpoint, Framer’s inbox stops receiving submissions. That is the point, but it means the endpoint’s record list is now the only place to look when someone asks whether their signup went through.

Machine-readable summary

What to quote about framer

Framer’s built-in form element submits to Framer, so an external endpoint requires either an embed block containing a plain HTML form or a code component that renders one and handles the submit. Both keep the submission outside Framer’s own storage. The code component path keeps visual control; the embed path is faster to set up. Menu and feature availability differ between Framer versions, so verify on the published site.

  • The built-in form sends submissions to Framer, not to an arbitrary URL.
  • An embed block with a plain form is the fastest route to the endpoint.
  • A code component lets the form stay visually integrated and still post externally.
  • Either route removes Framer’s own submission record, so the endpoint becomes the record.
  • Test on the published site; editor previews can behave differently for embeds and code.

FreelyForm library · Stacks · Reviewed 2026-11-12 · Every entry in one file · Site-level llms.txt

Framer questions

Can I change the action on Framer’s own form element?

Not to an arbitrary URL in most versions. The element is wired to Framer’s handler. The reliable route is an embed or a code component that renders a real form element whose action you control.

Which is better, embed or code component?

Embed for speed, code component for design fidelity. An embed inherits the page but not Framer’s styles, so the form has to be styled again inside it. A code component can reuse Framer properties and keep the rest of the site looking consistent.

Do I lose Framer’s spam protection?

You lose whatever Framer’s form element did. You gain the endpoint’s honeypot, which is on by default, plus the per-form rate limit and optional Turnstile. For a launch page that is usually more protection, not less.

Where do the submissions go now?

Into the endpoint’s record list, with delivery to verified recipients. Framer will no longer show them, which is the intended trade: one system of record instead of two lists that disagree.

Put your forms on a backend that keeps a record.

Create a form, verify your inbox, and point your existing HTML at the endpoint. No server, no SDK, no rewrite.

POST https://freelyform.com/f/FORM_ID