Download files from a website

Reports, invoices, exports, images, the files you click to download one at a time. A bot can grab them for you, from a button on the page or straight from a URL, and loop a whole list of downloads from a sheet. The one thing to decide up front is where they land, your own machine or your Google Drive. There are three ways to start, with no code, with code, or with a Claude skill.

What I mean by downloading files from a website


Downloading files from a website means a bot does the clicking and saving you would do by hand. It opens the page, finds the file, whether that is a download button or a direct link, and saves it where you tell it. Give it one page or a list of URLs in a sheet, and it works through every one, naming each download as it goes.

Where your downloads land


The first thing to settle is not how to download, it is where the file goes. That choice decides how you run it.

If you want files on your own machine, run it in the desktop app. The local download steps, Download file, Download files, and Download file from URL, all save straight to a folder on your computer, and they only work in the desktop app.

If you want files in the cloud, save to Google Drive. The Download a file to Google Drive step puts each file in a Drive folder, which is the way to go when the bot runs in the cloud with no machine of yours involved. That same Drive step can also write to a local folder when you run it on the desktop, so one step covers both.

Decide the destination first, and the rest of the build follows.

Who this is for


This is for anyone who downloads the same files on a schedule. Pulling a daily report off a dashboard, saving invoices from a portal, collecting exports one click at a time. And for anyone sitting on a spreadsheet of links who needs every file behind them. No-coders and coders both, since you can build it without code and drop into code when you want.

How I'd approach it


Start with where the downloads go, local or Drive, because that picks your runner. Then look at the source. If you have direct file URLs, use the from-URL step, it is the simplest. If the file sits behind a button or a link on a page, go to the page first, then point the download step at that element. For a list, read the URLs from a Google Sheet and loop through them, saving each with its own name.

Destination, then source, then loop. That order keeps it simple. There is a full walkthrough in how to automate file downloads, and I would lay out the first draft with Build with description.

Download files from a description


Describe what to download and where in the Chrome extension and it builds the steps for you. Give it a few short lines, check what it made, and run it. Explore no-code. Note: Build from description is coming very soon. In the meantime you can still use the no-code builder.

To the right is an example. Describe what to download and where it should land, and the AI lays out the steps.

Chrome extension
Describe your automation

Instructions

  • Read a list of page URLs from a Google Sheet44 / 500
  • Open each page in turn22 / 500
  • Download the file on the page29 / 500
  • Name it from the sheet22 / 500
  • Save it to my folder20 / 500

Download files in code


Build with code. If you would rather script it yourself, this is the path. Explore code

Connect Playwright (or Puppeteer) to our cloud Chromium and write the same scripts you'd run locally, without managing the browser.

Code tool
Code example
import { chromium } from "playwright";
import path from "path";

const browser = await chromium.connectOverCDP(
  `wss://cdp-lb.axiom.ai/?token=${process.env.AXIOM_API_KEY}`
);

try {
  const context = browser.contexts()[0];
  const page = context.pages()[0] ?? await context.newPage();

  // Pages that each hold a file. These would come from your Google Sheet.
  const pages = [
    "https://example.com/reports/jan",
    "https://example.com/reports/feb",
  ];

  for (const url of pages) {
    await page.goto(url);

    // Wait for the download the click starts, then save it where you want
    const [download] = await Promise.all([
      page.waitForEvent("download"),
      page.getByRole("button", { name: "Download" }).click(),
    ]);

    const name = download.suggestedFilename();
    await download.saveAs(path.join("/downloads", name));
  }
} finally {
  await browser.close();
}

Build with a Claude skill

Build no-code or code bots with a skill.

Add the Claude skill and describe what to download and where. It builds the bot for you, no-code or code, from a button or a URL, saving to your machine or to Google Drive.

Claude building a file download automation from a description

What can you download?


Most files behind a click. A couple of cases worth knowing first.

Works well

  • Reports and exports from a dashboard
  • Invoices and statements from a portal
  • Files behind a download button
  • Direct file URLs from a list
  • Images and PDFs in bulk

Harder

  • Files behind a login or 2FA
  • Files that open in the browser instead of saving
  • Very large files on a slow connection

Don't try

  • Downloading material you have no right to
  • Anything against a site's terms
  • Pulling files faster than a site allows

What I'd watch out for


Downloading is simple until a file opens in a tab instead of saving. Here is what I would watch for.

Local downloads need the desktop app

The local download steps only save to your computer when the bot runs in the desktop app. In the cloud, save to Google Drive instead, or use the Drive step that can do both.

Files that open instead of downloading

Some files open in the browser rather than downloading. Turn on Force download so the bot saves them instead. If it still opens, the file is being served inline and needs a different approach.

Folder permissions

If a file will not save, check the path is right and that the folder has write permission for your user. A wrong path is the usual culprit.

Reused file names

When two files would share a name, axiom adds a number so nothing is overwritten. Turn on Overwrite if you would rather replace the old file instead.

"The best investment we've made in our automation workflow. Simple yet powerful."

Jennifer Brown

"Axiom has saved me countless hours. The automation possibilities are endless."

Robert Taylor

"The support team is amazing, and the product just keeps getting better. Worth every penny."

Emma Davis

"The visual builder is a dream come true. No more writing complex scripts!"

Lisa Anderson

"Axiom has completely transformed how I handle browser automation. The no-code interface is intuitive and powerful."

John Smith

"The best browser automation tool I've used. The AI features are game-changing for complex workflows."

Sarah Johnson

"Finally, a tool that makes browser automation accessible without compromising on power. Highly recommended!"

Michael Chen

Fast to build. Easy to run and scale. Outstanding support.

Start for free. No credit card required.