To migrate from Contentful to genko.me, export your source data with the official CLI, then transform content models, localized fields, Rich Text, and asset references into the destination format. There is no one-step importer that reproduces a complete Contentful setup. Start with representative articles, align reference and translation IDs, and import drafts in controlled batches.

This article is written by the genko.me team. The implementation and official documentation were checked on October 20, 2026.

What should you check before leaving Contentful?

If your goal is a different editing experience or simpler operations for a small publishing site, test actual articles in both products. If your team depends on environment management, custom editor extensions, or a complex model, the cost of replacing that workflow may outweigh the benefits of moving. The official Contentful CLI documentation illustrates that environments and editor interfaces are separate migration concerns.

Inventory item

Decision to make

Space and environment

Identify the exact source and distinguish production from test content

Content types

Map each to a destination API

Entry and asset IDs

Decide which identifiers can stay and which require translation

Locales

Choose the main language and treatment of missing translations

Rich Text embeds

Convert to HTML, separate fields, or frontend rendering

Webhooks

Reconnect builds, cache invalidation, and other consumers

Budget for transformation, frontend work, editorial review, and maintenance. Staying with Contentful is reasonable when replacing its existing workflows would add more complexity than the move removes.

1. Export Contentful with the official CLI

Use an installed and authenticated contentful-cli. The following example uses documented export options. Replace the space and environment placeholders, and keep credentials out of articles and shared repositories.

bash
contentful space export \  --space-id SPACE_ID \  --environment-id ENVIRONMENT_ID \  --include-drafts \  --include-archived \  --download-assets \  --export-dir ./contentful-backup \  --content-file export.json

Preserve the JSON and downloaded files. This command exports Contentful data; it does not import anything into genko.me. Repeat the export during a controlled editing freeze before cutover so that changes made since your rehearsal are not lost.

Keep the source export unchanged and generate destination files separately. That makes it possible to rerun a corrected transformation without trying to reconstruct the original data.

2. Map content types to genko.me APIs

Create the destination fields through APIs and schemas. genko.me does not automatically create APIs from Contentful content types. Start with a field mapping and review any source validation rules separately.

Source data

Possible destination

Main consideration

Short text

text

Field IDs and required values

Long text

textarea

Separate plain text from formatted article content

Numbers, booleans, dates

number, boolean, datetime

Validate values and time zones

Rich Text

richtext

Convert the JSON tree into an HTML string

Entry links

reference, references

Create target records and rewrite IDs

Asset links

image, images, file

Register destination media

Arbitrary JSON or compound data

Split fields, another API, or text storage

Do not assume a one-to-one equivalent

Consult the field reference for actual supported types. Required fields apply to draft saves too. Decide how editors will save incomplete work and where publication-specific checks belong.

A successful import is only one part of model compatibility. Your frontend must also consume the destination values correctly, including optional fields and unresolved references.

3. Convert Contentful Rich Text to HTML

Contentful Rich Text is structured JSON. genko.me rich text is an HTML string. Passing the original document tree into a rich text field will not preserve its meaning automatically.

Contentful's official @contentful/rich-text-html-renderer exposes documentToHtmlString for basic conversion. Embedded entries and assets need resolved references and appropriate rendering rules.

Work through the following cases before accepting your conversion:

  1. Internal entry links must resolve to the new article URLs.

  2. Asset rendering must retain the correct file and alt text.

  3. Embedded entries need an explicit replacement, such as a card, link, or separate field.

  4. Tables and code must survive import, editing, and delivery.

  5. Removing unsupported or unsafe markup must not silently remove essential information.

HTML that looks correct on a page may not remain identical after being opened and saved in a different editor. Test the full round trip: import a draft, edit it, save it, and inspect its delivered output. Make changes to the transformation before processing the rest of the collection.

4. Prepare media and referenced records

A Contentful asset ID or CDN URL does not become a genko.me image value just by copying it. There is no Contentful-specific automatic asset copier. The Newt image migration feature is a separate integration.

Register files through a content record's image or file fields, and save the record to establish media references. For a small migration, manually placing images after importing text may be practical. For a large collection, maintain a ledger with source asset ID, downloaded file, destination media ID, and articles using it.

Use a JSON export of a prepared destination article as a reference for stored values. Delivery API image values and import storage values are different, so do not use the public delivery response as an assumed import specification.

Create authors, categories, and other referenced entries before the articles that use them. If references form a cycle, initially make those references optional, create the records, and connect them through editing once the ID map exists. Reimporting the same list-format file does not update existing records.

5. Transform localized values into language-specific imports

Contentful documents field-level and entry-level localization strategies. Identify the strategy your project actually uses before deciding how to group translations.

genko.me keeps language versions under the same content ID, with values and publication status managed per language. Import the main-language records first, then match translations to those IDs. See multilingual content for configuration and delivery behavior.

This is transformed destination JSON for an API with title and body fields. It is not an unmodified Contentful export.

json
{  "contents": [    {      "id": "article-001",      "title": "Our first article",      "body": "<p>HTML converted from the Rich Text document.</p>"    }  ]}
  1. Import main-language records as drafts.

  2. Prepare translated field values with the same IDs.

  3. Select the destination sub-language in the import screen.

  4. Review matched IDs and skipped rows before importing.

  5. Preview each language and publish only the intended versions.

A sub-language import does not create a main-language record for an unknown ID. Do not manufacture apparently translated content by copying every missing value. Leave a language version absent or choose an explicit frontend fallback policy.

By default, genko.me does not fall back to the main language. A single-entry request for a language without a published version returns 404. Make missing translations part of your frontend testing.

What does the genko.me importer not preserve?

As of October 2026, imports are limited to 10MB per file and 1,000 entries per batch. An entries array in a Contentful export does not mean its localized fields and sys structure can be imported unchanged.

Content IDs must use letters, digits, hyphens, or underscores and fit within 64 characters. Track any rewritten identifiers in your mapping table. Original publication status, schedules, creation timestamps, and revision history are not restored. Store an original publication date in a dedicated datetime field if the frontend needs it.

An existing ID stops a list import at that record. Earlier successful saves remain, so this is not an all-or-nothing operation. Reconcile saved IDs and retry only the remainder. Avoid restarting a whole batch without checking whether it would create duplicates or stop again.

Reconnect webhooks and switch the public site

The genko.me webhook sends a change notification rather than an entire article. Adapt the receiver for the new event names, signature verification, API identifiers, and language information. Automatic retries are not provided; failed deliveries can be manually resent from logs.

Manual publication uses creation or update events. Watching only entry.published would miss it. Test updates, deletion, returning a record to draft, and language-specific changes, alongside the frontend's listing, detail, preview, and cache behavior.

If URLs change, prepare individual redirects. The WordPress migration guide provides the same URL-mapping approach, while Next.js webhook revalidation addresses update propagation. Compare your media and language requirements with genko.me and its plan limits before committing to the move.

FAQ

Can I import a Contentful export directly into genko.me?

There is no complete direct migration. Transform content types, localized fields, Rich Text, references, and media to match the destination schema.

Can Contentful Rich Text be converted to HTML?

Yes. Use the official HTML renderer. Embedded entries and assets need reference resolution and rendering rules, followed by an editing round-trip check in the destination.

Can I move Contentful translations?

Yes. Transform each language and import sub-languages against matching main-language IDs. Existing localization and fallback policies are not recreated automatically.

Are Contentful webhook settings portable?

Register destination webhooks and adapt their receivers. Verify signatures, events, language handling, and failure recovery against genko.me's notification format.

Sources

Checked October 20, 2026.