Users upload files. Filebot handles everything after.
Every file your product receives gets checked for viruses, converted to the formats you need, stored, and delivered to your users. You pick the steps once. Filebot runs them on every file.
Free plan. No credit card.
Five jobs, done on every file.
The work you would otherwise stitch together from five services, run as one.
Check
Every file is scanned for viruses before it touches your users.
ClamAV scan + quarantine
Convert
Photos resized, documents turned into web-ready formats and thumbnails.
resize, transform, PDF
Read
Text pulled out of scans, speech turned into transcripts.
OCR, transcribe, describe
Store
Files live in Filebot storage, or never leave your own.
your S3/R2 bucket, or ours
Deliver
Every result gets a fast link that is safe to put in your product.
signed URLs + webhooks
If your product has an upload button, this is for you.
You do not need to build a file team. You need the files handled.
Marketplaces and social apps
Listing photos and avatars arrive huge, sideways, and occasionally infected. Filebot makes them web-ready and safe before anyone sees them.
pipeline: scan → resize → deliverFintech, insurance, and legal
Identity documents and claims come in as scans and phone photos. Filebot checks them, converts them, and pulls out the text your team needs.
pipeline: scan → convert → OCR → storeMedia and education
Lectures, podcasts, and meeting recordings become transcripts your users can read and search.
pipeline: transcribe → store → deliverAny SaaS with attachments
Whatever your customers attach gets checked, stored in your own bucket if you want, and delivered with links that expire.
pipeline: scan → store → signed linkLive by this afternoon.
Three steps between you and never worrying about uploaded files again.
Connect your uploads
Your engineers drop the Filebot SDK into your app, or point your existing upload flow at the API. Files start arriving.
Choose the steps once
Decide what happens to every file: check, convert, read, store, deliver. That set of steps is your pipeline.
Every file follows it
Each upload becomes a run. See what came in, what ran, and what went out, with a webhook telling your app when it is done.
Proof for your engineers.
When the technical questions start, the answers are short. A typed SDK, a REST API, and a first run in production the same day.
- TypeScript SDK and REST API
- Webhooks on every run
- Scoped API keys, least privilege by default
- Uploads go direct to storage, never through your servers
import { createFilebot } from "filebot-sdk";import { useState } from "react"; const fr = createFilebot({ baseUrl: "https://api.filebot.dev", apiKey: import.meta.env.VITE_FILEROBOT_KEY,}); export function UploadAndProcess() { const [outputs, setOutputs] = useState([]); async function onDrop(file) { // Ingest the file straight to your storage const upload = await fr.uploads.ingestFile({ file, filename: file.name, }); // Trigger a run and wait for the result const run = await fr.runs.createAndWait({ pipelineId: "avatar", uploadedFileObjectId: upload.fileObjectId, }); setOutputs(run.steps); } return <Dropzone onDrop={onDrop} outputs={outputs} />;}import Foundation let baseUrl = "https://api.filebot.dev"let apiKey = ProcessInfo.processInfo.environment["FILEROBOT_KEY"]! func post(_ path: String, _ body: [String: Any]) async throws -> Data { var req = URLRequest(url: URL(string: baseUrl + path)!) req.httpMethod = "POST" req.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") req.setValue("application/json", forHTTPHeaderField: "Content-Type") req.httpBody = try JSONSerialization.data(withJSONObject: body) let (data, _) = try await URLSession.shared.data(for: req) return data} func uploadAndProcess(fileObjectId: String) async throws { // POST /v1/runs to process the uploaded file let data = try await post("/v1/runs", [ "pipelineId": "avatar", "uploadedFileObjectId": fileObjectId, ]) print(String(data: data, encoding: .utf8) ?? "")}import okhttp3.* val client = OkHttpClient()val baseUrl = "https://api.filebot.dev"val apiKey = BuildConfig.FILEROBOT_KEY fun uploadAndProcess(fileObjectId: String): String { // POST /v1/runs to process the uploaded file val json = """{"pipelineId":"avatar","uploadedFileObjectId":"$fileObjectId"}""" val request = Request.Builder() .url("$baseUrl/v1/runs") .header("Authorization", "Bearer $apiKey") .post(json.toRequestBody("application/json".toMediaType())) .build() client.newCall(request).execute().use { res -> return res.body!!.string() }}Your files can stay your files.
Built for teams whose files are the sensitive part of the business.
Run it inside your own cloud
On Enterprise, Filebot agents run in your VPC. Files never leave your infrastructure, and the control plane never reads your bytes.
Bring your own bucket
Keep every file in your own S3 or R2 storage. Filebot processes and delivers, you keep custody.
Every action on the record
Runs, key rotations, and permission changes land in an exportable audit log.
Pay for what you process.
Free to start. $29 a month when you are in production. Prices follow files processed, not seats.
Watch your first file go through in minutes.
Sign up free, upload one file, and see every step it took.
No credit card needed.