Compost Carbon-to-Nitrogen Ratio Calculator
A productive compost pile needs enough carbon for energy and enough nitrogen for microbial growth.
Run — free
This calculator combines the quantities and typical carbon-to-nitrogen ratios of your brown and green ingredients, estimates the blended C:N ratio, and tells you whether it is within the commonly targeted 25:1 to 30:1 range. Add every material using one consistent quantity unit, such as kilograms, pounds, buckets, or wheelbarrow loads. The result includes a transparent contribution breakdown, making it easier to adjust a recipe before building or turning the pile.
Enter a consistent compost recipe
Separate the recipe into browns and greens, then add a row for each material. Browns are generally dry, carbon-rich inputs such as fallen leaves, shredded cardboard, straw, sawdust, or wood chips. Greens are generally fresher, nitrogen-rich inputs such as grass clippings, food scraps, coffee grounds, or manure. For each row, enter the amount and a typical C:N ratio from a source appropriate to that material. Every amount must use the same basis. You can use kilograms or pounds when weighing ingredients, or use buckets when measuring everything by volume, but do not mix a weight for one material with a volume for another and expect a precise result. A zero quantity is allowed when keeping a planned ingredient in the recipe, while a negative quantity is rejected because it has no physical meaning. Typical ratios are estimates: moisture, maturity, species, and storage conditions can change the actual composition. Treat the result as a practical planning estimate rather than a laboratory analysis of your exact feedstocks.
Understand the mass-balance calculation
The calculator does not take a simple weighted average of the C:N numbers. A ratio describes two constituent shares, so a material listed at 60:1 is treated as sixty carbon parts and one nitrogen part out of sixty-one total parts. Its estimated carbon fraction is therefore 60 divided by 61, and its nitrogen fraction is 1 divided by 61. Each fraction is multiplied by that material's quantity. The carbon contributions from all brown and green rows are added together, the nitrogen contributions are added separately, and total carbon is divided by total nitrogen to obtain the blended ratio. This mass-balance method correctly handles ingredients with very different ratios. The output reports carbon units, nitrogen units, the final ratio, and every row's contributions so the arithmetic can be inspected. Because the inputs are typical ratios rather than chemical measurements, the displayed precision is useful for repeatability but should not imply laboratory certainty. The group labels organize the recipe; both groups participate in exactly the same calculation.
Interpret and adjust the result
A blended result from 25:1 through 30:1, including both endpoints, is flagged as ideal. Below 25:1, the recipe is marked too nitrogen-rich. Such a pile may become dense, wet, odorous, or prone to ammonia loss, so adding a dry high-carbon brown can move the estimate upward while also improving structure. Above 30:1, the recipe is marked too carbon-rich. Decomposition may proceed slowly because microbes have relatively little nitrogen, so adding a suitable green can move the estimate downward. Make adjustments by changing realistic quantities and recalculating; do not change a material's typical ratio merely to force a desired answer. Ratio is only one part of successful composting. Moisture should resemble a wrung-out sponge, bulky particles should preserve airflow, and the pile needs enough volume and occasional turning to manage oxygen and heat. If the result looks ideal but the pile performs poorly, check those physical conditions and reconsider whether the typical ratios accurately represent the actual materials. The API costs $0.002 per request when you automate repeated recipe checks.
What you can do with it
Plan a backyard pile
Combine leaves, cardboard, grass, and kitchen scraps before layering them, then adjust the amounts toward the target range.
Compare seasonal feedstocks
Test recipes as available browns and greens change between leaf season, lawn season, and winter food-scrap collection.
Standardize a community recipe
Document a repeatable mixture for volunteers using consistent buckets, carts, or weighed quantities and a visible contribution breakdown.
FAQ
What is the ideal compost C:N ratio?
This calculator uses an inclusive target range of 25:1 through 30:1 for the blended starting materials.
Can I mix kilograms and buckets?
No. Use one consistent measurement basis for every quantity. Mixing weight and volume makes the relative quantities incomparable.
Why is this not a weighted average of the ratios?
A C:N ratio represents carbon and nitrogen shares. The calculator converts each ratio into those shares, totals each constituent, and divides total carbon by total nitrogen.
Are typical material ratios exact?
No. They vary with moisture, age, species, and handling. Use representative values for planning and laboratory measurements when exact composition matters.
What happens if a quantity is negative?
The request returns an invalid-input error because a negative amount cannot represent material present in a compost blend.
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/eco/compost-ratio-carbon-nitrogen \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"browns":[{"material":"Dry leaves","quantity":3,"cn_ratio":60},{"material":"Cardboard","quantity":1,"cn_ratio":350}],"greens":[{"material":"Grass clippings","quantity":2,"cn_ratio":17},{"material":"Kitchen scraps","quantity":1,"cn_ratio":20}]}'const res = await fetch("https://api.kit.forhosting.com/eco/compost-ratio-carbon-nitrogen", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"browns": [
{
"material": "Dry leaves",
"quantity": 3,
"cn_ratio": 60
},
{
"material": "Cardboard",
"quantity": 1,
"cn_ratio": 350
}
],
"greens": [
{
"material": "Grass clippings",
"quantity": 2,
"cn_ratio": 17
},
{
"material": "Kitchen scraps",
"quantity": 1,
"cn_ratio": 20
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/eco/compost-ratio-carbon-nitrogen",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"browns": [
{
"material": "Dry leaves",
"quantity": 3,
"cn_ratio": 60
},
{
"material": "Cardboard",
"quantity": 1,
"cn_ratio": 350
}
],
"greens": [
{
"material": "Grass clippings",
"quantity": 2,
"cn_ratio": 17
},
{
"material": "Kitchen scraps",
"quantity": 1,
"cn_ratio": 20
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/eco/compost-ratio-carbon-nitrogen", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"browns":[{"material":"Dry leaves","quantity":3,"cn_ratio":60},{"material":"Cardboard","quantity":1,"cn_ratio":350}],"greens":[{"material":"Grass clippings","quantity":2,"cn_ratio":17},{"material":"Kitchen scraps","quantity":1,"cn_ratio":20}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"browns":[{"material":"Dry leaves","quantity":3,"cn_ratio":60},{"material":"Cardboard","quantity":1,"cn_ratio":350}],"greens":[{"material":"Grass clippings","quantity":2,"cn_ratio":17},{"material":"Kitchen scraps","quantity":1,"cn_ratio":20}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/eco/compost-ratio-carbon-nitrogen", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"browns": [
{
"material": "Dry leaves",
"quantity": 3,
"cn_ratio": 60
},
{
"material": "Cardboard",
"quantity": 1,
"cn_ratio": 350
}
],
"greens": [
{
"material": "Grass clippings",
"quantity": 2,
"cn_ratio": 17
},
{
"material": "Kitchen scraps",
"quantity": 1,
"cn_ratio": 20
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "eco.compost_ratio_carbon_nitrogen",
"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_materials_per_group | 100 |
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. |