Subsidy incidence calculator
A subsidy may be paid to one side of a market, but its economic benefit is not necessarily kept by that side.
Run — free
This calculator estimates subsidy incidence from the relative price elasticities of demand and supply. Enter the subsidy per unit, the absolute magnitude of demand elasticity, and supply elasticity. The result reports the buyer and seller shares as decimals and percentages, then converts those shares into each side's gain per unit. It is a transparent comparative-statics estimate for competitive markets, not a forecast of every market adjustment.
Read subsidy incidence as an economic split
Statutory receipt and economic benefit are different ideas. A government may send a per-unit subsidy to sellers, yet competition can cause part of it to reach buyers through a lower price. The reverse is also possible when a subsidy is formally claimed by buyers: sellers may capture part through a higher price received. This calculator focuses on the economic split. It reports a buyer share and a seller share that add to one, along with the gain per unit for each side. A buyer gain means the price buyers effectively pay falls relative to the no-subsidy benchmark. A seller gain means the net price sellers receive rises. The two gains add to the subsidy per unit, subject only to displayed rounding. These results describe incidence at the margin in the standard competitive-market model. They do not depend on which side completes the paperwork, because the relative responsiveness of demand and supply determines who can avoid an unfavorable price adjustment more easily.
Use elasticity magnitudes consistently
Enter demand elasticity as an absolute, nonnegative magnitude. Demand elasticity is often printed with a negative sign because quantity demanded usually falls when price rises, but the incidence formula compares magnitudes. Therefore, if a source reports demand elasticity as minus 0.6, enter 0.6. Supply elasticity is normally reported as nonnegative and can be entered directly. The buyer share equals supply elasticity divided by the sum of supply elasticity and the demand-elasticity magnitude. The seller share equals the demand magnitude divided by that same sum. This apparently crossed relationship is important: the less elastic side receives more of the benefit. When supply is highly elastic relative to demand, sellers readily adjust quantity and buyers capture more through a lower purchase price. When demand is highly elastic relative to supply, buyers readily adjust quantity and sellers capture more. A zero elasticity is allowed for one side and represents a perfectly inelastic limiting case, but both elasticities cannot be zero because their relative shares would then be undefined.
Interpret the estimate within its assumptions
The calculation is most useful as a clear baseline for a competitive market and a relatively small policy change. It assumes the entered elasticities are relevant near the market's current equilibrium and that a per-unit subsidy creates a wedge between the price buyers pay and the net price sellers receive. Real programs can depart from that setting. Eligibility rules, price controls, market power, taxes, capacity constraints, delayed entry, informal transactions, and administrative costs can change the observed division. Elasticities may also vary across time, locations, products, or income groups. For a large subsidy, a constant-elasticity approximation may hide movements along nonlinear curves. Treat each reported gain as an incidence estimate per traded unit, not as total welfare, fiscal cost, or a prediction of total quantity. To estimate aggregate transfers, analysts still need an appropriate post-policy quantity. To evaluate welfare, they also need changes in consumer surplus, producer surplus, government expenditure, and any external benefits or costs. The API request costs $0.002; the same deterministic arithmetic supports repeatable scenario comparisons.
What you can do with it
Compare policy scenarios
Change demand or supply elasticity assumptions to see how the estimated benefit split responds before building a broader fiscal model.
Explain who benefits
Turn an abstract elasticity result into buyer and seller percentages plus gains in currency units per transaction.
Check an incidence calculation
Verify a spreadsheet, classroom exercise, policy memo, or market analysis with a deterministic implementation of the standard formula.
FAQ
Does it matter whether buyers or sellers legally receive the subsidy?
Not in the standard competitive incidence model. The relative elasticities determine the economic split, regardless of which side receives the statutory payment.
Should demand elasticity be entered as a negative number?
No. Enter its absolute nonnegative magnitude. For example, an elasticity reported with a minus sign should be entered without that sign.
Why does the less elastic side gain more?
The less elastic side changes quantity less readily in response to price, so equilibrium price adjustment directs more of the subsidy benefit to that side.
Can one elasticity be zero?
Yes. A zero value represents a perfectly inelastic limiting case. Both values cannot be zero because no relative incidence share can then be calculated.
Does the result measure total welfare or government cost?
No. It reports benefit per unit. Total fiscal cost requires quantity, while welfare analysis requires additional information about surplus, quantity changes, and external effects.
What does an API calculation cost?
Each API request costs $0.002. The calculation is also suitable for free browser execution because it uses deterministic local arithmetic.
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/econ/subsidy-incidence-share \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"subsidy_per_unit":10,"demand_elasticity":0.5,"supply_elasticity":1.5}'const res = await fetch("https://api.kit.forhosting.com/econ/subsidy-incidence-share", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"subsidy_per_unit": 10,
"demand_elasticity": 0.5,
"supply_elasticity": 1.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/econ/subsidy-incidence-share",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"subsidy_per_unit": 10,
"demand_elasticity": 0.5,
"supply_elasticity": 1.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/econ/subsidy-incidence-share", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"subsidy_per_unit":10,"demand_elasticity":0.5,"supply_elasticity":1.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"subsidy_per_unit":10,"demand_elasticity":0.5,"supply_elasticity":1.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/econ/subsidy-incidence-share", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"subsidy_per_unit": 10,
"demand_elasticity": 0.5,
"supply_elasticity": 1.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "econ.subsidy_incidence_share",
"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.
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. |