✂️ Free PDF Splitter

Split PDF by removing specific pages

📁

Drop PDF file here or click to browse

Maximum file size: 100MB

Supported format: PDF

Features

✂️

Smart Splitting

Remove specific pages to create multiple PDFs automatically

📄

Page Ranges

Use simple syntax like "1,3-5,7" to specify pages

Instant Processing

Fast splitting with immediate results

📦

Multiple Downloads

Download as ZIP or individual PDF files

🔒

Secure & Private

Files are automatically deleted after processing

💻

API Access

Integrate PDF splitting into your applications

About PDF Splitter

PDF splitting is the process of dividing a PDF document into multiple smaller files by removing specific pages. This essential tool allows you to extract relevant sections, remove unwanted pages, or create separate documents from a single source file. Our PDF Splitter provides an intuitive, fast, and secure way to split your documents online.

Unlike traditional PDF splitters that require you to manually select which pages go into each file, our smart tool automatically creates separate PDFs based on the pages you want to remove. Simply specify the page numbers to delete, and the tool will intelligently split your document into continuous ranges, making it perfect for quick document organization.

How to Split PDFs

  1. Upload Your PDF: Click the upload area or drag and drop your PDF file.
  2. Specify Split Points: Enter the page numbers where you want to split (e.g., "3,7" to split a 10-page PDF into [1-3], [4-7], [8-10]).
  3. Split PDF: Click the "Split PDF" button to start the process.
  4. Review Results: See how many separate PDF files were created.
  5. Download: Download all files as a ZIP archive, download them one by one automatically, or select individual files to download.

Common Use Cases

📊

Split by Chapters

Divide large documents into separate chapters or sections based on page numbers.

📄

Extract Sections

Create separate files for specific page ranges from a large document.

📚

Organize Reports

Split comprehensive reports into individual sections for distribution.

💼

Separate Documents

Divide scanned multi-document files into individual PDFs.

📋

Break Down Presentations

Split presentation files into smaller segments for specific audiences.

🏠

Process Invoices

Separate multiple invoices or receipts from a single PDF scan.

Frequently Asked Questions

How does the page numbering work?

Page numbers start from 1. You can specify individual pages (e.g., "1,3,7") or ranges (e.g., "3-5" for pages 3, 4, and 5). Combine both methods: "1,3-5,7,10-12" will remove pages 1, 3, 4, 5, 7, 10, 11, and 12.

How many output files will be created?

The tool automatically creates PDFs based on continuous page ranges. For example, if you have a 10-page PDF and remove pages 3 and 7, you'll get 3 files: pages 1-2, pages 4-6, and pages 8-10.

Will the quality of my PDF be maintained?

Yes! Our split process maintains 100% quality. All text, images, formatting, hyperlinks, and metadata from your original PDF are preserved exactly as they were in the resulting split files.

Is my data secure? What happens to my files?

Absolutely secure. All files are processed on our secure servers and are automatically deleted within 5 minutes after splitting is complete. We do not store, share, or access your documents.

Can I split password-protected PDFs?

Currently, our tool does not support password-protected PDFs. You'll need to remove the password protection from your PDF before uploading it for splitting.

What's the maximum PDF size I can split?

You can split PDFs up to 100MB in size through our web interface. For larger files or bulk operations, consider using our API service.

How long does the splitting process take?

Splitting is typically very fast, usually taking just a few seconds depending on the size of your PDF and the number of pages being processed.

Privacy & Security

Secure Processing: All PDF splits 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 split files are automatically deleted from our servers within 5 minutes after the split 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 split 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 split process.

API Documentation

Use our API to integrate PDF splitting into your applications

Rate Limits & Pricing

Free tier: Manual splits through the web interface are free.
API usage: Requires an API key and is billed at $0.01 per split (per source PDF, regardless of output files).
Billing: Pay-as-you-go monthly billing. No prepaid credits needed.
Rate limit: 60 requests per hour per API key.

API Endpoint

POST https://www.bastiantechnologies.com/api/pdf/split

Authentication

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

Header
X-API-Key: your_api_key_here

Async API Flow

The Split API uses an asynchronous job-based pattern:

  1. POST /split - Start a split job (returns jobId immediately)
  2. GET /split/status/{jobId} - Poll until status is "completed"
  3. GET /split/download/{jobId}/{filename} - Download individual split PDF
  4. GET /split/download-zip/{jobId} - Download all splits as ZIP

Max file size: 100MB  |  Timeout: 5 minutes

Request Parameters

Parameter
Type
Required
Description
pdf
File
Required
PDF file to split (multipart/form-data)
splitPages
String
Required
Page numbers to split at (e.g., "3,7" or "3-5,10")

Example Request (cURL)

Shell - Complete Async Flow
# Step 1: Start split job
curl -X POST "https://www.bastiantechnologies.com/api/pdf/split" \
  -H "X-API-Key: your_api_key_here" \
  -F "pdf=@/path/to/document.pdf" \
  -F "splitPages=3,7"

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

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

# Response when complete includes outputFiles array with individual downloadUrls

# Step 3a: Download individual split file
curl -X GET "https://www.bastiantechnologies.com/api/pdf/split/download/abc-123/split_1_pages_1-3.pdf" \
  -H "X-API-Key: your_api_key_here" \
  -o split_1.pdf

# Step 3b: Or download all as ZIP
curl -X GET "https://www.bastiantechnologies.com/api/pdf/split/download-zip/abc-123" \
  -H "X-API-Key: your_api_key_here" \
  -o all_splits.zip

Example Request (Python)

Python - Complete Async Flow
import requests
import time

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

# Step 1: Start split job
files = {"pdf": open("document.pdf", "rb")}
data = {"splitPages": "3,7"# Split at pages 3 and 7

response = requests.post(
    "https://www.bastiantechnologies.com/api/pdf/split",
    headers=headers, files=files, data=data
)
job_id = response.json()["jobId"]
print(f"Job started: {job_id}")

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

# Step 3: Download each split file individually
for file_info in result["outputFiles"]:
    print(f"Downloading: {file_info['name']} ({file_info['pages']} pages)")
    pdf_res = requests.get(file_info["downloadUrl"], headers=headers)
    with open(file_info["name"], "wb") as f:
        f.write(pdf_res.content)

# Or download all as ZIP
zip_res = requests.get(result["zipDownloadUrl"], headers=headers)
with open("all_splits.zip", "wb") as f:
    f.write(zip_res.content)

API Responses

Initial Job Response (POST /split):

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

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

Completed - With Individual Download URLs
{
  "jobId": "f28d1c02-7cfa-4d31-a8fa-951636f3528f",
  "status": "completed",
  "progress": 100,
  "totalPages": 10,
  "splitPoints": [3, 7],
  "outputFiles": [
    {
      "name": "split_1_pages_1-3.pdf",
      "pages": 3,
      "size": 245678,
      "downloadUrl": "https://www.bastiantechnologies.com/api/pdf/split/download/f28d1c02-.../split_1_pages_1-3.pdf"
    },
    {
      "name": "split_2_pages_4-7.pdf",
      "pages": 4,
      "size": 312456,
      "downloadUrl": "https://www.bastiantechnologies.com/api/pdf/split/download/f28d1c02-.../split_2_pages_4-7.pdf"
    },
    {
      "name": "split_3_pages_8-10.pdf",
      "pages": 3,
      "size": 198234,
      "downloadUrl": "https://www.bastiantechnologies.com/api/pdf/split/download/f28d1c02-.../split_3_pages_8-10.pdf"
    }
  ],
  "processingTime": 1250,
  "zipDownloadUrl": "https://www.bastiantechnologies.com/api/pdf/split/download-zip/f28d1c02-..."
}

💡 Note: Each file in outputFiles has its own downloadUrl so you can download specific splits individually, or use zipDownloadUrl to download all at once.

n8n Workflow Integration

Complete workflow for PDF splitting in n8n with status polling and flexible download options.

⚠️ IMPORTANT: Body Parameters Configuration
// The PDF file must use the field name "pdf" (singular)

Body Content Type: Form-Data

Body Parameters:
┌─────────────────────────────────────────────────────────────────┐
│ Parameter Type: n8n Binary File                                │
│ Name:           pdf                                               │
│ Input Data Field Name: data (or your binary field name)      │
├─────────────────────────────────────────────────────────────────┤
│ Parameter Type: Form Data                                      │
│ Name:           splitPages                                        │
│ Value:          3,7  ← Split at pages 3 and 7                  │
└─────────────────────────────────────────────────────────────────┘

Node 1: Start Split Job (HTTP Request)

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

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

Body Content Type: Form-Data

Body Parameters:
  Parameter Type: n8n Binary File
  Name:           pdf
  Input Data Field Name: data

  Parameter Type: Form Data
  Name:           splitPages
  Value:          3,7

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

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

Headers:
  X-API-Key: your_api_key_here

Response Format: JSON

Node 3a: Download Specific Split File (HTTP Request)

Download First Split (pages 1-3)
// Access individual files from outputFiles array:
Method: GET
URL: {{ $('Node 2').item.json.outputFiles[0].downloadUrl }}
// Or for second file: {{ $('Node 2').item.json.outputFiles[1].downloadUrl }}
// Or for third file:  {{ $('Node 2').item.json.outputFiles[2].downloadUrl }}

Headers:
  X-API-Key: your_api_key_here

Response Format: File
Put Output in Field: data

Node 3b: Download All as ZIP (Alternative)

Download ZIP with All Splits
Method: GET
URL: {{ $('Node 2').item.json.zipDownloadUrl }}

Headers:
  X-API-Key: your_api_key_here

Response Format: File
Put Output in Field: data

Advanced: Download All Files in Loop

Use Split In Batches + HTTP Request
// To download each split file separately:

// 1. Add "Split In Batches" node after status check:
Batch Size: 1
Input: {{ $('Node 2').item.json.outputFiles }}

// 2. HTTP Request inside the loop:
Method: GET
URL: {{ $json.downloadUrl }}

Headers:
  X-API-Key: your_api_key_here

Response Format: File
Put Output in Field: {{ $json.name }}

// This will download each file with its original name

💡 Tip: Use outputFiles[index].downloadUrl to download specific splits, or zipDownloadUrl to get all files at once. Each file includes metadata: name, pages, and size.