Richter magnitude from amplitude calculator
A 1 mm trace amplitude recorded 100 km from the epicentre gives a local magnitude of 3, after a distance correction of 3. Each tenfold rise in amplitude at the same distance adds one magnitude unit. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Amplitude mm
- 1
- Distance km
- 100
- Magnitude ml
- 3
- Attenuation correction
- 3
- Interpolation
- log_distance
This Richter magnitude from amplitude calculator estimates local magnitude, written M_L, from a seismograph's maximum zero-to-peak trace amplitude and the earthquake's epicentral distance. Enter amplitude in millimetres and distance in kilometres. The calculator applies the logarithm of amplitude and the standard distance attenuation correction, interpolating between table entries when necessary. It rejects zero or negative amplitude because a logarithmic magnitude cannot be computed from those values.
What local Richter magnitude measures
Local magnitude was designed to turn the motion recorded by a seismograph into a compact number that can be compared across nearby earthquakes. The measurement begins with the maximum zero-to-peak excursion on the trace, expressed here in millimetres. Amplitude alone is not enough: seismic waves weaken as they travel, so the same trace amplitude recorded farther from an epicentre implies a larger source event.
This calculator therefore combines two observations, amplitude and epicentral distance, using M_L equals log base ten of amplitude plus a distance-dependent attenuation correction. A tenfold increase in amplitude adds one magnitude unit when distance remains unchanged. A larger distance also raises the correction because more wave energy has been lost before reaching the station.
The returned magnitude is dimensionless, while the response repeats the normalized millimetre and kilometre inputs and reports the correction that was applied. Treat this as the classic local-magnitude estimate for a standard instrument response. Modern seismic agencies often combine many calibrated stations and may use region-specific attenuation relationships, instrument corrections, filtering, and quality controls, so their reviewed catalog magnitude can differ from a single-trace classroom result.
How to enter amplitude and distance
If a worksheet supplies micrometres, divide by one thousand before submitting; for example, one thousand micrometres is one millimetre. Do not enter peak-to-peak width unless the exercise explicitly defines that as its amplitude: for a symmetric trace, peak-to-peak is twice the zero-to-peak amplitude and would change the logarithmic result. The amplitude must be a finite number greater than zero.
Zero is rejected explicitly because log base ten of zero is not finite, and a negative value is rejected because amplitude is a magnitude of displacement rather than a signed direction. The supported table spans 10 through 1000 kilometres inclusive. Values outside that interval are rejected instead of silently extrapolated, since extending a local attenuation curve beyond its table would imply unsupported accuracy.
Keeping the units explicit prevents the common thousandfold amplitude mistake that shifts magnitude by three complete units.
How the attenuation table is applied
The calculation stores a fixed attenuation table whose distance knots run from 10 to 1000 kilometres. Each correction represents minus log base ten of the reference amplitude A0 for that distance when trace amplitude is measured in millimetres. At an exact knot, the listed correction is used directly; at 100 kilometres, for example, the correction is 3.0, so a one-millimetre trace gives M_L equal to log10(1) plus 3.0, or 3.0.
When distance falls between knots, the calculator interpolates linearly in log10 distance. Log-distance interpolation respects the logarithmic character of attenuation better than treating equal kilometre gaps as equal physical changes, and the response labels the interpolation method so automated users need not infer it. The calculation uses no network, random sampling, current date, or hidden station data, so identical inputs always return identical output.
For research or public safety decisions, use reviewed agency solutions and a calibrated regional model rather than relying on this educational two-input estimate alone.
What you can do with it
Check a seismology exercise
Verify a hand calculation that supplies maximum trace amplitude and epicentral distance.
Screen field notes
Make a quick preliminary comparison of standard-amplitude observations before calibrated review.
FAQ
Why is zero amplitude rejected?
Local magnitude uses log10 of amplitude. The logarithm of zero is not finite, so no Richter magnitude can be computed.
Can amplitude be negative?
No. Trace direction may be signed, but maximum amplitude is an absolute displacement magnitude and must be greater than zero.
Which units should I use?
Use millimetres for maximum zero-to-peak trace amplitude and kilometres for epicentral distance.
What happens between attenuation-table distances?
The correction is interpolated linearly in log10 distance between the two surrounding table knots.
What distances can I enter?
Epicentral distances from 10 to 1000 kilometres, both included. Values outside that range are rejected rather than extrapolated, because stretching the local attenuation table beyond its limits would suggest accuracy it does not have.
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/earth/richter-from-amplitude \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"amplitude_mm":1,"distance_km":100}'const res = await fetch("https://api.kit.forhosting.com/earth/richter-from-amplitude", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"amplitude_mm": 1,
"distance_km": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/earth/richter-from-amplitude",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"amplitude_mm": 1,
"distance_km": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/earth/richter-from-amplitude", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"amplitude_mm":1,"distance_km":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"amplitude_mm":1,"distance_km":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/earth/richter-from-amplitude", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"amplitude_mm": 1,
"distance_km": 100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "earth.richter_from_amplitude",
"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
Use the browser tool for lessons, field-note checks, and worked examples, or call the deterministic API for $0.002 per successful item when repeatable output matters.
How to enter amplitude and distance
Enter the maximum zero-to-peak trace amplitude as amplitude_mm. Enter epicentral distance as distance_km, using the surface distance from the recording station to the epicentre rather than focal depth or straight-line hypocentral distance. Numeric fields must be actual finite JSON numbers: missing fields, text tokens, NaN, and infinity all produce invalid_input.
How the attenuation table is applied
Through the API, each successful item costs $0.002; rejected validation requests do not create a plausible-looking magnitude.
Integration use cases
Build deterministic teaching fixtures
Generate repeatable local-magnitude examples for lessons, quizzes, and automated tests.
Technical questions
What does the calculator cost?
It runs free in the browser. Each successful API item costs $0.002.