When the form has to charge, compute, publish or be followed up.
SolisForms Pro installs alongside the free plugin and extends it. Deactivate it whenever you like: your forms and submissions do not move.
Payments
Stripe, PayPal, Mollie, Razorpay and Square. Coupons, tax, subscriptions and refunds. Amounts are recomputed server-side before any charge.
Advanced fields
Calculated fields and repeatable groups, for quotes, orders and registrations where the number of lines is not known in advance.
Unlimited notifications
As many as you need, conditional, with attachments, Cc, Bcc and Reply-to.
Signature and PDF receipt
Have a waiver, a consent or a quote signed — drawn, or typed as a full name. Each signed submission produces a frozen PDF carrying the consent statement accepted, the date in universal time and a SHA-256 fingerprint. It is not a qualified electronic signature.
Document checklists
Ask for several documents, track what is still missing, and accept or reject each one on its own. A refused document can be sent again without redoing the form.
Appointment slots
Publish your availability and let visitors book. A seat is taken by an insert, never by a count: two people clicking at the same second cannot take the same one.
Email verification
Confirm an address before the submission counts. The entry is never lost in the meantime — it waits, and the effects it would trigger wait with it.
Uniqueness and duplicates
Refuse or flag an answer already received, on a key you pick. Values are compared exactly — an approximate match would refuse people who never answered — and two simultaneous submissions are settled by a unique index, not by a check placed beside the write.
WordPress accounts
Turn a submission into a member account, or update the signed-in one. Roles are restricted by a whitelist: a form can never create an administrator.
Submission portals
Publish a searchable, filterable, paginated list, with approval before anything appears. Approving is not a submission status: the same entry can appear in one directory and stay hidden in another.
Internal processing
A state, an assignee, a deadline and an append-only history on every submission. Being assigned a file never grants the right to read it — the right comes first.
Privacy centre
Retention per form, search by address, export and erasure, with an append-only trail. The address is matched exactly — a partial match would export somebody else’s data — and the trail has no update method at all, because one you can correct proves nothing.
Admin assistant
Have a form drafted from a description, and get your conditions checked. It proposes and never applies — there is no route that writes — and no submission value ever leaves the site: the consistency check needs no provider at all.
Surveys, quizzes and reports
Score answers, set a pass mark, and read the results on their own screen. The report holds answer keys, never labels or free text.
Conversational forms
One question per screen, on a dedicated page. Built from the core’s own pagination, so navigation, progress and focus stay the ones that are already tested.
Offline forms
Fill a form with no network and send it when it comes back. Each entry carries an identifier that makes a double send impossible, and what waits on the device is encrypted.
Dynamic prefill
A field can arrive filled from the signed-in account, a named URL parameter, a fixed value or your own PHP filter. Account sources only ever read the visitor’s own account.
Abandonment recovery
Offer to email a link to finish later — only if the visitor says yes, explicitly. One reminder per draft, and nothing is kept without that agreement.
Friction analytics
See which field people stop at, and which one they correct three times. Counters only: no session, no identifier, nothing that designates anyone.
Availability and access
Open and close a form on a date, cap the number of entries, restrict it to certain roles or to logged-in users.
CSV export and statistics
Export submissions to CSV, and read ninety days of statistics instead of seven.
Cloud storage
Copy the attachments you tick to Google Drive, OneDrive or Dropbox, filed by a folder template. Nothing is copied until a field is ticked, and no public share is ever created.
Google Sheets
One row per submission, appended to the tab you choose. Column order is the mapping, so a deleted field leaves its column empty rather than shifting rows already written — and a submitted formula stays text.
HubSpot
A contact created or updated per submission, mapped against your own portal’s properties. Adding it to a static list is separate, and only happens when the visitor ticks a Consent field — which records the exact wording accepted, and is frozen at submission time.
Pipedrive
A person created or updated per submission, then a lead opened for it. The person is looked up by email first — without that, every answer would add one more to your database — and a delivery that stops halfway resumes where it left off.
ActiveCampaign
A contact created or updated per submission. Subscribing to a list and applying tags are separate and both wait for consent: on this platform a tag commonly starts an automation, so it counts as marketing just like a subscription.
Mailchimp
A subscription per consenting answer, with double opt-in by default. Nothing is sent without consent — not even the contact — because Mailchimp is the mailing list itself, and an existing member always keeps the status they chose.
Airtable
One record per submission, in the base and table you pick. Columns are addressed by their internal id, so renaming one in Airtable changes nothing here — and a merge key turns a second answer into an update instead of a duplicate.
Notion
One page per submission, in a database you share with the connection. A value matching no existing select option is left out rather than added to your schema: a public form must not be able to enrich your lists.
Google Calendar and Outlook
A confirmed booking becomes an event; cancelling it removes the event. The exact instant is sent, never a local time, so a slot booked in January for a summer date happens at the announced hour. Nobody is invited unless you ask.
Microsoft Teams
A card in a channel when an answer arrives, a case is assigned or a due date passes — each switched on separately. Teams renders Markdown in cards, so values coming from an answer are defused: nobody drops a link into your channel through your form.
Accounting: Xero and QuickBooks
A customer and an invoice written after a payment goes through — a draft by default. Lines, discount and tax come from the order as it was charged, never recomputed, and if they do not add up to the amount taken, nothing is written at all.
SMS and WhatsApp
Transactional messages through Twilio: a confirmation, a booked slot, a resume link. The opt-out list holds fingerprints, not numbers, and a STOP outranks any consent ticked afterwards.
Salesforce
A Lead or a Contact per submission, mapped against your own org schema. With an External ID field the delivery is idempotent, so a retry updates the record instead of adding another.
Zoho CRM
Every submission becomes a lead, mapped field by field to your own CRM fields. One submission can never produce two leads, and the refresh token is encrypted at rest.
Zapier trigger
Pick a form from a dropdown in Zapier and every submission travels to your Zaps. The sample Zapier keeps in a Zap’s configuration is synthetic: no real answer leaves to be stored there.
Integrations
A signed webhook, Slack and Brevo, plus a named module for Zapier, Zoho CRM, Salesforce, HubSpot, Pipedrive, ActiveCampaign, Mailchimp, Airtable, Notion, Twilio, Google Sheets, three cloud storages, two calendars, Microsoft Teams and two accounting systems. Make and n8n need no module: they read the signed webhook as it comes.
Your forms no longer stop at “Send”.
Every submission can trigger the notification that matches it, travel to your own tool, and alert your team — without any intermediary service seeing your data go past.
The webhook is signed: the recipient can verify that the request really comes from your site, and not from someone who knows its address.
From the submission to the action.
Each step is conditional, and the server decides — never the browser.
- Trigger — Submission accepted
- Condition — Does the rule match?
- Notification — The right email, to the right person
- Webhook — Sent signed, to your address
- Slack · Brevo — Channel notified, contact added
Every step covered by automated tests
What it plugs into
Five payment gateways and more than twenty outbound destinations. Each is configured per form, and is contacted only once its keys are entered.
Stripe
PaymentCards and wallets, in the page. Subscriptions, refunds, coupons and tax.
PayPal
PaymentIn-page buttons, subscriptions and refunds, on the same order as the others.
Mollie
PaymentA hosted payment page: iDEAL, Bancontact and the European methods Mollie carries.
Razorpay
PaymentA hosted payment link for the Indian market, with its own webhook signature.
Square
PaymentA hosted checkout link, amounts in minor units, zero-decimal currencies included.
Signed webhook
DeveloperEvery submission sent to an address of your choosing, with an HMAC signature the recipient can verify.
Slack
NotificationA message in the channel of your choice as soon as a submission arrives.
Google Drive
StorageAttachments copied into your own Drive, in folders the plugin creates. The scope requested covers only the files it creates itself.
OneDrive
StorageThe same copies into your OneDrive, with the folder path creating the structure as it goes. Four megabytes per file in this version.
Dropbox
StorageThe most tolerant of the three on size. No shared link is ever created: getting one would open the file to whoever knows the address.
Twilio
MessagingTransactional SMS and WhatsApp: a confirmation, a booked slot, a resume link. Never a campaign — every trigger answers a gesture.
Salesforce
CRMA Lead or a Contact per submission, mapped against your org’s real schema. An External ID field makes a retry update the record rather than duplicate it.
HubSpot
CRMA contact per submission, mapped against your portal’s own properties. The static list is separate: it only receives people who ticked a Consent field, and that decision is frozen at submission time.
Pipedrive
CRMA person looked up by email, then created or updated, and a lead opened for it. A delivery is four calls, and one that stops halfway resumes rather than duplicating what it already wrote.
Zoho CRM
CRMOne lead per submission, mapped to your own CRM fields. The data centre is picked when connecting, and nothing is sent that the mapping does not name.
Make
AutomationNo module, and none needed: a Make custom webhook accepts the signed JSON the Webhook panel already sends. Paste the address Make gives you and it is done — the documentation covers the body, the signature and a worked example.
n8n
AutomationSame as Make: the Webhook node takes the signed JSON as it comes. Verifying the signature takes one Code node, and the documentation gives it in full — along with the Raw Body setting without which it can never match.
Zapier
AutomationA “New submission” trigger on Zapier’s marketplace. The example it shows while you build a Zap is synthetic, not someone’s answer.
Google Sheets
SpreadsheetOne row per submission, appended to the tab you choose. Column order is the mapping, and a submitted formula is written as text, never run.
ActiveCampaign
EmailA contact created or updated by email, with your own custom fields. A tag starts an automation here, so tags and lists both wait for an explicit consent frozen at submission time.
Mailchimp
EmailA subscription per consenting answer, with double opt-in by default. Nothing is sent without consent, and an existing member keeps the status they chose — a resend can never bring back someone who unsubscribed.
Airtable
ProductivityA row per answer, in the base and table you pick. Columns are addressed by their internal id, so renaming one breaks nothing — and a merge key makes a second answer update the row instead of creating another.
Notion
ProductivityA page per answer, in the database you share with the connection. A value matching no existing select option is left out rather than added to your schema — and a key property turns a second answer into an update instead of a duplicate.
Google Calendar
AppointmentsA confirmed booking becomes an event; cancelling it removes the event. The exact instant is sent, so a slot booked in January for a summer date happens at the announced time.
Outlook
AppointmentsThe same contract as Google Calendar, on a Microsoft account. Nobody is invited unless you ask: adding the visitor as an attendee would have the provider email them from your account.
Microsoft Teams
NotificationA card in a channel when an answer arrives, a case is assigned, or a due date passes — each one switched on separately. Teams renders Markdown in cards, so values from an answer are defused: nobody drops a link into your channel through your form.
Xero
AccountingA successful payment writes a customer and a draft invoice — a draft in Xero creates no accounting entry until someone approves it. Lines, discount and tax come from the order as it was charged, and if they do not add up to the amount taken, nothing is written.
QuickBooks Online
AccountingThe same contract as Xero, with one difference its API imposes: QuickBooks has no draft invoice, so a form pointed at it writes nothing until you accept that every payment posts to your books. The screens say so rather than letting you find out through missing invoices.
Brevo
EmailThe contact added to a list, with the fields you map to it.
Every name above is a module the code actually carries. For anything else — Make, n8n, your own application — the signed webhook is the answer, and it is not a lesser one: it is what those platforms read anyway.
The integrations pageThe free version loses nothing
Your forms stay
Deactivating Pro erases no form, no submission and no setting. The Pro features stop; everything else carries on.
An expired licence turns nothing off
It stops updates to the Pro add-on. The installed plugin keeps working exactly as it is.
Fourteen days refunded
No questions asked. Payment and licences are handled by Freemius.
The questions that come up
Is the free version a trial?
No. It is a complete, smaller product. It has no time limit, no form count limit and no submission count limit, and the features it ships will stay free.
What happens if I stop paying for Pro?
The free plugin keeps working, with every form and every submission intact. An expired licence stops updates to the Pro add-on — nothing else.
Is Pro a separate plugin?
Yes. SolisForms Pro installs alongside the free plugin and extends it. You can deactivate it at any time without touching your forms.
Can I extend it myself?
Yes. The plugin exposes documented hooks and an add-on registration point, both in PHP and in the JavaScript builder. The extension points page lists them.
Start with the free version
Install the plugin, build your form, and only buy Pro if you hit its limit.
- Free and open source
- No account required
- No runtime dependency
