Form Integration

Base44 lead form with an email for every entry

Base44 apps come with a managed database and Deno backend functions. A lead form usually wants less than that: an email per entry, a spam filter and a way into Slack or a CRM. Post the form to Formbold and you get those without writing a function.

Contact Form for Base44

What does a Base44 lead form look like with Formbold?

Base44 front ends use React with React Router, Vite, Tailwind and shadcn/ui. This component fits that setup. Change the import paths if yours differ.

base44.tsx
// src/components/LeadForm.jsx  (Base44 front ends use React, Vite, Tailwind and shadcn/ui)
// Adjust the "@/components/ui/..." paths if your project uses different ones.
import { useState } from "react";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea";

export default function LeadForm() {
  const [sending, setSending] = useState(false);
  const [msg, setMsg] = useState(null);

  async function handleSubmit(e) {
    e.preventDefault();
    const form = e.currentTarget;
    setSending(true);

    const reply = await fetch("https://formbold.com/s/FORM_ID", {
      method: "POST",
      headers: { "Content-Type": "application/json", Accept: "application/json" },
      body: JSON.stringify(Object.fromEntries(new FormData(form))),
    })
      .then(async (r) => ({ ok: r.ok, data: await r.json().catch(() => ({})) }))
      .catch(() => ({ ok: false, data: {} }));

    setSending(false);
    if (reply.ok) {
      form.reset();
      setMsg({ tone: "good", text: "You're on the list. We'll be in touch this week." });
    } else {
      setMsg({ tone: "bad", text: reply.data.message || "Something blocked the request." });
    }
  }

  return (
    <form onSubmit={handleSubmit} className="space-y-3">
      <Input name="name" placeholder="Name" required />
      <Input name="email" type="email" placeholder="Email" required />
      <Textarea name="message" placeholder="Anything we should know?" />
      <Button type="submit" disabled={sending} className="w-full">
        {sending ? "Sending..." : "Request access"}
      </Button>
      {msg && (
        <p className={msg.tone === "good" ? "text-green-600 text-sm" : "text-red-600 text-sm"}>{msg.text}</p>
      )}
    </form>
  );
}
How it works

Three steps in the Base44 chat

The Base44 chat makes the code change. You only copy one URL.

1

Get a Formbold endpoint

Create a form in All Forms and copy https://formbold.com/s/FORM_ID from the Form Setup tab.

2

Ask Base44 to wire it

"Create a LeadForm component with the shadcn/ui Input, Textarea and Button. On submit, POST name, email and message as JSON to https://formbold.com/s/FORM_ID using fetch with Accept: application/json. Disable the button while sending, show a green confirmation on success and the returned error message in red otherwise. Do not save this form to the Base44 database or call a backend function."

3

Publish and submit once

Publish the app, open the live URL, send one entry and check that it appears in Formbold Submissions and your inbox.

Features

Why use Formbold when Base44 already has a database?

The database stores rows. A lead form also needs someone to hear about them.

A heads-up for every lead

Formbold emails each submission on every plan. Starter adds CC and BCC for a shared sales inbox.

No Deno function to write

Base44 backend functions run on Deno. For a contact form you can skip writing one entirely.

Spam stays out of your data

Basic Spam Filter sends junk to a separate Spam folder instead of mixing it with real leads.

CRM and chat hooks

On Starter and up, send entries to HubSpot, Mailchimp, Slack or Zendesk from the Integrations tab.

Export without a plan change on Base44

Your entries live in Formbold, so you can export them from the Formbold dashboard whatever Base44 plan you are on.

FAQs

Base44 questions

Quick answers for app builders on Base44.

Yes. Save the record in Base44 if your app needs it, and post to Formbold for the email and integrations. Keep the field names the same in both.

Still have a question?

The docs cover setup, framework guides, integrations and spam protection, step by step.