Cleaning one photo is a click. Cleaning a wedding shoot, a quarter’s worth of PDFs or every file in an export folder needs a different approach. There are three routes on MetadataRemover.tools, and the right one depends on how many files you have, how often you do this and how private they are.
The three routes at a glance
| Route | Good for | Files at a time | Where files are processed | Plan needed |
|---|---|---|---|---|
| Browser tool | A handful of files, once | Guests 1, free 5, Starter 25, Pro 100, Business 500 | Images and PDFs in your browser; video and RAW on our server | None. A free account raises the limits |
| API | Scripts, scheduled jobs, other software | One file per request, as many requests as you like | Our server | Any account, Free included. Same allowances as the website |
| AI assistant (MCP) | Folders you describe in words | Up to 200 per request, two at a time | Our server | Any account, Free included |
Route 1: the browser
Drop the files on the page, press Clean and download one .zip. Images and PDFs never leave your device, which makes this the right choice for sensitive documents. The batch size depends on your plan: guests clean 1 file at a time, free accounts 5, Starter 25, Pro 100 and Business 500. The daily limit on images and PDFs is 50 for guests, 500 for free accounts and unlimited on paid plans.
Use the browser for up to a few dozen files, or whenever privacy matters most. Start with the image or PDF tool.
Route 2: the API
Each request sends one file and returns the clean file, with the result in response headers. The endpoints are /api/v1/clean/image, /pdf, /video and /raw, and the API docs list the details. Every call is one file, and it uses the same allowances as the website: 500 images and PDFs a day on a free account, no daily limit on Starter, Pro and Business, and monthly video and RAW allowances on every plan.
A shell loop is enough to clean a folder of JPEGs:
for f in *.jpg; do
curl -s -X POST https://metadataremover.tools/api/v1/clean/image \
-H "Authorization: Bearer $KEY" \
-F "file=@$f" -o "clean-$f" -D headers.txt
grep -i "x-metadata-remaining" headers.txt
doneThe same in Node 18 or newer:
import fs from "node:fs";
const KEY = process.env.KEY;
const files = fs.readdirSync(".").filter((f) => /\.(jpe?g|png|webp)$/i.test(f));
for (const name of files) {
const form = new FormData();
form.append("file", new Blob([fs.readFileSync(name)]), name);
const res = await fetch("https://metadataremover.tools/api/v1/clean/image", {
method: "POST",
headers: { Authorization: `Bearer ${KEY}` },
body: form,
});
if (!res.ok) { console.error(name, res.status, await res.text()); continue; }
console.log(name, "removed", res.headers.get("x-metadata-removed"), "left", res.headers.get("x-metadata-remaining"));
fs.writeFileSync(`clean-${name}`, Buffer.from(await res.arrayBuffer()));
}Things to handle in a script
- Rate limit. The API accepts up to 120 requests a minute. A 429 response with a Retry-After header means wait and retry.
- Quota. A 429 with the code
daily_quota_exceededmeans today’s images-and-PDFs allowance is used up, andjob_quota_exceededmeans this month’s video or RAW allowance is.GET /api/v1/usageshows what is left without using anything up. - Video and RAW draw from their own monthly allowances, and the request waits while the file is cleaned, so set a generous timeout.
- Output names. Write clean files to another folder or add a suffix, so you never overwrite originals.
- Failures. 415 means the wrong file type, 413 a file over your plan’s size limit and 422 a damaged or encrypted file. Log these and carry on.
Route 3: an AI assistant
With the MCP server, included on every plan, you describe the job and the assistant does the rest: “clean everything in ~/Photos/shoot and tell me what was in it.” The server takes up to 200 files per request, cleans two at a time, saves each copy next to its original as name-clean.ext, and reports every file. Folders are not searched recursively, and files that are already clean copies are skipped, so running the same request twice is safe. Setup is in removing metadata with Claude, Cursor or ChatGPT.
This suits ad-hoc work, where writing a script would take longer than the job itself.
How to choose
- Under about 30 images or PDFs, or anything sensitive: the browser.
- Hundreds of files, or a job that repeats: the API from a script or a scheduled task.
- A folder you can describe in a sentence, and you already use Claude or Cursor: the assistant.
- Video or RAW in bulk: the API or the assistant, keeping the monthly video and RAW allowances and the per-file size limit in mind.
Quota arithmetic
A 300-photo shoot is 300 images. A free account cleans 500 images and PDFs a day, so a day covers it, and paid plans have no daily limit. If the shoot is RAW, each file uses one of the monthly RAW cleanings instead: 10 on a free account, 100 on Starter and 1,000 on Pro. The browser tool does not get around that, because RAW needs our server wherever you start it. For a large RAW delivery, check the allowance and the file-size limit before you begin.
Habits that save you later
- Work on copies. Clean copies, never your only original.
- Check the counts. Compare the number of files in with the number out, and look through the log for anything not marked verified clean.
- Spot-check one file with ExifTool:
exiftool -a -G1 -s file. - Keep the originals in a private archive. They hold your own record of where and when.
- Rename deliberately. File names carry places and dates too.
For what is removed from each kind of file, see the guides for images, PDFs, video and RAW photos.