{"zip": "91905", "static_generated_utc": "2026-10-16T18:26:28Z", "location": {"lat": 32.678648, "lon": -116.307485, "source": "US Census Bureau 2023 Gazetteer, ZCTA internal point", "zcta": "91905", "kind": "zcta", "place": "Boulevard", "state": "CA", "state_name": "California", "county": "San Diego", "place_source": "GeoNames postal codes (CC BY 4.0)", "runtime_s": 0.1, "station_ref": {"lat": 32.6719, "lon": -116.32, "kind": "GeoNames place point (town center)"}, "elevation_m": 1174.0, "elevation_point": "GeoNames place point (town center)", "elevation_source": "USGS 3DEP Elevation Point Query Service, sampled at the town center so a hilltop inside a large ZIP area does not skew it"}, "zone": {"zone": "9a", "temp_range_f": "20 to 25", "file": "phzm_zip.csv", "source": "USDA Plant Hardiness Zone Map 2023, ZIP datasets (USDA ARS + PRISM Climate Group, Oregon State University)", "url": "https://planthardiness.ars.usda.gov/", "runtime_s": 0.0}, "frost_dates": {"frost_free": false, "last_spring_32f_50pct": "04/29", "last_spring_32f_10pct": "06/01", "first_fall_32f_50pct": "11/01", "first_fall_32f_10pct": "10/05", "growing_season_days_50pct": 184, "notes": "10pct spring = only 1 in 10 years has a 32F freeze later; 10pct fall = 1 in 10 years has one earlier.", "station": {"id": "USW00003164", "name": "CA CAMPO ASOS", "distance_km": 14.8, "years": 22, "elevation_m": 805.0, "elevation_diff_m": -369, "coast_km": 62.3}, "zip_coast_km": 76.6, "source": "NOAA NCEI U.S. Climate Normals 1991-2020, annual/seasonal freeze probabilities (32F)", "zip_elevation_m": 1174.0, "skipped": ["USC00045968: only 13 yrs"], "selection": "stations within 80 km, same side of the coastal/inland divide (TIGER coastline, 40 km zone); among those within 40 km and 300 m (~984 ft) of the ZIP's elevation, the nearest with >=28 years of record (long records are usually less affected by recent urban growth), else the nearest with >=15; if none, the closest in elevation, flagged", "elevation_flag": "nearest usable station differs in elevation by 1,211 ft", "excluded_stations": ["USC00044412: JULIAN CDF is a warm outlier: median 32F dates 03/27 and 12/01 vs Cuyamaca 04/19 and 10/27, Henshaw Dam 04/18 and 10/26, Campo 04/30 and 10/26, Palomar Mtn 04/29 and 11/18; Jan normal low 39F vs 33F at Cuyamaca (likely thermal-belt siting, 22-yr record)"], "alternatives": [{"id": "USC00041424", "name": "CA CAMPO", "distance_km": 14.9, "years": 27}, {"id": "USC00042239", "name": "CA CUYAMACA                           HCN", "distance_km": 43.3, "years": 25}, {"id": "USC00043914", "name": "CA HENSHAW DAM", "distance_km": 75.1, "years": 23}], "runtime_s": 1.0}, "static_runtime_s": 1.7, "daily_generated_utc": "2026-10-17T16:10:52Z", "forecast": {"days": [{"pop_pct": 10, "high_f": 65, "low_f": 56, "gust_mph": 37, "qpf_in": 0.0, "date": "2026-10-17", "source": "NWS", "missing": null, "frost": false, "high_wind": false}, {"pop_pct": 0, "high_f": 69, "low_f": 57, "gust_mph": 24, "qpf_in": 0.0, "date": "2026-10-18", "source": "NWS", "missing": null, "frost": false, "high_wind": false}, {"pop_pct": 1, "high_f": 70, "low_f": 53, "gust_mph": 18, "qpf_in": 0.0, "date": "2026-10-19", "source": "NWS", "missing": null, "frost": false, "high_wind": false}, {"pop_pct": 16, "high_f": 66, "low_f": 50, "gust_mph": 24, "qpf_in": 0.0, "date": "2026-10-20", "source": "NWS", "missing": null, "frost": false, "high_wind": false}, {"pop_pct": 44, "high_f": 60, "low_f": 47, "gust_mph": 33, "qpf_in": 0.06, "date": "2026-10-21", "source": "NWS", "missing": null, "frost": false, "high_wind": false}, {"pop_pct": 44, "high_f": 57, "low_f": 45, "gust_mph": 32, "qpf_in": 0.05, "date": "2026-10-22", "source": "NWS", "missing": null, "frost": false, "high_wind": false}, {"pop_pct": 3, "high_f": 58, "low_f": 47, "gust_mph": 23, "qpf_in": 0.0, "date": "2026-10-23", "source": "NWS", "missing": null, "frost": false, "high_wind": false}], "source": "NOAA National Weather Service api.weather.gov (7-day forecast + gridpoint wind gusts)", "flags": {"frost": "low <= 32F", "high_wind": "max gust >= 40 mph"}, "timezone": "America/Los_Angeles", "nws_office": "SGX", "grid": [88, 7], "state": "CA", "qpf_source": "NWS gridpoint quantitativePrecipitation", "any_frost": false, "runtime_s": 1.2}, "soil_temp": {"kind": "modeled", "depth": "mean of 6 cm and 18 cm model layers (~4-5 in)", "daily_avg_f": 65.0, "date": "2026-10-16", "trend_7d_f": [72.0, 63.8, 59.0, 57.2, 58.5, 61.7, 65.0], "change_7d_f": -7.0, "source": "Open-Meteo forecast API soil model (non-commercial terms)", "measured_attempt": "no operational USCRN within 60 km and 300 m elevation", "zip_elevation_m": 1159.0, "runtime_s": 1.0}, "chill": {"error": "NoStation: not enough nearby data: no hourly weather station within 40 km on the same side of the coastal/inland divide", "expected": true}, "daily_runtime_s": 5.7, "schema": "ddg-zip/1.0", "rain": {"season_start": "10-01", "season_kind": "water year (Oct 1\u2013Sep 30)", "as_of": "2026-10-13", "last_report": "2026-10-13", "fill": {"error": "no in-band ASOS/CIMIS station with daily precipitation", "skipped": []}, "this_season": {"inches": 2.32, "days": 13, "days_recorded": 13, "coverage_pct": 100.0, "start": "2026-10-01", "end": "2026-10-13"}, "last_season_by_date": {"inches": 0.1, "days": 13, "days_recorded": 13, "coverage_pct": 100.0, "start": "2025-10-01", "end": "2025-10-13"}, "normal_by_date_in": 0.2, "normal_season_in": 15.58, "last_season_full": {"inches": 11.32, "days": 365, "days_recorded": 365, "coverage_pct": 100.0, "start": "2025-10-01", "end": "2026-09-30"}, "station": {"id": "USC00041424", "name": "CA CAMPO", "distance_km": 14.9, "elevation_m": 801.6, "elevation_diff_m": -372, "coast_km": 62.1}, "zip_coast_km": 76.6, "elevation_flag": "nearest usable station differs in elevation by 1,221 ft", "source": "NOAA NCEI GHCN-Daily (observed PRCP, quality-flagged values excluded); NOAA NCEI U.S. Climate Normals 1991\u20132020, daily (YTD-PRCP-NORMAL)", "selection": "same station rules as frost dates (within 80 km, same coastal/inland side, nearest within 40 km and 300 m elevation first); station must have 1991\u20132020 daily precipitation normals, a GHCN-Daily report within 21 days and >= 90% of days recorded last season", "skipped": ["USW00003164: last report 2020-10-26 (stale)"], "runtime_s": 3.2}, "calendar": {"region": "sd_mountain", "label": "San Diego County, mountains (900 m / ~3,000 ft and up)", "analog": true, "sources": [{"name": "University of Arizona Cooperative Extension Yavapai County, Bulletin #51 'Yavapai County Vegetable Planting Dates' (updated 2025-07-25), 3000-4500 ft column: used as an analog for San Diego's mountains", "url": "https://extension.arizona.edu/sites/default/files/2025-07/YavapaiCountyVegetablePlantingDates-2.pdf"}], "crops": {"peas": {"name": "Peas", "basis": "source", "plant": [false, true, true, false, false, false, false, true, true, true, false, false], "harvest": [true, true, true, true, true, true, true, true, false, true, true, true], "plant_text": "Feb\u2013Mar, Aug\u2013Oct", "harvest_text": "Oct\u2013Aug", "dth": [60, 150]}, "lettuce": {"name": "Leaf lettuce", "basis": "source", "plant": [false, false, true, true, false, false, true, true, true, false, false, false], "harvest": [false, false, true, true, true, true, true, true, true, true, true, false], "plant_text": "Mar\u2013Apr, Jul\u2013Sep", "harvest_text": "Mar\u2013Nov", "dth": [30, 90]}, "spinach": {"name": "Spinach", "basis": "source", "plant": [false, true, true, true, false, false, true, true, false, false, false, false], "harvest": [false, false, true, true, true, true, true, true, true, true, true, false], "plant_text": "Feb\u2013Apr, Jul\u2013Aug", "harvest_text": "Mar\u2013Nov", "dth": [30, 90]}, "radish": {"name": "Radish", "basis": "source", "plant": [false, false, true, true, true, false, true, true, true, false, false, false], "harvest": [false, false, true, true, true, true, true, true, true, true, true, false], "plant_text": "Mar\u2013May, Jul\u2013Sep", "harvest_text": "Mar\u2013Nov", "dth": [30, 60]}, "carrots": {"name": "Carrots", "basis": "source", "plant": [false, false, true, true, true, false, false, false, false, false, false, false], "harvest": [false, false, false, true, true, true, true, true, false, false, false, false], "plant_text": "Mar\u2013May", "harvest_text": "Apr\u2013Aug", "dth": [60, 100]}, "potatoes": {"name": "Potatoes", "basis": "source", "plant": [false, false, false, false, true, true, false, false, false, false, false, false], "harvest": [false, false, false, false, false, false, false, true, true, false, false, false], "plant_text": "May\u2013Jun", "harvest_text": "Aug\u2013Sep", "dth": [90, 120]}, "kale": {"name": "Kale", "basis": "source", "plant": [false, true, true, false, false, false, false, true, true, false, false, false], "harvest": [false, false, false, true, true, true, false, false, true, true, true, true], "plant_text": "Feb\u2013Mar, Aug\u2013Sep", "harvest_text": "Apr\u2013Jun, Sep\u2013Dec", "dth": [60, 90]}, "garlic": {"name": "Garlic", "basis": "source", "plant": [false, false, false, false, false, false, false, false, true, true, true, false], "harvest": [false, true, true, true, true, true, false, false, false, false, false, false], "plant_text": "Sep\u2013Nov", "harvest_text": "Feb\u2013Jun", "dth": [150, 210]}, "tomatoes": {"name": "Tomatoes (transplants)", "basis": "frost-relative", "note": "start at the ZIP's average last frost (Yavapai: 'after last spring frost or use frost protection'); end = average first fall frost minus 120 days (maximum days-to-harvest), our derivation", "plant": [false, false, false, true, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, true, true, true, true, true, false, false], "plant_text": "Apr\u2013Jul", "harvest_text": "Jun\u2013Oct", "dth": [50, 120]}, "peppers": {"name": "Peppers (transplants)", "basis": "frost-relative", "note": "start 2-3 weeks after the ZIP's average last frost when soil is at least 65F (Yavapai); end = average first fall frost minus 120 days, our derivation", "plant": [false, false, false, false, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, false, false, true, true, true, true, false], "plant_text": "May\u2013Jul", "harvest_text": "Aug\u2013Nov", "dth": [90, 120]}, "basil": {"name": "Basil", "flag": "no sourced planting dates for this area"}, "beans": {"name": "Snap beans", "basis": "source", "plant": [false, false, false, true, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, true, true, true, true, true, false, false], "plant_text": "Apr\u2013Jul", "harvest_text": "Jun\u2013Oct", "dth": [60, 90]}, "corn": {"name": "Sweet corn", "basis": "source", "plant": [false, false, false, false, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, false, true, true, true, true, false, false], "plant_text": "May\u2013Jul", "harvest_text": "Jul\u2013Oct", "dth": [70, 90]}, "squash": {"name": "Summer squash / zucchini", "basis": "source", "plant": [false, false, false, false, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, false, true, true, true, true, false, false], "plant_text": "May\u2013Jul", "harvest_text": "Jul\u2013Oct", "dth": [60, 90]}, "cucumber": {"name": "Cucumber", "basis": "source", "plant": [false, false, false, false, true, true, false, false, false, false, false, false], "harvest": [false, false, false, false, false, false, true, true, true, false, false, false], "plant_text": "May\u2013Jun", "harvest_text": "Jul\u2013Sep", "dth": [60, 90]}, "broccoli": {"name": "Broccoli (transplants)", "basis": "source", "plant": [false, false, false, true, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, false, true, true, true, true, false, false], "plant_text": "Apr\u2013Jul", "harvest_text": "Jul\u2013Oct", "dth": [90, 100]}, "eggplant": {"name": "Eggplant (transplants)", "basis": "source", "plant": [false, false, false, false, true, true, false, false, false, false, false, false], "harvest": [false, false, false, false, false, false, true, true, true, true, false, false], "plant_text": "May\u2013Jun", "harvest_text": "Jul\u2013Oct", "dth": [70, 120]}, "beets": {"name": "Beets", "basis": "source", "plant": [false, false, true, true, true, false, false, false, false, false, false, false], "harvest": [false, false, false, true, true, true, true, true, false, false, false, false], "plant_text": "Mar\u2013May", "harvest_text": "Apr\u2013Aug", "dth": [60, 80]}, "chard": {"name": "Swiss chard", "basis": "source", "plant": [false, true, true, true, false, false, true, true, true, false, false, false], "harvest": [false, false, false, true, true, true, true, false, true, true, true, true], "plant_text": "Feb\u2013Apr, Jul\u2013Sep", "harvest_text": "Apr\u2013Jul, Sep\u2013Dec", "dth": [60, 90]}, "cabbage": {"name": "Cabbage (transplants)", "basis": "source", "plant": [false, false, true, true, true, false, true, true, false, false, false, false], "harvest": [false, false, false, false, false, true, true, false, true, true, true, false], "plant_text": "Mar\u2013May, Jul\u2013Aug", "harvest_text": "Jun\u2013Jul, Sep\u2013Nov", "dth": [80, 90]}, "cauliflower": {"name": "Cauliflower (transplants)", "basis": "source", "plant": [false, false, true, true, true, false, true, true, false, false, false, false], "harvest": [false, false, false, false, false, true, true, true, false, true, true, false], "plant_text": "Mar\u2013May, Jul\u2013Aug", "harvest_text": "Jun\u2013Aug, Oct\u2013Nov", "dth": [90, 100]}, "onions_short": {"name": "Bulb onions (short-day)", "flag": "no sourced planting dates for this area"}, "green_onions": {"name": "Green onions", "basis": "source", "plant": [false, true, true, true, true, false, false, false, false, false, false, false], "harvest": [false, false, false, false, true, true, true, true, false, false, false, false], "plant_text": "Feb\u2013May", "harvest_text": "May\u2013Aug", "dth": [90, 100]}, "lima_beans": {"name": "Lima beans", "basis": "source", "plant": [false, false, false, true, true, true, true, false, false, false, false, false], "harvest": [false, false, false, false, false, true, true, true, true, true, false, false], "plant_text": "Apr\u2013Jul", "harvest_text": "Jun\u2013Oct", "dth": [60, 100]}, "cantaloupe": {"name": "Cantaloupe", "basis": "source", "plant": [false, false, false, false, true, true, false, false, false, false, false, false], "harvest": [false, false, false, false, false, false, true, true, true, true, false, false], "plant_text": "May\u2013Jun", "harvest_text": "Jul\u2013Oct", "dth": [80, 120]}, "watermelon": {"name": "Watermelon", "basis": "source", "plant": [false, false, false, false, true, true, false, false, false, false, false, false], "harvest": [false, false, false, false, false, false, false, true, true, true, false, false], "plant_text": "May\u2013Jun", "harvest_text": "Aug\u2013Oct", "dth": [90, 120]}}, "harvest_note": "Harvest months = planting months plus days-to-harvest from UA Extension az1005 (our derivation); frost-tender crops are cut off at this ZIP's median first fall frost."}}