Merge PDF
Combine several PDFs into one file, in your chosen order — free, no watermark, no signup.
How it works
- Select files. Choose two or more PDFs. They will be combined in the order you pick them.
- Merge. Press Merge PDFs and every page is copied into one document in memory.
- Download. The combined PDF downloads automatically — none of your files are stored.
About this tool
This tool joins several PDFs into a single document, in the exact order you select them. It copies every page across without re-rendering, so text stays selectable and the quality of each original page is preserved byte-for-byte. It's the fast way to turn a pile of separate files — a cover letter, a CV and a portfolio, say — into one clean PDF to send or print. There's no watermark and no account; the merged file is built in memory and handed straight back to you.
What people use it for
- Bundle a cover letter, CV and references into one application PDF
- Join scanned pages that came out as separate files
- Combine monthly invoices into a single document for accounting
- Merge chapters or sections before printing
Developer API
Automate this tool from your own code. Send a POST request to the endpoint below and get the same result the web tool produces. It is rate-limited per IP and needs no signup — API keys for higher limits are coming.
https://best.free/api/tools/merge-pdf/
| Parameter | Example | Required | Notes |
|---|---|---|---|
files (file) |
file1.pdf |
Yes | Repeat "files" for each PDF, in merge order. |
curl -X POST https://best.free/api/tools/merge-pdf/ \
-F 'files=@file1.pdf' \
-F 'files=@file2.pdf' \
-o merged.pdf
import requests
files = [("files", open(p, "rb")) for p in ["file1.pdf", "file2.pdf"]]
r = requests.post("https://best.free/api/tools/merge-pdf/", files=files)
with open("merged.pdf", "wb") as out:
out.write(r.content)
const fd = new FormData();
for (const file of fileInput.files) fd.append("files", file);
const r = await fetch("https://best.free/api/tools/merge-pdf/", { method: "POST", body: fd });
const blob = await r.blob(); // the merged.pdf
Response: One merged PDF (application/pdf).