Carbone vs Galley Render
The short version
- Carbone charges per document regardless of page count. Galley charges per PDF page. The unit decides the answer more often than the feature list does.
- If your output is long — reports, statements, contracts, anything past a handful of pages — Carbone is cheaper, often by a lot, and you should pick Carbone.
- If your output is one page or an image, at volume, Galley's per-render price is lower, and Galley adds a JSON Schema contract per version and a deterministic cache that is free on a hit.
| Item | Carbone | Galley Render |
|---|---|---|
| The unit | One document, any page count, under a 1 MB payload | One PNG or JPG, or one PDF page |
| Free tier | €0 — 100 documents a month | $0 — 200 renders a month, plus a keyless 50-render trial |
| Entry paid | Essential €29/mo — 1,000 documents | Starter $19/mo — 5,000 renders |
| Effective unit | €0.029 / €0.019 / €0.008 per document | $0.0038 / $0.00263 / $0.00166 per render |
| Overage | €0.02 down to €0.001 per extra document | $4 per 1,000 renders on every paid plan |
Carbone Cloud prices are EUR excluding VAT and Galley's are USD. This page does not convert between them, because we have no sourced exchange rate to cite and the VAT position depends on you. Compare the shapes, then apply your own rate.
Carbone and Galley Render solve overlapping problems with incompatible billing units, and the unit decides the answer more often than the feature list does. Carbone charges per document regardless of page count. Galley charges per PDF page. If your output is long — reports, statements, contracts, anything past a handful of pages — Carbone is cheaper, often by a lot, and you should pick Carbone. If your output is one page or an image, at volume, Galley’s per-render price is lower. Carbone is also the broader product: more input formats, far more output formats, EU hosting, an on-premise option and an open-source library. Galley is narrower and aimed at agents: a JSON Schema contract per template version, a deterministic cache that is free on a hit, and expiring signed URLs.
What each one is
Section titled “What each one is”Carbone renders a template you author in Word, Excel, PowerPoint, LibreOffice, InDesign, HTML or XML, merges a JSON payload into it, and converts the result to PDF or one of 100+ other formats. It is sold as Carbone Cloud (EU-hosted, in Paris on OVHCloud, Scaleway and BunnyCDN), as an on-premise licence, as an AWS Marketplace “Private Cloud” offering, and as an open-source Node.js library.
Galley Render takes a template name and a JSON payload and returns a signed URL to a PDF, PNG or JPG. Templates are HTML with a Liquid subset plus a JSON Schema per version; versions are immutable and content-addressed; identical inputs hit a deterministic cache and cache hits are never billed.
Pricing
Section titled “Pricing”Carbone Cloud
Section titled “Carbone Cloud”| Plan | Monthly | Yearly (per mo) | Docs/mo | Templates | Parallel renders | SLA | Analytics retention | Extra doc |
|---|---|---|---|---|---|---|---|---|
| Free | €0 | €0 | 100 | 100 | 1 | — | 15 days | €0.05 |
| Essential | €29 | €26 | 1,000 | 500 | 2 | 99.5% | 30 days | €0.02 |
| Essential Plus | €95 | €85 | 5,000 | 1,000 | 5 | 99.9% | 60 days | €0.005 |
| Advanced | €159 | €149 | 20,000 | 2,000 | 10 | 99.9% | 90 days | €0.002 |
| Advanced Plus | €295 | €265 | 100,000 | 5,000 | 50 | 99.9% | 180 days | €0.001 |
| Advanced Ultra | €595 | €529 | 500,000 | 10,000 | 50 | 99.9% | 360 days | €0.001 |
Extra templates cost €0.10 on Free and Essential, €0.05 on Essential Plus, €0.01 on Advanced and above. Overages are “charged individually at the start of the next period.” Yearly billing is roughly 10% off per month, and on yearly plans “unused documents roll over across the 12 months.” You cannot convert between monthly and yearly.
Galley Render
Section titled “Galley Render”| Plan | Price | Includes |
|---|---|---|
| Free | $0 | 200 renders/mo, 3 templates, no watermark. Plus a keyless 50-render MCP trial |
| Pay as you go | $0.006/PNG or JPG, $0.015/PDF page | Default $50/mo spend cap you can raise |
| Starter | $19/mo | 5,000 renders, 25 templates, webhooks, 30-day retention |
| Growth | $79/mo | 30,000 renders, unlimited templates, cloud push, 90-day retention, priority queue |
| Scale | $249/mo | 150,000 renders, dedicated pool, SLA |
Overage is $4 per 1,000 renders on every paid plan. Annual is two months free. Effective per-render: $0.0038, $0.00263, $0.00166.
The units, which are the whole story
Section titled “The units, which are the whole story”Carbone, verbatim: “one document is counted per render when the injected JSON + images payload is under 1 MB. Beyond 1 MB the count scales linearly (0.5 MB = 1 document, 1.2 MB = 2 documents, 2.3 MB = 3 documents). Page count is irrelevant — Carbone bills per document, not per page.”
Galley: 1 unit per PNG or JPG, 1 unit per PDF page. Cache hits are never billed.
So Carbone’s cost scales with payload size and Galley’s scales with output length. A 200-page statement from a 40 KB JSON payload is one document on Carbone and 200 units on Galley. A one-page card built from a 3 MB image payload is three documents on Carbone and one unit on Galley.
Worked scenarios
Section titled “Worked scenarios”1. 500 forty-page reports a month. Galley: 500 × 40 = 20,000 billable pages. Growth includes 30,000 → $79/mo. (Starter plus overage is $19 + 15,000 × $0.004 = $79, the same. Pay as you go would be 20,000 × $0.015 = $300.) Carbone: 500 documents, page count irrelevant. Essential includes 1,000 → €29/mo. Carbone wins, and it is not close.
2. 5,000 forty-page reports a month. Galley: 200,000 pages. Scale includes 150,000, plus 50,000 overage × $0.004 = $200 → $249 + $200 = $449/mo. Carbone: 5,000 documents. Essential Plus includes 5,000 → €95/mo. Carbone wins by roughly 4–5x before any exchange rate is applied.
3. 30,000 one-page PDF invoices a month. Galley: 30,000 pages. Growth includes 30,000 → $79/mo. Carbone: 30,000 documents. Advanced includes 20,000, plus 10,000 extra × €0.002 = €20 → €159 + €20 = €179/mo. (Advanced Plus at €295 is more.) Galley wins here — this is the shape where per-page and per-document converge and the per-unit price decides.
4. Top of each ladder, per unit. Carbone Advanced Ultra: €595 ÷ 500,000 = €0.00119 per document, at any page count. Galley Scale: $249 ÷ 150,000 = $0.00166 per page. Carbone’s top tier is cheaper per unit than Galley’s top tier even for single-page output, and Carbone’s unit covers an entire document. There is no arithmetic in which Galley wins that comparison.
5. The free tiers. Carbone Free: €0, 100 documents/mo, 100 templates, 1 parallel render, 15-day analytics, no support or SLA — and all output formats, Studio, versioning and the MCP server are included. Watermarks apply to test token previews, not to the Free plan’s production quota. Galley Free: $0, 200 renders/mo, 3 templates, no watermark, plus 50 keyless renders over MCP. For single-page output Galley’s free tier is larger. For a ten-page document it is 100 documents against 20, and Carbone’s is five times larger. Carbone’s 100-template allowance on a free plan is far more generous than Galley’s 3.
Feature comparison
Section titled “Feature comparison”| Carbone | Galley Render | |
|---|---|---|
| Template inputs | DOCX, XLSX, PPTX, ODT, ODS, ODG, ODP, XHTML, IDML, HTML, XML | HTML plus a Liquid subset |
| Output formats | “PDF and 100+ formats,” including PDF/A (ISO 19005) and PDF/UA (ISO 14289) | PDF, PNG, JPG. webp is not supported |
| Document operations | PDF merge and append, signature, Factur-X attachment, watermark, password and encryption | None of these |
| Billing unit | Per document under 1 MB payload; scales linearly beyond 1 MB. Page count irrelevant | 1 per PNG/JPG, 1 per PDF page. Cache hits unbilled |
| Throughput control | “Parallel render” cap, 1 to 50 by plan. No published req/s rate limit | Not published on the pages in this comparison; see the render reference |
| SLA | 99.5% on Essential, 99.9% from Essential Plus up | On Scale |
| Hosting | EU (Paris; OVHCloud, Scaleway, BunnyCDN) | Hosted service only; no on-premise option |
| Self-host | On-premise Docker carbone/carbone-ee or native binaries; Fit €1,500/yr (1 server, 12,000 docs/yr), Unlimited €2,940/yr (unlimited, lifetime licence). Community edition €0 but without dynamic images/colors/charts, barcodes, HTML rendering, smart conditions or aggregates | No |
| Open source | Yes, a Node.js library with Community features | No |
| Usage-based option | Private Cloud on AWS Marketplace, USD: $0.15 first 100 docs, $0.08 for 101–1,000, $0.03 for 1,001–10,000, $0.008 for 10,001+ | Pay as you go, $0.006/image and $0.015/PDF page |
| Template retention | Indefinite by default on a production token; carbone-template-delete-after allows non-persistent up to 30 days; test-token templates auto-delete within 30 days | Templates persist; render retention is 30 days on Starter, 90 on Growth |
| MCP server | Yes, included on every plan including Free | Yes, at https://mcp.galleyrender.com/mcp |
| Agent skill file | Yes — an open-source “Carbone Skill,” included on every plan | Yes — skill file and llms.txt |
| Template versioning | Listed as included on every plan including Free | Yes, immutable and content-addressed |
| JSON Schema contract per template | Not found on the pricing pages or the documentation page we read | Yes, per version, with a free validate_data dry run |
| Deterministic render cache, unbilled on a hit | Not found on the pages above | Yes — SHA-256 of template checksum, canonical data, canonical options and format |
| Expiring signed output URLs | Not found on the pages above | Yes, default one hour, refreshable via get_render |
Where Carbone is the better choice
Section titled “Where Carbone is the better choice”- Long documents. The per-document unit is structurally better than a per-page unit for reports, statements, contracts and books. Scenarios 1 and 2 above are not edge cases; they are the normal shape of document generation.
- Better unit price at the top. €0.00119 per document on Advanced Ultra beats $0.00166 per page on Galley Scale, and covers more per unit.
- Output breadth. PDF/A and PDF/UA conformance, merge and append, signatures, Factur-X, password protection, and 100+ formats. Galley emits PDF, PNG and JPG and does none of the rest. If you have a compliance or archival requirement, this is the end of the discussion.
- Non-developers author the templates. A finance team can edit an invoice in Word. Galley templates are HTML in a repo.
- Deployment choice and data residency. EU hosting, an on-premise licence — including one where “if you don’t renew, Carbone keeps running indefinitely with the version you had at contract end” — and an open-source library. Galley offers none of that.
- A more generous free tier for real documents, and rollover of unused documents across the year on annual plans.
Where Galley is the better choice
Section titled “Where Galley is the better choice”- Single-page and image output at volume. Scenario 3: $79 against €179 for the same 30,000 jobs.
- Images. PNG and JPG are first-class, with a fast non-browser path for cards and OG images. Carbone’s published output description is “PDF and 100+ formats”; we did not confirm raster image output on the pages we read, so we are not claiming it is missing — only that we did not verify it.
- Repeat work is free. A deterministic cache key means the second identical request costs nothing.
- A schema contract an agent can read before it renders.
get_templatereturns the JSON Schema,validate_datadry-runs a payload for free, and errors name the field path, the expected type, what was received and an acceptable value. - No signup to start. 50 renders over MCP with no key at all.
- USD, no VAT question, and payload size never changes the bill. Carbone’s count scales past 1 MB of injected JSON and images; Galley’s does not.
Nothing above needs an account, a card or a key. The demo renders on the production service.
Migrating
Section titled “Migrating”Carbone templates are binary office documents with {d.field} markers. Galley templates are HTML with Liquid, so a migration is a rewrite of the template, not a port. Budget for that honestly — and if your documents are long, re-run scenario 1 before you start.
The API side is short. Read the schema, then render:
curl -sS https://api.galleyrender.com/v1/render \ -H "Authorization: Bearer $GALLEY_API_KEY" \ -H 'content-type: application/json' \ -d '{ "template": "invoice@3", "format": "pdf", "data": { "invoice_number": "INV-1042", "customer": { "name": "Acme" }, "line_items": [ { "description": "Consulting", "amount": 4200 } ], "total": 4200 }, "options": { "page_size": "A4", "margin": "18mm" } }'{ "object": "render", "id": "rnd_7hq2m4x8k1bv", "status": "succeeded", "template": "invoice@3", "format": "pdf", "cached": false, "url": "https://<account>.r2.cloudflarestorage.com/galley-renders/renders/…?X-Amz-Expires=3600&X-Amz-Signature=…", "page_count": 2, "billable_units": 2}Note billable_units: 2 for a two-page invoice. That field is the one to watch while you are deciding. Pin the version in anything you ship. The quickstart covers the MCP path and the gallery has the starter templates.
Where the competitor’s numbers came from
Section titled “Where the competitor’s numbers came from”Sources
Section titled “Sources”All accessed 2026-09-16.
- Carbone pricing page — https://carbone.io/pricing.html (quota figures are JavaScript-rendered and absent from the served HTML)
- Carbone’s agent-readable pricing mirror, the source of every quota figure above — https://carbone.io/pricing.md (
generated_at: "2026-09-11") - Carbone documentation, the page
carbone.io/documentation.htmlresolves to (Design › Getting started, with the full documentation section index in its navigation: Overview, Substitutions, Repetitions, Formatters, Conditions, Computation, Advanced features, Template Formats). Checked for a per-template JSON Schema, a published HTTP rate limit, signed output URLs and render caching or deduplication; none of the four appear on it — https://carbone.io/documentation.html - Galley Render pricing — /pricing
Prices, quotas and tax treatment change. Check https://carbone.io/pricing.html and our pricing page before deciding anything on these numbers.