BLACK FRIDAY
Save 59% on PageForge Annual $191/year $485/year
Claim 59% Off →
External Image Importer – Import Remote Images to the Media Library icon
Actively maintained Tested with WP 7.1 #5 in external images

External Image Importer – Import Remote Images to the Media Library

Automatically import external and remote images into your Media Library on save and rewrite the URLs to local copies. Built SSRF-safe.

Active installs70+10+ tier
Downloads · 30d173▲ +84% vs prev. 30d
Rating—0 reviews
Health score68/100Good
All-time downloads411Since Jul 2026
Support resolved—No recent threads
RequiresWP 6.0PHP 7.4+
Downloads · 7d32▼ -49.2% week over week
Our verdict

Solid choice

External Image Importer is a solid plugin choice in 2026, with a few things worth checking first. It runs on 70+ sites and was last updated 2 weeks ago, and scores 68/100 on our health check.

  • Actively developed — last update 2 weeks ago
  • Tested with the latest WordPress (7.1)
  • Small user base (70+ active installs)
  • Very few reviews so far

How does it stack up?

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

Daily downloads

61218Jul 15Aug 28Oct 12
Yesterday2
Daily average (1y)4
Peak day36Jul 11, 2026
Last 12 months416

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

Rankings

Where External Image Importer stands today

WordPress.org search rankings

Live position in the plugin search, top 100
KeywordPositionCompeting pluginsCategory
external images #86 7,771 Best external images plugins →
import images >100 4,095 Best import images plugins →
media library >100 5,613 Best media library plugins →
migration >100 3,611 Best migration plugins →
Remote images #38 1,652 Best Remote images plugins →

Version adoption

Share of active sites per release.

  • 1.0100.0%

About External Image Importer

From the official readme · v1.0.2

Description

External Image Importer automatically uploads externally-hosted images to your Media Library when you paste external content into the WordPress editor, then rewrites every URL to point at your own local copy. It is built SSRF-safe: every remote fetch is validated and hardened before the file is downloaded.

Remove the hassle of importing external images by hand when you:

  • migrate to WordPress from another CMS;
  • work across multiple environments, such as development, staging and production;
  • paste external content drafts written elsewhere.

The dev-to-live problem this solves

When you copy or migrate WordPress content between environments – for example from a dev or staging site to your live site – images embedded in that content stay hotlinked to the source domain. The block HTML (or pasted classic-editor markup) keeps pointing at https://dev.example.com/..., so your production pages silently load images from staging. If the source environment is private, password-protected or taken down after launch, those images break.

This plugin fixes that automatically: it finds the external image URLs, pulls the files into your own Media Library, and updates the content so everything is served from your own domain.

Key features

  • Safe imports. Every download is verified to be a genuine, decodable image of the expected type before any URL is rewritten. If a file fails that check – for example the “image” was really a geo-blocked placeholder page or an error document – it is discarded and your original reference is left unchanged, so a broken file is never put in place of a working URL.
  • Self-hosted images. Serving images from your own domain means search engines index them on your domain and your pages no longer depend on a third party staying online.
  • Full-size originals. It imports the full-size original and lets WordPress regenerate every registered size locally, then points the markup at the matching local size so the layout is unchanged.
  • Duplicate-aware. Images that already exist in your Media Library (by source URL or exact filename) are reused instead of downloaded again.
  • Zero configuration. It works on activation; there is nothing to set up.

Security

Server-side remote fetching is handled with defence in depth:

  • SSRF guard on every fetch. Before any download, the target URL is validated. Requests to private, reserved, loopback, link-local, ULA, CGNAT and IPv6 transition (6to4 / NAT64) ranges are blocked – including the cloud metadata endpoint 169.254.169.254. All resolved A/AAAA records must be public.
  • IP pinning and redirect re-validation. The validated public IP is pinned for the actual download (cURL transport), and redirects are followed manually with the SSRF guard re-run on every hop. A public, validator-passing URL therefore cannot be DNS-rebound or 30x-redirected to an internal address after the check.
  • Scheme, port and credential locking. Only http and https, only ports 80 and 443, and URLs containing embedded credentials (user:pass@) are refused.
  • Real content-type verification. After download the actual file type is checked, not just the extension. Anything that is not a genuine raster image is deleted and rejected.
  • SVG and ICO are skipped by default. SVG can carry script and ICO is a common smuggling vector, so both are excluded.
  • Download caps. A per-request timeout and a maximum file size are enforced (and filterable) so a hostile or runaway source cannot tie up or fill your server.

How it works

Paste your content as you normally would, then Publish or Save. When you do, the plugin scans the content for externally-hosted images, securely downloads each one into your Media Library, and rewrites the markup to your local copy at the same size it referenced, so your layout is unchanged.

  • Automatically on save. A single canonical save hook covers both the Block (Gutenberg) editor and the Classic editor, so newly pasted external images are imported the moment you save.
  • It skips duplicates. Before downloading, it checks whether the image already exists in your Media Library – by the exact remote source URL it previously imported, and by exact filename against your whole Media Library (including images you uploaded normally). If a match exists it is reused instead of downloaded again.
  • It imports the full-size original. Even when your content references a scaled image (for example photo-1024x670.webp), the plugin fetches the full original and lets WordPress regenerate every registered size locally, then points the markup at the matching local size.
  • WP-CLI for retroactive fixes. Run wp auei localise to sweep content that was saved before the plugin was active, with --dry-run, --post_type, --post_id and --limit options.

What it scans

  • src, data-src and data-lazy-src attributes
  • srcset (every candidate, with width and density descriptors)
  • Gutenberg block-comment JSON (url / src / href)
  • CSS background-image: url(...) in inline styles

Compatibility

  • Block and Classic editors. A single save hook (wp_insert_post_data) covers both.
  • Single sites and multisite. On multisite, each site’s external images are imported into that site’s own Media Library.
  • Alt text and captions are preserved. The plugin only rewrites image URLs and remaps block attachment IDs; your alt text, captions and other attributes are left untouched.
  • Supported formats: JPEG, PNG, GIF, WebP, AVIF and BMP. SVG and ICO are excluded by default for security.
  • Actively maintained and tested against the current WordPress release.

Privacy and external connections

This plugin does not phone home and does not send your data to any third party. There are no analytics, no tracking and no external API calls. The only outbound requests it makes are to the image URLs that already appear in your own content, purely to download those images into your Media Library. Nothing about your site, content or visitors is transmitted anywhere else.

Filters and Hooks

All filters use the auei_ prefix.

  • auei_enabled (bool, default true) – master on/off switch for the whole plugin.
  • auei_whitelisted_domains (string[], default empty) – domains whose images are never imported (left as external), for example a trusted CDN.
  • auei_import_full_size (bool, default true) – import the full-size original (strip a -WxH scaled suffix) so the destination regenerates every size. Set to false to import only the exact file referenced.
  • auei_remap_ids (bool, default true) – rewrite the source-site attachment ID in Gutenberg blocks ("id":N / wp-image-N) to the new local attachment ID.
  • auei_allowed_extensions (string[], default jpg, jpeg, png, gif, webp, avif, bmp) – image extensions eligible for import. svg and ico are excluded by default.
  • auei_allowed_schemes (string[], default http, https) – URL schemes permitted for fetching.
  • auei_allowed_ports (int[], default 80, 443) – explicit ports permitted on a target URL.
  • auei_blocked_ip_ranges (string[], default empty) – extra CIDR ranges to block, in addition to the built-in private/reserved set.
  • auei_max_file_size (int, default 8388608, i.e. 8 MB) – maximum download size in bytes; larger files are rejected.
  • auei_download_timeout (int, default 20) – download timeout in seconds.
  • auei_max_redirects (int, default 3) – maximum HTTP redirects to follow; every hop is re-validated by the SSRF guard.
  • auei_reuse_by_filename (bool, default true) – reuse an existing Media Library image with the same filename (any attachment, not just ones this plugin imported) instead of downloading a duplicate. Matched on the exact stored-file basename.
  • auei_allow_url (true or WP_Error, default validator result) – final override on a per-URL basis; return true to force-allow or a WP_Error to force-block.
  • auei_force_logging (bool, default false) – force debug logging even when WP_DEBUG is off.

Installation

  1. Upload the nerdcow-external-image-importer folder to wp-content/plugins/, or install the plugin through the Plugins > Add New screen.
  2. Activate the plugin through the Plugins screen in WordPress.
  3. That is it – no configuration is required. External images are imported automatically the next time you save a post or page.
  4. (Optional) To fix content saved before activation, run the WP-CLI command: wp auei localise --dry-run to preview, then wp auei localise to apply.

Frequently asked questions

Will it ever replace a working image with a broken one?

No – this is a core safety behaviour. Every download is verified to be a genuine, decodable image of the expected MIME type before any URL is rewritten. If the downloaded file is not a real image (for example a geo-blocked placeholder page or an error document), it is discarded and your original external URL is left exactly as it was. A broken local copy is never put in place of a URL that was working.

Does it work with the Block editor and the Classic editor?

Yes. A single save hook (wp_insert_post_data) covers both the Block (Gutenberg) editor – which saves via the REST API – and the Classic editor.

Does it work on multisite?

Yes. It runs per site, so each site’s external images are imported into that site’s own Media Library.

What happens to alt text and captions?

They are preserved. The plugin only rewrites image URLs and remaps the attachment ID stored in Gutenberg blocks; it does not touch your alt text, captions or any other attributes.

Which image formats are supported?

JPEG, PNG, GIF, WebP, AVIF and BMP. SVG and ICO are excluded by default for security (SVG can embed script, and ICO is a common smuggling vector). If you fully trust your sources you can extend the allowed set via the auei_allowed_extensions filter, but doing so is at your own risk.

Does it send my data anywhere?

No. The plugin uses no external services and contains no tracking or analytics. The only outbound HTTP requests it makes are to the image URLs that already exist in your own content, purely to download those images into your local Media Library.

Which image size does it import, and what happens to the block in the editor?

It imports the full-size original. WordPress content usually references a scaled image (for example photo-1024x670.webp); the plugin strips that -WxH suffix, fetches the full original, and lets WordPress regenerate every registered size locally – so you have the thumbnail, medium, large and full versions, just like a normal upload. The image in your content is then rewritten to the local copy at the same size it referenced, so the layout is unchanged. It also remaps the attachment ID stored in the block ("id":N / wp-image-N) to the new local attachment, so the editor’s image controls keep…

Will it re-download images it has already imported?

No. Before downloading, the plugin checks whether the image already exists in your Media Library and reuses it: by the exact remote source URL it previously imported (stored in _auei_source_url post meta); and by exact filename against your whole Media Library, including images you uploaded normally, not just ones this plugin imported. Point 2 is the important one for the dev-to-live workflow: if the destination already has the images (for example the page was partly built on live before), they are reused instead of re-uploaded as duplicates. Matching is on the exact stored-file basename, and…

How do I keep images from a trusted CDN or partner as external?

Add the domain to the whitelist with the auei_whitelisted_domains filter. Whitelisted domains are never imported and their URLs are left untouched.

Is it safe to run on a server behind a private network?

Yes – that is a core design goal. The built-in SSRF guard blocks requests to private, reserved, loopback, link-local, ULA and CGNAT addresses, plus the cloud metadata endpoint, and requires every resolved IP of a host to be public before any fetch happens.

Changelog

Fixes Gutenberg blocks being flagged as invalid after importing an image whose URL contains "--" or an "&" query string. Recommended for all users.

1.0.2

  • Fixed: images whose URL contains a double hyphen (common on CDN hostnames, e.g. cdn--assets.example.com) or an & query string were imported and the visible image was rewritten, but the copy of the URL stored inside the Gutenberg block comment was left pointing at the original external host. The block then failed validation in the editor – “This block contains unexpected or invalid content” – and using “Attempt Block Recovery” restored the old external URL. WordPress escapes these characters when it saves block attributes, and the rewrite now recognises that form (both the current and the pre-5.9 way WordPress wrote it).

1.0.1

  • Reuse existing Media Library images by exact filename – including images uploaded normally, not just ones this plugin imported – so copying a page whose images already exist on the destination no longer creates duplicate uploads. Matched on the exact stored-file basename, single unambiguous match only.

1.0.0

  • Initial release.
  • Automatic import of externally-hosted images on post save (Block and Classic editors).
  • Imports the full-size original (regenerating every thumbnail and size locally) even when the content references a scaled “-WxH” image, then rewrites the markup to the matching local size so the layout is unchanged.
  • Remaps the source-site attachment ID carried in Gutenberg image, cover and gallery blocks ("id":N / wp-image-N) to the new local attachment ID, so blocks never point at a stale or colliding ID on the destination.
  • SSRF-safe URL validation: blocks private, reserved, loopback, link-local, ULA, CGNAT, IPv6 6to4/NAT64 and cloud-metadata addresses; requires all resolved IPs to be public; pins the validated IP for the fetch and re-validates every redirect hop; locks scheme, port and credentials.
  • Real content-type verification after download; SVG and ICO excluded by default.
  • Download timeout and maximum file-size caps (filterable).
  • Attachment reuse by _auei_source_url meta and (optionally) by previously-imported filename to avoid re-downloading.
  • URL rewriting across src, data-src, data-lazy-src, srcset, Gutenberg block JSON and CSS background-image.
  • wp auei localise WP-CLI command with --dry-run, --post_type, --post_id and --limit options for retroactive fixes.
  • Comprehensive auei_* filter set for whitelisting, allowed types, schemes and ports, caps and overrides.

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 External Image Importer alternatives

All external images plugins →

FAQ

External Image Importer: quick answers

Straight answers, pulled from live WordPress.org data.

Live data from WordPress.org · checked Oct 13, 2026

Is External Image Importer free?

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

Is External Image Importer safe to use in 2026?

External Image Importer is a solid plugin choice in 2026, with a few things worth checking first. It runs on 70+ sites and was last updated 2 weeks ago, and scores 68/100 on our health check.

How many websites use External Image Importer?

External Image Importer is active on 70+ WordPress websites and has been downloaded 411 times since it launched in July 2026. It was downloaded 173 times in the last 30 days.

Does External Image Importer work with WordPress 7.1?

Yes. The developer has tested External Image Importer up to WordPress 7.1.3, the latest release. It requires WordPress 6.0 or newer.

What PHP version does External Image Importer need?

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

When was External Image Importer last updated?

The latest version, 1.0.2, was released on September 28, 2026 (2 weeks ago).

Who makes External Image Importer?

External Image Importer is developed and maintained by NerdCow.

What are the best alternatives to External Image Importer?

The most popular alternatives to External Image Importer are Smart Auto Upload Images (5K+ installs), GL Import External Images (700+ installs) and Better WordPress External L… (400+ 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.