How to Bulk Download All Images From Your Webflow Site
Webflow doesn't have a 'download all' button for your images. Here's a simple Python script that grabs every image from your site in seconds.
I had a client recently ask me to back up all the images on their Webflow site. Simple enough request — until I realised Webflow doesn’t actually give you a way to do it.
The Asset Manager in the Designer lets you browse your images, but there’s no “select all” or “download all” option. You can download them one at a time. Manually. In 2026. Cheers, Webflow.
If you’re on a Workspace plan with code export, you can export your site as a ZIP and get an images folder. But most people aren’t on that plan, and even if you are, the export doesn’t always catch images embedded in CMS rich text fields.
So I wrote a quick Python script that solves the problem in about 30 seconds.
What the Script Does
It reads your site’s sitemap, visits every page, finds every image URL in the HTML, and downloads them all into a local folder. That’s it. No dependencies beyond one Python library, no complicated setup.
It catches everything — hero images, CMS content images, background images, logos, the lot. If it’s in the page source, it gets downloaded.
The Script
import requests
import xml.etree.ElementTree as ET
import os
import re
from urllib.parse import urlparse
# Change this to your site URL
sitemap_url = "https://www.your-site.com/sitemap.xml"
r = requests.get(sitemap_url)
root = ET.fromstring(r.content)
ns = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
page_urls = [loc.text for loc in root.findall('.//ns:loc', ns)]
os.makedirs("site-images", exist_ok=True)
seen = set()
img_pattern = re.compile(
r'https://[^"\'\s)]+\.(?:jpg|jpeg|png|gif|webp|svg)',
re.IGNORECASE
)
for url in page_urls:
print(f"Scanning: {url}")
try:
page = requests.get(url, timeout=10)
images = img_pattern.findall(page.text)
for img_url in images:
if img_url in seen:
continue
seen.add(img_url)
filename = os.path.basename(urlparse(img_url).path)
filepath = os.path.join("site-images", filename)
if os.path.exists(filepath):
continue
print(f" Downloading: {filename}")
img_data = requests.get(img_url, timeout=10)
with open(filepath, 'wb') as f:
f.write(img_data.content)
except Exception as e:
print(f" Error on {url}: {e}")
print(f"\nDone! {len(seen)} images saved to ./site-images/")
How to Run It
You’ll need Python installed. If you’re on Windows and don’t have it, grab it from the Microsoft Store — search “Python 3.12” and install it. It takes about 30 seconds and sorts out all the PATH stuff automatically.
Then:
- Open VS Code (or any text editor) and paste the script into a new file
- Change the
sitemap_urlto your own site’s sitemap - Save it as
download_images.py - Open the terminal in VS Code (Ctrl + `) and navigate to the folder where you saved it
- Run
pip install requeststo install the one dependency - Run
python download_images.py
You’ll see it scanning each page and downloading images as it goes. When it’s done, you’ll have a site-images folder with everything in it.
A Few Things Worth Knowing
It works on any website, not just Webflow. The script reads a standard XML sitemap and scrapes image URLs from page source. It’ll work on WordPress, Shopify, Squarespace, static sites — anything with a sitemap.
Duplicate filenames get skipped. If two pages use the same image, it only downloads it once. The script tracks what it’s already seen.
It grabs the Webflow CDN versions. These are the optimised versions Webflow serves to visitors. If you need the original uncompressed uploads, you’d need to grab those manually from the Asset Manager — but for backup purposes the CDN versions are usually fine.
CMS images are included. Because the script fetches the rendered HTML of each page, it catches images inside CMS rich text fields, collection pages, and dynamic content. The Asset Manager sometimes doesn’t surface these as clearly.
Why Bother Backing Up?
Honestly, most people don’t think about this until something goes wrong. But if you ever need to migrate away from Webflow, rebuild on a different platform, or just want a local copy of everything for peace of mind, having all your images in a folder is genuinely useful.
I’ve also used this script when auditing sites — it’s a quick way to see every image a site uses without clicking through every page manually.
Grab the Code
Code is free to use however you want.
If you’ve got a Webflow site and need help with SEO, site structure, or anything technical, get in touch. This is the kind of problem-solving I do for clients every day.