Split PDF by removing specific pages
Maximum file size: 100MB
Supported format: PDF
Remove specific pages to create multiple PDFs automatically
Use simple syntax like "1,3-5,7" to specify pages
Fast splitting with immediate results
Download as ZIP or individual PDF files
Files are automatically deleted after processing
Integrate PDF splitting into your applications
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.
Divide large documents into separate chapters or sections based on page numbers.
Create separate files for specific page ranges from a large document.
Split comprehensive reports into individual sections for distribution.
Divide scanned multi-document files into individual PDFs.
Split presentation files into smaller segments for specific audiences.
Separate multiple invoices or receipts from a single PDF scan.
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.
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.
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.
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.
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.
You can split PDFs up to 100MB in size through our web interface. For larger files or bulk operations, consider using our API service.
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.
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.
Use our API to integrate PDF splitting into your applications
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.
https://www.bastiantechnologies.com/api/pdf/split
All API requests require an API key. Get yours from your account dashboard.
X-API-Key: your_api_key_here
The Split API uses an asynchronous job-based pattern:
Max file size: 100MB | Timeout: 5 minutes
pdfsplitPages"3,7" or "3-5,10")# 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
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)
Initial Job Response (POST /split):
{
"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}):
{
"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.
Complete workflow for PDF splitting in n8n with status polling and flexible download options.
// 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)
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)
// 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)
// 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)
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
// 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.