Engineering time is hidden
Browser upgrades, failed deploys and incident response are labor. Setting the input to zero is valid only when that work is genuinely absorbed by an already-owned platform.
Comparisons often price one browser invocation against one API credit and omit the actual ownership boundary: upgrades, failed jobs, queueing, security, observability and on-call time.
A confident annual-savings number whose result changes completely when one hidden engineering-hours assumption is made visible.
A transparent comparison is a small formula. Keep inputs editable and show annual totals without declaring either result universally cheaper.
const months = 12;
const browserAttempts = Math.ceil(
requestsPerMonth * (1 - cacheHitPercent / 100)
);
const billableApiRuns = Math.ceil(
browserAttempts * (1 - failurePercent / 100)
);
const diyAnnual = months * (
browserAttempts * browserMinutesPerRun * computePerMinute
+ storageAndEgressPerMonth
+ engineeringHoursPerMonth * loadedHourlyRate
);
const apiAnnual = months * (
apiSubscriptionPerMonth
+ apiOveragePerThousand * Math.ceil(Math.max(0, billableApiRuns - includedCredits) / 1000)
);
console.table({ billableApiRuns, diyAnnual, apiAnnual });Browser upgrades, failed deploys and incident response are labor. Setting the input to zero is valid only when that work is genuinely absorbed by an already-owned platform.
A cached repeat or failed capture consumes no PageCapture credit. Compare billable successful renders, not page views or caller retries.
An API does not replace unrestricted CDP, multi-browser tests or a human-driven login. A lower number is irrelevant if the workload does not fit the contract.
Do not monetize an outage with an invented universal rate. Show operational boundaries separately and let the team apply its own risk tolerance.
An editable annual comparison with every monetary and workload assumption visible, plus the billable API run count used in the calculation.
One successful, non-cached capture costs one credit. Failures, including platform failures, cost zero; cache hits cost zero.
The representative workload needs an option or interaction outside the public contract.
HTTP 400 · terminal
Successful non-cached volume exceeds included credits and the configured hard limit.
HTTP 400 · terminal
These defaults are an example scenario, not a benchmark. Change every workload and price input. The model counts cache hits as free on both sides, charges DIY compute for failed attempts, and charges API credits only for successful non-cached captures.
With these assumptions, the API model is lower by $769.00 per month. The break-even allowance is 0.31 engineering hours/month.
Excludes taxes, discounts, incident losses and currency conversion. Cost does not decide capability fit: keep DIY when the browser is core infrastructure or the API contract cannot express the job.
The runner above carries this exact configuration into the playground — no retyping, no starting over.
Written by PageCapture Engineering. Reviewed by PageCapture product and billing maintainers. Verified 2026-08-12 by running the published code against a fixture.
Calculator arithmetic is unit-tested against plan prices, success-only billing, free cache hits and 1,000-credit overage rounding; the representative recipe is normalized and syntax-checked.
Sources support the browser and API behaviors named above. PageCapture-specific limits and billing are taken from the public contract; external sources are used for the underlying browser behavior.
Provides the contractual subscription, credit and overage inputs.
Defines which repeated captures are free and how cache identity works.
Defines the browser installation responsibility retained by DIY deployments.
Replace example API inputs with the current published plan.
Estimate the deployment responsibilities behind engineering hours.
Decide whether retry and idempotency are marginal or new platform work.
Estimate billable runs from real repeat behavior.