Logo
New RPC users get 35% off their first monthView the offer
OnFinality Learn
Infrastructure & Operations10 min read

Quicknode Pricing: Modeling Credit-Based RPC Costs Before You Commit

A reproducible method for translating Quicknode's credit-based pricing into a monthly cost estimate, with instrumentation, a worked calculation template, and troubleshooting for surprise bills.

TL;DR

Quicknode bills RPC usage in API credits rather than flat requests, and the credit weight of a call depends on the chain and the method, with advanced and specialized calls costing multiples of the base rate. That means a headline monthly price tells you very little until you know your own request mix. This article gives you a reproducible procedure: instrument your workload, classify each call by chain and method, apply the published credit weights, and project monthly spend under realistic traffic scenarios. It also covers where the model breaks down, how to sanity-check the result, and when a different provider or a dedicated deployment is the better comparison.

Why a Quicknode price tag is not a cost estimate

Quicknode's pricing is usage-based and measured in API credits. The published credit tables assign a base weight per chain — for example, many EVM chains sit at one tier while Solana, Tron, and zkSync sit at a higher tier, and NEAR higher still — and then apply multipliers for advanced APIs and specialized calls. A eth_getBalance and a trace_replayTransaction on the same chain do not consume the same budget.

The practical consequence: two teams paying the same monthly invoice can have wildly different request volumes, because their method mixes differ. If you are evaluating Quicknode pricing for a new workload, the only defensible number is one you derive from your own traffic profile. This article is a methodology, not a rate card; always confirm current plan tiers, included credits, and per-method weights on the provider's own pricing and API-credits pages before signing anything.

If your actual question is simply which endpoint to use for a given network, that is a short recommendation rather than a cost-modeling exercise — see the RPC endpoint guidance and the API service overview.

  • Credits are weighted per chain, not per request.
  • Advanced and specialized methods carry multipliers on top of the chain weight.
  • Free tiers and promotional allowances change the effective floor, not the marginal cost.
  • Plan inclusions and overage rates are contractual details you must read on the provider's site.

Assumptions and prerequisites for a credible estimate

Before measuring, write down the assumptions you are testing. At minimum you need: the chains you will call, the RPC methods your application actually issues, your expected requests per second at peak and average, and whether you need archive data, WebSocket subscriptions, or advanced APIs such as tracing and token metadata.

You also need a traffic source. If the application is already live on another provider, export a representative window of logs — 24 hours on a normal weekday plus one peak hour is usually enough. If it is pre-launch, instrument a staging environment and drive it with a load generator that mirrors your expected call graph. Do not estimate from a single happy-path request; production traffic is dominated by polling loops, retries, and wallet refresh calls.

Finally, decide your unit of comparison. Credits are only comparable across providers if you convert them to a common denominator such as cost per 1,000 balance reads or cost per million log queries. That conversion is the whole point of the exercise.

The credit model as a mental model

Think of each request as credits = chain_weight × method_multiplier. The chain weight is a property of the network you are querying; the multiplier is a property of the method. A standard read on a mid-tier chain costs one unit of the chain weight; a trace call costs several times that. Key-value store operations and Streams or webhook lookups are billed on their own schedules, so they belong in a separate line item rather than the RPC total.

This multiplicative structure has an important implication for optimization. Reducing request count by 50% halves your bill only if the mix stays constant. Replacing a batch of expensive trace calls with a cached result can cut spend far more than halving a high-volume cheap method. Cost work on RPC is therefore mostly a method-mix problem, not a raw-volume problem.

It also explains why per-request comparisons between providers are misleading. A provider that charges a flat rate per request will look cheap for trace-heavy workloads and expensive for balance-polling workloads, and vice versa for a credit model. Normalize to your mix before comparing.

Instrumenting your workload to capture the request mix

You need a log line per RPC call containing the chain, the method name, and a timestamp. If you already proxy your RPC traffic, add the fields there. If not, a thin wrapper around your client is enough. The Node.js example below wraps a JSON-RPC fetch call and emits a structured record you can aggregate later.

Run this against staging or a mirrored production window. The goal is a count table of (chain, method) → requests, not latency data — though the same log will give you latency for free.

// rpc-meter.js — wrap JSON-RPC calls and log chain + method
const RPC_URL = process.env.RPC_URL; // e.g. your provider endpoint
const CHAIN = process.env.CHAIN_LABEL || "ethereum";

async function rpc(method, params = []) {
  const started = Date.now();
  const res = await fetch(RPC_URL, {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
  });
  const body = await res.json();
  // Emit one JSON line per call; ship to your log pipeline.
  console.log(JSON.stringify({
    ts: new Date().toISOString(),
    chain: CHAIN,
    method,
    ok: !body.error,
    ms: Date.now() - started,
  }));
  if (body.error) throw new Error(body.error.message);
  return body.result;
}

module.exports = { rpc };

Aggregating the mix into a monthly projection

With logs in hand, aggregate counts per (chain, method) over your sample window, then scale to 30 days. The Python snippet reads newline-delimited JSON logs and produces a projection table. It deliberately does not embed credit weights — you supply them from the provider's published tables so the script never goes stale.

The output is a table you can paste into a spreadsheet alongside the current credit weights. Multiply each row's projected request count by its weight, sum, and compare against the included credits in each plan tier. The difference, priced at the overage rate, is your marginal monthly cost.

# project_credits.py — aggregate rpc-meter logs into a monthly projection
import json, sys
from collections import Counter
from datetime import datetime

counts = Counter()
first = last = None

with open(sys.argv[1]) as f:
    for line in f:
        rec = json.loads(line)
        ts = datetime.fromisoformat(rec["ts"].replace("Z", "+00:00"))
        first = ts if first is None or ts < first else first
        last = ts if last is None or ts > last else last
        counts[(rec["chain"], rec["method"])] += 1

window_hours = max((last - first).total_seconds() / 3600, 1)
scale = (24 * 30) / window_hours  # project to a 30-day month

print(f"window_hours={window_hours:.2f} scale={scale:.2f}")
print(f"{'chain':<12}{'method':<32}{'sample':>8}{'monthly':>12}")
for (chain, method), n in counts.most_common():
    print(f"{chain:<12}{method:<32}{n:>8}{int(n * scale):>12}")

A worked calculation template and results table

Fill the table below from your own projection. The weight column comes from the provider's published chain and method tables; projected_requests comes from the script above; credits is their product. Leave the numbers blank until you have measured them — an invented figure is worse than no figure, because it anchors a budget decision on fiction.

ChainMethodProjected requests / monthCredit weightCredits / month
ethereumeth_getBalance(measured)(from table)(product)
ethereumeth_getLogs(measured)(from table)(product)
solanagetAccountInfo(measured)(from table)(product)
solanagetProgramAccounts(measured)(from table)(product)
ethereumtrace_replayTransaction(measured)(from table)(product)
Totalsum

Once the total is in credits, subtract the credits included in each candidate plan and multiply the remainder by the overage rate. Run the calculation three times: average traffic, peak-hour-sustained traffic, and a 2× growth scenario. The spread between those three numbers is the real risk in the pricing decision, not the average alone.

Verifying the projection against a real billing cycle

A projection is only trustworthy once it has been checked against an invoice. The verification procedure is short: deploy the instrumented client to production for one full billing cycle, export the provider's usage report for the same period, and compare total credits consumed against your projected total. A discrepancy under roughly 10% is normal and usually explained by retries or background jobs you did not model.

If the discrepancy is larger, break it down by method. The most common causes are unlogged calls from a second client, WebSocket subscription traffic that your HTTP wrapper never sees, and advanced API calls that your application makes indirectly through an SDK. Reconcile method by method before adjusting the model; adjusting the total without finding the source just hides the error.

Record the verified ratio of credits to requests for your workload. That single number — your effective credits per request — is the most useful figure you can carry into future capacity planning, because it stays stable as long as your method mix does.

Troubleshooting unexpected spend

When the bill exceeds the projection, work through the causes in order of likelihood. First, check for retry storms: a client with aggressive retries against a rate-limited endpoint can multiply request counts several-fold without any change in user traffic. Second, check polling intervals — a wallet balance refreshed every second instead of every fifteen seconds is a 15× cost increase on that method alone. Third, check for accidental use of expensive methods, such as a debug or trace call left in a health check.

Fourth, confirm which chain tier each call actually hits. A multi-chain application that routes everything through one endpoint may be paying a higher chain weight than expected if the endpoint is configured for a costlier network. Fifth, audit any advanced API usage — token metadata, NFT, or trace endpoints carry multipliers that are easy to overlook when they are called from a library rather than your own code.

Finally, verify that the usage report and your logs cover the same time zone and billing boundary. Off-by-one-day reconciliation errors are common and produce phantom overages.

  • Retry storms and missing backoff.
  • Polling intervals shorter than the data changes.
  • Expensive methods in health checks or warm-up paths.
  • Wrong chain tier for multi-chain routing.
  • Indirect advanced API calls from SDKs.
  • Billing-period and time-zone mismatches.

Limitations of the credit model and when to compare differently

Credit pricing is a good fit for workloads with a stable, well-understood method mix and a need for many chains. It is a poor fit for workloads dominated by a single expensive method, where a flat-rate or dedicated arrangement may be cheaper and far easier to forecast. It is also awkward for spiky traffic, because the peak determines your plan tier while the average determines your satisfaction with the price.

For high, sustained volume on one or two chains, the comparison should shift from per-credit arithmetic to capacity planning: what does a dedicated deployment cost, and what latency and isolation does it buy? See the dedicated node options and the RPC pricing overview for the structural comparison, and the network coverage list to confirm the chains you need are supported before you model anything.

One more limitation worth stating plainly: published weights change. Any model you build should read weights from a configuration file rather than hard-coding them, so a pricing update is a one-line change instead of a rewrite.

Next steps: turning the model into a decision

You now have three artifacts: an instrumented client, a projection table, and a verified credits-per-request ratio. Use them in this order. First, reduce the method mix — cache what does not change, lengthen polling intervals, and remove expensive calls from hot paths. Second, re-run the projection to see how much of the bill is structural versus incidental. Third, compare the reduced projection against at least one alternative model, whether that is a different provider's flat rate or a dedicated deployment.

If the remaining question is which endpoint or provider to use for a specific network rather than how to model cost, hand that to the RPC Assistant, which is built for short, direct recommendations. For the broader operational picture — failover, monitoring, and multi-provider routing — the blockchain node hosting guide and the multi-chain endpoint guide cover the parts of the decision that pricing arithmetic cannot.

Never Worry about Infrastructure Again

OnFinality takes away the heavy lifting of DevOps so you can build smarter and faster.

Get Started