Bulk Media Upload for WordPress: Free CSV Plugin for 1,000+ Images

Bulk media upload for WordPress: a CSV file importing a grid of images into the Media Library

Our free plugin turns a bulk media upload into a five-minute job: one CSV file carries the alt text, captions and titles for 1,000+ WordPress images, and you can download it below.

Download the plugin (free) View the source on GitHub

Uploading a handful of photos through the WordPress media screen is easy. Uploading 500 product photos, each one needing a title, alt text and a caption, is a full day of clicking. Agencies know this pain. Store owners know it. Anyone migrating a photo archive knows it.

Bulk Media Uploader fixes it with one spreadsheet. You list your images and their metadata in a CSV, drop it into the wizard together with a ZIP of the image files, and the plugin runs the whole bulk media upload in batches. A thousand images take a few minutes, and every single one lands in the Media Library with its SEO fields already filled in.

How to run a bulk media upload in 3 steps

Bulk media upload for WordPress in 3 steps: upload CSV and ZIP, map columns, import with report

Step 1: Upload your CSV and ZIP

Every bulk media upload starts with two files. Put your images in a ZIP and your metadata in a CSV. The first screen of the wizard has two drop zones, one for each. If your images live on another server, you can skip the ZIP entirely and give the plugin a column of URLs instead.

Bulk media upload plugin screen with a CSV and ZIP file ready to import into WordPress

Step 2: Map your columns

The plugin reads your header row and matches common names like filename, title and alt on its own. If your spreadsheet uses different headers, you pick the right column from a dropdown next to each WordPress field. A preview of your first rows sits right below, so you can check the mapping against real data before anything runs.

Step 3: Run the import and download the report

The bulk media upload runs in batches of 20 images per request, which is the trick that lets it survive shared hosting. PHP execution limits never trigger because no single request runs long enough to hit them. You watch a progress bar and a live log, and at the end you get a CSV report listing what was imported, what was skipped and why anything failed.

Progress screen during a bulk upload of images to WordPress showing 835 of 1247 done

The CSV format for a bulk media upload

Only one column is required: filename when importing from a ZIP, or url when fetching from the web. Everything else is optional.

ColumnWhat it sets
filenameMatches an image inside your ZIP
urlHTTPS address to fetch the image from
titleThe Media Library title
altAlt text, the field image SEO depends on
captionThe caption shown under the image
descriptionThe longer description on the attachment page
post_idA post or page ID to attach the image to
post_slugSame, but by slug instead of ID
attach_asfeatured or attachment, per row

A ready-made template ships inside the plugin, with a download link on the first wizard screen. Fill it in with your favourite spreadsheet app, export as CSV, and you are ready to go. Excel users in Europe can relax about semicolons: the parser detects comma, semicolon and tab delimiters automatically.

Who needs a bulk media upload?

A few situations where a spreadsheet beats the media screen every time:

  • WooCommerce stores adding a season of product photos, where every image needs the product attached and a featured image set
  • Site migrations, where hundreds of images exist on the old server and only a CSV export of their metadata survives
  • Photographers and portfolios publishing whole shoots at once
  • News and magazine sites that receive image batches from agencies with caption files
  • SEO cleanups, where the images exist but the alt text never did

Everything is free, including the parts that usually are not

Most CSV importers for WordPress put their best features behind a Pro version. Remote URL import, featured image assignment and post attachment are the usual suspects. We took the opposite approach: this plugin has no Pro version, no locked buttons and no upgrade banners.

  • Remote URL import with a safety allowlist, so the plugin only fetches from hosts you approve
  • Featured images in bulk: map a post ID or slug and mark rows as featured
  • Automatic alt text when a cell is empty, built from the title or the filename
  • SEO filenames: an option to rename each file to a clean slug of its title before upload
  • Duplicate skipping, so re-running a bulk media upload never creates copies

Why alt text at scale is worth the effort

Alt text is the strongest signal Google Images reads, and it is also what screen readers announce to visually impaired visitors. On a site with 40 images, you can write it by hand. On a site with 4,000, nobody does, and the images simply never rank. Putting alt text in a spreadsheet column turns a chore into a fill-down operation, which is exactly why we made it a first-class part of the bulk media upload.

If you are preparing images anyway, two of our other free tools fit the same workflow: the WebP converter shrinks your JPG and PNG files before they ever reach your server, and the meta tag generator builds the Open Graph tags that decide which image shows when a page is shared. You can also check how your pages will look in results with the SERP snippet preview.

Security, since a bulk media upload touches your uploads folder

A few concrete facts rather than promises. Every endpoint checks the WordPress upload_files capability and a nonce. Remote fetches go through wp_safe_remote_get, which refuses private and internal network addresses, and they only work for hosts an administrator has allowlisted. Uploaded files pass the same MIME checks as a normal media upload, restricted to JPG, PNG, GIF and WebP. ZIP extraction rejects path traversal and junk files. Temporary files are deleted when the job finishes, with a daily cleanup as a backstop.

Open source, GPL, and yours to inspect

The full source code is on GitHub under the GPL-2.0 license, the same license WordPress itself uses. You can read every line of the bulk media upload code before installing it, open an issue if something misbehaves, or send a pull request if you want a feature. The plugin was built by the team behind Anupress Tools, our collection of free calculators and generators for site owners.

Frequently asked questions

Is there a size limit to a bulk media upload?

The batch design means the job size is limited by your patience, not your server. Users have no problem with 5,000-image jobs. Keep the browser tab open until the progress bar finishes.

Does it work with WooCommerce product images?

Yes. Products are posts, so put the product ID in the post_id column and set attach_as to featured to assign the main product image.

Can it bulk upload images to WordPress with alt text?

Yes, from the alt column of your CSV. When a cell is empty, the plugin can generate alt text from the title or filename automatically.

What happens if the same filename already exists?

With duplicate skipping on, the row is skipped and noted in the report. Nothing is overwritten.

Does the plugin phone home or collect data?

No. It makes no requests to our servers or anyone else's, except the image URLs you explicitly put in your own CSV.

What does it cost?

Nothing. It is GPL open source with every feature included. There is no Pro version.