The numbers, from WordPress.org
We read the WordPress.org plugin directory for the ten most installed free contact form plugins on 6 November 2026. Every figure below comes from the directory's public data, so you can check it on each plugin's page. We make Formgong, which is not a WordPress plugin; it is a form backend that a WordPress form can post to, and we come back to it at the end.
| Plugin | Active installs | Rating | 1-star | Last update | Min. PHP | Support resolved |
|---|---|---|---|---|---|---|
| Contact Form 7 | 10,000,000+ | 80 / 100 (2,186) | 408 (19%) | 29 Oct | 8.3 | 27 of 86 |
| WPForms Lite | 5,000,000+ | 96 / 100 (14,389) | 367 (3%) | 5 Nov | 7.2 | 14 of 19 |
| Jetpack (forms are one module) | 3,000,000+ | 74 / 100 (2,409) | 584 (24%) | 3 Nov | 7.4 | 56 of 63 |
| Fluent Forms | 800,000+ | 96 / 100 (808) | 22 (3%) | 2 Nov | 7.4 | 9 of 9 |
| Forminator | 600,000+ | 96 / 100 (2,147) | 45 (2%) | 2 Nov | 7.4 | 52 of 69 |
| Ninja Forms | 500,000+ | 88 / 100 (1,398) | 150 (11%) | 2 Nov | 7.4 | 6 of 10 |
| MetForm (needs Elementor) | 500,000+ | 94 / 100 (509) | 27 (5%) | 2 Nov | 7.4 | 3 of 5 |
| Formidable Forms | 300,000+ | 96 / 100 (1,389) | 54 (4%) | 16 Oct | 7.0 | 1 of 1 |
| Everest Forms | 90,000+ | 98 / 100 (375) | 8 (2%) | 5 Nov | 7.2 | 1 of 1 |
| HappyForms | 20,000+ | 88 / 100 (433) | 51 (12%) | 5 Oct | 7.0 | 0 of 1 |
Gravity Forms is missing because it isn't in the WordPress.org directory, so there are no public installs or ratings to compare. Our Gravity Forms alternative article covers it separately.
How to read the table
Installs tell you what is safe, not what is good. Contact Form 7's 10 million installs mean it works with almost every theme and that answers to most questions already exist online. They don't mean people like it: of its 2,186 ratings, 408, or 19%, are one star. WPForms Lite has a third of the installs and 14,389 ratings, of which 367, under 3%, are one star.
Look at the number of ratings behind the score. Everest Forms has the highest score, 98 out of 100, from 375 ratings. That's a good sign, but a much smaller sample than WPForms' 14,389.
Support resolved is a rough signal. It counts forum threads the plugin team marked resolved in the last two months. Fluent Forms resolved 9 of 9 and WPForms 14 of 19. Contact Form 7 resolved 27 of 86. That partly reflects how many people use it, but it also tells you how likely you are to get an answer in the free forum.
Check the PHP line before you update. The current Contact Form 7 asks for PHP 8.3; all the others accept 7.0 to 7.4. If your host still runs an older PHP, WordPress won't install the update.
What do the free versions keep and include?
We read each plugin's description on WordPress.org for the three things people most often find missing after setup.
Copies of messages. Contact Form 7 only sends an email. Its own companion plugin, Flamingo, describes Contact Form 7 as a plugin “which doesn't store submitted messages”, so if the email is lost, the message is gone unless you install Flamingo too. Ninja Forms says “Every submission is saved to your WordPress database.” Forminator says it “stores and organizes submissions”. Fluent Forms lists exporting and filtering entries among its free features.
File uploads. Free in Forminator, whose field list includes file upload. Paid or an add-on in WPForms (“Pro, which comes with … file uploads”), Fluent Forms (listed under the Pro version) and Ninja Forms (“add-ons rather than part of the free plugin”).
Logic and payments. Showing a field only for some answers is free in Fluent Forms, which lists “smart conditional logic” among its free features, and in Forminator. WPForms Lite lists conditional logic and multi-page forms under Pro, and Ninja Forms sells conditional logic and multi-step forms as add-ons. For taking money, Forminator says Stripe and PayPal “come included” with “no Pro upgrade required”, and Fluent Forms added payment fields for free users in version 6.0. Contact Form 7's description mentions neither.
Spam protection. All of them offer something. WPForms, Forminator, Fluent Forms and Ninja Forms name Cloudflare Turnstile alongside reCAPTCHA and hCaptcha; Ninja Forms and Forminator also mention a honeypot and Akismet. Jetpack uses Akismet for form responses. Check Akismet's terms before relying on it: its plans page offers the personal plan “for personal sites” and points commercial sites to a paid plan, so a business site shouldn't run on the personal one. If you use reCAPTCHA, read our comparison of Turnstile, reCAPTCHA and hCaptcha first; they differ in what they load and what they ask of visitors. Our test of spam protection without a captcha shows what a honeypot alone catches.
What about GDPR?
A contact form plugin is not compliant or non-compliant by itself; what you do with the messages is. Two things are worth checking in the plugin. First, where the messages end up: a plugin that saves entries, like Ninja Forms or Forminator, puts personal data in your WordPress database, so you need to be able to find a person's messages and delete them when asked, and to delete old ones you no longer need. Second, whether it gives you a consent field for when you need one: Fluent Forms has a “GDPR Agreement” field and Forminator lists “GDPR-friendly opt-ins”. For an ordinary contact form, a short notice under the form saying what you do with the message is usually the part people forget. Our article on which forms need what under GDPR has texts you can copy.
Which plugin should you pick?
For a simple contact form on a business site, WPForms Lite or Fluent Forms: high scores from many ratings, active support, and a drag-and-drop editor. If having every message stored in WordPress matters, and it should, because email gets lost, Ninja Forms and Forminator do it in the free version. Forminator is also the one to try if you need an upload field without paying.
Contact Form 7 still makes sense when you like writing the form's markup by hand, or when a theme or plugin you rely on is built around it. Add Flamingo for stored copies, and see our Contact Form 7 vs WPForms comparison and the fix for “There was an error trying to send your message”. If you already build pages with Elementor, MetForm works inside it.
Setting any of them up takes the same three steps: install the plugin from the Plugins screen, build the form from one of its templates, and put it on a page with the plugin's block or shortcode. Then send yourself a test message from the live page, because that is where the mail problem below shows up.
The problem no plugin solves on its own
Every one of these plugins hands the email to WordPress, and WordPress sends it through your host. That is where most “the form says sent but nothing arrives” reports come from: the host's mail server is not trusted by Gmail or Outlook, or it isn't allowed to send for your domain. The usual fix is an SMTP plugin or a mail service on top of the form plugin. Our guides to WPForms not sending email and contact form emails going to spam walk through it.
When you don't need a plugin at all
If the site needs one contact form, you can skip the plugin. A WordPress page can hold a plain HTML form in a Custom HTML block, and the form can post to a form backend that stores each message and sends it to you. Formgong works this way. It keeps every submission, emails it from its own mail setup instead of your host's, can send it to Telegram as well, and filters spam with a hidden field and server checks. The free plan covers 250 submissions a month and three recipients. You get the form code from our free form builder, which copies your site's colours and font. Our guide to a WordPress contact form without a plugin has the steps.
What you give up is the drag-and-drop editor inside WordPress: you edit the form as HTML or rebuild it in the form builder. If your site has many forms that editors change every week, a plugin from the table fits better. The same Formgong account also adds an AI help chat and a reviews widget, which on WordPress otherwise means two more plugins.
Which one do you use?
If you have run one of these plugins for a while, tell us at support@formgong.com what you liked and what broke. We read every reply and will add what we learn to this page when we update the numbers.
Frequently asked questions
What is the best free contact form plugin for WordPress?
WPForms Lite and Fluent Forms both score 96 out of 100 on WordPress.org, from 14,389 and 808 ratings. Choose Forminator or Ninja Forms if you want submissions stored in WordPress for free.
Does Contact Form 7 save submissions?
No. It only sends an email. Its companion plugin Flamingo stores the messages in WordPress.
Which WordPress form plugin has free file uploads?
Of the plugins we read, Forminator includes a file upload field in the free version. WPForms, Fluent Forms and Ninja Forms put uploads in a paid version or add-on.
Can I add a contact form to WordPress without a plugin?
Yes. Paste an HTML form into a Custom HTML block and post it to a form backend such as Formgong, which stores and emails each submission.
Sources and documentation
Official references for this guide: Formgong: WordPress contact form without a plugin, Formgong: form builder. WordPress, where data is stored.
Related guides
- Lovable form submissions to email and Telegram
- HTML contact form without a backend: a working example
- How to send website form submissions to Telegram
- Contact form not sending email? Check where it stops
- Managing website leads in Telegram without a CRM
- Form backend for Lovable, Bolt, v0, Cursor
- Telegram bot for a contact form: build or skip?
- GDPR form backend: 7 checks before you choose
- Lovable form not sending email? 6 fixes
- Netlify Forms not working? React and Bolt fixes
- Stop contact form spam without a CAPTCHA
- GitHub Pages contact form: a working setup
- Mailto Form in HTML: Why It Fails and What to Use
- HTML form to Google Sheets: 2 free methods
- Webflow form submission limit: what to do at 50
- Turnstile vs reCAPTCHA vs hCaptcha for forms
- Contact Form 7 and Elementor forms to Telegram
- Squarespace contact form not sending email?
- Shopify contact form: where do messages go?
- Google Form to Telegram: free Apps Script way
- Wix contact form not sending email? Fixes
- EU / GDPR Formspree alternatives compared
- HTML form action attribute explained
- How do HTML forms work? The HTTP request
- Types of Injection Attacks on Web Forms (2026)
- Indirect Prompt Injection in MCP
- MCP Rug Pull Attack: Detect Tool Changes
- Form without a backend: 7 ways that work
- Thank-you page after form submission (HTML)
- Indirect Prompt Injection Examples (2023–2026)
- Indirect Prompt Injection via Email
- What Is Tool Poisoning in MCP?
- WordPress contact form without a plugin
- Send email from frontend JavaScript
- How to Prevent Indirect Prompt Injection
- Honeypot Form Field: How to Add One That Works
- Contact Form with File Upload (HTML, No PHP)
- Angular contact form without a backend
- Send form submissions to Slack or Discord without Zapier
- Verify a form webhook signature (HMAC-SHA256)
- Contact forms that send nothing: 793 AI-built sites tested
- v0 contact form that actually sends: 3 ways
- How we tested AI-built contact forms, and 12 bugs we hit
- Cloudflare vs Netlify free plan: hosting that never pauses
- EmailJS 412 “Gmail_API: Invalid grant”: reconnect Gmail
- Resend “You can only send testing emails”: verify a domain
- Supabase Edge Function blocked by CORS policy: 3 causes
- Formspree “Form not found” and other errors: fixes
- Web3Forms errors: “Invalid access key” and 403 explained
- How to add customer reviews to your website for free
- Getform not working? “This form has been deleted” and more
- Next.js contact form not working? 6 errors, reproduced
- Webflow form not sending email? What to check, tested
- FormSubmit not working? “This form needs Activation” fix
- Contact form “TypeError: Failed to fetch”: causes and fixes
- WooCommerce product enquiry form
- Contact Form 7 vs WPForms
- Gravity Forms alternative free
- WordPress contact form block
- 535-5.7.8 Username and Password not accepted (Gmail)
- 535 5.7.3 Authentication unsuccessful: Office 365 SMTP
- Nodemailer “Missing credentials for "PLAIN"”: the fix
- Nodemailer “Greeting never received”: port 465 fix
- Nodemailer SSL “wrong version number”: the port fix
- Nodemailer “self-signed certificate in certificate chain”
- Nodemailer ECONNREFUSED 127.0.0.1:587: missing SMTP host
- SendGrid “authorization grant is invalid”: 401 fix
- Mailgun 401 Forbidden: why the API rejects your key
- “Edge Function returned a non-2xx status code”: the fix
- Next.js “Body exceeded 1 MB limit”: Server Action fix
- Unexpected token '<', "<!DOCTYPE "... is not valid JSON
- “TypeError: Body is unusable”: body has already been read
- Turnstile “timeout-or-duplicate” and other siteverify errors
- Turnstile vs hCaptcha vs reCAPTCHA: speed and size tested
- Judge.me reviews not showing on Shopify: how to fix it
- Judge.me review carousel not showing: how to fix it
- Yotpo reviews not showing on Shopify? Check the app embed
- Loox reviews not showing on product page: how to fix
- Shopify reviews not showing: what to check first
- How to show reviews on Shopify
- GDPR for website forms: what each type of form needs
- WooCommerce reviews not showing: how to fix it
- Stamped.io reviews not showing on Shopify: how to fix it
- Etsy reviews not showing: why and what to do
- Trustpilot widget not loading: how to fix TrustBox
- Yotpo problems in 2026: what merchants report
- Contact Form 7 “error trying to send your message” fix
- Elementor form “Your submission failed because of an error”
- Framer form not sending email or not working: what to check
- Carrd contact form not working: plans, spam and errors
- Google review link not working: what customers see and why
- tawk.to widget not showing on your website: causes and fixes
- How to add questions and answers to your product page
- “Failed to send a request to the Edge Function”: fixes
- Next.js “Failed to find Server Action”: what it means
- Brevo “unauthorized: Key not found” 401: the fix
- Amazon SES “Email address is not verified”: the fix
- Shopify contact form not working: how to fix it
- Judge.me alternative for WooCommerce after the 2025 shutdown
- Free WooCommerce review plugins compared on the free version
- WooCommerce review reminder emails without a paid plugin
- Add Voice Recording to a Website Form
- Contact Form 7 spam: how to stop it
- WPForms not sending email: how to fix it
- Contact form emails going to spam: how to fix it
- HTML form not submitting: how to fix it
- Contact form not working: how to find the fault
- Webflow form spam: how to stop it
- Website form to Notion: how to set it up
- Website form to WhatsApp: what works and what does not
- What 1-star reviews say about AI support chatbots
- Which free form backend gives you the most submissions?
- Elfsight reviews widget not showing? Check the view limit
- Next.js contact form backend vs Server Actions
- Review stars not showing in Google search results
- How to stop duplicate form submissions
- How to see which form leads came from ChatGPT
- What happens when a form webhook fails
- When to send a review request email after an order
- How to collect video testimonials for free
- Add contact form sign-ups to Mailchimp or Klaviyo
- How to migrate from Formspree without losing submissions
- How to get a Google review link for your business
- What is a headless form backend?
- Is it safe to put a form access key in your HTML?
- AI chatbot that answers only from your website
- Minified React error #441 in Next.js
- Squarespace product reviews after Judge.me
- Accessible contact form checklist for WCAG 2.2
- How to ask a client for a testimonial by email
- How to respond to negative reviews, with examples
- 429 Too Many Requests on a contact form
- MCP server for forms in Cursor and Claude
- Can you offer a discount for a review?
- Do EU stores have to say if reviews are verified?
- Webflow form backend options compared
- How to add review schema JSON-LD to a product page
- How to turn a customer review into an Instagram post
- How to make a QR code for Google reviews
- Live chat or chatbot for a small business website
- Why people abandon your contact form halfway
- Which form backend do AI assistants pick? 54 answers
- PHP mail() not sending email, even when it returns true
- What “Failed to fetch” means, tested in three browsers
- 405 Method Not Allowed when you submit a form
- Send a contact form to more than one email address
- What is review syndication, and who needs it?
- How to save HTML form data to a database
- NetworkError when attempting to fetch resource
- Send product reviews to Google Merchant Center
- PHPMailer not working on a live server
- AI review reply generator: does it help?
- React 19 contact form with useActionState
- Astro Actions or a form backend?
- Is no-reply@wixsiteautomations.com legit?
- Where to find the Judge.me review widget code
- AI review summaries: what shoppers actually see
- Photo reviews for WooCommerce, and the GPS inside them
- Review request email templates you can copy
- Reviews in AI search: what ChatGPT and Perplexity cite
- Lead capture form with UTM tracking, built and tested
- Form design best practices, with our own form data
- Client intake form template with file upload
- What is social proof? Meaning and examples
- What is user-generated content (UGC)?
- Benefits of negative reviews for your store
- How to get your first reviews as a new store
- How to use customer reviews in your marketing
- How to get more customer reviews
- React form validation without a library, tested
- jQuery submit form with validation
- reCAPTCHA v3 setup with the server score check
- Shopify social proof that shoppers can check
- HTML file input: accept, multiple, capture and size checks
- How to add hCaptcha to a form, with the server check
- How to add invisible reCAPTCHA to a form
- Bug report form template with browser details
- What the FTC fake reviews rule bans for online stores
- How to show reviews on your homepage
- Do reviews increase sales? What the studies show
- HTML input types and what each one sends
- HTML textarea, tested in a real form
- HTML dropdown menu in a form, tested
- Do reviews help SEO? What Google says and shows
- How to add a review carousel people can read
- Product review examples that help shoppers decide
- Which trust badges actually mean something
- Customer satisfaction survey with CSAT and NPS
- JavaScript FormData and what fetch actually sends
- JavaScript form validation without a library
- Server-side form validation and what it catches
- Email validation in JavaScript, tested on 33 addresses
- Zod form validation with FormData, tested
- Store reviews vs product reviews
- How to send review requests through Klaviyo
- How to tag customer reviews by topic and mood
- Custom review form questions worth asking
- Online reputation management for small businesses
- HTML radio button groups and what they send
- HTML label tag and what screen readers hear
- HTML autocomplete attribute, tested with Chrome autofill
- HTML fieldset and legend, and what disabled leaves out
- HTML button tag and what a form button sends
- Vite contact form that still works after the build
- How to test a contact form, end to end
- How to embed a Google Form, and what it loads
- Customer feedback questions that get real answers
- How to convert a file to base64 in JavaScript
- FilePond with a form backend, and when to skip it
- Bootstrap form validation and server errors
- Tailwind form validation, tested in three browsers
- Donation form in HTML, and where the payment goes
- How to ask for a review in person or by text
- Which review sites matter for your business
- What are customer reviews, and which kinds count
- Online review statistics, checked at the source
- Best review app for Shopify and WooCommerce
- Why Gmail sends your self-hosted mail to spam
- htmx contact form that sends to another domain
- AI form builders tested, from prompt to sent form
- Headless WordPress forms with Contact Form 7, tested
- React Hook Form watch vs useWatch, and what gets sent
- Elfsight widget not working? It vanishes when views run out
- Jotform not sending emails? Check Jotform's bounce list
- Typeform not working? A white box means a blocked script
- Positive review response examples that don't sound copied
- How to remove a Google review when you can't delete it
- Google reviews not showing up? 8 causes to check in order
- Is buying Google reviews illegal? Even a review swap counts
- Which reviews can you hide? A review moderation checklist
- Average star rating: what 4.8 from 5 reviews means
- Reviews on a product page: where and how many to show
- SaaS testimonials: 3 of 27 had a number in them
- Do reviews reduce returns? Not when they're too good
- Testimonial examples for business: what makes one believable
- Testimonial questions to ask clients, by type of business
- Testimonial page design: a page or a section?
- Testimonial advertising rules: what the FTC requires
- Form submission canceled because the form is not connected
- Input type date format dd/mm/yyyy: what you can change
- How to disable textarea resize, or allow only vertical
- How to prevent Enter from submitting a form
- form.submit() vs requestSubmit(): what submit() skips
- Custom HTML checkbox CSS that doesn't break required
- How to reset a form after submit, and what reset() keeps
- Input type number maxlength not working? What to use
- How to create an HTML form, step by step
- Best form builder: free plans and branding, checked
- How to increase form conversion rate: start with the count
- Form backend vs form builder: which one do you need?
- WordPress contact form not sending email? 3 plugins tested
- Contact Form 7 webhook? Turning it on switched our email off
- Gravity Forms webhook: what it sends and the URLs it rejects