Get a peek at our latest innovations at Sanity Product Day on Dec 8th →

Contentful to Sanity

Official(made by Sanity team)

By Espen Hovlandsdal

This package liberates Contentful spaces, creating Sanity projects and schemas as it goes.


This package liberates Contentful spaces, creating Sanity projects and schemas as it goes.


npm install -g contentful-to-sanity


Requires node.js version >= 12


  1. Install the CLI tool (see Installation above)

  2. Install the Sanity CLI tool (if not already done) and log in

    npm install -g @sanity/cli && sanity login

  3. Open Contentful and navigate to your space:

  4. Find the contentful space ID of your project (under Space settingsGeneral)

  5. Create a content management token (under Space settingsAPI keysContent management tokensGenerate personal token)

  6. Run the migration tool:

    contentful-to-sanity --space <your-space-id> --contentful-token <your contentful token>


    $ contentful-to-sanity

    -s, --space <spaceId> Contentful space to migrate
    -p, --project <projectId> Sanity project ID to import to
    -d, --dataset <dataset> Sanity dataset to import to
    -o, --output <path> Path to create Sanity project in
    -l, --locale <locale> Locale to migrate
    -f, --from-file <file> Import from stored contentful export file
    --sanity-token <token> Sanity token to authenticate with
    --contentful-token <token> Contentful management token to authenticate with
    --replace Replace documents in dataset if same IDs are encountered
    --missing Skip documents that already exist
    --keep-markdown Keeps markdown as-is. Converts to block content format by default.
    --weak-refs Use weak references (allow import to continue on broken references)
    --help Show this help

    # Migrate contentful space "4cfSp4c3" with contentful token "d4t-t0k3n", prompt for info
    $ contentful-to-sanity --space=4cfSp4c3 --contentful-token=d4t-t0k3n

    # Migrate contentful space "4cfSp4c3" to sanity project "s4ni7yp" and dataset "staging"
    $ contentful-to-sanity --space=4cfSp4c3 --project=s4ni7yp --dataset=staging

    # Migrate from an exported file created by contentful-export CLI tool
    $ contentful-to-sanity --from-file contentful.json --project=s4ni7yp --dataset=staging

  Environment variables (fallbacks for missing flags)
    --sanity-token = SANITY_IMPORT_TOKEN
    --contentful-token = CONTENTFUL_MANAGEMENT_TOKEN


  • Only published items will be imported
  • Markdown is converted on a best-effort basis. Certain features (like tables) are not supported. Arbitrary HTML is either skipped or unwrapped to simple text values. Inline images are currently skipped. You can disable markdown conversion by using --keep-markdown.
  • Validations are not ported (currently)
  • Omitted fields are not included
  • Fields that accept both images and files currently only allow images


MIT-licensed. See LICENSE.

Install command

npm install -g contentful-to-sanity


Categorized in

Other plugins by author

Mux input
- has 7 likes

v3 Ready

Upload videos to Mux directly from the studio.

Go to Mux input

Google Maps input

Official(made by Sanity team)
v3 Ready

Use geo-related input types using Google Maps.

Espen Hovlandsdal
Go to Google Maps input

PortableText to React
- has 10 likes

Official(made by Sanity team)

Render PortableText content in React

Espen Hovlandsdal
Go to PortableText to React


An opinionated, enhanced plugin development experience.

Espen Hovlandsdal
Go to Sanipack