Black-box recommendations ask you to trust the algorithm. Zone Forge asks you to read the formula, check the source, and reproduce it. If you can't, we haven't done our job.
Every number Zone Forge prints belongs to one of five tiers. Knowing which tier a number sits in is how you know whether to trust it, scrutinize it, or override it.
Numbers lifted directly from peer-reviewed extension publications.
Tri-State P critical level = 20 ppm
Corn P₂O₅ removal = 0.37 lb/bu
Deterministic formulas derived from Tier 1 inputs.
rate = removal × yield_goal
+ (target − soil)
× buildup_factor
/ buildup_years
Industry-standard practice values, overridable per organization.
buildup_years = 4
tie_up_factor = 10%
Inputs the farmer provides. Always overridable, always transparent.
yield_goal = 200 bu/ac
product_cost = $475/ton
philosophy = "Hybrid"
verified: falseNumbers we inferred where peer-reviewed data wasn't available. Always tagged so you know which to scrutinize.
// Lima bean P removal — outside corn-belt scope
removal: 0.42 # verified: false, source: industry estimate
Zone Forge maps each state to its own published land-grant source — 40-plus extension publications, plus a lime method calibrated for all 50 states. Three are shown here to make the method concrete; every other state on the map is sourced exactly the same way.
"A General Guide for Crop Nutrient and Limestone Recommendations in Iowa." Published by Iowa State University Extension.
"Tri-State Fertilizer Recommendations for Corn, Soybeans, Wheat, and Alfalfa," 2020 update. Ohio State, Purdue, and Michigan State.
Cornell's Nutrient Management Spear Program — New York's published P, K, and N guidance (Pdoc 2022, Kdoc 2024, Ndoc 2023). A different extractant and reporting unit entirely, calibrated for the Northeast — proof the map isn't three Corn-Belt tables wearing other names.
Three cards can't show a 50-state library. Your soil test is read against your state's own publication — K-State's Sikora calibration in Kansas, the Wisconsin A2809 six-category framework, Minnesota's MRTN nitrogen, NDSU's yield-goal equations in North Dakota, Texas A&M's four soil regions, UGA's Coastal-Plain-vs-Piedmont brackets, Montana State's Olsen-P tables, Utah State's NaHCO₃-potassium method, and Vermont's reactive-aluminum tables (the only U.S. lab on that method) — on through every state, each on its own university's extension source. Penn State's Mid-Atlantic guide and its Mehlich Buffer lime engine are in there too — see the lime section below. See how each state is sourced →
Upload a soil test and Zone Forge grades it for you — worst nutrient first, color- and word-coded, with variability hints and your fertility trend across past uploads.
In the 26 states whose extension labs publish rating words, we grade in that state's own language — Arkansas's "Very Low → Above Optimum," Delaware's Fertility Index Value, Oklahoma's "Low / Sufficient." In the other states, we show your measured value with a note on why we don't grade that lab format yet. An honest "measured" beats a wrong grade — a soil test run on a lab method our table isn't calibrated to degrades to "confirm your method" instead of mis-grading. pH and lime are calibrated for all 50 states, so that verdict shows everywhere.
The default Hybrid philosophy treats your soil-test value differently depending on which band it falls into. Below is the exact decision tree.
Hybrid is a true 3-zone system: build below the maintenance band, maintain in band, draw down above. The maintenance band is target ± 10% by default (configurable per field).
removal × yield_goal + (target − soil) × buildup_factor / buildup_years. The buildup is deficit-scaled: a zone testing far below target gets a much bigger bump than one just below the band, so adjacent variable-rate zones never collapse to the same flat number.removal × yield_goal. Replace exactly what the crop took out so the soil holds at target.removal × yield_goal × multiplier. The multiplier comes from the drawdown_level setting (default moderate). Under moderate, soil up to 1.25 × target gets 75%, soil up to 1.5 × target gets 50%, and soil above 1.5 × target gets 0.| drawdown_level | ratio ≤ 1.25 | 1.25 < ratio ≤ 1.5 | ratio > 1.5 |
|---|---|---|---|
| none | 100% | 100% | 100% |
| light | 75% | 75% | 0% |
| moderate (default) | 75% | 50% | 0% |
| aggressive | 25% | 0% | 0% |
ratio = soil ÷ target. Every constant — critical, target, removal, buildup_factor — comes from your selected source table. buildup_years, drawdown_level, and the maintenance tolerance are all overridable per field.
# Inputs yield_goal = 200 # bu/ac corn soil_p = 25 # ppm Mehlich-3 source = "Tri-State 2020" philosophy = "Hybrid" product = "DAP (18-46-0)" # From the source table critical_p = 15 # ppm (Tier 1, published) target_p = 30 # ppm (Tier 1, published) p2o5_removal = 0.37 # lb P₂O₅ / bu (Tier 1, published) buildup_factor = 10 # lb P₂O₅ / ppm (Tier 1, Tri-State) buildup_years = 4 # Tri-State default maint_tol_pct = 10 # maintenance band = target ± 10% drawdown_level = "moderate" # Maintenance band = target × (1 ± 10%) = 27.0 to 33.0 ppm # Decision: 25 ppm < 27.0 → BUILD (deficit-scaled) deficit_ppm = target_p - soil_p = 30 - 25 = 5 buildup = deficit_ppm * buildup_factor / buildup_years = 5 * 10 / 4 = 12.5 nutrient_rate = yield_goal * p2o5_removal + buildup = 200 * 0.37 + 12.5 = 86.5 # lb P₂O₅ / ac (Tier 2, computed) # Convert to product dap_analysis = 0.46 # 46% P₂O₅ in DAP (Tier 1, label) product_rate = nutrient_rate / dap_analysis = 86.5 / 0.46 = 188.04 # lb DAP / ac (Tier 2, computed) # Cost per acre — resolves field override → org Price Book → catalog default dap_cost = 475 # $/ton (Tier 4, user input) cost_per_ac = product_rate * dap_cost / 2000 = 188.04 * 475 / 2000 = 44.66 # $/ac
Every line is reproducible with a calculator. Every constant is sourced. Bring soil_p up to 30 ppm (exactly target) and the deficit goes to zero — the engine drops cleanly to 74 lb P₂O₅/ac (pure crop removal). Bump it to 40 ppm and you'd land in the drawdown band (40 / 30 ≈ 1.33, > 1.25 with moderate default) for a rate of 74 × 0.50 = 37 lb P₂O₅/ac. Change source to Iowa PM 1688 and you'll see different critical/target levels — because Iowa is calibrated to Bray-P1 and you're using Mehlich-3 values, the engine will refuse and offer to convert.
Liming is fundamentally different from N-P-K fertilization. The driver is the lab's reserve-acidity value (Mehlich Buffer Acidity for Penn State, Buffer pH for midwest crosswalks), the output is tons CaCO₃-equivalent per acre, and the product split is calcitic vs dolomitic — not which fertilizer maximises analysis %. We keep the code paths separate so the formulas never cross.
Mg ppm < 50 or Mg base saturation < 10% ⇒ dolomitic (corrects pH and Mg together). Otherwise calcitic. No Mg data ⇒ default to calcitic — safer than loading Mg into balanced soil. Thresholds are configurable per source via the dolomitic_if JSON block, not hardcoded.physical_tons = caco3_tons / (ecce / 100).Mg correction stays uncoupled. The fertilizer engine produces a Mg fertilizer rate when soil Mg is low (defaults: dolomitic lime when liming is also required, otherwise K-Mag / langbeinite). The lime engine uses Mg only to choose calcitic vs dolomitic. Epsom salt is tagged as specialty / advanced and is excluded from default recommendations — at field scale on row crops, it isn't the practical product.
# Worked example — corn, low pH, low Mg, Tri-State source measured_ph = 5.8 buffer_ph = 6.7 source = "Tri-State 2020" crop = "corn" mg_ppm = 40 # Resolve target pH (crop > profile > system default) target_ph = crop_target_pH["corn"] = 6.5 # provenance: crop # Lime required? 5.8 < 6.5 ⇒ yes tons_caco3 = lookup(buffer_ph=6.7) = 3.0 # tons CaCO₃-equivalent / ac # Source choice: Mg 40 < 50 ⇒ dolomitic recommended = "dolomitic" # Convert to dolomitic lime product (ECCE 85) product_rate = 3.0 / 0.85 = 3.53 # tons dolomitic lime / ac
Trust runs both ways. Here's what Zone Forge intentionally does not do today.
Per-source tables, per-nutrient defensibility, every formula with derivation, and the calculation FAQ.