📑 Free PDF Merger

Combine multiple PDF files into a single document

📁

Drop PDF files here or click to browse

Select multiple PDFs to merge (up to 50 files)

Maximum file size: 100MB per file

Features

📑

Merge Multiple PDFs

Combine up to 50 PDF files into a single document

🔄

Reorder Pages

Drag and drop to arrange PDFs in any order you want

Instant Processing

Fast merging with immediate download

🔒

Secure & Private

Files are automatically deleted after processing

💻

API Access

Integrate PDF merging into your applications

💯

No File Limit

Merge PDFs of any size up to 100MB per file

About PDF Merger

PDF merging is the process of combining multiple PDF documents into a single unified file. This essential tool allows you to organize scattered documents, create comprehensive reports, or consolidate related files for easier sharing and management. Our PDF Merger provides a simple, fast, and secure way to merge your documents online.

Whether you're combining chapters of a report, merging invoices, consolidating contracts, or organizing project documentation, our tool handles all scenarios with ease. Upload your files, arrange them in the desired order using our intuitive drag-and-drop interface, and get your merged PDF instantly.

How to Merge PDFs

  1. Upload Your PDFs: Click the upload area or drag and drop multiple PDF files. You can select up to 50 PDFs at once.
  2. Arrange the Order: Use drag-and-drop to reorder files, or click the up/down arrow buttons to adjust the sequence.
  3. Add or Remove Files: Click "Add More Files" to include additional PDFs, or remove individual files you don't need.
  4. Merge PDFs: Click the "Merge PDFs" button to start the process. Your files will be combined in seconds.
  5. Download: Your merged PDF will be downloaded automatically once the process completes.

Common Use Cases

📊

Business Reports

Combine multiple report sections, financial statements, and appendices into a single comprehensive document.

📄

Legal Documents

Merge contracts, agreements, and supporting documents for complete legal documentation packages.

📚

Academic Papers

Combine research chapters, bibliography, and appendices for thesis and dissertation submissions.

💼

Job Applications

Merge resume, cover letter, portfolio samples, and references into a single application document.

📋

Project Documentation

Consolidate project plans, specifications, timelines, and reports for complete project archives.

🏠

Real Estate Files

Combine property documents, inspection reports, and contracts for complete transaction files.

Frequently Asked Questions

How many PDFs can I merge at once?

You can merge up to 50 PDF files in a single operation. Each file can be up to 100MB in size. For larger batch operations, consider using our API with an API key.

Will the quality of my PDFs be maintained?

Yes! Our merge process maintains 100% quality. All text, images, formatting, hyperlinks, and metadata from your original PDFs are preserved exactly as they were. No compression or quality loss occurs.

Is my data secure? What happens to my files?

Absolutely secure. All files are processed on our secure servers and are automatically deleted immediately after merging is complete. We do not store, share, or access your documents. The merge happens in real-time.

Can I merge password-protected PDFs?

Currently, our tool does not support password-protected PDFs. You'll need to remove the password protection from your PDFs before uploading them for merging. This ensures the security of protected documents.

Can I rearrange the order after uploading?

Yes! Use our drag-and-drop interface to reorder files any way you like. You can also use the up/down arrow buttons for precise positioning. The order shown in the list is exactly how files will be merged.

Can I use this tool for commercial purposes?

Yes! Our free web-based tool can be used for both personal and commercial purposes. For high-volume commercial use, we recommend our API service which offers better performance and automation capabilities.

How long does the merging process take?

Merging is typically very fast, usually taking just a few seconds depending on the number and size of your PDFs. Most merges with 5-10 files complete in under 5 seconds.

Privacy & Security

Secure Processing: All PDF merges are processed on our secure servers using industry-standard encryption. Your files are transmitted over HTTPS to ensure data privacy during upload and download.

Automatic Deletion: We take your privacy seriously. All uploaded PDFs and the generated merged file are automatically deleted from our servers within 5 seconds after the merge completes. We retain no copies of your documents.

No Data Collection: We do not collect, store, or analyze the content of your PDFs. Our system only processes the files to perform the requested merge and then removes all traces.

GDPR Compliant: Our service is fully compliant with GDPR and other international data protection regulations. You maintain full ownership of your documents throughout the merge process.

API Documentation

Use our API to integrate PDF merging into your applications

Rate Limits & Pricing

Free tier: Manual merges through the web interface are free.
API usage: Requires an API key and is billed at $0.01 per merge (regardless of PDF count).
Billing: Pay-as-you-go monthly billing. No prepaid credits needed.
Rate limit: 60 requests per minute for job creation, 10 requests per minute for status polling.

API Endpoints

POST https://www.bastiantechnologies.com/api/pdf/merge
GET https://www.bastiantechnologies.com/api/pdf/merge/status/{jobId}
GET https://www.bastiantechnologies.com/api/pdf/merge/download/{jobId}

Authentication

All API requests require an API key. Get yours from your account dashboard.

Header
X-API-Key: your_api_key_here

How It Works (Async Processing)

The PDF Merge API uses asynchronous job processing for reliable handling of large files:

  1. Start Merge Job: POST your PDF files to /api/pdf/merge. You'll receive a jobId immediately.
  2. Poll for Status: GET /api/pdf/merge/status/{jobId} to check progress until status is completed.
  3. Download Result: When status is completed, GET /api/pdf/merge/download/{jobId} to download the merged PDF.

Max files: 50 PDFs  |  Max size per file: 100MB  |  Job expiry: 1 hour

Request Parameters (POST /merge)

Parameter
Type
Required
Description
pdfs
File[]
Required
Array of PDF files to merge (multipart/form-data, minimum 2 files)
order
String
Optional
JSON array of indices specifying merge order (e.g., [0,2,1]). Default: upload order

Example Request (cURL)

Shell - Start Merge Job
# Step 1: Start merge job
curl -X POST "https://www.bastiantechnologies.com/api/pdf/merge" \
  -H "X-API-Key: your_api_key_here" \
  -F "pdfs=@/path/to/file1.pdf" \
  -F "pdfs=@/path/to/file2.pdf" \
  -F 'order=[0,1]'

# Response: {"success":true,"jobId":"abc-123-def","status":"processing",...}

# Step 2: Check status (poll until completed)
curl -X GET "https://www.bastiantechnologies.com/api/pdf/merge/status/abc-123-def" \
  -H "X-API-Key: your_api_key_here"

# Response when complete: {"jobId":"abc-123-def","status":"completed","downloadUrl":"..."}

# Step 3: Download merged PDF
curl -X GET "https://www.bastiantechnologies.com/api/pdf/merge/download/abc-123-def" \
  -H "X-API-Key: your_api_key_here" \
  -o merged.pdf

Example Request (JavaScript)

JavaScript
// Step 1: Start merge job
const formData = new FormData();
formData.append('pdfs', file1);
formData.append('pdfs', file2);
formData.append('order', JSON.stringify([0, 1]));

const startResponse = await fetch('https://www.bastiantechnologies.com/api/pdf/merge', {
  method: 'POST',
  headers: { 'X-API-Key': 'your_api_key_here' },
  body: formData
});
const { jobId } = await startResponse.json();

// Step 2: Poll for completion
let status = 'processing';
while (status === 'processing') {
  await new Promise(r => setTimeout(r, 1000));
  const statusRes = await fetch(`https://www.bastiantechnologies.com/api/pdf/merge/status/${jobId}`, {
    headers: { 'X-API-Key': 'your_api_key_here' }
  });
  const data = await statusRes.json();
  status = data.status;
}

// Step 3: Download merged PDF
const downloadRes = await fetch(`https://www.bastiantechnologies.com/api/pdf/merge/download/${jobId}`, {
  headers: { 'X-API-Key': 'your_api_key_here' }
});
const blob = await downloadRes.blob();

Example Request (Python)

Python
import requests
import time

API_KEY = "your_api_key_here"
headers = {"X-API-Key": API_KEY}

# Step 1: Start merge job
files = [
    ("pdfs", open("file1.pdf", "rb")),
    ("pdfs", open("file2.pdf", "rb"))
]
data = {"order": "[0,1]"response = requests.post(
    "https://www.bastiantechnologies.com/api/pdf/merge",
    headers=headers, files=files, data=data
)
job_id = response.json()["jobId"]

# Step 2: Poll for completion
while True:
    status_res = requests.get(
        f"https://www.bastiantechnologies.com/api/pdf/merge/status/{job_id}",
        headers=headers
    )
    status = status_res.json()["status"]
    if status in ["completed", "failed"]:
        break
    time.sleep(1)

# Step 3: Download merged PDF
download_res = requests.get(
    f"https://www.bastiantechnologies.com/api/pdf/merge/download/{job_id}",
    headers=headers
)
with open("merged.pdf", "wb") as f:
    f.write(download_res.content)

n8n Workflow Integration

Complete workflow for PDF merging in n8n with status polling and download.

⚠️ IMPORTANT: Body Parameters Configuration
// Each PDF file must use the field name "pdfs" (plural, not "pdf")
// This is critical - using "pdf" will cause a 500 error!

Body Content Type: Form-Data

Body Parameters:
┌─────────────────────────────────────────────────────────────────┐
│ Parameter Type: n8n Binary File                                │
│ Name:           pdfs  ← Must be "pdfs" (plural)               │
│ Input Data Field Name: attachment_0                            │
├─────────────────────────────────────────────────────────────────┤
│ Parameter Type: n8n Binary File                                │
│ Name:           pdfs  ← Same name "pdfs" for all files       │
│ Input Data Field Name: attachment_1                            │
└─────────────────────────────────────────────────────────────────┘

// Add more parameters with Name: "pdfs" for additional PDF files

Node 1: Start Merge Job (HTTP Request)

n8n HTTP Request Configuration
Method: POST
URL: https://www.bastiantechnologies.com/api/pdf/merge

Authentication: Generic Credential Type → Header Auth
  Name:  X-API-Key
  Value: your_api_key_here

Body Content Type: Form-Data

Body Parameters:
  // For each PDF file from your input:
  Parameter Type: n8n Binary File
  Name:           pdfs
  Input Data Field Name: attachment_0 (or your binary field name)

  // Repeat for second PDF:
  Parameter Type: n8n Binary File
  Name:           pdfs
  Input Data Field Name: attachment_1

  // Optional: Add merge order
  Parameter Type: Form Data
  Name:           order
  Value:          [0,1]

Response Format: JSON

Node 2: Check Status (Loop Until Complete)

Loop with HTTP Request + Wait
// Add a Loop node with condition:
Continue If: {{ $json.status !== "completed" && $json.status !== "failed" }}
Max Iterations: 60 // 2 minutes max

// Inside the loop, add Wait node (1-2 seconds), then HTTP Request:
Method: GET
URL: https://www.bastiantechnologies.com/api/pdf/merge/status/{{ $('Node 1').item.json.jobId }}

Headers:
  X-API-Key: your_api_key_here

Response Format: JSON

Node 3: Download Merged PDF (HTTP Request)

Download Merged PDF
Method: GET
URL: {{ $('Node 2').item.json.downloadUrl }}
// Or use: https://www.bastiantechnologies.com/api/pdf/merge/download/{{ $('Node 1').item.json.jobId }}

Headers:
  X-API-Key: your_api_key_here

Response Format: File
Put Output in Field: data

💡 Tip: The workflow polls every 1-2 seconds until merging completes. The final node downloads the merged PDF file.

API Responses

Initial Job Response (POST /merge):

Success (202 Accepted)
{
  "success": true,
  "jobId": "f28d1c02-7cfa-4d31-a8fa-951636f3528f",
  "status": "processing",
  "message": "Merge job started",
  "statusUrl": "https://www.bastiantechnologies.com/api/pdf/merge/status/f28d1c02-...",
  "downloadUrl": "https://www.bastiantechnologies.com/api/pdf/merge/download/f28d1c02-..."
}

Job Status Response (GET /merge/status/{jobId}):

Completed
{
  "jobId": "f28d1c02-7cfa-4d31-a8fa-951636f3528f",
  "status": "completed",
  "progress": 100,
  "filesCount": 2,
  "totalPages": 15,
  "outputSize": 2457600,
  "processingTime": 1250,
  "downloadUrl": "https://www.bastiantechnologies.com/api/pdf/merge/download/f28d1c02-..."
}
Failed
{
  "jobId": "f28d1c02-7cfa-4d31-a8fa-951636f3528f",
  "status": "failed",
  "error": "Failed to process PDF: File is corrupted"
}