Convert rich text from Google Docs, Word, Notion, or any WYSIWYG editor to Sanity-ready Portable Text JSON. No more losing formatting during content migration.
You've spent hours perfecting content in Google Docs, Word, or your favorite editor. The formatting is perfect: bold emphasis where needed, properly structured lists, carefully placed links. Then you paste it into Sanity Studio and watch everything break. The formatting disappears, lists become jumbled paragraphs, and links vanish into plain text.
The problem: Rich text editors use HTML under the hood, but Sanity needs Portable Text. Portable Text is a JSON-based format that preserves structure and meaning, not just visual styling. Manual conversion means recreating every format, rebuilding every list, and re-adding every link. For a single article, that's 20-30 minutes wasted. For a content library, it's days of mindless work.
Our free Rich Text to Portable Text converter preserves all your formatting during migration. Just paste your formatted content, click convert, and get perfectly structured Portable Text JSON ready for Sanity. Works with content from Google Docs, Microsoft Word, Notion, WordPress editors, and any WYSIWYG tool.
Every modern content tool—from Google Docs to WordPress—stores formatted text as HTML behind the scenes. When you make text bold in Google Docs, it wraps it in <strong> tags. When you create a list in Word, it generates <ul> and <li> elements. This HTML-based approach works great for display, but it's a nightmare for structured content management.
Rich text HTML is designed for presentation:
<p>This is <strong>important</strong> text with a <a href="https://example.com">link</a>.</p><ul> <li>First item</li> <li>Second item</li></ul>But Sanity's Portable Text is designed for structure and meaning:
[ { "_key": "392a52526d22", "children": [ { "_type": "span", "marks": [], "text": "This is ", "_key": "a09cccbacb52" }, { "_type": "span", "marks": [ "strong", "strong" ], "text": "important", "_key": "8f38468dddf5" }, { "_type": "span", "marks": [], "text": " text with a ", "_key": "fae8e79b8cdd" }, { "_type": "span", "marks": [ "67864de13b4c" ], "text": "link", "_key": "991894ed50fe" }, { "_type": "span", "marks": [], "text": ".", "_key": "4376fbb71f82" } ], "markDefs": [ { "_key": "67864de13b4c", "_type": "link", "href": "https://example.com/" } ], "_type": "block", "style": "normal" }, { "_key": "c5b078980311", "children": [ { "_type": "span", "marks": [], "text": "First item", "_key": "1b35f35ffc30" } ], "markDefs": [], "_type": "block", "style": "normal", "level": 1, "listItem": "bullet" }, { "_key": "d8c21a6deeb3", "children": [ { "_type": "span", "marks": [], "text": "Second item", "_key": "f9597350e7b1" } ], "markDefs": [], "_type": "block", "style": "normal", "level": 1, "listItem": "bullet" }]Manual conversion requires understanding both formats and painstakingly reconstructing every element.
Organizations moving from WordPress, Drupal, or traditional CMSes to Sanity face a massive challenge: thousands of articles formatted in rich text editors need conversion to Portable Text. Manual migration costs $50,000+ in labor for large sites.
Real Impact: A media company with 5,000 articles saves 2,500 hours (6 months of work) using automated conversion.
Most marketing teams draft content in Google Docs or Word before publishing. But copying from these tools into Sanity strips all formatting, requiring manual recreation of every bold, italic, link, and list.
Real Impact: Marketing teams waste 5 hours weekly on reformatting—that's 260 hours annually.
Technical writers working in Confluence, Notion, or GitBook need to preserve complex formatting—code blocks, nested lists, tables, and callouts—when moving to Sanity.
Real Impact: A documentation team reduced migration time from 2 hours to 5 minutes per article.
Agencies managing multiple client migrations need reliable, fast conversion that preserves formatting integrity across different source systems.
Real Impact: Agencies report 80% reduction in migration project timelines.
The converter analyzes the HTML generated by rich text editors, identifying:
Each HTML element is transformed into its Portable Text equivalent:
<p> → Block with style "normal"<strong> → Span with mark "strong"<a> → Span with link annotation<ul>/<li> → Block with listItem "bullet"The converter ensures:
Problem: Multiple overlapping formats like bold italic links
Solution: Intelligent mark stacking preserves all formatting layers
Problem: Numbered lists inside bullet lists break structure
Solution: Recursive parsing maintains proper list hierarchy
Problem: Images embedded in paragraphs need special handling
Solution: Automatic extraction and conversion to image blocks
Problem: Editor-specific styles don't map to Portable Text
Solution: Smart fallbacks to closest semantic equivalent
We've migrated millions of words from every major platform to Sanity. Our converter handles edge cases others miss.
Unlike basic converters that strip formatting, we preserve the intent and structure of your original content.
Generated JSON is properly formatted, validated, and ready for both Studio and API use.
Stop wasting 45 minutes per article on manual content migration. Convert ChatGPT, Claude, and Markdown files directly to Sanity's Portable Text format with one click.
Transform HTML from WordPress, Drupal, or any CMS into clean, structured Portable Text JSON. Perfect for large-scale CMS migrations and legacy content modernization.
© Copyright 2025 ContentWrap. All Rights Reserved.