---
title: Migrating between Ninja Forms and Gravity Forms
url: "https://www.gravitykit.com/docs/gravitymigrate/ninja-forms/"
updated: "2026-09-10"
category: GravityMigrate
---

# Migrating between Ninja Forms and Gravity Forms

This page lists what [GravityMigrate](https://www.gravitykit.com/products/gravitymigrate/) does with each kind of Ninja Forms field and setting, in both directions, as read from the migration code itself. The tables are generated from the plugin, so they change when it does. For the steps, and for the wording of the report the wizard shows before it runs, see [Migrating forms from another form plugin](https://www.gravitykit.com/docs/gravitymigrate/migrating-forms-from-another-form-plugin/).

Checked against Ninja Forms 3.8.25.1.

## From Ninja Forms into Gravity Forms

 Ninja Forms fieldIn Gravity Forms`textbox`Single Line Text`textarea`Paragraph Text`firstname`Name`lastname`Name`email`Email`phone`Phone`address`Address`city`Address`zip`Address`number`Number`file_upload`File Upload`date`Date`listselect`Drop Down`listmultiselect`Multi Select`listcheckbox`Checkboxes`listradio`Radio Buttons`hidden`Hidden`html`HTML`hr`Section`recaptcha`CAPTCHA`signature`Signature`turnstile`CAPTCHA`spam`Single Line Text`recaptcha_v3`CAPTCHA`creditcard`Credit Card`creditcardnumber`Credit Card`creditcardcvc`Credit Card`creditcardexpiration`Credit Card`creditcardfullname`Credit Card`creditcardzip`Credit Card`hcaptcha`CAPTCHA`hcaptcha-for-ninja-forms`CAPTCHA`checkbox`Consent`terms`Checkboxes`password`Password`product`Product`quantity`Quantity`total`Total`shipping`Shipping`starrating`Rating`repeater`Repeater`address2`Address`listcountry`Drop Down`liststate`Drop Down`listimage`Radio Buttons`confirm`Single Line Text`passwordconfirm`Password`note`Hidden`unknown`Hidden`user-analytics-utm-source`Hidden`user-analytics-utm-medium`Hidden

Ninja Forms tags that are furniture rather than data, so they have no field on the Gravity Forms side: `submit`, `button`.

### Read but not carried

 Ninja Forms fieldWhy it stays behind`spam`An anti-spam question. Gravity Forms protects a form through its settings rather than a field, so there is nothing to import it as.`creditcardnumber`Part of a credit card field, which is imported whole. On its own it would be a text box collecting a card number.`creditcardcvc`Part of a credit card field, which is imported whole. On its own it would be a text box collecting a security code.`creditcardexpiration`Part of a credit card field, which is imported whole.`creditcardfullname`Part of a credit card field, which is imported whole.`creditcardzip`Part of a credit card field, which is imported whole.

### Fields that arrive with a note

 Ninja Forms fieldWhat the migration does`recaptcha`Spam protection: the keys live in Ninja’s own settings, so a carried field would refuse the submissions it exists to protect.`recaptcha_v3`The same spam protection, scored invisibly: its keys live in Ninja’s settings rather than on the form.`hcaptcha`The same spam protection under a different provider, with keys that live in Ninja’s settings.`turnstile`The same spam protection under a third provider, with keys that live in Ninja’s settings.`signature`A signature is read as one. Ninja Forms only gained a signature field in 3.15, so writing one back would depend on the version installed at the far end.`creditcard`A card field is read as one, and Ninja Forms has no card field this export can write back: taking payments there is an add-on, and the fields it registers belong to it.`creditcardnumber`A part of a card field: refused on import, and unwritable on export for the same reason as the parent.`creditcardcvc`A part of a card field: refused on import, and unwritable on export for the same reason as the parent.`creditcardexpiration`A part of a card field: refused on import, and unwritable on export for the same reason as the parent.`creditcardfullname`A part of a card field: refused on import, and unwritable on export for the same reason as the parent.`creditcardzip`A part of a card field: refused on import, and unwritable on export for the same reason as the parent.`hcaptcha-for-ninja-forms`The same protection wired in by hCaptcha’s own plugin rather than a Ninja add-on.

## From Gravity Forms into Ninja Forms

 ![The Choose Forms card for a Gravity Forms form going into Ninja Forms, listing what changes on the way and what to set up before the form goes live](https://www.gravitykit.com/wp-content/uploads/2026/09/card-ninja-forms.png) Gravity Forms fieldIn Ninja FormsSingle Line Text`textbox`Paragraph Text`textarea`Name`firstname`Email`email`Phone`phone`Address`address`Number`number`Date`date`Time`textbox`Drop Down`listselect`Multi Select`listmultiselect`Checkboxes`listcheckbox`Radio Buttons`listradio`Hidden`hidden`HTML`html`Section`hr`PageNot migratedFile Upload`file_upload`Website`textbox`CAPTCHANot migratedConsent`checkbox`ListNot migratedPassword`password`Credit CardNot migratedTotal`total`Product`product`Quantity`quantity`OptionNot migratedShipping`shipping`CouponNot migratedLikertNot migratedRankNot migratedRating`starrating`SurveyNot migratedPollNot migratedQuizNot migratedPost TitleNot migratedPost BodyNot migratedPost ExcerptNot migratedPost CategoryNot migratedPost TagsNot migratedPost ImageNot migratedPost Custom FieldNot migratedSignatureNot migratedRepeater`repeater`Multiple Choice`listcheckbox`Image Choice`listradio`Chained Selects`listselect`

### Form settings Ninja Forms cannot hold

These Gravity Forms settings have no counterpart in Ninja Forms. The migration names each one as left behind: Anti-spam honeypot, Require user to be logged in, Submit button conditional logic.

## Merge tags

Merge tags in notifications and confirmations are translated where both plugins have one:

 Gravity FormsNinja Forms`{all_fields}``{fields_table}``{admin_email}``{wp:admin_email}``{form_title}``{form:title}``{form_id}``{form:id}``{ip}``{other:user_ip}``{referer}``{other:referer_url}``{embed_url}``{wp:post_url}``{post_id}``{wp:post_id}``{embed_post:post_title}``{wp:post_title}``{date_mdy}``{other:date}``{user:ID}``{wp:user_id}``{user:user_email}``{wp:user_email}``{user:display_name}``{wp:user_display_name}``{user:user_login}``{wp:user_username}`

A merge tag with no counterpart is left as written and named in the report.

## Related articles

- [Migrating forms from another form plugin](https://www.gravitykit.com/docs/gravitymigrate/migrating-forms-from-another-form-plugin/), which links the reference page for every other plugin
- [Getting started with GravityMigrate](https://www.gravitykit.com/docs/gravitymigrate/getting-started-with-gravitymigrate/)
