HTML Forms & Contact Form for WordPress: Narrative Forms
Narrative Forms is a WordPress form plugin built on plain HTML. Instead of dragging boxes around a builder, you write semantic HTML, or paste it straight from an AI like ChatGPT, Claude, or Gemini, and Narrative Forms turns it into a real form with fast AJAX submissions and stored, exportable data. Any input with a name attribute is saved. That is the whole idea: forms are just HTML, so there is no field type registry, nothing proprietary to lock you in, and no ceiling on what your form can be. It stays lightweight, loads its assets only on pages that actually contain a form, and is built to scale to millions of submissions. If you want a clean, fast, developer friendly contact form or custom HTML form without the bloat of a heavy form builder, this is it.
Why Narrative Forms is different
Most WordPress form plugins lock you into a drag and drop builder and a fixed list of field types. If the builder does not offer a field, you cannot have it. Narrative Forms has no field registry: a field is simply an HTML element with a name. Need a layout with multiple steps, an unusual input, a custom widget, or markup your designer already wrote? Paste it in and it works. You keep full control of the markup, the classes, and the look. Dragging boxes made sense years ago; today you describe what you want or paste what you already have. No builder, no bloat, and no fighting a clunky UI to recreate a form you can already picture.
Bring your own AI
Because forms are just HTML, any large language model can write one for you. Ask ChatGPT, Claude, Gemini, or your favourite AI for “a contact form with a name, email, a dropdown, and a file upload,” copy the HTML it returns, and paste it into Narrative Forms. There is no proprietary field format to satisfy, so whatever the AI generates simply works. The free plugin works with any AI: bring your own model, paste the markup, ship the form. (Prefer it built in? AI form generation is on the Narrative Forms Pro roadmap. For now, bring any model you like.)
Everything in the free plugin
The free plugin is a complete forms solution, not a teaser. You get:
- Fast AJAX submissions. Forms submit without a page reload, with a graceful fallback when JavaScript is off, so nothing ever breaks for your visitors.
- A built in editor. One click field buttons generate the markup for common fields, and a live preview shows the form as you type. Write HTML by hand or scaffold it fast.
- Email notifications. Send clean, readable submission emails to yourself or any address, in plain text or HTML, with tidy formatting for every field.
- Webhook actions. Send form data to any URL on submission, connecting submissions to Zapier, Make, a CRM, or your own endpoint without writing code. Add multiple actions per form.
- File uploads. Accept file upload fields with a maximum file size and a maximum number of files per field; uploads are stored safely in the WordPress media folder.
- Stored submissions and CSV export. Optionally keep every submission in a fast, indexed database table, then export to CSV in batches that stream without timing out, even on large datasets.
- Layered spam protection. Stop bots with a honeypot, a time trap, a same origin referrer check, a limit on the number of links, an optional rate limit per IP, and optional Cloudflare Turnstile, with no third party tracking added.
- Custom messages and redirects. Set your own success and error messages, redirect after submit, and use template tags so the form behaves exactly how you want.
- Clean, optional styling. A calm, minimal stylesheet you can keep or drop, with semantic wrapper classes so your theme stays in charge of the look.
Every output is escaped and every input is sanitised, following WordPress coding and security standards.
Developer friendly by design
Narrative Forms is built for people who like control. Prefill fields with template variables such as {{ user.email }}, {{ get.utm_source | default:'direct' }}, or {{ site.name }}, using providers like user, URL parameters, post, site, and date, each with filters such as default, upper, lower, date, and truncate. On the front end, public JavaScript events (nrfm-submit, nrfm-submitted, nrfm-success, nrfm-error) let you push conversions to Google Tag Manager or your dataLayer, show a toast, or run any custom logic with a tiny nrfm.on() helper. Filters and actions sit at every decision point, including form HTML, validation, and webhook request arguments, so you can extend behaviour without forking the plugin.
Built to scale to millions
Narrative Forms is engineered for sites that collect a lot of data. Submissions live in a dedicated, indexed database table rather than bloated post meta, so lookups stay fast as the table grows. Repeated reads are cached, queries are paginated and bounded, CSV export streams in batches, and heavy work can run in the background so the front end stays quick. Whether you collect ten submissions a month or millions over time, the plugin is designed to stay lightweight and responsive.
Who it is for
- Developers and agencies who want a contact form or custom HTML form they fully control, without a heavy builder.
- Anyone who uses an AI assistant: generate the HTML, paste it, and you are done.
- Site owners who need reliable form submissions, email notifications, file uploads, and CSV export without the bloat.
- Teams building directories, job boards, testimonial walls, or event listings from form data (see Frontend Submissions below).
Common uses include contact forms, lead capture, support requests, job applications, RSVPs, surveys, file submissions, registrations, and custom forms with many fields that a drag and drop builder cannot easily produce.
Upgrade to Narrative Forms Pro
Narrative Forms Pro keeps the same lightweight core and adds the power features that busy sites and agencies need:
- Conditional logic: show or hide fields, and trigger actions, based on what the visitor enters.
- Save and resume: let visitors save a long form as a draft and finish it later from where they left off.
- Submission notifications: a badge for unread submissions in the admin so a new entry never slips by.
- Require login: restrict any form to logged in users only.
- Schedule windows: open and close a form automatically on the date and time you set.
- Advanced webhooks: reusable webhook templates, automatic retries with backoff, and a delivery log for every call.
- REST API: read submissions programmatically and connect your forms to anything.
- Share links: generate a hosted, shareable link to any form.
AI form generation, which lets you describe a form in plain language and have the HTML built for you inside WordPress, is on the Pro roadmap. Today, the free plugin already works with any AI you bring (see above). Learn more at https://narrative-forms.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=free
Publish submissions with Frontend Submissions (Views)
Most form plugins keep submissions locked in the admin. The Narrative Forms Frontend Submissions extension turns the data you collect into front end content with reusable Views that display any form’s submissions as a public directory, a testimonial wall, a photo gallery, a job board, an event timeline, product reviews, and more:
- Multiple layouts: ready made table, grid, and calendar Views, plus fully custom templates written in your own HTML and CSS.
- Starter design library: one click designs (Cards, Testimonials, Gallery, Profiles, Compact list, Timeline) that fill in with your fields.
- Instant search and pagination: fast filtering and browsing, built to handle large datasets.
- Single pages: a clean, SEO friendly page for every entry, with a pretty permalink.
- Public and private control for every field: publish only the fields that are safe to show; nothing is public unless you choose it.
- Approval moderation: approve or reject submissions, individually or in bulk, so nothing appears publicly until you say so.
- Theme proof rendering: each View has isolated styles, so your theme cannot break its layout.
Collect with the form, publish with a View. Learn more at https://narrative-forms.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=free
Privacy
Narrative Forms uses the Appsero SDK to collect some telemetry data, but only after you confirm it. This helps us troubleshoot problems faster and make product improvements.
The Appsero SDK does not gather any data by default. It only starts collecting basic telemetry when you allow it through the admin notice. We collect the data to ensure a great experience for all of our users.
Integrating the Appsero SDK DOES NOT IMMEDIATELY start gathering data, and never without your confirmation.
Learn more about how Appsero collects and uses this data.
External services
This plugin may connect to external services in the following situations:
-
Cloudflare Turnstile (optional CAPTCHA)
- What it is and why: A free, privacy friendly CAPTCHA by Cloudflare used to protect forms from automated spam.
- When data is sent: Only when a page with a Narrative Forms form is viewed (the Turnstile JS is loaded) and when a form is submitted (server verifies the token).
- What data is sent:
- To the JS endpoint: the browser requests
https://challenges.cloudflare.com/turnstile/v0/api.jsto render the widget. - To the verify endpoint: the server sends the Turnstile response token, your site’s secret key, and the requester’s IP address to
https://challenges.cloudflare.com/turnstile/v0/siteverifyto validate the submission. - Policies: Terms
https://www.cloudflare.com/website-terms/and Privacyhttps://www.cloudflare.com/privacypolicy/
-
Webhooks (optional, configured by you)
- What it is and why: If you add a Webhook action, Narrative Forms will send the submitted form fields to the URL you specify to integrate with external systems (for example marketing automation, CRMs, or servers you control).
- When data is sent: After a successful submission, for each configured Webhook action.
- What data is sent: Submitted form fields and limited metadata (timestamp, IP address, user agent, referrer). Data is sent as JSON or as URL encoded form data depending on your configuration.
- Where it is sent: To the exact URL you configure in the action, on a domain you choose. Any example like
https://example.com/webhookin the UI or docs is a placeholder; no data is sent there unless you explicitly configure it. - Policies: The destination service is chosen by you. Please consult that service’s terms of use and privacy policy.
-
Appsero (optional usage analytics, off until you allow it)
- What it is and why: Narrative Forms uses the Appsero SDK to understand how the plugin is used so we can fix problems and improve it. See the Privacy section above.
- When data is sent: Only after you explicitly allow it through the admin notice. Nothing is sent until then. A short, optional survey may be offered if you deactivate the plugin.
- What data is sent: Basic environment and usage details such as the site URL, WordPress and PHP versions, active theme and plugins, your locale, and the admin email used to confirm your choice. No form submissions or visitor data are ever sent.
- Where it is sent: To Appsero at
https://api.appsero.com. - Policies: Privacy
https://appsero.com/privacy-policy/
