netlify-forms

Implements serverless form handling on Netlify with deploy-time detection, spam filtering, and submission storage.

Updated May 19, 2026
One-click install
npx skills add https://github.com/costrict-plugins-repo/anthropic-netlify-skills --skill netlify-forms-costrict-plugins-repo
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: netlify-forms
Source: https://github.com/costrict-plugins-repo/anthropic-netlify-skills/tree/main/codex/skills/netlify-forms
Command: npx skills add https://github.com/costrict-plugins-repo/anthropic-netlify-skills --skill netlify-forms-costrict-plugins-repo

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Adding a working contact, lead-capture, or file-upload form to a static or framework-based site normally requires building and maintaining a backend endpoint. Netlify Forms detects HTML forms at deploy time and handles submission storage, spam filtering, and notifications without any server code, but getting it right involves non-obvious rules around SSR apps, AJAX encoding, and spam false positives. ## Core Features & Use Cases - Deploy-time form detection: Mark forms with data-netlify="true" and Netlify registers them by parsing the built HTML, with no runtime API or backend code. - Framework and SSR support: Register JS-rendered forms in Next.js, Nuxt, SvelteKit, Astro, and Gatsby using a static skeleton file (public/__forms.html) with exactly matching field names. - AJAX submission and file uploads: Submit URL-encoded form data via fetch, upload files with multipart requests, and redirect to custom extensionless success pages. - Spam prevention and notifications: Use honeypots, Netlify or custom reCAPTCHA, Akismet filtering, and configurable email/webhook/Slack notifications with templated subject lines. - Use Case: A Next.js site's contact form silently fails because fetch("/") is intercepted by the SSR catch-all. This Skill directs you to create the static skeleton file and POST to /__forms.html instead. ## Quick Start Add a contact form to my Netlify-hosted Astro site with a honeypot, AJAX submission, and a custom thank-you page.

Frequently Asked Questions about netlify-forms

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add a contact form to a Netlify site?

Add data-netlify="true" to a standard HTML form with a unique name attribute, then enable form detection in the Netlify UI under Forms. Netlify parses the built HTML at deploy time and stores submissions without any backend code.

How do I make Netlify Forms work with Next.js or other SSR frameworks?

Create a static skeleton file at public/__forms.html containing a hidden copy of each form with data-netlify="true" and exactly matching field names. POST AJAX submissions to /__forms.html, not /, because the SSR catch-all function intercepts requests to /.

Why are my Netlify form submissions missing?

Missing submissions are usually Akismet false positives, so check the Spam list in the UI or query the API with ?state=spam and mark entries verified. Also confirm form detection is enabled and that JS-rendered forms have a matching static skeleton file.

Can I submit a Netlify form with AJAX and JSON?

AJAX submission works via fetch, but the body must be URL-encoded using URLSearchParams; JSON is not supported. Include the form-name field in the body if the rendered form lacks the hidden form-name input.

What are the file upload limits for Netlify Forms?

Netlify Forms allows one file per field, an 8 MB maximum request size, and a 30-second upload timeout. For AJAX uploads, do not set a Content-Type header so the browser sets the multipart boundary automatically.

How do I add spam protection to a Netlify form?

Add a honeypot by setting netlify-honeypot="bot-field" on the form with a CSS-hidden input of that name, or add data-netlify-recaptcha="true" plus a matching div for Netlify reCAPTCHA 2. All submissions are also filtered by Akismet automatically.