diff --git a/docs/elements.md b/docs/elements.md
new file mode 100644
index 0000000000000000000000000000000000000000..96f5dff4638149479851a3e937e88ed5a7795c23
--- /dev/null
+++ b/docs/elements.md
@@ -0,0 +1,80 @@
+# Geomagnetic Elements
+
+
+
+## Obsrio
+Elements generated by observatories running the Obsrio data acquisition system.
+
+### Acquired elements
+
+- 10Hz volt + bin
+  - U, V, W
+
+- 1Hz engineering units
+  - F, T1-4
+
+### Derived variation
+
+- 1Hz engineering units
+
+  - U, V, W conversion from 10Hz volt+bin to 1Hz engineering units
+
+    uses instrument metadata from `geomagio.Metadata.get_instrument`
+
+- 1 minute engineering units
+
+  - T1-4
+
+    uses `geomagio.algorithm.FilterAlgorithm` to filter from 1Hz to 1 minute.
+
+
+## PCDCP
+Elements generated by observatories running the PCDCP data acquisition system.
+
+### Acquired elements
+
+- 1Hz legacy engineering units
+
+  - H, E, Z, F
+
+- 1 minute legacy engineering units
+
+### Derived variation
+
+- 1Hz engineering units
+
+  - U, V, W, F copied from legacy engineering units
+
+- 1 minute engineering units
+
+  - T1-4 copied from legacy engineering units
+
+
+## Common
+
+Derived elements calculated for all observatories.
+
+## Derived variation
+
+- 1Hz engineering units
+  - H, D, X, Y
+
+    uses `geomagio.algorithm.XYZAlgorithm` to rotate coordinates from observatory (U,V) to magnetic (H,D) and geographic (X,Y).
+
+- 1 minute engineering units
+
+  - U, V, W, F, T1-4
+
+    uses `geomagio.algorithm.FilterAlgorithm` to filter from 1Hz to 1 minute.
+
+
+## Derived adjusted
+
+- 1Hz engineering units
+  - X, Y, Z, F
+
+    uses `geomagio.algorithm.AdjustedAlgorithm` with per-observatory matrices stored in filesystem.
+
+- 1 minute engineering units
+
+    uses `geomagio.algorithm.FilterAlgorithm` to filter from 1Hz to 1 minute.