What can a static site use as the backend of its contact or signup form?
If Netlify hosts the site, its Forms are free and unlimited on its credit-based plans, the free one included: turn on its form detection, mark the form with an attribute, and read the entries in its dashboard or through its API.
On another host, a form service takes the posts: Formspree's free plan takes 50 entries a month and emails each one, and FormSubmit needs no account and emails each entry to your address. With a free cloud plan, you can also write a small handler that stores them in a database.
AgentMart's Form inbox fits when your agent should read the entries itself: a form address with a spam guard, the entries as JSON or CSV through the API, and an optional daily digest email to your human, for $2 per 30 days.
Free ways
Checked on 2026-10-24. Facts about other services come from their own pages; the sources are under each one.
Netlify Forms
For a site that Netlify builds and hosts: with form detection on, its build finds the forms marked with a netlify attribute in your HTML and takes their posts.
- Free: Forms are free and unlimited on its credit-based plans, and submissions cost no credits. The Free plan has a 300 credit limit.
- Account and card: A Netlify account, with the site deployed there.
- Without a server: Yes.
- Keeps: Stored by Netlify; its pages do not give a period. You read and delete them in its dashboard or through its API.
- Mind: On the Free plan, a site that goes past its monthly limits is paused, and a paused site takes no form submissions. A form drawn only by JavaScript is not found by the build.
- Sources (read 2026-10-24): https://docs.netlify.com/manage/forms/setup/, https://docs.netlify.com/manage/forms/usage-and-billing/, https://docs.netlify.com/manage/accounts-and-billing/billing/billing-for-credit-based-plans/billing-faq-for-credit-based-plans/, https://docs.netlify.com/manage/forms/submissions/, https://www.netlify.com/pricing/
Formspree
A hosted form address: point the form's action at it, and each entry is emailed to you.
- Free: Free plan: 50 entries a month, as many forms as you like, basic spam filtering, no file uploads.
- Account and card: An account.
- Without a server: Yes.
- Keeps: An archive of 30 days on the free plan.
- Mind: No API on the free plan: the entries reach you by email, or you read them on its site.
- Sources (read 2026-10-24): https://formspree.io/plans
FormSubmit
Point the form's action at its address for your email. The first entry sends you an email asking you to confirm your address; after that, each entry is emailed to you.
- Free: No cost. The pages we read give no limit on entries.
- Account and card: No registration. An API key, if you want one, is sent to your email address.
- Without a server: Yes.
- Keeps: Emailed to you. The pages we read do not say how long it keeps entries; its API lists them with the key.
- Mind: reCAPTCHA is on by default, and its page recommends keeping it.
- Sources (read 2026-10-24): https://formsubmit.co/, https://formsubmit.co/api-documentation
Your own small handler on Cloudflare Workers and D1
A small Worker that takes the form's post and stores it in a D1 database, which you read later.
- Free: Workers: 100,000 requests a day, 10 ms of CPU time each. D1: 100,000 rows written a day, 5 GB.
- Account and card: A Cloudflare account.
- Without a server: Yes: nothing runs on your side, but you write and deploy the code.
- Keeps: Until you delete it. Only you can read it.
- Mind: A spam guard, protecting the read address and removing old rows are your job.
- Sources (read 2026-10-24): https://developers.cloudflare.com/workers/platform/pricing/, https://developers.cloudflare.com/d1/platform/pricing/
Side by side
| Way | Free, and its limits | Account and card | Without a server | How long, and who can read it |
|---|---|---|---|---|
| Netlify Forms | Forms are free and unlimited on its credit-based plans, and submissions cost no credits. The Free plan has a 300 credit limit. | A Netlify account, with the site deployed there. | Yes. | Stored by Netlify; its pages do not give a period. You read and delete them in its dashboard or through its API. |
| Formspree | Free plan: 50 entries a month, as many forms as you like, basic spam filtering, no file uploads. | An account. | Yes. | An archive of 30 days on the free plan. |
| FormSubmit | No cost. The pages we read give no limit on entries. | No registration. An API key, if you want one, is sent to your email address. | Yes. | Emailed to you. The pages we read do not say how long it keeps entries; its API lists them with the key. |
| Your own small handler on Cloudflare Workers and D1 | Workers: 100,000 requests a day, 10 ms of CPU time each. D1: 100,000 rows written a day, 5 GB. | A Cloudflare account. | Yes: nothing runs on your side, but you write and deploy the code. | Until you delete it. Only you can read it. |
| AgentMart Form inbox | Not free: $2 per 30 days. | No sign-up form: your human's account is made by their first top-up, by card (at least $5), or by the free start. | Yes. | Each entry 30 days from its arrival, while the plan runs and after it. When the plan ends, the form address takes no more entries (a visitor sees that the form is closed) until it is renewed; only you can still read, export and delete the entries. Only passports of the paying owner can use the instance. |
When AgentMart fits
Form inbox: A ready backend for contact, waitlist and signup forms on your site: spam guard, entries your agent can read, optional daily digest email to your owner. $2 per 30 days.
Your human pays first, with a top-up of at least $5 by card, unless a new account uses the free start (its rules: https://agentmart.ciphyr.ai/llms/free-start.md). Unused balance expires 12 months after your last top-up or purchase. Any top-up or purchase starts the 12 months again. Our guarantee and your human's legal rights are in the terms.
- A public form address for your site's HTML form or fetch(): form-encoded, multipart without files, or JSON. A field named _gotcha that people do not see is the spam guard: an entry that fills it is dropped.
- Up to 5,000 entries and 2 MB in total, each up to 16 KB with up to 50 fields. A full form refuses new entries instead of dropping old ones.
- Up to 30 entries a minute per form, with bursts of up to 300; one visitor address up to 10 a minute.
- After sending, the visitor sees our short thank-you page, or an https page of your own site named in a _next field (the same host as the form's page).
- Your agent reads the entries as JSON or CSV; a daily digest email to your human is optional.
- Who can read the entries: Only passports of the paying owner can use the instance.
Ask your human before you buy: it spends their balance. Over MCP (https://agentmart.ciphyr.ai/mcp):
buy {"item": "form-inbox"}
# Put the answer's form_url in your form: <form action="<form_url>" method="post">, with an empty _gotcha field that people do not see. Then read what arrived:
form_submissions {"instance_id": "<instance_id from the answer>"}Over HTTP, with a session token your signing code made (the manual's Auth page: https://agentmart.ciphyr.ai/llms/auth.md):
curl -X POST https://agentmart.ciphyr.ai/v1/orders \
-H "Authorization: Bearer $AGENTMART_SESSION" -H "Content-Type: application/json" \
-d '{"item": "form-inbox", "idempotency_key": "my-form-1"}'
# delivery.form_url goes in your form's action. A visitor's browser then posts to it, like this:
curl -X POST "<form_url>" -d "name=Ann" -d "message=Hello" -d "_gotcha="
curl https://agentmart.ciphyr.ai/v1/utilities/<instance_id>/submissions -H "Authorization: Bearer $AGENTMART_SESSION"When not to use AgentMart
- Your site's host has free forms of its own: use them.
- You need file uploads, entries over 16 KB, or more than 5,000 entries kept at once.
- You need entries kept longer than 30 days: export them as CSV, or store them yourself.
- Nobody will renew the plan every 30 days: when it ends, the form takes no more entries.
- Your human does not want to keep a prepaid balance.