v0.1.1 · live

The agentic
form backend
for static sites._

One CLI for AI agents. One dashboard for everyone else. Both write to the same endpoint. No SDK to learn, no server to host, no copy-pasting form IDs from a dashboard.

  • 100 submissions for $10
  • Spam doesn't cost a credit
  • Credits never expire
~/your-site zsh
# 1. install + log in (browser pops, you click Authorize)
$ npx formsubmit-cli login
 Token saved to ~/.formsubmit/config.json

# 2. create a form, get HTML to paste
$ npx formsubmit-cli init --name "Contact"
 Form created: 7ab4aa9a

  <form action="…/f/7ab4aa9a" method="POST">
    <input name="email" required>
    <button>Submit</button>
  </form>

# 3. watch submissions flow in
$ npx formsubmit-cli submissions list 7ab4aa9a --json
[
   "email": "[email protected]",
    "createdAt": 1779352656010 
]
// INSTALL
npm i -g formsubmit-cli
// OUTPUT
stable JSON, exit codes
// DASHBOARD
app.formsubmit.site
For developers · agents

Designed for the agentic era of the web.

Every operation is a single shell command. --json on every read. Stable exit codes. Errors on stderr. No SDK, no copy-pasting form IDs.

  • Browser device-code login No API key paste-shenanigans. formsubmit login opens a browser and you click Authorize.
  • JSON output on every read forms list --json | jq works. Stable shapes. Agents don't get surprised.
  • Works in Claude Code, Cursor, Bolt, v0, Replit Anything that can run a shell command can ship a form backend with one tool call.
  • /llms.txt & /.well-known/formsubmit.json Discovery files so vibecoding tools surface us without you doing anything.
// agent recipe — drop this in your agent's tool bash
# 1. ensure auth + credits, abort with a helpful hint otherwise
formsubmit whoami --json || formsubmit login
CREDITS=$(formsubmit credits --json | jq -r .availableCredits)
[ "$CREDITS" -le 0 ] && { echo "run: formsubmit credits buy"; exit 2; }

# 2. create the form and capture its endpoint
FORM_JSON=$(formsubmit forms create --name "Contact" --json)
FORM_ID=$(echo "$FORM_JSON" | jq -r .id)
ENDPOINT=$(echo "$FORM_JSON" | jq -r .endpoint)

# 3. drop the snippet into the user's site
formsubmit snippet "$FORM_ID" --fields name,email,message > contact.html

echo "✓ form ready at $ENDPOINT"
echo "  view: formsubmit submissions list $FORM_ID"
--json on every read stdout = data stderr = logs exit ≠ 0 on error stable shapes
For teams · founders

Or just paste an HTML form and forget about it.

You don't have to know what a CLI is. Create a form in the dashboard, paste the HTML snippet into your site, get an email when someone fills it out. Done.

  • Real-time inbox Submissions land in a dashboard with search, CSV export, and spam filtering you don't have to think about.
  • Email on every submission Optional per-form. Flip a switch, get the inbound straight to your inbox.
  • File uploads, redirects, custom thank-you pages Everything you'd want from a form backend without standing one up.
  • Pay only for submissions you receive 100 credits = 100 submissions = $10. Credits never expire. No subscription.
/forms/contact 42 new
Maya Patel · [email protected]

Loved the workshop — can we book another?

2 min ago
Jordan K. · [email protected]

Need help integrating with our static Next site.

11 min ago
Sam Vasquez · [email protected]

Pricing question — annual discount?

38 min ago

Demo request from the homepage form.

1 hr ago
showing 4 of 2,634 · view all in dashboard →
// paste this into your site — that's it HTML
<form action="https://app.formsubmit.site/f/abc123" method="POST">
  <input name="name" required>
  <input name="email" type="email" required>
  <textarea name="message"></textarea>
  <button>Submit</button>
</form>
What you get

Six primitives. Nothing else to learn.

FormSubmit is intentionally small. Every feature listed below is shipped, documented, and reachable from both the CLI and the dashboard.

// Endpoint

One URL, any HTML form.

Point your <form action> at our endpoint. We capture the POST, store the data, optionally email you. No JS required.

// CLI

Created from the terminal.

Vibe coders + agents skip the dashboard entirely. `npx formsubmit-cli init` returns a form ID and a snippet.

// Dashboard

Inbox for everyone else.

Search submissions, export CSV, see who submitted what when. No SQL required.

// Email

Notifications per form.

Flip a switch — get an email at your account address on every non-spam submission. Costs +1 credit per email.

// Files

Attachments to R2.

Submissions with file uploads land in cloud storage with signed URLs. 1 GB free, scale as you go.

// Anti-spam

Heuristics, not friction.

Rate-limit + duplicate detection + content scoring. We flag spam without making your users solve puzzles.

Pricing

One credit. One submission.
$0.10 to start._

No monthly plans. No tiers locked behind sales calls. Buy credits when you need them, pay less per submission as you grow. Credits never expire.

Buy what you need, when you need it. Top up in seconds — from the dashboard or the CLI.
Spam doesn't cost a credit. We only charge for clean submissions.
Email notifications cost +1 credit per submission. Off by default.
Unlimited forms. Pay for what you receive, not what you create.
Pack
Submissions
Per
Price
100 credits
starter
100
$0.10
$10
500 credits
mid
500
$0.10
$50
1000 credits
growth
1,000
$0.08
$80
2500 credits
high-volume
2,500
$0.07
$175
From the CLI: formsubmit credits buy opens the checkout in your browser and the CLI waits until the credits land — exit 0 once they do.
Two ways in

Pick your surface. Same backend either way.

Spin up a form in the terminal, or click through the dashboard. Both write to the same database, both bill from the same credit pool.

FAQ

Questions, mostly answered.

How does FormSubmit work? +
Point your
at https://app.formsubmit.site/f/{form_id} and POST as you would to any backend. We capture the data, run spam checks, save it, and (optionally) email you. No JS required, no server to host.
What's the difference between the CLI and the dashboard? +
Same product, different surfaces. The CLI is for developers and AI agents — everything is a shell command with --json output. The dashboard is for everyone else — sign up at app.formsubmit.site, click around. Both write to the same database.
How much does it cost? +
Pay-as-you-go credits. 100 credits = $10. 1 credit = 1 submission. Bigger packs cost less per submission (down to $0.07). Credits never expire. Spam doesn't get charged. Email notifications add +1 credit per submission (off by default).
Do you work with my static site framework? +
Yes — Astro, Next (static export), Hugo, Eleventy, Jekyll, plain HTML, anything. FormSubmit is a backend; it just receives POSTs. No framework integration needed.
How much does it cost to get started? +
100 credits for $10 — and that's the minimum top-up. 1 credit = 1 submission. After that you only buy more when you need them. No subscription, no auto-renew, no monthly minimum. Credits never expire.
How does the CLI authenticate? +
formsubmit login opens a browser to authorize the CLI via a device-code flow (same pattern as gh auth login). The CLI stores a Bearer token at ~/.formsubmit/config.json with mode 0600. You can also paste a token via --token for headless / CI use.
Can my AI agent use FormSubmit? +
That's exactly what it's built for. Claude Code, Cursor, Replit, Bolt, v0, Lovable — anything that can run a shell command can ship a form backend with one tool call. See the agent guide for the canonical recipe.
What about spam? +
Three layers: rate limiting per IP per form, content scoring (suspicious patterns), duplicate detection. Flagged submissions are stored but not charged a credit and don't trigger email notifications.
Where is the data stored? +
Edge-hosted on a major cloud provider — submission rows in a managed SQLite database, file uploads in S3-compatible object storage. Data lives in the region closest to the edge that received it (US / EU clusters).

Still stuck? Email [email protected].