> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sqd.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Pricing Overview

> SQD Cloud pricing overview — subscription tiers and pay-as-you-go pricing for squid hosting, Postgres addons, RPC proxy, and storage usage.

export const CostCalculator = () => {
  const computePrices = {
    api: {
      small: 0.048,
      medium: 0.096,
      large: 0.18,
      xlarge: 0.36,
      "2xlarge": 0.72
    },
    processor: {
      small: 0.048,
      medium: 0.096,
      large: 0.18,
      xlarge: 0.36,
      "2xlarge": 0.72
    },
    database: {
      small: 0.096,
      medium: 0.192,
      large: 0.396,
      xlarge: 0.792,
      "2xlarge": 1.584
    }
  };
  const storagePricePerGB = 0.6;
  const collocatedComputePrice = 0.024;
  const rpcPricePerMillion = 5;
  const rpcFreeMonthly = 2000000;
  const hoursPerMonth = 720;
  const clampInt = (v, min, max = Number.MAX_SAFE_INTEGER) => Number.isFinite(v) ? Math.min(Math.max(Math.trunc(v), min), max) : min;
  const clampFloat = (v, min, max = Number.MAX_SAFE_INTEGER) => Number.isFinite(v) ? Math.min(Math.max(v, min), max) : min;
  const formatCurrency = n => new Intl.NumberFormat(undefined, {
    style: "currency",
    currency: "USD",
    maximumFractionDigits: 2
  }).format(n);
  const [squidType, setSquidType] = useState("dedicated");
  const [apiProfile, setApiProfile] = useState("small");
  const [apiReplicas, setApiReplicas] = useState(1);
  const [processorProfile, setProcessorProfile] = useState("small");
  const [processorCount, setProcessorCount] = useState(1);
  const [databaseProfile, setDatabaseProfile] = useState("small");
  const [storageGB, setStorageGB] = useState(50);
  const [rpcRequestsM, setRpcRequestsM] = useState(0);
  const [hibernated, setHibernated] = useState(false);
  const rpcRequests = (rpcRequestsM || 0) * 1000000;
  const computeCost = (() => {
    if (hibernated) return 0;
    if (squidType === "collocated") {
      return collocatedComputePrice * hoursPerMonth;
    }
    const apiCost = computePrices.api[apiProfile] * clampInt(apiReplicas || 1, 1) * hoursPerMonth;
    const processorCost = computePrices.processor[processorProfile] * clampInt(processorCount || 1, 1) * hoursPerMonth;
    const databaseCost = computePrices.database[databaseProfile] * hoursPerMonth;
    return apiCost + processorCost + databaseCost;
  })();
  const storageCost = clampFloat(storageGB || 0, 0) * storagePricePerGB;
  const rpcCost = (() => {
    const req = clampInt(rpcRequests, 0);
    if (req <= rpcFreeMonthly) return 0;
    const excess = req - rpcFreeMonthly;
    return excess / 1000000 * rpcPricePerMillion;
  })();
  const totalCost = computeCost + storageCost + rpcCost;
  const profileOptions = ["small", "medium", "large", "xlarge", "2xlarge"];
  return <div className="not-prose w-full my-6 sm:my-8">
      <div className="border border-gray-200 dark:border-gray-700 rounded-xl overflow-hidden bg-white dark:bg-gray-900 shadow-sm">
        <div className="bg-gradient-to-r from-blue-50 to-indigo-50 dark:from-gray-800 dark:to-gray-800 px-6 py-4 border-b border-gray-200 dark:border-gray-700">
          <h3 className="text-xl font-semibold text-gray-900 dark:text-gray-100">Cost Calculator</h3>
          <p className="text-sm text-gray-600 dark:text-gray-400 mt-1">Estimate your monthly costs (pricing effective April 1, 2026)</p>
        </div>

        <div className="p-6">
          <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
            <div className="space-y-4">
              <div>
                <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                  Squid Type
                </label>
                <select value={squidType} onChange={e => setSquidType(e.target.value)} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent">
                  <option value="dedicated">Dedicated</option>
                  <option value="collocated">Collocated (Development)</option>
                </select>
              </div>

              <div className="flex items-center p-3 bg-gray-50 dark:bg-gray-800 rounded-lg">
                <input type="checkbox" id="hibernated" checked={hibernated} onChange={e => setHibernated(e.target.checked)} className="w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500" />
                <label htmlFor="hibernated" className="ml-3 text-sm font-medium text-gray-700 dark:text-gray-300">
                  Hibernated (storage only)
                </label>
              </div>

              {squidType === "dedicated" && !hibernated && <>
                  <div className="pt-2 border-t border-gray-200 dark:border-gray-700">
                    <h4 className="text-sm font-semibold text-gray-900 dark:text-gray-100 mb-3">API Configuration</h4>
                    <div className="space-y-3">
                      <div>
                        <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                          Profile
                        </label>
                        <select value={apiProfile} onChange={e => setApiProfile(e.target.value)} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent">
                          {profileOptions.map(opt => <option key={opt} value={opt}>{opt}</option>)}
                        </select>
                      </div>
                      <div>
                        <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                          Replicas
                        </label>
                        <input type="number" min="1" value={apiReplicas} onChange={e => setApiReplicas(e.target.value === '' ? '' : Number(e.target.value))} onBlur={e => setApiReplicas(e.target.value === '' ? 1 : Number(e.target.value))} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
                      </div>
                    </div>
                  </div>

                  <div className="pt-2 border-t border-gray-200 dark:border-gray-700">
                    <h4 className="text-sm font-semibold text-gray-900 dark:text-gray-100 mb-3">Processor Configuration</h4>
                    <div className="space-y-3">
                      <div>
                        <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                          Profile
                        </label>
                        <select value={processorProfile} onChange={e => setProcessorProfile(e.target.value)} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent">
                          {profileOptions.map(opt => <option key={opt} value={opt}>{opt}</option>)}
                        </select>
                      </div>
                      <div>
                        <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                          Count
                        </label>
                        <input type="number" min="1" value={processorCount} onChange={e => setProcessorCount(e.target.value === '' ? '' : Number(e.target.value))} onBlur={e => setProcessorCount(e.target.value === '' ? 1 : Number(e.target.value))} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
                      </div>
                    </div>
                  </div>

                  <div className="pt-2 border-t border-gray-200 dark:border-gray-700">
                    <h4 className="text-sm font-semibold text-gray-900 dark:text-gray-100 mb-3">Database Configuration</h4>
                    <div>
                      <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                        Profile
                      </label>
                      <select value={databaseProfile} onChange={e => setDatabaseProfile(e.target.value)} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent">
                        {profileOptions.map(opt => <option key={opt} value={opt}>{opt}</option>)}
                      </select>
                    </div>
                  </div>
                </>}
            </div>

            <div className="space-y-4">
              <div>
                <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                  Storage (GB)
                </label>
                <input type="number" min="0" step="1" value={storageGB} onChange={e => setStorageGB(e.target.value === '' ? '' : Number(e.target.value))} onBlur={e => setStorageGB(e.target.value === '' ? 0 : Number(e.target.value))} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
              </div>

              <div>
                <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
                  RPC Requests (millions/month)
                </label>
                <input type="number" min="0" step="0.1" value={rpcRequestsM} onChange={e => setRpcRequestsM(e.target.value === '' ? '' : Number(e.target.value))} onBlur={e => setRpcRequestsM(e.target.value === '' ? 0 : Number(e.target.value))} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
                <p className="mt-1.5 text-xs text-gray-500 dark:text-gray-400">
                  First 2M requests/month are free
                </p>
              </div>

              <div className="pt-4">
                <div className="bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-800 dark:to-gray-800 rounded-lg p-4 border border-blue-100 dark:border-gray-700">
                  <h4 className="text-sm font-semibold text-gray-900 dark:text-gray-100 mb-3">Cost Breakdown</h4>
                  <div className="space-y-2">
                    <div className="flex justify-between text-sm">
                      <span className="text-gray-600 dark:text-gray-400">
                        Compute {hibernated ? "(hibernated)" : "(24/7)"}
                      </span>
                      <span className="font-semibold text-gray-900 dark:text-gray-100">{formatCurrency(computeCost)}</span>
                    </div>
                    <div className="flex justify-between text-sm">
                      <span className="text-gray-600 dark:text-gray-400">Storage ({clampFloat(storageGB || 0, 0)} GB)</span>
                      <span className="font-semibold text-gray-900 dark:text-gray-100">{formatCurrency(storageCost)}</span>
                    </div>
                    {rpcRequests > rpcFreeMonthly && <div className="flex justify-between text-sm">
                        <span className="text-gray-600 dark:text-gray-400">
                          RPC ({((rpcRequests - rpcFreeMonthly) / 1000000).toFixed(1)}M excess)
                        </span>
                        <span className="font-semibold text-gray-900 dark:text-gray-100">{formatCurrency(rpcCost)}</span>
                      </div>}
                    <div className="flex justify-between pt-3 mt-3 border-t border-blue-200 dark:border-gray-600">
                      <span className="text-base font-bold text-gray-900 dark:text-gray-100">Total Monthly Cost</span>
                      <span className="text-lg font-bold text-blue-600 dark:text-blue-400">{formatCurrency(totalCost)}</span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>;
};

<Warning>
  **Pricing Update:** Effective April 1, 2026, Cloud hosting prices will increase by 20% and RPC add-on pricing will update to \$5 per 1M requests. [Learn more about these changes](/en/other/pricing-update-april-2026).
</Warning>

SQD Cloud uses a transparent pay-as-you-go pricing model. You only pay for the compute and storage resources your squids consume. Data from the SQD Network is provided free of charge, with no hidden fees or data egress costs.

<Tip>
  Use our interactive cost calculator below to estimate your monthly costs based
  on your specific requirements. Estimates use pricing effective April 1, 2026.
</Tip>

## Estimate Your Costs

<CostCalculator />

## Free Tier

<Info>
  Each account includes a free playground
  [organization](/en/cloud/resources/organizations) where you can deploy a
  single squid at no cost. This is perfect for testing, learning, and small
  projects. See [playground
  organization](/en/cloud/resources/organizations#playgrounds) for limitations
  and details.
</Info>

## Professional Organizations

To deploy production-ready squids with full [resource configuration](/en/cloud/reference/scale), upgrade to a [Professional organization](/en/cloud/resources/organizations#professional-organizations). Professional status unlocks powerful features and generous allowances:

<CardGroup cols={2}>
  <Card title="Unlimited API Requests" icon="infinity">
    No metering or throttling on GraphQL API requests. Scale your application without worrying about query limits.
  </Card>

  <Card title="Flexible Deployment Options" icon="server">
    Deploy unlimited [dedicated](/en/cloud/reference/scale#dedicated) and
    [collocated](/en/cloud/reference/scale#dedicated) squids with full control
    over compute profiles.
  </Card>

  <Card title="Generous RPC Allowance" icon="network-wired">
    2 million [RPC addon](/en/cloud/resources/rpc-proxy) requests included
    monthly, then `$2` per additional million requests (until March 31, 2026) or `$5` per additional million requests (from April 1, 2026).
  </Card>

  <Card title="Priority Support" icon="headset">
    Get faster response times and dedicated assistance from our support team for production issues.
  </Card>
</CardGroup>

## Billing Details

Billing is based on actual resource consumption and occurs monthly, typically on the first day of each month. You're only charged for the hours your squids are running and the storage they use.

<Note>
  All compute resources are billed hourly. If you deploy a squid mid-month,
  you'll only pay for the actual hours it runs, not the full month.
</Note>

## Enterprise Plans

<Tip>
  Need custom SLAs, volume discounts, or dedicated infrastructure? We offer
  enterprise plans tailored to high-volume use cases. [Book a
  demo](https://calendly.com/t-tyrie-subsquid/30min) to discuss your
  requirements and get a personalized quote.
</Tip>

## Next Steps

Ready to dive into the details? Check out our [Pricing Details & Examples](/en/cloud/pricing/pricing-details) page for complete pricing tables, profile specifications, and real-world cost calculations.
