Plans and billing
Pay for the minutes you convert
The browser form is free and always will be. Past it you pay for processing time — not seats, not formats, not the privilege of calling the API. Every limit quoted on this page is a setting you can look up.
-
Free
Convert in the browser, no account, no card.
00
forever
No account required
No account required
- Every format the host has tools for
- Up to 200 files per batch
- 256 MiB per file, 1 GiB per URL import
- Files removed 24 hours later, when the purge job next runs
- Community support via the issue tracker
-
Credits
Metered API access. Buy minutes, use them when you need them.
2923
per 1,000 conversion minutes
One-off pack, minutes valid 12 months
Annual bundle, billed up front
- Full REST API and job DAG
- 256 MiB per upload, 1 GiB per URL import
- 200 files per batch, 50 tasks per job
- Signed webhooks with automatic retries
- 24-hour file retention
- Email support, two business days
-
Most popular
Business
A standing monthly minute allowance instead of buying packs one at a time.
7963
per month
Billed monthly, 5,000 minutes included
Billed yearly, 5,000 minutes per month
- Everything in Credits
- 5,000 conversion minutes each month
- Overage at $0.028 per minute, never a hard stop
- Minutes reset monthly — no pack to remember to top up
- The same 256 MiB, 200-file and 24-hour limits: they are deployment settings, not plan tiers
- Email support, one business day
-
Self-hosted
Run it on your own hardware. We support the deployment.
399319
per month, support plan
The software itself stays free
Billed yearly, the software stays free
- Docker image with the whole toolchain
- Your limits: every cap is an FC_* variable
- Your storage, your retention, your network
- No conversion minutes — you own the CPU
- Upgrade and hardening review each quarter
- Named engineer, private channel
Prices exclude VAT, GST and sales tax. A format only works if its tool is installed on the host — see what this deployment can convert.
What a conversion minute buys
Billing follows processing time, measured per task, rounded up to the whole minute with a one-minute floor. Fetching and delivering files is free — only the work in the middle counts.
- Counted Processing tasks Converting, optimising, thumbnailing, watermarking, merging, archiving — anything that hands a file to ImageMagick, ffmpeg, LibreOffice or Ghostscript.
- Free Import and export Pulling a file from a URL and staging the download afterwards. Transfer time is never billed, however slow the far end is.
- Capped Runaway jobs A task still running after 15 minutes is treated as abandoned and re-queued. Every attempt that started is billed, including one that later failed or timed out — a re-queued task therefore bills more than once.
Worked examples Billed minutes
-
40 phone photos, HEIC to JPEG
One job per batch, up to 50 tasks each. The floor is charged per task, not per job, so 40 images that each convert in under a second still bill 40 minutes — one apiece. Bulk image work is priced by file count, not by wall-clock. The S3 import that fed it costs nothing.
-
A 40-minute 1080p screencast to MP4 and a GIF preview
Transcoding runs faster than real time on a warm worker; the palette-optimised GIF adds a short second pass. About 14 minutes billed, delivered by webhook when the job finishes rather than by holding an HTTP request open.
Compare the plans
The defaults below are the ones shipped in lib/config.php, and on a
self-hosted deployment every one of them is an environment variable. Note that the limits rows read
the same across the hosted plans: each is a single global setting, so raising one raises it for
everybody. What a plan actually buys is minutes and a support commitment.
Capabilities by plan Scroll sideways for more
| Capability | Free | Credits | Business | Self-hosted |
|---|---|---|---|---|
| Max file size FC_MAX_UPLOAD_BYTES — one global value | 256 MiB (1 GiB by URL) | 256 MiB (1 GiB by URL) | 256 MiB (1 GiB by URL) | Whatever you configure |
| Concurrency A shared worker pool, not a per-account limit | Shared pool | Shared pool | Shared pool | As many workers as you run |
| REST API access api.php, scoped keys | Not included | Included | Included | Included |
| Webhooks HMAC-SHA256, 3 retries | Not included | Included | Included | Included |
| Queue order FIFO by queued_at — there is no priority lane | Oldest job first | Oldest job first | Oldest job first | You own the queue |
| File retention FC_FILE_TTL — one global value, enforced by purge | 24 hours | 24 hours | 24 hours | Any value you set |
| Batch size FC_MAX_BATCH_SIZE — one global value | 200 files | 200 files | 200 files | 200 files by default |
| API rate limit FC_RATE_LIMIT_*, per 60s window. Both limits apply at once | — | 600 / min per key, 300 / min per IP | 600 / min per key, 300 / min per IP | Your setting |
| Support level | Community | Email, 2 business days | Email, 1 business day | Named engineer |
Add-ons and overage
The base service deliberately ships without these — each one costs image size, CPU or both. Turn on the ones you actually need.
-
Extra minutes
Overage is billed at $0.028 per conversion minute. Jobs keep running; you are never cut off mid-batch.
-
Virus scanning
ClamAV in front of every upload. Off by default because the base service validates size, type and filename, not content.
-
Headless browser
Chromium for website capture and HTML rendering. It adds roughly 500 MB to the image, so it is opt-in.
-
OCR pipeline
ocrmypdf ahead of text extraction, so scanned PDFs produce text instead of an empty file.
-
Dedicated workers
A reserved pool sized to your cores. Worth it for office formats, where concurrent LibreOffice runs contend.
-
Extended retention
FC_FILE_TTL is one global number, so raising it past 24 hours is a change to the deployment rather than a per-account setting: everyone's files then live that long, and the disk has to hold them. Worth sizing before asking for it.
What happens to your files
Short version: they are processed, they are handed back, and then a purge job deletes them. The long version is in the security notes, which are candid about the gaps as well as the guards.
- Deleted on a schedule Finished jobs expire 24 hours after they are produced, and a scheduled purge job is what removes them. Nothing runs on a timer at the moment of expiry: a file is deletable from then on, and it is deleted the next time purge runs. Retention is a floor, not a stopwatch.
- Download links are capabilities Export tokens carry at least 128 bits of entropy from the system CSPRNG and are signed with HMAC-SHA256. Guessing one is not a practical attack.
- Keys are stored hashed API keys are kept as SHA-256 hashes and shown once, at creation. We cannot recover yours, which is the point. Scope each key to the narrowest permission that works.
- URL imports are filtered Hostnames are resolved and checked against loopback, private, link-local and reserved ranges, and every redirect hop is re-checked. Only HTTP and HTTPS are accepted.
- Data handling on request A processing agreement, a record of sub-processors and an export or erasure of your account data are available to any paying customer, on request, without a support tier attached.
- Or keep it all in-house The self-hosted plan is the honest answer to a strict data policy: your storage volume, your network, your retention setting, and no file leaves your infrastructure.
The numbers behind it
- 256 MiB upload
- 1 GiB by URL
- 200 files / batch
- 50 tasks / job
- 24h retention
- 600 / min per key
- 300 / min per IP
- 900s task timeout
No claim is made about encryption at rest — files sit on the host's storage volume until the purge removes them. If that is not good enough for your data, run it yourself.
Billing questions
One minute of processing time on a billable task, rounded up to the whole minute with a one-minute floor. A job that spends 12 seconds in ffmpeg costs one minute; a job that spends 3 minutes 5 seconds costs four. Import and export steps are not billable at all, so pulling a file from a URL and pushing the result to S3 costs nothing.
Yes. The browser form needs no account, no card and no key, and it runs the same converters as everything else. The limits it hits are the deployment-wide ones — 200 files per batch, 256 MiB per file, 24-hour retention — because there is no per-account metering in the code at all. An account only becomes useful when you want API keys, webhooks or job history.
On Credits, submissions are rejected with a clear error until you top up — nothing runs half-finished. On Business, minutes past your allowance are billed as overage at $0.028 each and your jobs keep going. You can set a monthly ceiling if you would rather be stopped than billed.
Credit packs last 12 months from purchase, so unused minutes roll for a year. The Business allowance resets each month and does not carry forward; if your usage is spiky, packs are usually the cheaper shape.
Paying the year up front discounts the effective monthly rate by roughly a fifth — Business is $79 monthly or $63 a month billed yearly. Switching to yearly mid-term credits the unused remainder of your monthly term against the annual invoice.
Change at any time from your account. Upgrades take effect immediately and are prorated; downgrades take effect at the end of the current period so you keep what you have paid for. Cancelling stops future invoices and leaves your remaining credit packs usable until they expire.
Not a licence — the code runs without one. It buys the support relationship around it: upgrade guidance, a quarterly configuration and hardening review, help sizing workers against your cores, and a named engineer who already knows your deployment.
Prices are in US dollars and exclude VAT, GST and sales tax, which are added at checkout based on your billing address. Business and self-hosted plans can be invoiced annually against a purchase order.
Convert something first, decide later
The browser form needs nothing from you. When you are ready to automate it, an account takes a minute and the first key works immediately.