Hosting and deploy platforms
Add a contact form to Netlify
Netlify Forms is convenient right up until the free tier's 100 submissions a month, or until you want a submission to reach Slack and a webhook rather than just an inbox. Because our endpoint is an ordinary URL, there is no build-time form detection, no netlify attribute and no hidden form to keep in sync - and the same markup keeps working if you ever move off Netlify.
Setup
Copy your endpoint
Create a form in the dashboard.
Replace the netlify attributes
Delete data-netlify, the netlify attribute and any hidden form-name input. Set the action to your endpoint instead.
Deploy
No build plugin, no post-processing step, nothing in netlify.toml.
Netlify examples
Swap in your own endpoint and these run as-is.
Before - Netlify Forms, which needs build-time detection and a form-name field.
<form name="contact" method="POST" data-netlify="true"> <input type="hidden" name="form-name" value="contact" /> <input type="text" name="name" required /> <input type="email" name="email" required /> <textarea name="message" required></textarea> <button type="submit">Send</button> </form>
After - a plain form with an action. Nothing Netlify-specific remains.
<form action="https://send.webforms.to/wft_your_key" method="POST">
<input type="text" name="name" required />
<input type="email" name="email" required />
<textarea name="message" required></textarea>
<input type="hidden" name="_next" value="https://example.com/thanks" />
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true" />
<button type="submit">Send</button>
</form>Worth knowing
- Because there is no build-time detection, forms rendered entirely by JavaScript work too - a known rough edge with Netlify Forms on SPA routes.
Netlify form FAQ
No build-time form detection, a considerably higher free tier, and submissions can fan out to Slack, Discord, Telegram and webhooks rather than just email. It also keeps working unchanged if you move the site to another host.
Yes. There is nothing to detect at build time, so client-rendered and dynamically mounted forms behave the same as static ones.
Related guides
Ready to wire up your Netlify form?
Free for 300 submissions a month. Endpoint in under a minute, no card required.
Start free