Website ad revenue calculator
100,000 monthly page views with a 2% click-through rate and 0.5 per click bring 2,000 clicks and an estimated 1,000 a month in ad revenue. Change any of the three to test a traffic plan. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Monthly page views
- 100,000
- Click through rate
- 2
- Cost per click
- 0.5
- Monthly clicks
- 2,000
- Monthly revenue
- 1,000
Website ad revenue is the money a publisher earns when visitors click ads on the site. The identity is monthly page views times click-through rate as a percent of one hundred, times cost per click, in the same currency as the click price. Zero traffic, a zero rate, or a zero click price is valid and yields zero. Arithmetic is deterministic, with no network, no sampling, and no clock.
What ad revenue means and what you get
Website ad revenue is the publisher-side product of traffic, click propensity, and click price over a planning month. Monthly page views are the counted loads of pages that can show ads in that month, not unique visitors and not sessions. Click-through rate is the percent of those views that produce a click; a rate of two means two clicks per hundred views, not a fraction of one.
Cost per click is the average amount an advertiser pays for one of those clicks in a single currency unit. Multiplying the three numbers, with the rate divided by one hundred so a percent becomes a fraction, yields estimated monthly revenue. Negative page views and negative cost per click are also rejected.
There is no hidden fill-rate, viewability filter, network haircut, or currency conversion: the engine either scales three finite numbers or rejects the input. The native period is a month, so you do not have to invent a thirty-day multiplier yourself before you can quote a run-rate.
What you can do with it
Independent publisher traffic models
Turn last month's page views, a realistic click-through rate, and a conservative cost per click into an estimated monthly revenue figure before you buy more content or hosting.
Agency decks and sponsorship pitches
Put the same three inputs into a slide so the revenue line is arithmetic, not a screenshot, and so a negative view count or a CTR typed above one hundred is rejected instead of silently inflating the month.
FAQ
Why are negative page views, click-through rates, or click prices rejected?
A revenue identity is defined for non-negative traffic, rate, and click price; a negative number is not billed and is not turned into a signed refund.
Is click-through rate entered as a percent or as a fraction of one?
As a percent of page views. Enter 2 for two clicks per hundred views.
Does this pull live earnings from an ad network account?
No. It is a deterministic product of the three numbers you send. There is no network call, no fill-rate, and no account login. Use your network's own report if you need booked revenue.
Should I enter page views or unique visitors?
Page views: the counted loads of pages that can show ads during the month. Unique visitors and sessions are different measures and do not belong in this estimate.
Does the estimate allow for fill rate or the network's share?
No. There is no hidden fill rate, viewability filter, network cut or currency conversion. The result is simply views times click-through rate times cost per click, so apply any haircut yourself.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/fin/website-ad-revenue \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"monthly_page_views":100000,"click_through_rate":2,"cost_per_click":0.5}'const res = await fetch("https://api.kit.forhosting.com/fin/website-ad-revenue", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"monthly_page_views": 100000,
"click_through_rate": 2,
"cost_per_click": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/website-ad-revenue",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"monthly_page_views": 100000,
"click_through_rate": 2,
"cost_per_click": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/website-ad-revenue", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"monthly_page_views":100000,"click_through_rate":2,"cost_per_click":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"monthly_page_views":100000,"click_through_rate":2,"cost_per_click":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/website-ad-revenue", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"monthly_page_views": 100000,
"click_through_rate": 2,
"cost_per_click": 0.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.website_ad_revenue",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_abs_value | 1000000000000000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
This website ad revenue calculator accepts those three publisher-side numbers and returns the estimated monthly revenue, the implied monthly click count, and the formula string so a spreadsheet or API client can reprint the identity next to the figure. Any negative page-view count, click-through rate, or cost per click fails with invalid_input, because a revenue model is not a signed refund ledger. Use it free in the browser, or call the API at $0.002 per successful item for traffic models, pitch decks, and dashboards that must reprint the same estimate every time.
What website ad revenue means and what the response contains
This calculator returns the echoed inputs, the implied monthly click count, monthly revenue, and the formula string so a worksheet or API client can show the identity next to the number. Click-through rate outside the closed interval from zero to one hundred is rejected with invalid_input, because a percent cannot be negative and cannot exceed one hundred.
How monthly page views, click-through rate, and cost per click are read
Optional leading plus signs and scientific notation on numeric strings are allowed when they parse as finite decimals; embedded spaces, hex prefixes, and non-numeric tokens are rejected with a clear message so a bad cell does not become a wrong revenue figure. Zero for any of the three inputs is valid and simply yields zero monthly clicks and zero monthly revenue: a site with no traffic, no clicks, or a reported click price of zero earns nothing in this identity. Any negative monthly page-view count or negative cost per click is also rejected so the model stays a revenue estimator rather than a signed ledger of refunds. The preferred fields are monthly_page_views for counted ad-eligible loads in one planning month, click_through_rate for the percent of those views that become clicks, and cost_per_click for the average advertiser payment per click in one currency unit, but aliases page_views, pageviews, views, pv, and monthly_views for views, ctr, click_through, ctr_percent, and ctr_pct for the rate, and cpc, click_cost, and cpc_usd for the click price are accepted so spreadsheets, query strings, and typed forms can reuse the same contract. Click-through rate must lie in the closed interval from zero to one hundred; if the rate is negative or greater than one hundred, the request fails with invalid_input because a percent outside that range is not a click-through rate. Pair the free browser run on this page with the priced API when you need the identical mathematical result inside an automated pipeline without re-implementing the website ad revenue identity yourself.
Where website ad revenue thinking fits in publishing, planning, and software
People meet website ad revenue thinking when a blogger asks whether one hundred thousand monthly page views at a two percent click-through rate and a fifty-cent click still covers hosting, when a niche publisher models next year's traffic target before commissioning more articles, or when an agency puts a conservative cost per click into a client deck so the revenue slide is arithmetic rather than a screenshot from yesterday's dashboard. Homework and interview practice often needs a fast, offline source of the views-times-rate-times-click product so solutions can be checked without opaque spreadsheet macros under time pressure. This identity is not a substitute for a live ad-network report, a fill-rate audit, or a tax return that includes other income, but it is the number every publisher worksheet already prints next to monthly page views. Growth engineers call the same contract from scripts to seed deterministic test vectors for publisher dashboards, to normalize user-entered views and rates before a recommendation demo, or to satisfy product-challenge statements that demand a monthly_revenue field rather than a hand-waved income claim. On this page the work runs entirely in your browser; through the API each successful lookup costs $0.002, failed validation is not charged, and nothing is stored after the response returns. That split — free interactive exploration and a priced, identical API — matches the rest of the KIT tier-A catalog and lets you move from a classroom demo to an automated pipeline without changing the mathematical result. Pair it with other finance endpoints when you are building a small lab of free, deterministic advertising and publisher-economics helpers that stay honest about what they scale.
Integration use cases
Dashboard fixtures and interview drills
Seed tests and worksheets with a deterministic monthly revenue equal to views times CTR over one hundred times CPC so graders and CI never disagree on a hand-computed earnings figure.
Technical questions
How do I estimate website ad revenue from monthly page views, CTR, and CPC?
Send finite numbers monthly_page_views (non-negative), click_through_rate (0 to 100 inclusive, as a percent), and cost_per_click (non-negative). The API returns monthly_revenue = views × (CTR/100) × CPC, plus monthly_clicks and the formula string.
What does a website ad revenue calculator request cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.