UploadThing has become a popular choice in the Next.js/TypeScript community for handling file uploads without spinning up your own S3 infrastructure. It takes care of multipart uploads, file validation, CDN delivery, and access control. ChangeThisFile does something different: once you have a file, it converts it to whatever format you need. DOCX to PDF. MP4 to WebM. HEIC to JPG.

These tools are often used together in the same pipeline. This comparison helps you understand where each fits — and where ChangeThisFile is the right first stop if you don't need upload infrastructure at all.

Quick verdict

For file upload infrastructure in a Next.js app: UploadThing. It's excellent for its use case — type-safe upload routes, direct-to-CDN uploads, and framework integrations.

For converting a file from one format to another: ChangeThisFile. 690 routes, free tier, call /v1/convert with curl or any HTTP client.

For privacy-sensitive conversions without uploading to any CDN: ChangeThisFile's 161 client-side routes process files in the browser. Files never leave the device.

For a pipeline that uploads AND converts: Use both — UploadThing for the upload/storage step, ChangeThisFile API for the conversion step.

Pricing comparison

PlanChangeThisFileUploadThing
Free tier1,000 conversions/month (no card)Free tier with 2GB storage (check uploadthing.com for current limits)
Entry paid$29/mo — 10,000 conversionsPro plans based on storage and bandwidth
Mid tier$99/mo — 50,000 conversionsScales with storage and upload volume
High volume$499 Scale / $1,999 GrowthEnterprise pricing available
Browser toolFree, no signup, unlimitedNo standalone conversion browser tool

UploadThing's pricing is based on storage and bandwidth — you pay to host files persistently. ChangeThisFile's pricing is per conversion — files aren't hosted, so there's no storage or bandwidth cost. These are different cost models for different problems.

Feature comparison

FeatureChangeThisFileUploadThing
File format conversionYes — 690 routesNo — upload/storage only
File upload infrastructureNo — conversion onlyYes — core feature
CDN file hostingNo — 24h R2 onlyYes — persistent CDN
Free tierYes — 1,000 conversions/moYes — 2GB storage
SDK requiredNo — curl/fetch/requests directlyYes — framework-specific SDK (Next.js, Remix, etc.)
Client-side conversionsYes — 161 browser routes, zero uploadNo
Type-safe upload routesN/AYes — TypeScript-first
Direct-to-storage uploadsN/AYes
WebhooksHMAC-signed, stdlib verifiableUpload callbacks supported

Format and route coverage

UploadThing doesn't do format conversion — it uploads, stores, and delivers files as-is. You can configure it to accept only certain MIME types, but there's no conversion step. The file that goes in is the file that comes out.

ChangeThisFile covers 690 conversion routes: images (JPG, PNG, WebP, HEIC, SVG, AVIF, GIF, BMP, ICO, TIFF, PSD), documents (PDF, DOCX, ODT, RTF, HTML, Markdown), spreadsheets (XLSX, CSV, JSON, TSV), video (MP4, MKV, WebM, AVI, MOV, GIF), audio (MP3, WAV, FLAC, AAC, M4A), ebooks (EPUB, MOBI, AZW3), archives (ZIP, RAR, 7Z, TAR variants), and fonts (TTF, OTF, WOFF, WOFF2).

A common pattern: accept a file upload via UploadThing, then call ChangeThisFile's API to convert it to the format your application needs.

Privacy and data handling

ChangeThisFile client-side routes process files entirely in the browser — 161 routes for images, data files, fonts, and document formats like DOCX→HTML and HTML↔Markdown. Nothing uploads to any server.

ChangeThisFile server-side routes upload over HTTPS, convert, return, and auto-delete. Files are not retained beyond async job windows (24h max).

UploadThing stores uploaded files persistently on its CDN — that's the core value proposition. Files are accessible via URL until explicitly deleted. For user-generated content that you want to serve publicly, this is the right model. For sensitive or private file processing, the persistent storage model is worth factoring in.

Developer experience

UploadThing is designed to be used with its SDK — the type-safe upload route definitions, MIME type validation, and framework integrations (Next.js App Router, Remix, Express) are the core developer experience. For file upload infrastructure in a TypeScript app, the SDK adds real value.

ChangeThisFile removed its SDKs because the conversion endpoint doesn't benefit from a wrapper. POST a file and a target format. Receive the converted file. That's the complete API interaction. Your existing fetch or requests client handles it without any additional library.

const form = new FormData();
form.append('file', fileBlob, 'document.docx');
form.append('target', 'pdf');

const res = await fetch('https://changethisfile.com/v1/convert', {
  method: 'POST',
  headers: { Authorization: 'Bearer ctf_sk_your_key' },
  body: form
});
const pdfBuffer = await res.arrayBuffer();

No npm install @uploadthing/core equivalent. Your TypeScript fetch types are the entire client. Get a free key at changethisfile.com/v1/keys/free.

When to choose which

Use caseRecommended
User file uploads in a Next.js/TypeScript appUploadThing
Persistent CDN file hosting and deliveryUploadThing
Convert a file from one format to anotherChangeThisFile
Free API tier, no card, no storage billingChangeThisFile
Privacy-sensitive file processingChangeThisFile (client-side routes)
Zero-dependency backend integrationChangeThisFile
Upload + convert in the same pipelineBoth — UploadThing then ChangeThisFile

If you're building a Next.js app and need file upload infrastructure, UploadThing is a well-loved choice. If you then need to convert the uploaded file — resize, reformat, transcode — that's where ChangeThisFile's API fits into the same pipeline. Or if you don't need persistent file hosting at all, ChangeThisFile's free tier handles 1,000 conversions/month with no card and no files hosted permanently.