Getting started Free
Install Nestform Free, create your first form, and publish it on a page.
-
Install and activate Nestform from Plugins (or upload the Free zip).
-
Open Forms in the WordPress admin — you will see the Nestform app shell (Dashboard, Forms, Entries).
-
Click New form, pick a starter template or start blank, then name the form.
-
Add fields in the Fields tab, set Mail / Messages / Settings, then Save and Publish.
-
Embed the form with the Gutenberg block, Elementor widget, or shortcode (see Embed below).
Pro features need Nestform Pro installed and a Freemius license activated on Forms → License.
Form builder Free
Design forms visually with field cards, required toggles, and template tags like {email}.
-
Open a form → Fields tab.
-
Use + Add field or quick chips (Text, Email, Phone, Textarea, Select) to add fields.
-
Drag rows to reorder. Toggle Required per field. Use visibility / duplicate / delete icons as needed.
-
Field names become merge tags in mail templates — keep them short and stable (e.g. email, phone).
-
Use Templates to apply a starter layout, then edit fields to match your brand.
-
Preview the form, then Save. Publish when ready to accept submissions.
- Tabs: Fields, Messages, Mail, Settings, Appearance.
- Publish & Embed panel: shortcode, direct link, entries shortcut, export / duplicate.
- Import: bring forms from Contact Form 7 or WPForms via Import forms (when available).
Conditional logic Free
Show or hide fields based on other answers so visitors only see what matters.
-
Edit a field and open its visibility / conditional rules (when configured on the field).
-
Pick the source field and the condition (equals, not empty, contains, etc.).
-
Save and Preview — confirm hidden fields stay out of the way until the rule matches.
Shorter visible forms usually convert better. Prefer hiding optional branches instead of asking everything at once.
Embed a form Free
Same Nestform renderer — Gutenberg block, Elementor widget, or shortcode.
-
Gutenberg: insert the Nestform block → pick the form → update the page.
-
Elementor: add the Nestform widget → select the form → publish.
-
Shortcode: paste or into any shortcode-capable content.
-
By ID
Stable when the form post ID will not change.
-
By slug
Prefer slug when migrating sites or syncing content between environments.
Entries inbox Free
Every submission lands inside WordPress — triage, open details, and follow up without a third-party inbox.
-
Open Forms → Entries for the hub across all forms, or open a form → Entries for that form only.
-
Use kind / status filters (All, New, Read, Spam, and Pro kinds when enabled).
-
Open an entry to read field values, mark read, or move to spam.
-
Export when you need a spreadsheet (see Export).
CSV / spreadsheet export Free
Download submissions for reporting, CRM import, or backups.
-
From a form’s Entries screen (or the export control on the form), start Export.
-
Choose the format available on your site (CSV and XLSX when enabled).
-
Open the file in Sheets / Excel and map columns to your CRM if needed.
Email notifications Free
Alert your team on submit and optionally send an autoreply to the visitor.
-
Open the form → Mail tab.
-
Set To (and optional Cc / Bcc). Use merge tags like {email} and {name} in subject/body.
-
Configure visitor autoreply if you want a confirmation email.
-
Send a test submission and confirm mail arrives (use an SMTP plugin in production).
WordPress wp_mail() depends on server/SMTP setup. If mail fails locally, check PHP mail / SMTP plugins first.
Pro can add HTML email design and PDF attachments on top of this flow.
Spam protection Free
Honeypot, timing, rate limits, blocked words/IPs, Akismet, and captcha keep the inbox human.
- Built-in honeypot and time traps on front-end forms.
- Rate limiting and blocked words / IPs in Forms → Settings → Security.
- Akismet when the Akismet plugin is active and keyed.
- Captcha providers under Integrations (next section).
Captcha integrations Free
Site-wide captcha for Nestform — reCAPTCHA v2/v3, Cloudflare Turnstile, or hCaptcha.
-
Open Forms → Integrations → Captcha.
-
Enable captcha and pick one provider tab.
-
Paste site key and secret key from the provider console, then Save.
-
Only one provider is active site-wide. Test a form submit on the front.
Outbound webhooks Free
Push each submission as JSON to Zapier, Make, n8n, or your own endpoint — up to 5 URLs per form in Free.
-
Open the form → Settings (or Integrations area for webhooks on the form).
-
Add HTTPS endpoint URLs (max 5 per form on Free).
-
Submit a test entry and confirm the receiver gets the JSON payload.
Developers can reshape payloads with nestform_webhook_payload and nestform_webhook_request_args.
Dashboard & settings Free
See submission volume, top forms, and plugin-wide defaults without leaving WordPress.
- Forms → Dashboard: period filters, KPIs, activity chart, top forms.
- Forms → Settings: general defaults, security, appearance tokens where available.
- Forms → Developers: live hook reference inside the admin app.
Activate Nestform Pro Pro
Pro is a separate plugin. Licensing is handled by Freemius on Forms → License.
-
Install and activate Nestform Pro alongside Nestform Free.
-
Open Forms → License.
-
Connect / opt-in to Freemius if prompted, then activate your license key (or purchase Pro / Agency).
-
Confirm status shows Active with your plan. Sync or deactivate the site from the Freemius account panel on the same screen.
- Pro: 1 site. Agency: up to 5 client sites — same Pro feature set; Freemius enforces quotas.
- Do not put license keys in Free. Activation lives in Nestform Pro / Freemius only.
Multi-step forms & branching Pro
Break long flows into guided steps and route visitors down different paths.
-
With Pro licensed, open the form → Fields and enable Multi-step form.
-
Organize fields into steps; Preview to walk Next / Back.
-
Add branching rules when answers should skip or jump to another step.
Quizzes, scoring & survey fields Pro
Score answers, define result bands, and collect richer feedback (NPS, matrix, ranking, and more).
-
Add quiz / survey field types from More fields (Pro).
-
Assign scores or result bands for quiz outcomes.
-
Review responses in Entries and Pro analytics / survey charts where available.
Advanced fields, calculated & repeaters Pro
Rating, signature, NPS, scales, ranking, matrix, calculated values, and repeatable groups.
- Add advanced widgets from More fields when Pro is active.
- Calculated fields derive values from other answers for quotes or scores.
- Repeaters collect repeating rows (line items, guests, etc.).
Automations Pro
Run follow-up logic after submit when a flat contact form is no longer enough.
-
Open the form’s Pro automation settings (when licensed).
-
Define triggers / conditions and the actions to run.
-
Submit a test entry and verify side effects (mail, tags, CRM, etc.).
Stripe payments Pro
Collect payments on the form with Stripe fields — checkout that stays inside WordPress.
-
Connect Stripe keys in Nestform Pro payment settings.
-
Add a Stripe / payment field to the form.
-
Test in Stripe test mode, then switch to live keys for production.
Never commit live secret keys to git. Prefer wp-config or environment constants for secrets.
HubSpot sync Pro
Create or update HubSpot contacts on submit so sales sees every lead.
-
Connect HubSpot from Nestform Pro integrations / HubSpot settings.
-
Map Nestform fields to HubSpot properties.
-
Submit a test lead and confirm the contact in HubSpot.
HTML email designer & PDF Pro
Send polished HTML messages and attach PDFs when a submission needs to look client-ready.
-
Open the form mail / Pro email designer settings.
-
Design the HTML template with merge tags.
-
Enable PDF attachment when you need a downloadable summary.
Lead insights & analytics Pro
Deeper dashboard insights for quizzes, surveys, and conversion beyond basic counts.
- Dashboard panels for lead quality / hot rates when Pro analytics are active.
- Response breakdowns for key forms.
- Survey charts for Pro survey field types.
Recruiting / HR module Pro
Optional ATS-lite: job vacancy forms, recruiter inbox, pipeline, and Recruiting dashboard.
-
Enable Recruiting under Forms → Integrations → Recruiting (requires valid Pro).
-
On a form, check Treat as job vacancy form and assign a recruiter.
-
Candidates appear in the Recruiting inbox / pipeline for that vacancy.
Troubleshooting
Quick checks when something does not behave as expected.
- Form missing on the front: confirm the form is Published and the block/shortcode ID/slug is correct.
- Submit fails: check captcha keys, spam rate limits, and the browser network tab for the AJAX response.
- No email: verify Mail → To, merge tags, and SMTP. Check spam folders.
- Pro features locked: Nestform Pro active + Freemius license valid on Forms → License.
- Webhook silent: confirm HTTPS URL, 2xx response, and that Free allows up to 5 endpoints.
- Styling conflicts: Nestform front CSS is scoped; theme CSS may still override — inspect with DevTools.
Shortcodes Dev
Drop a form into any classic content, widget, or template that supports shortcodes.
-
By form ID
Embed a published Nestform by post ID.
-
By form slug
Embed by post_name when you prefer a stable slug over a numeric ID.
-
Block & Elementor
nestform/formPrefer the Gutenberg Nestform block or Elementor widget in the editor — same renderer as the shortcode.
JavaScript events Dev
CustomEvents bubble from the <form data-nest-form> element. detail always includes form and formId. Also exposed as window.nestformEvents.
-
nestform:readyForm bootstrapped (selects + multi-step). detail.steps when steps exist.
-
nestform:before-submitcancelableSubmit started — before client validation. Cancelable. Sync custom widgets into inputs here.
-
nestform:validation-errorClient-side validation failed. detail.errors, detail.message, detail.source.
-
nestform:submitcancelableAfter validation + captcha, before fetch. Cancelable. detail.formData is the request body (mutable).
-
nestform:successServer accepted the entry. Fired before reset. detail.message, detail.entryId, detail.values.
-
nestform:errorServer rejected the submit. detail.message, detail.errors.
-
nestform:network-errorFetch/network failure. detail.message, detail.error.
-
nestform:redirectcancelableAbout to change location after success. Cancelable. detail.url, detail.values.
-
nestform:before-step-changecancelableBefore multi-step index changes. Cancelable — preventDefault() keeps the current step.
-
nestform:step-changeMulti-step index changed. detail.index, detail.previousIndex, detail.reason.
-
nestform:select-changeCustom select value changed. detail.name, detail.value, detail.previous.
-
nestform:resetForm reset after success (or native reset).
PHP actions Dev
Hook with add_action(). Fired during submit and mail.
-
nestform_before_validateBefore field validation (after captcha).
-
nestform_submittedAfter entry is stored. Args: form_id, data, entry_id.
-
nestform_mail_sentAfter admin notification mail.
-
nestform_extra_mail_sentAfter conditional extra mail (only if sent).
-
nestform_user_mail_sentAfter visitor autoreply (only if sent).
-
nestform_webhook_sentAfter each outbound webhook HTTP request.
-
nestform_entry_meta_after_triageAfter entry status triage (addons: recruiting stage).
-
nestform_entry_meta_afterAfter entry meta box rows.
-
nestform_template_appliedAfter a starter template is applied. Args: form_id, key.
PHP filters Dev
Hook with add_filter(). Public extension points to change data, markup, or mail.
-
nestform_verify_captchaCaptcha pass/fail (custom captcha integrations).
-
nestform_entry_dataSanitized entry payload before save.
-
nestform_validate_fieldPer-field value or WP_Error.
-
nestform_captcha_htmlCaptcha markup output.
-
nestform_render_htmlFull form HTML.
-
nestform_field_htmlSingle field HTML.
-
nestform_field_classesField wrapper classes.
-
nestform_success_messageThank-you message text before JSON response.
-
nestform_submit_success_dataAJAX success payload (message, redirect, entry_id).
-
nestform_redirect_urlRedirect URL after merge tags (before final sanitize).
-
nestform_sanitize_redirect_urlSanitized redirect URL (empty = blocked).
-
nestform_mail_argsAdmin wp_mail() args.
-
nestform_extra_mail_argsExtra notification wp_mail() args.
-
nestform_user_mail_argsVisitor autoreply wp_mail() args.
-
nestform_accessible_form_idsForm IDs the user may inspect entries for (null = all).
-
nestform_user_can_manage_form_entriesWhether a user may manage entries for a form.
-
nestform_entries_kind_filtersEntries hub kind tabs (e.g. All / Forms / Jobs).
-
nestform_entries_hub_query_argsEntries hub query args (form_ids / exclude_form_ids by kind).
-
nestform_templatesStarter form templates registry.
-
nestform_settingsPlugin-wide settings array.
-
nestform_webhook_payloadWebhook JSON body (per endpoint URL).
-
nestform_webhook_request_argsWebhook wp_remote_post() args (per endpoint URL).
Pro hooks Pro
Available with licensed Nestform Pro. Without Pro these filters are not applied — callbacks never run.
-
nestform_pre_validate_fieldEarly per-field validation for advanced field types.
-
nestform_render_fieldShort-circuit single field HTML for advanced widgets.
-
nestform_mail_attachmentsAdmin mail attachment paths (e.g. PDF export).
-
nestform_dashboard_conversion_kpiDashboard conversion KPI card HTML.
-
nestform_dashboard_chart_metricsDashboard chart metrics nav HTML.
-
nestform_dashboard_chart_emptyWhether the activity chart shows empty state.
-
nestform_dashboard_chart_dataExtra chart series markup/data.
-
nestform_dashboard_work_pulse_extraExtra Work pulse chips (e.g. Hot leads).
-
nestform_dashboard_lead_insightsLead insights panel HTML.
-
nestform_dashboard_responses_panelResponse breakdown panel HTML (survey/quiz).
Code examples Dev
Drop these into functions.php, a small mu-plugin, or a theme script.
PHP
Log every successful submission.
add_action( 'nestform_submitted', function( $form_id, $data, $entry_id ) {
error_log( sprintf( 'Nestform #%d entry #%d', $form_id, $entry_id ) );
}, 10, 3 );
JavaScript
Listen on document — events bubble from the form.
document.addEventListener( 'nestform:success', function( event ) {
console.log( 'Entry', event.detail.entryId, event.detail.values );
} );
document.addEventListener( 'nestform:before-submit', function( event ) {
// Sync custom widgets, or event.preventDefault() to abort.
} );
