Sign in
Sign in with Google to save your plan status. Requires Firebase to be configured in the Settings tab first (Firebase project โ Google sign-in provider โ paste config).
1. Add PDF files
Drag PDFs in to combine them โ drop several at once, or add more later to append them to the end. Click the box to browse instead.
๐ Drop PDFs here to merge
or click to browse your files
2. Pages
Drag a page to reorder. Use the buttons on each page to rotate or delete it.
Clears the current pages, logo and file name so you can merge or edit a fresh file โ doesn't affect anything you've already downloaded.
No pages yet โ add a PDF above.
3. Add your logo / watermark
Stamps an image onto every page (or a page range) of the exported PDF.
4. Export
This name is used for the PDF download, Word/Excel conversions, and device/cloud sharing below.
Scan a document with your camera
On a phone this opens the camera directly. On desktop it opens a file picker instead. Snap a photo of the document โ background and all, you'll crop it next.
Adjust the corners
Drag the 4 dots onto the actual corners of the document to cut out the background around it.
Added โ
This scan was added to your page list in the Editor tab, where you can reorder it, rotate it, add a logo, or export/convert it like any other page.
๐ Sign in and subscribe (Account tab) to unlock conversions.
Convert to Word or Excel
Best-effort text extraction from the pages in the editor (in their current order). This is a plain-text conversion โ layout, tables and images are not preserved. For scanned pages with no embedded text, run OCR first and save the result as page text.
๐ Sign in and subscribe (Account tab) to unlock OCR.
OCR (scanned pages / images)
Recognizes text from a page image using Tesseract.js, entirely in your browser. Useful for scanned PDFs with no selectable text.
Share via device
Opens your device's native share sheet (Messenger, WhatsApp, Mail, Files, etc.) โ works on most mobile browsers and some desktop browsers. Builds the PDF from the current editor state.
Downloads the PDF and opens your email client. Browsers can't auto-attach files for security reasons, so drag the downloaded file into the email manually.
Facebook / Messenger
Facebook and Messenger can only share a public link, not a local file. Upload to Google Drive or OneDrive in the Cloud tab first (or paste any link you already have), then share it below.
๐ Sign in and subscribe (Account tab) to unlock cloud upload.
Google Drive
Requires your own Google OAuth Client ID (set it in Settings). Uploads the current PDF and puts the shareable link into the Share tab.
Not connected
OneDrive
Requires your own Microsoft (Azure) App Client ID (set it in Settings). Uploads the current PDF and puts the shareable link into the Share tab.
Not connected
Sign-in & subscriptions (Firebase + Stripe)
Real Gmail login and paid subscriptions need a Firebase project (free to start) wired to Stripe. Full walkthrough is in the setup guide that came with this file โ short version:
1. Create a project at console.firebase.google.com โ Build โ Authentication โ enable the Google sign-in provider.
2. Build โ Firestore Database โ create database.
3. Project settings โ General โ Your apps โ add a Web app โ copy the
4. Extensions โ install "Run Subscription Payments with Stripe" (by Invertase) โ follow its prompts to connect your Stripe account and sync your product/price.
5. Paste the monthly subscription's Stripe Price ID below.
6. Authentication โ Settings โ Authorized domains โ add whatever domain you're hosting this file on.
1. Create a project at console.firebase.google.com โ Build โ Authentication โ enable the Google sign-in provider.
2. Build โ Firestore Database โ create database.
3. Project settings โ General โ Your apps โ add a Web app โ copy the
firebaseConfig object โ paste it below.4. Extensions โ install "Run Subscription Payments with Stripe" (by Invertase) โ follow its prompts to connect your Stripe account and sync your product/price.
5. Paste the monthly subscription's Stripe Price ID below.
6. Authentication โ Settings โ Authorized domains โ add whatever domain you're hosting this file on.
Cloud credentials
These features need your own API credentials โ Claude can't ship working Google/Microsoft app keys inside a static file, since they're tied to a specific registered app and origin.
Google Drive: create a project at console.cloud.google.com โ APIs & Services โ Credentials โ OAuth client ID (type: Web application) โ add the URL you're hosting/opening this file from as an Authorized JavaScript origin โ paste the Client ID below.
OneDrive: register an app at portal.azure.com โ Azure AD โ App registrations โ add a SPA redirect URI matching this page's URL โ paste the Client ID below.
Important: OAuth requires this file to be served over
Google Drive: create a project at console.cloud.google.com โ APIs & Services โ Credentials โ OAuth client ID (type: Web application) โ add the URL you're hosting/opening this file from as an Authorized JavaScript origin โ paste the Client ID below.
OneDrive: register an app at portal.azure.com โ Azure AD โ App registrations โ add a SPA redirect URI matching this page's URL โ paste the Client ID below.
Important: OAuth requires this file to be served over
http:// or https:// (e.g. python3 -m http.server, or upload it to Netlify/Vercel/GitHub Pages) โ it will not work if opened directly as a file:// path.
About this build
Everything except cloud upload and Facebook/Messenger link-sharing runs entirely in your browser โ no server, no data leaves your device. Planned next: a native/PWA install option and higher-fidelity Word/Excel conversion via a small backend converter.