> For the complete documentation index, see [llms.txt](https://kb.craftformswp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.craftformswp.com/documentation/form-building/import-forms.md).

# Import Forms

Import Forms turns forms made with **Fluent Forms**, **Gravity Forms** or **WPForms** into CraftForms forms. It moves the fields, the pages of a multi-page form, show/hide rules, emails, the confirmation message and, if you want, the entries people already sent. It can then swap the old form for the new one on your pages, with an undo.

The other plugin is never changed. Its forms and entries stay where they are, so you can compare the two side by side and switch back if you need to.

![The Import Forms tab in CraftForms Settings](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FUcNIux3ZFvg2x9VNpLWz%2Fimport-forms--import-forms-tab.jpg?alt=media)

### What you need

* **CraftForms (free)**, version 2.3 or later. Import Forms is in the free version.
* An administrator account. The tab is only shown to users who can manage the site's options.
* One of these:
  * the other form plugin **installed on the same site** (it can be the one your forms are in now), or
  * its **form export file** (a `.json` file), when the forms live on another site.

Moving from **Contact Form 7**? That's a separate importer: go to **CraftForms → Forms** and click **Import from CF7** (the button shows while Contact Form 7 is active).

### Two ways in

|                           | From the plugin on this site                             | From an export file                                                                                         |
| ------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **When**                  | The old plugin is active on this site, with its forms.   | The forms are on another site, or the old plugin is already removed.                                        |
| **Where**                 | Its own table on the Import Forms tab, one row per form. | **From an export file**, below the tables.                                                                  |
| **Entries**               | Read straight from the plugin's tables.                  | Fluent Forms: add its entries export. Gravity Forms: not possible from a file. WPForms: see the note below. |
| **Replace on your pages** | Yes.                                                     | No: the pages that show the form are on the other site.                                                     |

### Convert a form from this site

1. Go to **CraftForms → Settings** and open **Import Forms** (under **Migrate**).
2. Each plugin that has forms on this site gets its own table: **Fluent Forms**, **Gravity Forms**, **WPForms**. You see each form's **Fields**, its **Entries** and, if it was converted before, a **Converted →** link.
3. Click **Check** on a form. A report opens with what will move and what needs a look (see [Read the report](#read-the-report)). Nothing is written yet.
4. Leave **Copy the entries too** ticked to bring the entries over as well.
5. Click **Convert**.

![Forms from Gravity Forms on this site, one not converted yet](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FEjiq6qmkz05Pz9B0gJxc%2Fimport-forms--on-site-forms-list.jpg?alt=media)

When it's done, the row shows **Created →** (a link to the new form in the editor), how many entries were copied and the number of notes. Click the notes to see the report again.

![A converted form: created, 4 entries copied, 1 note](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2F32nEdedpPIhyfTcAJBMJ%2Fimport-forms--converted-row.jpg?alt=media)

The new form has the old form's title. It's published and ready to embed, like any CraftForms form.

### Convert from an export file

First export the forms in the old plugin:

| Plugin            | Forms export                                  | Entries export                                                         |
| ----------------- | --------------------------------------------- | ---------------------------------------------------------------------- |
| **Fluent Forms**  | **Fluent Forms → Tools → Export Forms**       | Open the form's **Entries**, click **Export** and choose **JSON**.     |
| **Gravity Forms** | **Forms → Import/Export → Export Forms**      | Not read from a file. Gravity exports entries as CSV only.             |
| **WPForms**       | **WPForms → Tools → Export**, **Form Export** | WPForms Pro exports entries as CSV or Excel, which can't be read here. |

Then, on the site with CraftForms:

1. Go to **CraftForms → Settings → Import Forms** and scroll to **From an export file**.
2. Next to **Forms file**, choose the export file. Every form in it is listed with the plugin it came from.
3. For Fluent Forms entries, choose their file next to **Entries file (optional)**.
4. Click **Check** to see the report, then **Convert**.

![An export file with three Gravity Forms forms, all converted](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FnaweW7lAd1s4l8WzPYnF%2Fimport-forms--export-file-converted.jpg?alt=media)

CraftForms tells you when the file is not what it expects: an entries export chosen as the forms file, or a file without forms in it.

### Read the report

**Check** shows a short summary first: how many fields, steps and show/hide rules the form will have, and what happens after submit (save the entry, the emails, any integrations). Below it, the notes, grouped:

| Group                 | What it means                                                                          |
| --------------------- | -------------------------------------------------------------------------------------- |
| **To do by hand**     | Something you need to set up again, like a payment field or a Telegram bot to connect. |
| **Not moved**         | A part with no CraftForms equivalent. It was left out.                                 |
| **Works differently** | It moved, but not exactly as it was. For example, a list field became a text box.      |
| **Good to know**      | Nothing to do, just worth knowing.                                                     |

Each note starts with the field, email or setting it's about. A form with no notes converted one to one.

![The report for a Gravity Forms form](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2F8gf0aOYiouGtWJnRo7vW%2Fimport-from-gravity-forms--check-report.jpg?alt=media)

### What moves

All three plugins:

* **Fields** with their labels, help text, placeholders, required setting and choices. Name and Address fields become a row of separate inputs (first name, last name; street, city, postcode…), so each part works on its own in emails and conditions.
* **Pages** of a multi-page form become steps. Conditions on a page become jump rules on the step before it.
* **Show/hide rules** on fields, sections and HTML blocks.
* **Emails** (notifications) as **Send Email** actions, with their recipients, subject, message, Reply-To and From. Tags like `{all_fields}` or a field's tag are rewritten to CraftForms tags. A simple condition ("send if Department is Sales") becomes the action's **Run if**.
* **The confirmation** after submit: the message, or the redirect to a page or URL.
* **A Save Submission action**, so entries are kept in **CraftForms → Submissions**.

Each plugin has its own details and gaps:

* [Import from Fluent Forms](/documentation/form-building/import-forms/fluent-forms.md)
* [Import from Gravity Forms](/documentation/form-building/import-forms/gravity-forms.md)
* [Import from WPForms](/documentation/form-building/import-forms/wpforms.md)

### What doesn't move

* **Payments.** Payment and price fields are listed under **To do by hand**. Add the price with option prices or Smart Variables and the Payment block, and connect your gateway in CraftForms.
* **CAPTCHA keys.** CraftForms has its own honeypot and form token. If you want a visible check, switch on Cloudflare Turnstile in **Settings → Spam Protection**.
* **Settings outside the form**, like entry limits, schedules, "require login", custom CSS and add-on feeds. The report lists each one it finds.
* **Plugin-specific features** such as quiz scoring, ranking questions and signatures. See each plugin's page.

### Entries

With **Copy the entries too** ticked, every entry of the form is copied into **CraftForms → Submissions**, with:

* its original date and time,
* read or unread, as it was (trashed entries stay in the trash; spam is skipped, and so are WPForms' partial and abandoned entries),
* the visitor's IP address, and the page it was sent from when the old plugin kept it,
* uploaded files as links to where the old plugin stored them,
* consent: the agreed wording and the time of the entry.

![Four entries copied from Gravity Forms, with their original dates](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FUNOb6FzGxK6tcBL9sZJ8%2Fimport-forms--copied-entries.jpg?alt=media)

Each entry is copied once. Convert again, or add new entries in the old plugin and convert again, and only the new ones are copied. Copied entries don't send emails or run any actions.

### Replace on your pages

When the old plugin is on this site, **Replace on your pages** lists every page, post, pattern and template that shows one of its forms, by shortcode or block. The **Form** column shows the old form's ID and the CraftForms form it was converted to.

![Pages that show a converted form](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2Fi4cz6qRoIi0QgG6w9wIf%2Fimport-forms--replace-on-pages.jpg?alt=media)

1. Convert the forms first. A form that isn't converted shows **(not converted)** and is left alone.
2. Click **Replace on&#x20;*****N*****&#x20;pages**. Each old shortcode or block is swapped for the CraftForms form.
3. Check the pages. Changed your mind? Click **Undo on&#x20;*****N*****&#x20;pages** and they're put back exactly as they were before the first replace.

![After replacing: the Undo button](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FePaQHqYw5obT3sq66svH%2Fimport-forms--replace-undo.jpg?alt=media)

### Convert again

Converting the same form again updates the CraftForms form it made the first time, instead of making a copy. Use it after you change the form in the old plugin, or after a CraftForms update brings a better converter.

It **replaces** the CraftForms form with a fresh conversion: fields, steps, rules and submit actions. Changes you made to the converted form in CraftForms are lost. Convert once, then edit the form in CraftForms.

### WP-CLI

Every step is also a command. `<plugin>` is `fluentform`, `gravityforms` or `wpforms`.

| Command                                                | What it does                                                                                                                                     |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `wp craftforms import <plugin> list`                   | Forms on this site, with fields, entries and the converted form.                                                                                 |
| `wp craftforms import <plugin> analyze <id>`           | The report for one form, nothing written.                                                                                                        |
| `wp craftforms import <plugin> convert <id> --entries` | Convert the form and copy its entries. Add `--reuse-keys` to bring over the Fluent Forms Telegram and Notion keys.                               |
| `wp craftforms import <plugin> entries <id>`           | Copy only the entries (convert first).                                                                                                           |
| `wp craftforms import <plugin> embeds`                 | List the pages that show the plugin's forms. Add `--apply` to replace them, `--undo` to put them back, `--post=12,34` to limit it to some pages. |

For an export file, use `--file=export.json` instead of the ID, `--form=1` for the second form in the file (counting from 0), and `--entries-file=entries.json` for Fluent Forms entries.

### Good to know

* **Check first.** It costs nothing and shows what you'll need to redo.
* **Keep the old plugin until you've tested.** Submit the new form, look at the emails and the entry, then deactivate the old plugin.
* **Emails go out as plain text.** The source plugin's HTML is turned into text: paragraphs and line breaks stay, links keep their address, and the all-fields tag becomes the list of answers. For a designed email, switch the action to **Send Email Template**.
* **Dates** use the browser's own date picker and are saved as YYYY-MM-DD, whatever format the old plugin used.
* **"Bring over the keys"** only matters for Fluent Forms Telegram and Notion feeds on this site. Leave it off on a copy of a live site, or test entries will reach the live chat and Notion.
* **Forms come out published**, even a draft or inactive form.
* **Import Forms is free.** Some converted parts (Field Links, date range pickers, User Registration) need PRO to use.
