Tutorials

How to Export WPForms Entries to CSV

Exporting WPForms entries to a CSV file in WordPress

Getting your form submissions out of WordPress as a spreadsheet sounds like a thirty-second job. With WPForms it usually is, if you’re on a paid tier. On the free version it’s messier, and most tutorials gloss over the part where the entries you wanted may not exist at all. We build form and entry plugins for a living, so here’s the honest version.

First: does WPForms actually have your entries?

Settle this before anything else, because it decides which route below applies to you.

WPForms Lite, the free version on wordpress.org, is built around email notifications. When someone submits, it mails you the submission. Full entry management (a browsable table with search, filtering, per-entry views and a CSV export) is a paid-tier feature and always has been. Recent Lite releases add a stripped-down entries screen showing a limited amount of recent data, mostly as a preview of the paid feature. How much it retains and for how long has changed between versions, so rather than assert a number: go look at WPForms → Entries. A full searchable table with an Export button means a paid tier. A teaser screen, or nothing, means Lite.

The uncomfortable implication: run Lite for two years with no second storage method and the only complete record of those submissions is your email inbox. No plugin can retroactively create entries that were never written to the database. We say it bluntly because we’ve watched people spend an afternoon hunting an export button for data that isn’t there.

The built-in export (paid tiers)

On any paid license the export tool lives at WPForms → Tools → Export, and there’s an Export button on the Entries screen itself, faster when you’re already looking at one form. The flow is roughly:

  1. Pick the form you want to export from the dropdown.
  2. Tick which fields to include. It selects all of them by default, rarely what you want on a fifteen-field form.
  3. Optionally add the “additional information” columns: entry ID, date, user agent, IP address, user details.
  4. Set a date range if you only want a slice.
  5. Choose CSV (some versions also offer Excel) and download.

Two things worth knowing. The export runs on your server, so with tens of thousands of entries it can time out on cheap shared hosting; narrow the date range, export in chunks and stitch the files together. And it respects filters applied on the Entries screen, which is confusing when you forgot a search term was in the box and got 12 rows instead of 4,000.

When you only have Lite

Three realistic options, and none of them is “click export”.

1. Pull from the database directly

Any entry data a Lite install has stored lives in custom tables, typically wp_wpforms_entries and wp_wpforms_entry_fields (your prefix may differ). The parent table holds one row per submission; field values are either serialized in a fields column or split across the entry_fields table, depending on version.

In phpMyAdmin or Adminer, run something like:

SELECT entry_id, form_id, date, fields
FROM wp_wpforms_entries
WHERE form_id = 12
ORDER BY date DESC;

and use the tool’s own Export tab to get a CSV. The catch: fields comes out as serialized or JSON data, one ugly cell per submission. Fine if you’ll parse it yourself, painful if you wanted to hand the file to a colleague. Back up the database first, obviously.

2. The WordPress personal-data exporter

Under Tools → Export Personal Data, WordPress assembles everything registered exporters know about a given email address, and WPForms hooks into it, so that person’s submissions land in the archive. It’s built for GDPR subject-access requests, not bulk reporting: per-email-address, HTML/JSON inside a zip rather than a clean CSV, and slow. Useful when someone asks what you hold on them, useless for “give me every lead from Q3”. If that’s why you’re here, our compliance checklist for WordPress sites covers the rest of the obligations attached.

3. Add an entry-storage layer

The general fix for “my form plugin doesn’t save submissions” is to put something in front of the notification email that writes every submission to the database in a structured way. Our guide to storing and exporting WordPress form entries is the neutral overview.

Full disclosure: this is our own corner of the market. We make a plugin called EntryVault that captures submissions from several form plugins into one entries table with a CSV export, and its free version handles capture, browsing and CSV export across the form plugins it supports, WPForms included, which covers the common Lite case. Separate pipelines per form and importing entries submitted before you installed it are paid. Have a look at jnkplugins.com/entryvault and judge for yourself. It won’t recover anything submitted before you install it, and nor will anything else.

What the CSV actually looks like, and where it bites

Every export has roughly this shape: one row per submission, one column per selected field, plus whatever metadata you enabled.

Column Contains Watch out for
Entry ID Sequential integer Not stable across a site migration
Date Submission timestamp Timezone (see below)
Name / Email / Text fields Plain text as typed Encoding, leading zeros
Checkboxes All ticked options in one cell Separator collides with your data
File upload A URL, not a file Link rot, public access

Excel mangles UTF-8

The export is UTF-8. Double-click it in Excel on Windows and accented characters, curly quotes and non-Latin scripts turn into mojibake, because Excel assumes the local ANSI codepage unless the file carries a byte-order mark. So don’t double-click. Open Excel, then Data → From Text/CSV, and set File Origin to UTF-8 in the preview. Sheets and LibreOffice get this right on import.

Leading zeros vanish

Postcodes like 01234, phone numbers and any reference starting with a zero get read as numbers and lose the zero. Same import dialog, same fix: mark those columns as Text before the data lands. Once you’ve imported and saved, the zeros are gone and you re-import from the original. Spreadsheet behaviour, not a WPForms bug, and it happens with every form plugin’s export.

Checkboxes collapse into one cell

Three ticked options export as one cell containing all three, joined by a separator (commonly a newline or a comma, depending on version and field type). Counting how many people picked each option means splitting that column afterwards, and if the separator is a comma and an option label contains one too, the split gets messy. Good argument for keeping commas out of checkbox labels.

An upload field exports the URL of the stored file, not the file. Delete the entries or clean the uploads directory later and the CSV points at nothing. And unless uploads are protected, those URLs are reachable by anyone holding the CSV, which matters when people upload ID documents or CVs. Download the files separately if the export is meant to be an archive.

The date column’s timezone

Timestamps are stored in UTC and rendered per your WordPress timezone setting (Settings → General). Whether the exported column is the local rendering or raw UTC has varied, so before building a report on it, submit a test entry and check what the CSV says. An unnoticed offset of a few hours quietly moves submissions across day boundaries.

Deactivating the plugin

Deactivating hides the admin screens but leaves the tables alone, so entries come back on reactivation. Uninstalling is the dangerous one: with “remove all data on uninstall” enabled, deleting the plugin drops the entry tables permanently. Export first, and back up the database too, because a CSV won’t restore into WPForms cleanly.

Which route should you pick?

Paid tier: use the built-in export, be selective about columns, and import via the Data tab rather than double-clicking.

Lite, one-off: go at the database directly, accept the ugly serialized column, clean it up once and move on.

Lite and you’ll need this monthly, or you run several form plugins and want submissions in one place: add a storage layer now. The same reasoning covers Gravity Forms and Contact Form 7, which has the no-storage-by-default problem in a sharper form.

Whichever route you take, do the boring thing: submit one test entry with an accented character, a leading zero, two checkboxes ticked and a file attached, then export it. That tells you more than any tutorial, ours included.

Frequently asked questions

Can I export WPForms entries without upgrading to a paid tier?

Only if the entries exist in your database in the first place. Free WPForms is built around email notifications rather than full entry storage, so if you have never used another storage method there may be nothing to export. Where data does exist, pull it from the WPForms tables with phpMyAdmin or Adminer and export a CSV there, though field values come out as one serialized cell per submission rather than tidy columns.

Why do accented characters and postcodes break when I open the CSV in Excel?

Because Excel guesses. Double-clicking a UTF-8 file makes it assume your local codepage, which garbles accented and non-Latin characters, and it reads numeric-looking columns as numbers, stripping leading zeros from postcodes and phone numbers. Open Excel first, use Data then From Text/CSV, set the file origin to UTF-8 and mark those columns as Text before importing. Google Sheets and LibreOffice handle the encoding correctly on their own.

What happens to my entries if I deactivate or delete WPForms?

Deactivating only hides the admin screens. The plugin’s tables stay where they are and your entries reappear when you reactivate. Deleting is different: if the option to remove all data on uninstall is enabled, the entry tables are dropped permanently. Export a CSV and take a database backup before deleting anything, since a CSV cannot be imported back into WPForms cleanly.