Skip to main content
New:Build with AI agents

Framer contact forms
that actually reach your team.

Keep your page in Framer and point the form at Form Plume. Get email notifications, a searchable submissions dashboard, spam filtering, uploads, and integration fan-out without adding a backend.

Free foreverNo credit cardFramer form endpoint ready fast
framer-contact-embed.html
<form
  action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE"
  method="POST"
>
  <input type="hidden" name="source" value="framer-site">

  <input name="name" autocomplete="name" placeholder="Name" required>
  <input name="email" type="email" autocomplete="email" placeholder="Email" required>
  <textarea name="message" placeholder="How can we help?" required></textarea>

  <button type="submit">Contact us</button>
</form>

The full guide

Connect Framer to a real form backend.

Use a built-in form when it can post externally, or embed a plain HTML form when you need redirects, uploads, hidden fields, and a clean no-code handoff.

  1. 1
    Create your Form Plume accountStart free and give your Framer form a hosted endpoint for email, submissions, spam filtering, uploads, integrations, and webhooks.Start free
  2. 2
    Create the form and copy the endpointCopy the endpoint URL from Form Plume. It looks like https://api.formplume.com/f/your-slug
  3. 3
    Connect it inside FramerConnect the endpoint through a custom form or embed when Framer's built-in form block cannot set the submission target you need. Publish the Framer page and test the exact production URL so redirects and custom domains match.

You can use this AI prompt to hand the platform-specific wiring to an assistant without accidentally creating a backend.

Decide between built-in forms and an embed

Framer is excellent for polished marketing pages, but contact-form delivery should not force you into a custom server. Form Plume lets the page stay in Framer while the backend work happens in one hosted endpoint.

If your Framer form block can post to an external action, set that action to the Form Plume endpoint and keep the method as POST.

If the built-in block cannot expose the fields you need, use a custom code or embed form. That is usually the better path for hidden metadata, file uploads, custom thank-you routes, and no-code handoff to a client.

Build a custom form embed

Paste a plain HTML form into the embed area and keep the markup boring on purpose. The fewer moving parts the form has, the easier it is for a designer or client to maintain.

<form action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE" method="POST">
  <input type="hidden" name="source" value="framer-contact">
  <input type="hidden" name="_redirect" value="/thank-you">
 
  <label>
    Name
    <input name="name" autocomplete="name" required>
  </label>
 
  <label>
    Email
    <input name="email" type="email" autocomplete="email" required>
  </label>
 
  <label>
    Message
    <textarea name="message" rows="5" required></textarea>
  </label>
 
  <button type="submit">Send message</button>
</form>

The form posts directly to Form Plume. Form Plume handles email notifications, the stored dashboard copy, spam checks, optional files, and integrations without adding a Framer server function.

Keep the no-code handoff clear

For client handoff, name the embed or component clearly, then keep the endpoint near the top of the markup. If the client later creates a new Form Plume form, there is one obvious value to replace.

Use hidden fields for context that Framer editors understand, such as page, campaign, plan, or source. Avoid hidden fields that encode private customer data or anything the visitor should not submit.

When the page has several forms, give each one a different source value so the Form Plume dashboard and integrations can show where the lead came from.

Choose the thank-you behavior

Framer pages often use custom motion or inline confirmation states. A plain form can still redirect to a thank-you page by sending _redirect.

<input type="hidden" name="_redirect" value="/thank-you">

If you want an inline success message instead, add JavaScript only as progressive enhancement. Keep the original action and method so the form still works when a script fails.

Add files only when the flow needs them

For uploads, switch the form to multipart/form-data and add a file input.

<form
  action="PASTE_YOUR_FORM_PLUME_ENDPOINT_HERE"
  method="POST"
  enctype="multipart/form-data"
>
  <input type="file" name="attachment" accept=".pdf,.png,.jpg">
</form>

Form Plume stores attachments separately from email delivery so a large file does not break the notification.

Publish before judging the integration

Test on the published Framer URL, especially when the site uses a custom domain or redirect path. Submit once, then verify the email, Form Plume dashboard entry, spam status, and any integration fan-out.

If the result does not appear, inspect the published page and confirm the form still has the external endpoint. Visual previews can hide integration issues that only show up on the live page.

Primary sources

FAQ

Framer form questions
for launch day.

Yes, when the form setup exposes an external POST action. If the built-in form is too limited, use a custom embed with a plain HTML form that posts to Form Plume.

One line. Zero backend.

The form backend you don’t have to build.

Free foreverNo credit cardSet up in under a minute