Isotope abundance calculator
Work back from an element's average atomic mass to the share of each of its two isotopes: chlorine at 35.453 u with isotopes of 34.9689 and 36.9659 u is 75.7586379569 % chlorine-35 and 24.2413620431 % chlorine-37. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Mass1
- 34.9689
- Mass2
- 36.9659
- Average atomic mass
- 35.453
- Fraction1
- 0.7575863796
- Fraction2
- 0.2424136204
- Abundance1 percent
- 75.7586379569
- Abundance2 percent
- 24.2413620431
Natural elements on the periodic table list an average atomic mass that is a weighted mean of the masses of their stable isotopes, not the mass of any single nucleus. When an element has two dominant isotopes with known masses m1 and m2, and the table lists average mass M, the mole fractions follow from M equals f1 times m1 plus f2 times m2 with f1 plus f2 equal to one. Solving gives f1 equals M minus m2 over m1 minus m2, and f2 equals one minus f1; percent abundance is each fraction times one hundred. This calculator applies that closed-form identity deterministically for homework, lab checks, and automated answer keys. It rejects equal isotope masses, which make the denominator zero, and rejects non-physical averages that would force a fraction outside zero to one.
How two-isotope abundance is calculated from average mass
Start from the definition of the elemental average atomic mass for a two-isotope system. If isotope 1 has mass m1 and fractional abundance f1, and isotope 2 has mass m2 and fractional abundance f2, the average mass reported on the periodic table is the weighted mean M equals f1 times m1 plus f2 times m2. The two fractions are atom or mole fractions of a natural sample and must sum to one, so f2 equals one minus f1.
Substitute to obtain M equals f1 times m1 plus one minus f1 times m2, which rearranges to M minus m2 equals f1 times m1 minus m2, and therefore f1 equals M minus m2 divided by m1 minus m2. The companion fraction is f2 equals m1 minus M divided by m1 minus m2, or simply one minus f1. Multiply each fraction by one hundred to report percent natural abundance.
Classic textbook checks include chlorine with m1 about thirty four point nine six eight nine, m2 about thirty six point nine six five nine, and M about thirty five point four five three, which yields roughly seventy six percent chlorine-35 and twenty four percent chlorine-37, and copper with m1 about sixty two point nine three, m2 about sixty four point nine three, and M about sixty three point five five, which yields roughly sixty nine percent copper-63 and thirty one percent copper-65.
Masses and the average must be finite and strictly positive. Entries that are missing, non-numeric, NaN, or Infinity also fail early so clients can fix input before charging.
What you send and what you get back
Send three required numeric fields. The field mass1 is the atomic mass of the first isotope in unified atomic mass units. The field mass2 is the atomic mass of the second isotope in the same unit.
All three must be finite positive numbers. Equal mass1 and mass2 values are rejected because the abundance formula divides by their difference. Averages that force a fraction outside zero to one are rejected as non-physical for a pure two-isotope model.
Order of the isotopes is your choice: swapping mass1 and mass2 simply swaps which percent is labeled one versus two; the pair of percentages is the same.
Where isotope abundance calculators show up in real work
Secondary-school and college general chemistry courses constantly assign two-isotope abundance drills using chlorine, bromine, copper, silver, or boron textbook masses, and teachers need a trusted oracle that returns both percentages next to the fractions for grading and demo setup. Lab courses that introduce mass spectrometry often reverse the problem: students measure peak heights, estimate average mass, then check that the implied abundances match known natural values within experimental error.
Industrial quality checks for certified reference materials sometimes recompute expected isotopic percentages from published average masses as a sanity gate before more expensive isotopic ratio mass spectrometry. If you later need multi-isotope fits with three or more species, radioactive decay half-lives, or full isotopic pattern simulation for molecules, treat those as separate search intents and landings rather than overloading this two-isotope abundance calculator page.
What you can do with it
Homework and exam answer keys
Generate both isotope percent abundances from textbook masses and the table average so teachers and auto-graders share one weighted-average ground truth.
Mass-spec lab cross-checks
Convert a measured average atomic mass and known isotope masses into expected natural percentages for chlorine, copper, or bromine lab reports.
FAQ
What happens if the two isotope masses are equal?
The formula divides by (mass1 − mass2), which is zero when the masses are equal, so no unique abundances exist.
Which units should I use?
Units cancel in the ratio, but all three values must share a consistent mass unit.
What does it cost?
The browser tool is free and runs locally.
What if the average mass is not between the two isotope masses?
The calculation is refused, because at least one abundance would fall below zero or above one hundred percent. A real average always lies between the two isotope masses, so check for a typo or swapped values.
Does it work for elements with three or more isotopes?
No. It solves the two-isotope case, where one average mass and two isotope masses fix both abundances. It suits elements dominated by two stable isotopes, such as chlorine or copper.
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/chem/isotope-abundance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mass1":34.9689,"mass2":36.9659,"average_atomic_mass":35.453}'const res = await fetch("https://api.kit.forhosting.com/chem/isotope-abundance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mass1": 34.9689,
"mass2": 36.9659,
"average_atomic_mass": 35.453
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/isotope-abundance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mass1": 34.9689,
"mass2": 36.9659,
"average_atomic_mass": 35.453
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/isotope-abundance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mass1":34.9689,"mass2":36.9659,"average_atomic_mass":35.453}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mass1":34.9689,"mass2":36.9659,"average_atomic_mass":35.453}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/isotope-abundance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"mass1": 34.9689,
"mass2": 36.9659,
"average_atomic_mass": 35.453
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.isotope_abundance",
"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. |
Technical notes
How two-isotope abundance is calculated from average mass
The pipeline is pure floating-point arithmetic with no network, no random seeds, and no wall-clock timestamps, so identical inputs always produce identical JSON. When m1 equals m2 the denominator vanishes and the request fails with invalid_input rather than inventing NaN or Infinity. When M lies outside the interval spanned by m1 and m2, at least one fraction would leave the unit interval and the request fails with a clear message that physical percent abundances require the average to lie between the isotope masses.
What you send and what you get back
The field average_atomic_mass is the element average mass from the periodic table, also in unified atomic mass units. On success the response echoes the cleaned masses and average, the unit fractions fraction1 and fraction2, the percent abundances abundance1_percent and abundance2_percent, a sum_percent check near one hundred, unit labels, method two_isotope_weighted_average, and the formula string f1 equals open parenthesis M minus m2 close parenthesis over open parenthesis m1 minus m2 close parenthesis. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance. String numbers that parse as finite values are accepted the same as JSON numbers so form posts and typed APIs behave alike.
Where isotope abundance calculators show up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Curriculum and contest fixtures
Bulk-produce two-isotope abundance pairs and catch equal masses or out-of-range averages with hard invalid_input instead of silent NaNs.
Technical questions
How are isotope percent abundances calculated?
For two isotopes, M = f1·m1 + f2·m2 with f1 + f2 = 1. Solve f1 = (M − m2)/(m1 − m2) and f2 = 1 − f1, then multiply each fraction by 100 for percent abundance.
What if the average mass is not between the two isotope masses?
The request fails with invalid_input. Physical two-isotope abundances must lie in [0, 100]%, which requires the average atomic mass to lie between m1 and m2 (inclusive of the 0%/100% endpoints).