NaN/NaN/NaN

PDF生成APIを選ぶ際、機能だけでなく料金体系の違いも重要な判断材料です。サービスによって課金モデルが大きく異なり、選び方を間違えると10倍以上のコスト差が生まれることもあります。

この記事では、2026年4月時点の主要PDF生成APIの料金を実際のユースケース別にシミュレーションします。機能面の比較はHTML to PDF API比較をご覧ください。

2026年4月更新: 競合サービスの最新料金を反映しました。Api2PDF・PDFShiftの価格変更、CraftMyPDF・APITemplateの新プランを追加しています。

料金モデルの種類

PDF APIの料金体系は主に3つのパターンに分かれます。

1. 従量課金型

生成したPDF1件ごとに課金。わかりやすい反面、コストが線形に増加します。少量〜中量の利用に最適。

2. 月額サブスクリプション型

月額固定料金に一定数のPDF生成が含まれ、超過分は追加課金。安定した利用量が見込める場合に最適。

3. OSS(セルフホスト)

ソフトウェアは無料ですが、サーバー・Docker・監視などのインフラコストがかかります。DevOpsリソースがあるチームに最適。

サービス別料金比較

FUNBREW PDF

2つのレンダリングエンジンとテンプレート機能、Webhook、メール送信を内蔵したマネージドAPI。

プラン 月額 含まれるPDF数 超過料金/件 エンジン
Free ¥0 30 Fast
Starter ¥1,300 200 ¥7 Fast
Basic ¥4,200 1,000 ¥4 Fast + Quality
Pro ¥11,500 5,000 ¥3 Fast + Quality

API呼び出し例:

const response = await fetch('https://api.pdf.funbrew.cloud/v1/pdf/from-html', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.FUNBREW_PDF_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    html: '<h1>請求書</h1><p>合計: ¥10,000</p>',
    engine: 'quality',
    format: 'A4',
  }),
});

注目ポイント:

  • 月30件の無料プラン — クレジットカード登録不要
  • デュアルエンジン(Fast: 高速、Quality: Chromium品質)
  • テンプレートエンジン、Webhook、メール送信が全プランに含まれる
  • 日本語フォント対応が追加コストなし

DocRaptor

Prince XMLエンジンを搭載した老舗PDF API。印刷品質の高さが特長。

プラン 月額 含まれるPDF数 超過料金/件
Free $0 5(テスト専用)
Basic $15 125 $0.12
Professional $29 325 $0.09
Premium $75 1,000 $0.075

特徴:

  • 印刷品質に優れたPrince XMLエンジン
  • 無料プランはテスト専用(透かし付き)
  • 1件あたりのコストは高めだが、印刷CSS対応が強力
  • テンプレートエンジンやメール送信機能はなし

PDFShift

Chromiumを使った軽量なHTML→PDF変換API。

プラン 月額 含まれるPDF数 超過料金/件
Free $0 50
Starter $9 500 $0.02
Boost $24 2,500 $0.01
Growth $39 5,000 $0.008

特徴:

  • 競争力のある無料プラン(月50件)
  • 大量生成時の単価が安い
  • Chromiumのみ
  • テンプレート機能やメール送信なし

CraftMyPDF(2026年追加)

テンプレートビルダー付きのPDF生成API。ノーコードでテンプレートを作れるのが特長。

プラン 月額 含まれるPDF数 テンプレート数
Free $0 100 3
Starter $9 500 無制限
Professional $29 5,000 無制限
Business $99 50,000 無制限

特徴:

  • ドラッグ&ドロップのテンプレートビルダー(コーディング不要)
  • 日本語フォントは手動設定が必要
  • 大量生成時のコスト効率が良い

APITemplate.io(2026年追加)

Zapier・Make(Integromat)との連携に強いPDF API。

プラン 月額 含まれるPDF数
Free $0 50
Lite $10 1,000
Pro $30 5,000
Plus $80 20,000

特徴:

  • Zapier・Make・n8nとのノーコード連携が強み
  • HTMLとJSONテンプレート両方に対応
  • 日本語フォントは別途設定が必要

セルフホスト(Gotenberg / Puppeteer)

OSSなのでソフトウェア自体は無料ですが、インフラコストがかかります。

項目 月額概算
サーバー(2 vCPU、4GB RAM) ¥3,000〜6,000
Docker / Kubernetes 含む、またはマネージドで¥7,000+
監視ツール(Datadog等) ¥1,500〜4,500
DevOps工数 月2〜8時間
合計 ¥4,500〜18,000+(人件費除く)

セルフホストの運用負荷についてはPuppeteerからAPIへの移行ガイドで詳しく解説しています。

ボリューム別コストシミュレーション

実際の利用量でどのくらいのコストになるかシミュレーションしました。

月100件(スタートアップ)

サービス プラン 月額
FUNBREW PDF Starter ¥1,300
CraftMyPDF Starter $9(約¥1,300)
PDFShift Starter $9(約¥1,300)
APITemplate.io Lite $10(約¥1,500)
DocRaptor Basic $15(約¥2,200)
セルフホスト 最小構成 ¥3,000+

月1,000件(成長企業)

サービス プラン 月額
FUNBREW PDF Basic ¥4,200
CraftMyPDF Professional $29(約¥4,200)
APITemplate.io Lite $10(約¥1,500)
PDFShift Boost + 超過 約$28(約¥4,100)
DocRaptor Premium $75(約¥11,000)
セルフホスト 中規模構成 ¥6,000+

月5,000件(大規模)

サービス プラン 月額
FUNBREW PDF Pro ¥11,500
CraftMyPDF Professional $29(約¥4,200)
APITemplate.io Pro $30(約¥4,400)
PDFShift Growth $39(約¥5,700)
DocRaptor カスタム $200+(約¥30,000+)
セルフホスト スケール構成 ¥12,000+

フリープランを試す

まず無料で動作確認したい場合はcurlで数秒以内にPDFを生成できます。クレジットカード登録不要です。

# 無料プランのAPIキーを取得後(/signup)、すぐに試せる
curl -X POST https://pdf.funbrew.cloud/api/v1/pdf/generate \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<h1>テスト請求書</h1><p>FUNBREW PDF 無料プランのテストです。</p>",
    "options": { "format": "A4" }
  }' \
  --output test.pdf

echo "生成完了: test.pdf"

無料プランで生成した件数は月次でリセットされます。APIのレスポンスヘッダー X-RateLimit-Remaining で残り件数を確認できます。

# レスポンスヘッダーで残り件数を確認
curl -X POST https://pdf.funbrew.cloud/api/v1/pdf/generate \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html": "<p>Hello</p>", "options": {}}' \
  -D - \
  --output /dev/null 2>&1 | grep -i "x-ratelimit"
# X-RateLimit-Limit: 30
# X-RateLimit-Remaining: 27
# X-RateLimit-Reset: 1748736000

月間使用量のトラッキング

APIのレスポンスをログに残しておくと、月末に請求が増えるのを事前に把握できます。以下はHTTPレスポンスのステータスコードと使用量を記録する実装例です。

// usage-tracker.js: API呼び出しをラップして使用量を記録する例
const fs = require('fs');
const path = require('path');

const USAGE_LOG = path.join(__dirname, 'pdf-usage.jsonl');

async function generatePdfWithTracking(html, options = {}) {
  const startTime = Date.now();

  const response = await fetch('https://pdf.funbrew.cloud/api/v1/pdf/generate', {
    method: 'POST',
    headers: {
      'X-API-Key': process.env.FUNBREW_PDF_API_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ html, options }),
  });

  const elapsed = Date.now() - startTime;

  // レスポンスヘッダーから使用量を取得
  const remaining = parseInt(response.headers.get('x-ratelimit-remaining') ?? '-1', 10);
  const limit     = parseInt(response.headers.get('x-ratelimit-limit')     ?? '-1', 10);

  // JSONL形式でログに追記(月末の集計や監視に使える)
  const entry = {
    ts:        new Date().toISOString(),
    ok:        response.ok,
    status:    response.status,
    ms:        elapsed,
    remaining,
    limit,
    used:      limit - remaining,
  };
  fs.appendFileSync(USAGE_LOG, JSON.stringify(entry) + '\n');

  if (!response.ok) {
    const body = await response.text();
    throw new Error(`PDF API error ${response.status}: ${body}`);
  }

  return Buffer.from(await response.arrayBuffer());
}

module.exports = { generatePdfWithTracking };
# usage_tracker.py: Python版の使用量トラッキング実装例
import json
import os
import time
from datetime import datetime
from pathlib import Path

import requests

USAGE_LOG = Path(__file__).parent / "pdf_usage.jsonl"
API_KEY   = os.environ["FUNBREW_PDF_API_KEY"]
API_URL   = "https://pdf.funbrew.cloud/api/v1/pdf/generate"


def generate_pdf_with_tracking(html: str, options: dict | None = None) -> bytes:
    start = time.monotonic()
    resp = requests.post(
        API_URL,
        headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
        json={"html": html, "options": options or {}},
    )
    elapsed_ms = int((time.monotonic() - start) * 1000)

    limit     = int(resp.headers.get("x-ratelimit-limit",     -1))
    remaining = int(resp.headers.get("x-ratelimit-remaining", -1))

    entry = {
        "ts":        datetime.utcnow().isoformat(),
        "ok":        resp.ok,
        "status":    resp.status_code,
        "ms":        elapsed_ms,
        "limit":     limit,
        "remaining": remaining,
        "used":      limit - remaining if limit >= 0 else -1,
    }
    with USAGE_LOG.open("a") as f:
        f.write(json.dumps(entry, ensure_ascii=False) + "\n")

    resp.raise_for_status()
    return resp.content

使用量ログを集計することで、翌月のプランアップグレードが必要かどうかを早期に判断できます。

コスト計算スクリプト

月間生成数を入力するだけで各サービスのコストを試算できるスクリプトです。

Node.js版

/**
 * PDF API コスト計算機
 * 使い方: node pdf-cost-calculator.js <月間生成数>
 * 例:    node pdf-cost-calculator.js 1500
 */

const PLANS = {
  funbrew: [
    { name: 'Free',    monthly: 0,      included: 30,   overage: 0 },
    { name: 'Starter', monthly: 1300,   included: 200,  overage: 7 },
    { name: 'Basic',   monthly: 4200,   included: 1000, overage: 4 },
    { name: 'Pro',     monthly: 11500,  included: 5000, overage: 3 },
  ],
  docraptor: [
    { name: 'Basic',        monthly: 2200,  included: 125,  overage: 18 },
    { name: 'Professional', monthly: 4300,  included: 325,  overage: 13 },
    { name: 'Premium',      monthly: 11000, included: 1000, overage: 11 },
  ],
  pdfshift: [
    { name: 'Free',    monthly: 0,    included: 50,   overage: 0 },
    { name: 'Starter', monthly: 1300, included: 500,  overage: 2.9 },
    { name: 'Boost',   monthly: 3500, included: 2500, overage: 1.5 },
    { name: 'Growth',  monthly: 5700, included: 5000, overage: 1.2 },
  ],
};

function calcCost(plan, volume) {
  if (volume <= plan.included) return plan.monthly;
  return plan.monthly + (volume - plan.included) * plan.overage;
}

function bestPlan(plans, volume) {
  return plans
    .map(p => ({ ...p, total: calcCost(p, volume) }))
    .filter(p => p.included >= volume || p.overage > 0)
    .sort((a, b) => a.total - b.total)[0];
}

function formatCost(yen) {
  return `¥${Math.round(yen).toLocaleString()}`;
}

const volume = parseInt(process.argv[2] ?? '500', 10);
console.log(`\n月間 ${volume.toLocaleString()} 件のPDF生成コスト比較\n`);
console.log('サービス          | 最適プラン        | 月額コスト');
console.log('------------------|-------------------|----------');

for (const [service, plans] of Object.entries(PLANS)) {
  const best = bestPlan(plans, volume);
  if (best) {
    const label = service.padEnd(17);
    const planName = best.name.padEnd(18);
    console.log(`${label} | ${planName}| ${formatCost(best.total)}`);
  }
}

console.log('\n※ 為替レート: $1 = ¥146 で計算(目安)');
console.log('※ FUNBREW PDFはテンプレート・メール送信・Webhookを含むオールインワン価格');

Python版

#!/usr/bin/env python3
"""
PDF API コスト計算機

使い方: python pdf_cost_calculator.py <月間生成数>
例:    python pdf_cost_calculator.py 1500
"""

import sys
from dataclasses import dataclass


@dataclass
class Plan:
    name: str
    monthly_yen: float
    included: int
    overage_yen: float  # 超過1件あたりの料金(円)


PLANS: dict[str, list[Plan]] = {
    "FUNBREW PDF": [
        Plan("Free",    0,     30,   0),
        Plan("Starter", 1300,  200,  7),
        Plan("Basic",   4200,  1000, 4),
        Plan("Pro",     11500, 5000, 3),
    ],
    "DocRaptor": [
        Plan("Basic",        2200,  125,  18),
        Plan("Professional", 4300,  325,  13),
        Plan("Premium",      11000, 1000, 11),
    ],
    "PDFShift": [
        Plan("Free",    0,    50,   0),
        Plan("Starter", 1300, 500,  2.9),
        Plan("Boost",   3500, 2500, 1.5),
        Plan("Growth",  5700, 5000, 1.2),
    ],
    "Self-hosted": [
        Plan("Minimum",  4500,  999999, 0),
        Plan("Standard", 10000, 999999, 0),
    ],
}


def calc_cost(plan: Plan, volume: int) -> float:
    if volume <= plan.included:
        return plan.monthly_yen
    return plan.monthly_yen + (volume - plan.included) * plan.overage_yen


def best_plan(plans: list[Plan], volume: int) -> Plan | None:
    eligible = [p for p in plans if p.included >= volume or p.overage_yen > 0]
    if not eligible:
        return None
    return min(eligible, key=lambda p: calc_cost(p, volume))


def main():
    volume = int(sys.argv[1]) if len(sys.argv) > 1 else 500

    print(f"\n月間 {volume:,} 件のPDF生成コスト比較\n")
    print(f"{'サービス':<18} {'最適プラン':<14} {'月額コスト':>12}")
    print("-" * 48)

    for service, plans in PLANS.items():
        plan = best_plan(plans, volume)
        if plan:
            cost = calc_cost(plan, volume)
            print(f"{service:<18} {plan.name:<14} ¥{cost:>10,.0f}")

    print("\n※ DocRaptor/PDFShift は $1=¥146 で換算(目安)")
    print("※ FUNBREW PDFはテンプレート・メール送信・Webhookを含むオールインワン価格")


if __name__ == "__main__":
    main()

実行例(月500件の場合):

月間 500 件のPDF生成コスト比較

サービス           最適プラン       月額コスト
------------------------------------------------
FUNBREW PDF        Basic          ¥     4,200
DocRaptor          Professional   ¥     7,575
PDFShift           Starter        ¥     2,670
Self-hosted        Minimum        ¥     4,500

料金以外の付加価値

1件あたりの料金だけでなく、含まれる機能も比較しましょう。

機能 FUNBREW PDF DocRaptor PDFShift Api2Pdf
テンプレートエンジン 含む なし なし なし
メール送信 含む なし なし なし
Webhook 含む なし あり なし
デュアルエンジン あり 単一 単一 複数
日本語フォント プリインストール 手動設定 手動設定 手動設定
セキュリティ機能 IP制限、自動削除 基本 基本 基本

テンプレートエンジンやメール送信を自前で構築すると、1件あたりの単価差はすぐに相殺されます。

選び方のガイド

FUNBREW PDFがおすすめ: テンプレート、メール送信、日本語対応までオールインワンで揃えたい場合。無料プラン(月30件)で事前評価できます。

PDFShiftがおすすめ: 大量生成で1件あたりのコストを最小化したい場合。テンプレートやメール機能が不要な場合。

DocRaptorがおすすめ: 印刷品質が最優先で予算に余裕がある場合。

セルフホストがおすすめ: DevOpsリソースがあり、完全なコントロールが必要な場合。

まずは無料で試す

FUNBREW PDFの無料プランはクレジットカード不要で、月30件までPDF生成が可能です。

# 数秒でPDF生成
curl -X POST https://api.pdf.funbrew.cloud/v1/pdf/from-html \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html": "<h1>Hello PDF</h1>", "engine": "fast"}' \
  -o output.pdf

Playgroundでブラウザから試すか、APIドキュメントで仕様を確認し、クイックスタートガイドのコード例から始めてみてください。

関連リンク

Powered by FUNBREW PDF