Formstork

FRAMEWORK

The form backend for your Nuxt app

Formstork is the backend that receives your Nuxt form's POST. Send your fields to a Formstork endpoint with your access key, and Formstork emails you each submission, sets the visitor's email as the reply-to, and saves it to a searchable dashboard. There is no server route to build or keep running.

How it works

Nuxt is great at rendering your form, but the data still needs somewhere to go. Formstork is that destination. Your component POSTs its fields to https://api.formstork.com/submit with a hidden access_key, and Formstork does the rest: it stores the submission, emails it to you with the visitor's address as the reply-to, and runs it through spam filtering. Because the request goes straight to the endpoint, you do not need a Nitro server route, a database, or an SMTP service. It works the same way whether the page is server-rendered or shipped as a fully static site.

vue
<script setup>
const status = ref("")

async function onSubmit(e) {
  status.value = "sending"
  const res = await fetch("https://api.formstork.com/submit", {
    method: "POST",
    headers: { Accept: "application/json" },
    body: new FormData(e.target),
  })
  status.value = res.ok ? "sent" : "error"
}
</script>

<template>
  <p v-if="status === 'sent'">Thanks, we got your message.</p>
  <form v-else @submit.prevent="onSubmit">
    <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
    <input type="email" name="email" placeholder="Your email" required />
    <textarea name="message" placeholder="Your message" required></textarea>
    <button :disabled="status === 'sending'">Send</button>
  </form>
</template>

No server route to maintain

You do not need a Nitro API route, a database, or an SMTP setup. The form posts straight to Formstork, so your Nuxt app stays purely frontend and there is one less thing to deploy and monitor.

Same code, static or SSR

Whether you deploy Nuxt as a static site or with server-side rendering, the fetch call to the endpoint is identical. Nothing about form handling changes when you switch your render mode.

Every submission, saved and searchable

Beyond the email, each entry is stored in a searchable, taggable dashboard and can be exported to CSV or JSON. You can also route submissions to Slack, Notion, Google Sheets, and signed webhooks.

Set it up

  1. 1Grab a free access key from the Formstork dashboard at app.formstork.com. No credit card needed.
  2. 2In a Nuxt component, add a form and POST it to https://api.formstork.com/submit with a hidden access_key field.
  3. 3Include an email field so Formstork sets the visitor's address as the reply-to on every notification.
  4. 4Run npm run dev, send a test submission, and watch it land in your inbox and dashboard.

Frequently asked questions

How do I handle form submissions in Nuxt without a backend?

Point your form at Formstork. Your Nuxt component POSTs its fields to https://api.formstork.com/submit with a hidden access_key, and Formstork emails you each submission, stores it in a dashboard, and sets the visitor's email as the reply-to. You write no server code.

Do I need a Nitro server route or API endpoint?

No. The form posts directly to the Formstork endpoint from the browser, so you do not need a Nitro route, a database, or a mail service. If you prefer to proxy the request through your own server route you can, but it is not required.

Can I use the @formstork/vue composable in Nuxt?

Yes. Nuxt runs on Vue, so the @formstork/vue package works in any script setup component. The plain fetch approach shown here has no dependencies and is a good fallback if you would rather not add a package.

Try Formstork free

250 submissions a month with a full dashboard. No credit card required.

Get your access keyRead the docs