Shopify keeps your images — along with videos and documents — on the Content → Files page, with a Copy link button on every row. There is no built-in way to select twenty images and copy all twenty URLs at once.
When you need a batch of them, there are four routes: click through the files one at a time, export them with an app, pull them from the Admin API, or add something to the page that does the batching for you. This article covers all four, and ends with a free userscript we built and open-sourced for the last one.
Why there is no bulk copy
The Files page supports bulk actions — you can select many files and delete them together — but copying links is not one of them. The per-row Copy link button puts a single CDN URL on your clipboard, in the form https://cdn.shopify.com/s/files/1/.../files/filename.jpg?v=..., and that is the only copy control the page offers.
For five images that is fine. For forty it is twenty minutes of clicking, pasting, and losing your place in the list.
What a batch of URLs is actually for
We built this for our own writing. Every article we publish pulls screenshots out of the Files library, and each one has to be handed to the tool we are drafting in as a URL — so a single article meant clicking Copy link once per screenshot, in order, without losing track of which image was which. The same thing happens whenever we need to point an outside tool at a batch of images rather than upload them again.
Once you start looking, the pattern is everywhere in a Shopify store:
-
Product CSV imports. The
Image Srccolumn wants a public URL on every row. - Metafields. Image metafields and rich-text fields reference files by URL.
- Email and marketing platforms. Templates in Klaviyo, Mailchimp and the like need externally hosted images, not attachments.
- Handing work to someone else. Sending a designer, developer or agency a list of links beats sending a folder of files.
- Redesigns and landing pages. Having the links ready in a document saves going back to the admin for each one.
In all of these the file is already uploaded. What you need is its address, in bulk.
Four ways to get a batch of URLs
| Approach | Good for | Cost |
|---|---|---|
| Per-row Copy link | A handful of images, one-off | Free, but linear in the number of files |
Admin API (files query) |
Repeatable exports, filtering, automation | Requires an app or API credentials and someone comfortable with GraphQL |
| A bulk export app such as Matrixify | Exporting everything, with alt text, dimensions, and file type alongside each URL | Paid app; priced per plan |
| A userscript on the Files page | Ad-hoc batches, picked by eye | Free, one-time browser extension setup |
An export app is the right answer when you want the whole library in a spreadsheet, with each file's alt text, type, and dimensions next to its URL. The API route suits an export you will run again, that needs filtering, or that has to feed a scheduled job. The userscript route is for when you are already looking at the Files page, you know which files you want, and you want them on your clipboard now.
Copying a batch with a userscript
We built Shopify Files URL Copier for this and released it under the MIT license. It adds a Copy N URLs button next to Delete files in the bulk action bar. Select the files you want, select the button, and every URL lands on your clipboard, one per line, in the order they appear on the page, with duplicates removed.

The bulk action bar with four files selected. Shopify's own bulk actions are on the left; Copy 4 URLs is added by the script.
To install it:
- Install Tampermonkey in your browser and make sure userscripts are enabled.
- Install the script from Greasy Fork and confirm the prompt.
- Open Content → Files in your Shopify admin.
The button appears as soon as you select a file and shows the current count, so you can confirm the selection before copying. The source is on GitHub if you or your developer want to read it before installing — which, for anything that runs inside your admin, is a reasonable thing to want.
What it does and does not do
For images, the original URL is worked out from the thumbnail already on the page, so copying is instant and makes no network requests. For videos and other types whose URL cannot be derived that way, the script uses Shopify's own per-row copy action and collects the result, so your clipboard is still written once with the complete list.
Two limits worth knowing before you rely on it:
-
Selections do not copy across pages. Shopify remembers a selection when you paginate, but only the current page's rows exist in the browser. Rather than handing you a partial list silently, the script compares its count against the one Shopify reports and tells you, for example
Copied 50 URLs (30 on other pages not copied). Copy one page at a time. - A video gives you the video file, not its poster image. If you want the poster, copy it from that file's detail page.
It sends nothing anywhere. There is no analytics, no tracking, and no external network request; it reads the Files page and writes to your clipboard when you select its button, and that is all.
When to use the API instead
Reach for the Admin API rather than a browser tool when the job is recurring or rule-based rather than visual — every file uploaded after a date, everything matching a naming convention, or an export that has to run on a schedule and land somewhere automatically. A userscript is for the case where a person is looking at a list and picking things out of it. Those are different problems, and the API is better at the first one.
One last thing worth knowing about any userscript, ours included — including the one we wrote for the Theme Editor: it runs inside your admin and can see what you can see, so it is fair to check the source before installing. Shopify can also change how the admin is built at any time. This one is written to degrade rather than break — if the part of the page it attaches to changes, the button moves instead of disappearing, and a file it cannot resolve is reported as skipped rather than quietly copying the wrong thing.