BLACK FRIDAY
Save 59% on PageForge Annual $191/year $485/year
Claim 59% Off →
Substack Importer icon
Maintained Tested up to 6.9.9 #20 in importer

Substack Importer

The Substack Importer allows you to import content from a Substack newsletter into your WordPress site.

Active installs1K+1K+ tier
Downloads · 30d354▼ -7.6% vs prev. 30d
Rating2.8/54 reviews
Health score48/100Fair
All-time downloads15.3KSince Dec 2020
Support resolved—No recent threads
RequiresWP 5.2PHP 7.4+
Downloads · 7d97▲ +2.1% week over week
Our verdict

Use with caution

Substack Importer works, but test it on a staging site before relying on it in 2026. It runs on 1K+ sites, is rated 2.8/5 and was last updated 5 months ago, and scores 48/100 on our health check.

  • Low rating so far — 2.8/5 from only 4 reviews
  • Only tested up to WordPress 6.9 (latest is 7.1)

How does it stack up?

Side-by-side on installs, updates, ratings & support

Daily downloads

61319Jun 30Aug 13Sep 27
Yesterday14
Daily average (1y)12
Peak day573Apr 22, 2026
Last 12 months4.4K

Download spikes usually follow a new release — each site that auto-updates counts as a download.

Rankings

Where Substack Importer stands today

WordPress.org search rankings

Live position in the plugin search, top 100
KeywordPositionCompeting pluginsCategory
importer #24 1,191 Best importer plugins →
substack #1 22 Best substack plugins →

Version adoption

Share of active sites per release.

  • 1.275.8%
  • 1.124.2%

Rating breakdown

★★★★★★★★★★ 2.8 from 4 reviews

  • 5★25.0%
  • 4★0.00%
  • 3★25.0%
  • 2★25.0%
  • 1★25.0%

About Substack Importer

From the official readme · v1.2.0

Description

The Substack Importer will import content from an export file downloaded from your Substack newsletter.

The following content will be imported:

  • Posts and images.
  • Podcasts.
  • Comments (only for publicly accessible posts).
  • Author information.

In the future, we plan to improve the importer by:

  • Mailing lists.
  • Enhancing the performance of processing export files with many posts and media.

Development

For running unit tests and contributing to the plugin, see the README on GitHub.

Tests can be run with wp-env or with any local WordPress setup paired with a Docker MySQL container. Run composer install first, then vendor/bin/phpunit.

Hooks

The Substack Importer provides filters and actions at key stages of the content conversion pipeline.

Post-level Filters

substack_importer_post_meta

Filter the post metadata loaded from the Substack API before it is used for author, comments, and other post data.

Parameters:
* $post_meta (array|null) – The post metadata from the Substack API response.
* $post (array) – The raw Substack post data from the CSV.
* $id (int) – The Substack post ID.

substack_importer_raw_content

Filter the raw HTML content before Gutenberg conversion. Runs after the subtitle has been prepended (if present). Useful for cleaning up Substack-specific HTML, adding custom elements, or stripping unwanted markup.

Parameters:
* $html_body (string) – The raw HTML content from the Substack export.
* $post (array) – The raw Substack post data from the CSV.
* $post_meta (array|null) – The post metadata from the Substack API response.

substack_importer_subtitle

Filter the subtitle HTML before it is prepended to the post content. Return an empty string to skip the subtitle entirely.

Parameters:
* $heading (string) – The subtitle HTML (default: an h2 element).
* $post (array) – The raw Substack post data.

substack_importer_post_content_after_conversion

Filter the post content after Gutenberg conversion but before it is added to the WXR. Useful for wrapping paywalled content in custom blocks (e.g., membership plugins).

Parameters:
* $post_content (string) – The converted Gutenberg block content.
* $post (array) – The original Substack post data.
* $post_meta (array|null) – Additional post metadata from Substack API.

substack_importer_post_data

Filter the final post data array before it is added to the WXR.

Parameters:
* $post_data (array) – The post data.
* $post (array) – The original Substack post data.

Content Conversion Filters

substack_importer_converted_node

Filter the result of a single node conversion to a Gutenberg block. Allows modification of the block name and attributes. Return a null block_name to skip the node.

Parameters:
* $block_data (array) – Array with ‘block_name’ and ‘block_attributes’ keys.
* $node (DOMElement) – The converted DOM node.
* $node_name (string) – The original HTML tag name (e.g. ‘p’, ‘div’, ‘h2’).

substack_importer_image_result

Filter the image node conversion result. Useful for adjusting image sizes, captions, or link destinations.

Parameters:
* $result (array) – Array with ‘block_attributes’ and ‘node’ keys.
* $image_data (array|null) – The decoded image data from the Substack data-attrs attribute.

substack_importer_pre_embed_conversion

Short-circuit the embed node conversion before default handling. Return a non-null array to skip the built-in switch statement entirely. Useful for handling unsupported embed types or overriding the default conversion for a specific provider.

Parameters:
* $pre_result (array|null) – Return non-null to short-circuit. Expected keys: ‘node’, ‘block_attributes’, ‘block_name’.
* $node (DOMElement) – The embed DOM node before conversion.
* $parent (DOMElement) – The parent DOM element.
* $first_class (string) – The CSS class identifying the embed type (e.g. ‘youtube-wrap’, ‘tweet’).

substack_importer_embed_result

Filter the embed node conversion result after the default conversion. Useful for modifying embed URLs, adding custom attributes, or changing how embeds are represented.

Parameters:
* $output (array) – Array with ‘block_name’, ‘block_attributes’, and ‘node’ keys.
* $first_class (string) – The CSS class identifying the embed type.

substack_importer_audio_block

Filter the Gutenberg audio block HTML for podcast posts.

Parameters:
* $block (string) – The Gutenberg audio block HTML.
* $audio_url (string) – The URL of the podcast audio file.

Paywall Filters

substack_importer_paywall_marker_text

Filter the paywall marker text that appears in the imported content.

Parameters:
* $marker_text (string) – The default paywall marker text.
* $node (DOMElement) – The paywall node being converted.
* $parent (DOMElement) – The parent element.

substack_importer_paywall_content

Filter the entire paywall conversion result. Return a non-null value to override the default conversion.

Parameters:
* $result (array|null) – The conversion result, null to use default.
* $node (DOMElement) – The paywall node being converted.
* $parent (DOMElement) – The parent element.

Actions

substack_importer_before_post

Fires before a single Substack post is processed and converted. Useful for setting up state or performing actions before conversion begins.

Parameters:
* $post (array) – The raw Substack post data from the CSV.
* $post_meta (array|null) – The post metadata from the Substack API response.
* $id (int) – The Substack post ID.

substack_importer_after_post

Fires after a single Substack post has been converted and added to the WXR. Useful for logging, progress tracking, or performing cleanup after each post.

Parameters:
* $post_data (array) – The final post data that was added to the WXR.
* $post (array) – The raw Substack post data from the CSV.
* $post_meta (array|null) – The post metadata from the Substack API response.
* $id (int) – The Substack post ID.

Installation

This plugin depends on the WordPress Importer plugin which needs to be installed first.

To install the Substack Importer:

  1. Upload the substack-importer directory to the /wp-content/plugins/ directory
  2. Activate the plugin through the ‘Plugins’ menu in WordPress

Frequently asked questions

After about 30 seconds, the import stops and I am seeing a blank screen. What happened?

When trying to import a large number of posts and images, timeouts can occur. To solve this, you can try to run the import several times until all content has been imported.

Changelog

1.2.0

  • Compatibility: the plugin now requires PHP 7.4 or higher.
  • Enhancement: added new pre-import options for forcing Draft status, choosing publish date mode, setting the first image as Featured Image, and applying a global Category/Tag.
  • Enhancement: improved import behavior handling for featured image assignment and post metadata processing during import.
  • Enhancement: added substack_importer_paywall_marker_text filter to customize paywall marker text.
  • Enhancement: added substack_importer_paywall_content filter to override paywall block conversion.
  • Enhancement: added substack_importer_post_content_after_conversion filter to modify content after Gutenberg conversion.
  • Enhancement: added substack_importer_raw_content filter to modify raw HTML before Gutenberg conversion.
  • Enhancement: added substack_importer_subtitle filter to customize or skip the subtitle heading.
  • Enhancement: added substack_importer_post_meta filter to modify post metadata before processing.
  • Enhancement: added substack_importer_converted_node filter to customize individual block conversions.
  • Enhancement: added substack_importer_image_result filter to modify image block attributes.
  • Enhancement: added substack_importer_embed_result filter to modify embed block results after conversion.
  • Enhancement: added substack_importer_pre_embed_conversion filter to short-circuit embed conversion before default handling.
  • Enhancement: added substack_importer_audio_block filter to customize the podcast audio block.
  • Enhancement: added substack_importer_before_post action that fires before each post is processed.
  • Enhancement: added substack_importer_after_post action that fires after each post is added to the WXR.

1.1.2

  • Enhancement: support captions for images.
  • Enhancement: support TikTok embeds
  • Compatibility: the plugin now requires PHP 7.2 or higher.
  • Fix: convert preformatted content to verse block.
  • Fix: twitter conversion bug.

1.1.1

  • Tested up to WordPress 6.7
  • Fix: null checking

1.1.0

  • Update wxr-generator to latest version. Fixes a bug where imports could error out due to a misformed timezone identifier.

1.0.9

  • Use subtitle as post excerpt if not empty
  • Testing the plugin up to WordPress 6.4.2
  • Fix PHPCS error and cleanup composer.lock

1.0.8

  • Removed the subscription input from post content

Full changelog on WordPress.org →

For developers

Is this your plugin? Show off the numbers.

Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.

Active installs badge Rating badge Health score badge

Best Substack Importer alternatives

All importer plugins →
Alternatives
Rank Plugin Active installs Rating Updated Health
1 WordPress Importer WordPress Importer Import posts, pages, comments, custom fields, categories, tags and more from a WordPress… by WordPress.org 2M+ ★★★★★★★★★★ 3.1 (327) 1 month ago 59
2 Widget Importer & Exporter Widget Importer & Exporter Import and export your widgets. by Steven Gliebe 200K+ ★★★★★★★★★★ 4.7 (117) 4 months ago 65
3 Starter Templates & Sites Pack by ThemeGrill Starter Templates & Sites Pack by ThemeGrill Premium starter sites and website templates by ThemeGrill. Import demo content, widgets… by ThemeGrill 70K+ ★★★★★★★★★★ 4.7 (197) 1 month ago 70
4 Blogger Importer Blogger Importer Imports posts, images, comments, and categories (blogger tags) from a Blogger blog then… by Samuel Wood (Otto) 50K+ ★★★★★★★★★★ 3.1 (57) 2 years ago 42
5 Categories to Tags Converter Categories to Tags Converter Convert existing categories to tags or tags to categories, selectively. by briancolinger 50K+ ★★★★★★★★★★ 4.3 (16) 2 years ago 43
6 Really Simple CSV Importer Really Simple CSV Importer Alternative CSV Importer plugin. Simple and powerful, best for geeks. by Webの相談所 40K+ ★★★★★★★★★★ 4.9 (107) 2 months ago 86
7 RSS Importer RSS Importer Import posts from an RSS feed. by briancolinger 30K+ ★★★★★★★★★★ 2 (10) 2 years ago 34
8 Movable Type and TypePad Importer Movable Type and TypePad Importer Import posts and comments from a Movable Type or TypePad blog. by briancolinger 20K+ ★★★★★★★★★★ 4 (4) 5 months ago 55
9 Icyclub Icyclub Icyclub plugin for Provided a readymade template for all Themeansar Theme by themeansar 9K+ ★★★★★★★★★★ 3 (2) 4 months ago 58
10 LiveJournal Importer LiveJournal Importer Import posts and comments from LiveJournal. by briancolinger 7K+ ★★★★★★★★★★ 2 (7) 12 years ago 29

FAQ

Substack Importer: quick answers

Straight answers, pulled from live WordPress.org data.

Live data from WordPress.org · checked Sep 28, 2026

Is Substack Importer free?

Yes. Substack Importer is free to download and use from the official WordPress.org plugin directory.

Is Substack Importer safe to use in 2026?

Substack Importer works, but test it on a staging site before relying on it in 2026. It runs on 1K+ sites, is rated 2.8/5 and was last updated 5 months ago, and scores 48/100 on our health check.

How many websites use Substack Importer?

Substack Importer is active on 1K+ WordPress websites and has been downloaded 15,288 times since it launched in December 2020. It was downloaded 354 times in the last 30 days.

Does Substack Importer work with WordPress 7.1?

Substack Importer is officially tested up to WordPress 6.9.9, while the latest release is 7.1.2. It may still work, but try it on a staging site first.

What PHP version does Substack Importer need?

Substack Importer requires PHP 7.4 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.

When was Substack Importer last updated?

The latest version, 1.2.0, was released on April 22, 2026 (5 months ago).

Who makes Substack Importer?

Substack Importer is developed and maintained by WordPress.org.

What are the best alternatives to Substack Importer?

The most popular alternatives to Substack Importer are WordPress Importer (2M+ installs), Widget Importer & Exporter (200K+ installs) and Starter Templates & Sites P… (70K+ installs).

Powered by PageForge

Want thousands of pages that rank like these? Build them in an afternoon.

This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.

  • CSV, Google Sheets & API data sources
  • AI content, schema & internal links per page
  • Works with Elementor, Gutenberg, Yoast & Rank Math
  • Free on WordPress.org — no credit card
Sarah is here to help!
Hi there! 👋 Need help finding what you're looking for?
Sarah
Sarah
Online & Ready to Help
Hi there! 👋 Need help finding what you're looking for?

We'll use this to continue our conversation

Just now ✓ Verified

Join 500+ SEO Pros Scaling Their Strategy

Get exclusive programmatic SEO tactics, AI content workflows, and the latest PageForge updates delivered straight to your inbox. Stay ahead of the algorithm.

We care about your data in our privacy policy.