Steps
-
Write the form with names on every field
A service saves only what has a
name. Mark what is required, and use the righttypeso phones show the right keyboard.<form method="POST" action="..."> <input name="name" required> <input name="email" type="email" required> <textarea name="message"></textarea> <button>Send</button> </form>
-
Pick a service
All three take the same form. Only the
actionand the setup differ.Formspree Netlify Forms Uno Action https://formspree.io/f/{form_id}the page's own address, with an attribute /__formsWorks on Any site It works for sites hosted on Netlify; Netlify reads the form when you deploy Sites published on Uno Free $0 a month, 50 submissions a month See Netlify's pricing Free; up to 120 entries an hour per site Entries go to Your email, the dashboard Shown in the Netlify UI your email, Telegram, or a webhook Paid next Personal: $15 a month, or $10 a month billed yearly See Netlify's pricing Nothing to buy -
Formspree: create the form, paste the address
Sign up, press New form, name it, set the email that gets the entries, press Create Form, and copy the form's endpoint. Put that address into
action. Formspree saves every field that has a name attribute. After a send, the visitor lands on a thank-you page and the entry goes to your Formspree account.<form method="POST" action="https://formspree.io/f/your-form-id"> ... </form>
The free plan is for testing: unlimited forms, 30 days of submission archive, no file uploads. The next plan, Personal, costs $15 a month, or $10 a month billed yearly, and takes 200 submissions a month, with 1 GB of file uploads.
-
Netlify: add an attribute, deploy
If the site is on Netlify, add data-netlify="true" and a name attribute to the form tag. Netlify reads the form when you deploy.
<form name="contact" method="POST" data-netlify="true"> ... </form>
-
Send the visitor somewhere after the send
By default the service shows its own thank-you page. A hidden field changes where the visitor lands, and a hidden trap field keeps most bots out: people never see it, bots fill it.
<input type="hidden" name="_redirect" value="/thanks.html"> <input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">
The field names are not the same in every service. Those two are the ones Uno uses; look up the names in your service's docs.
Check that it works
Send a test entry from the real page, then open your inbox. Then post to the form from a terminal to see the service answer a script too.
$ curl -s -X POST https://my-cafe.uno4.me/__forms \ -H "Accept: application/json" \ -d "name=Test" -d "[email protected]" -d "message=hello" {"ok":true}
In Uno: no service to sign up for
A site published on Uno already has the endpoint: the same address, path /__forms. Use a plain form, with nothing to register:
<form action="/__forms" method="POST"> <input name="name" required> <input name="email" type="email" required> <button>Send</button> </form>
Entries are kept
Every entry is stored, and you see them all on the site's Forms tab in the console. The account's own email works at once; another address gets a confirmation letter first.
Entries are delivered
Out of the box, a new site with a form sends every entry to your account's email. The Forms tab has a switch for each channel: email, Telegram or a webhook, each with its own switch. You connect Telegram yourself: a message from the Uno bot, or from your own bot with its token and a chat ID.
The visitor sees a result
A hidden field named _redirect with a path on the same site sends the visitor there after the send. Without _redirect the visitor sees a short thank-you page. A fetch call that asks for JSON gets {"ok":true} instead of a page.
A webhook gets a POST with JSON to your URL: a CRM, Zapier, n8n. For bots: A hidden field named _gotcha: a bot that fills it gets a success answer, and the entry is dropped. A spam filter is on. In Uno Work you can also ask: "add a contact form that sends to my email". The agent writes the form and publishes it.
| Limit | |
|---|---|
| One entry | 32 KB, 50 fields |
| Entries per site | 120 an hour |
| Entries per visitor | 10 a minute |
| Price | Free, on every plan |
The short way: a form on a free site
Ask the agent in Uno Work for a page with a contact form and publish it. Sites on Uno are free. Out of the box, a new site with a form sends every entry to your account's email, so the first lead does not get lost.
Sites and forms: free
What a form service does not do
- It collects entries. It does not run logic: no accounts, no payments, no reply that depends on the answer. For that you need server code on a computer.
- On Uno an entry is up to 32 KB, so it is a request form, not a place to upload files. Put big files in cloud storage.
- Free tiers have a count. Formspree's free plan takes 50 submissions a month: enough for a test, tight for a launch.
- Entries are text in an email. Do not collect passwords or card numbers in a form.
Forms are free. Logic needs a computer
When an answer should trigger code, a database or a bot, run it on a computer. It starts at the price below.
Small
A Telegram bot, a VPN, a small backend
$5/ month
- 1 vCPU · 1 GB
- 15 GB disk
- 25 GB cloud storage
- 5 boosts a month
Plus
Agents that work with your laptop closed
$20/ month
- 4 vCPU · 4 GB
- 40 GB disk
- 100 GB cloud storage
- Uno Work in the cloud
Pro
A product in production, a second MacBook
$70/ month
- 16 vCPU · 16 GB
- 120 GB disk
- 300 GB cloud storage
- Speed of a MacBook Air M4
Max
A team and many agents at once
$200/ month
- 32 vCPU · 48 GB
- 300 GB disk
- 1,024 GB cloud storage
- 5 public IPv4
Add Uno AI to any plan: 40 h of AI work a month on Small, 100 h on Plus, unlimited on Max. Today: GLM-5.3 Flash and MiMo v2.6 Pro. Or sign in with your own Claude or ChatGPT.
Common problems
The entry arrives with empty fields
name. Add a name to every input, select and textarea.The email does not arrive
Visitors see a plain thank-you page and I want mine
_redirect field with a path on the same site, such as /thanks.html.The form works on my computer and fails on the site
/__forms exists only on the published site. Publish it and test there.I get too many junk entries
_gotcha gets a success answer and its entry is dropped.