How to Create Annual or Monthly Climate Summaries and Normals for a Location

For example, you can use historical weather data to answer questions such as:

  • What is the typical high temperature in July?
  • How much precipitation normally falls in January?
  • Which months are normally hottest, coldest, wettest, or driest?
  • How did a particular year compare with the long-term average?
  • What range of temperatures has historically occurred at a particular time of year?

Visual Crossing Weather Data can calculate these statistics from historical daily or hourly weather records for locations around the world.

In this article, we will create a 30-year monthly climate summary and then show how the same approach can be used for annual summaries and other historical weather statistics.

Climate summaries and weather normals

A climate summary combines many historical weather records into statistics for a longer period.

For example, instead of looking at every day from 1996 through 2025, we might summarize those 30 years into twelve monthly values:

MonthTypical HighTypical LowMean TemperatureAverage Precipitation
January40°F28°F34°F3.4 in
February42°F29°F36°F3.0 in
March50°F36°F43°F4.0 in

This type of summary makes seasonal weather patterns much easier to understand.

The term weather normal is commonly used for a value representing typical weather calculated from many years of observations. Formal climatological normals may use specific periods and methodologies defined by meteorological organizations, so when creating your own statistics it is important to state the historical period being used.

For example:

  • 1991–2020 historical average
  • 1996–2025 historical average
  • Past 10 years
  • Past 30 years

The reference period matters because climate changes over time.


Climate summaries help answer questions such as:

  • What is the typical temperature in July?
  • How much precipitation normally falls in January?
  • What are the hottest and coldest months?
  • How does one year compare with the long-term average?
  • What is the typical weather for a specific date?
  • How variable is the weather from year to year?

Visual Crossing Weather Data can create historical weather statistics for any supported location using long-term daily or hourly weather records.

You can use these statistics to create:

  • Monthly climate summaries
  • Annual weather summaries
  • Daily historical statistics
  • Seasonal summaries
  • Historical averages
  • Minimum and maximum values
  • Percentiles
  • Precipitation totals
  • Temperature ranges
  • Custom weather normals

Visual Crossing provides both interactive weather-data tools and programmatic access through the Visual Crossing Weather API.

If you do not already have an account, you can sign up for Visual Crossing Weather.

What is a climate summary?

A climate summary combines weather observations over a longer period to describe the typical weather for a location.

For example, suppose you have 30 years of daily weather data for New York.

Instead of examining every individual day, you might calculate a monthly summary showing:

MonthMean HighMean LowMean TemperatureAverage Precipitation
January40°F28°F34°F3.4 in
February42°F29°F36°F3.0 in
March50°F36°F43°F4.0 in

This makes it much easier to understand seasonal weather patterns.

The same approach can be applied to almost any weather element.

What is a weather normal?

The word “normal” is often used to describe typical weather calculated from historical observations.

For example:

Typical July high temperature
Typical January precipitation
Typical first frost date

These values are normally calculated from many years of historical weather.

In formal climatology, an official climate normal may refer to a specific reference period and methodology defined by a meteorological organization.

When creating your own Visual Crossing statistics, it is therefore useful to clearly state the period being analyzed.

For example:

1991-2020 historical average
2006-2025 historical average
Past 10 years
Past 30 years

This makes the meaning of the statistic clear.

Choose the historical period

The first decision is how many years of weather should be included.

Common choices include:

10 years
20 years
30 years

A 30-year period is commonly used for long-term climate analysis because it reduces the effect of individual unusual years.

However, a shorter period may be more appropriate when you are interested in recent climate behavior.

For example:

1991-2020

may be useful for a long-term climatological baseline, while:

2016-2025

may better represent recent conditions for some business applications.

The correct period depends on the question you are trying to answer.

There are two methods to calculate weather statistics using Visual Crossing Weather Data. The built in ‘Weather Statistics’ feature of the Weather Query Builder allows you to create weather statistics in the browser and download them in CSV, Excel or JSON format. The second method using the weather API to download the raw data and so that more custom statistics can be calculated.

Method 1 – Use Visual Crossing Weather Statistics

Visual Crossing Weather Statistics provides a direct way to turn a multi-year historical dataset into climate summaries.

The workflow is:

  1. Create a historical weather dataset.
  2. Select the locations and historical period.
  3. Choose the weather elements.
  4. Create a Statistics analysis.
  5. Choose the statistical summary options.
  6. Run the analysis.
  7. View or download the results.

This avoids having to calculate all of the statistics manually in Excel, Python, SQL, or another analytical tool.

Step 1: Decide what you want to calculate

Before creating the dataset, define the question you want the statistics to answer.

For our example, we will calculate:

The typical monthly temperature and precipitation from 1996 through 2025.

That gives us four important choices:

  • Location: New York, NY
  • Historical period: 1996–2025
  • Grouping: Calendar month
  • Weather elements: Maximum temperature, minimum temperature, mean temperature, and precipitation

Defining these choices first makes it much easier to configure the analysis correctly.

Step 2: Choose the historical period

For climate analysis, the historical period should normally contain multiple complete years.

A 30-year period is commonly useful for long-term climate analysis because individual unusually hot, cold, wet, or dry years have less influence on the result.

For example:

1996-01-01 to 2025-12-31

provides 30 complete calendar years.

A shorter period may be more appropriate when you want statistics that emphasize recent weather conditions. For example, a 2016–2025 average may differ from a 1996–2025 average.

There is therefore no universally correct reference period. Choose the period that matches the question you are trying to answer, and include that period whenever you publish or compare the results.

Step 3: Create the historical weather dataset

Open the Visual Crossing Weather Query Builder and select the location you want to analyze.

Locations can be supplied as place names, postal codes, or latitude/longitude coordinates, for example:

New York, NY
20190
40.7128,-74.0060

For a long-term analysis, latitude and longitude provide an especially precise definition of the location.

Next, select the historical date range. For our example:

1996-01-01 to 2025-12-31

For most monthly and annual climate statistics, daily weather data is the best starting point. It provides daily values such as:

tempmax
tempmin
temp
precip
snow
windspeed
windgust
humidity
solarenergy

without the much larger volume of records produced by hourly data.

Use hourly data when the statistic specifically depends on time within the day, such as the number of hours below freezing or the average temperature during business hours.

Step 4: Select the weather elements

For a basic temperature and precipitation climate summary, select:

datetime
tempmax
tempmin
temp
precip

These fields let us calculate typical daily highs, lows and mean temperatures along with precipitation.

Additional fields can be included when needed, such as:

humidity
snow
snowdepth
windspeed
windgust
cloudcover
solarenergy

Selecting only the elements required for the analysis generally makes the resulting dataset easier to understand.

Step 5: Create a Statistical Summary

After configuring the historical dataset, create a Statistical Summary.

The Statistical Summary controls two important parts of the calculation:

  1. How the historical records are grouped, such as by month or year.
  2. Which statistical function is applied, such as mean, minimum, maximum, sum, or percentile.

For our monthly climate normal, choose:

Period: Month

and combine the selected historical years.

The analysis will then group all January records together, all February records together, and so on.

For a 30-year period, the January result therefore represents January weather across all 30 years rather than one individual January.

Step 6: Choose the appropriate statistics

Different weather elements require different types of aggregation.

For temperature, useful monthly statistics include:

Mean tempmax
Mean tempmin
Mean temp

These represent the typical daily high, typical daily low, and typical mean temperature for each month.

For example:

Mean July tempmax = typical daily high temperature during July

You may also calculate minimums, maximums, or percentiles when you want to understand historical extremes or variability.

Temperature mean

The daily temp field represents the mean temperature for the day.

If you want Visual Crossing’s daily mean temperature, use temp directly rather than calculating:

(tempmax + tempmin) / 2

The daily maximum and minimum represent temperature extremes and are not necessarily sufficient to reproduce the daily mean.

Precipitation requires different treatment

Precipitation is accumulated, so the statistic depends on the question.

If you want to know the typical total precipitation during January, first calculate the total precipitation for January in each year:

January 2023 total
January 2024 total
January 2025 total
...

and then calculate the mean of those January totals.

This answers:

How much precipitation does January typically receive?

Simply averaging every daily January precip value answers a different question:

How much precipitation falls on an average January day?

This distinction between averages and totals is important for precipitation, snowfall, solar energy, and other accumulated weather elements.

A useful starting point for choosing statistics is:

Weather elementCommon statistics
Mean temperatureMean, minimum, maximum, percentiles
Maximum temperatureMean, maximum, percentiles
Minimum temperatureMean, minimum, percentiles
PrecipitationSum, mean, maximum
SnowfallSum, maximum
Snow depthMean, maximum
HumidityMean, minimum, maximum
Wind speedMean, maximum
Wind gustMaximum, percentiles
Solar energySum, mean
Cloud coverMean

There is no single aggregation method that is appropriate for every weather element.

Example: 30-year monthly temperature summary

Our finished monthly analysis might produce results such as:

MonthMean HighMean LowMean Temp
January40.1°F27.8°F34.0°F
February42.5°F29.3°F35.8°F
March50.6°F36.1°F43.3°F
April62.1°F46.0°F54.0°F
May71.7°F55.7°F63.6°F
June80.2°F65.0°F72.5°F

The exact values depend on the location, reference period, underlying observations, and statistical method.

When presenting these results, describe them as, for example:

1996–2025 historical monthly averages for New York, NY.

That makes the meaning of the values clear.

Creating annual summaries

The same process can be used to summarize individual years.

Instead of grouping by month, choose:

Period: Year

and break the results out by year.

The resulting dataset might look like:

YearMean TempMaximum TempMinimum TempTotal Precipitation
202156.8°F97.2°F18.1°F44.2 in
202257.4°F98.0°F15.9°F39.8 in
202358.1°F99.1°F20.0°F46.7 in

This makes it easy to identify unusually warm, cold, wet, or dry years and to examine changes over time.

You can also compare an individual year with the long-term average.

For example:

2025 annual mean temperature: 59.1°F
1996–2025 historical mean:    56.9°F
Difference:                    +2.2°F

The difference from the reference value is often called an anomaly.

Creating monthly summaries for each individual year

Sometimes you want to compare individual months rather than combine all Januaries into one long-term January average.

For example:

YearMonthMean TempTotal Precipitation
2023January37.1°F3.1 in
2024January39.8°F4.0 in
2025January36.5°F2.7 in

To create this type of analysis, use:

Period: Month

but break the results out by year.

This produces one result for every year/month combination and is useful for studying year-to-year variability.

Using percentiles and historical extremes

Averages describe typical conditions, but they do not show the full historical range.

Percentiles can help describe how unusual a weather value is. For example, you might calculate the:

10th percentile
50th percentile
90th percentile

of historical maximum temperature.

A 90th-percentile value means approximately 90% of the historical values were at or below that threshold.

Minimum and maximum values can also be useful, but they should not be confused with normals.

For example:

Mean daily July high: 87°F
Highest observed July temperature: 104°F

The 104°F value is a historical extreme. It does not mean that the normal July high is 104°F.

Combining averages, percentiles, and extremes often provides a much more useful description of historical weather.

Creating statistics for a particular date

The same technique can be used to answer questions such as:

What is the typical weather on June 15?

You can analyze June 15 for every year in the historical period and calculate the mean, minimum, maximum, or percentiles.

With a 30-year dataset, however, one calendar date provides only 30 daily observations.

If you want a smoother estimate of conditions around June 15, you can instead analyze a window such as:

June 10 through June 20

Across 30 years, that provides approximately 330 daily observations.

These two approaches answer slightly different questions:

What is typical specifically on June 15?

versus:

What is typical around the middle of June?

Choose the approach that best matches your application.

Method 2: Calculate climate statistics from the Weather API

You can also retrieve the underlying historical weather data using the Timeline Weather API and perform the statistical calculations yourself in Python, R, Excel, SQL, Power BI, or another analytical tool.

A Timeline Weather API request uses the form:

/timeline/[location]/[date1]/[date2]

For example, the following request retrieves daily weather for New York from 1996 through 2025:

https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/New%20York,NY/1996-01-01/2025-12-31?unitGroup=us&include=days&key=YOUR_API_KEY

You can reduce the response to the elements needed for the analysis:

elements=datetime,tempmax,tempmin,temp,precip

giving:

https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/New%20York,NY/1996-01-01/2025-12-31?unitGroup=us&include=days&elements=datetime,tempmax,tempmin,temp,precip&key=YOUR_API_KEY

From this daily dataset, derive the year and month from datetime and group the records as required.

For monthly temperature normals:

Typical monthly high = mean(tempmax)
Typical monthly low  = mean(tempmin)
Typical monthly temp = mean(temp)

For a normal monthly precipitation total, calculate the precipitation total for each month/year first and then average those monthly totals across the historical period.

Using the API directly is particularly useful when you need custom statistical calculations, filtering, quality-control rules, or integration with other datasets.

Important considerations

For reliable climate summaries:

  • Use complete periods when possible. Do not compare a complete calendar year directly with a partial current year.
  • Record the historical reference period. A 1991–2020 average may differ from a 2006–2025 average.
  • Use a consistent location. Coordinates provide an unambiguous location for long-term analysis.
  • Check for missing data. Do not treat missing observations as zero.
  • Use the correct aggregation for each element. Temperature averages, precipitation totals, and maximum wind gusts represent fundamentally different calculations.
  • Use hourly data only when necessary. Daily data is normally sufficient for monthly and annual climate statistics and produces a much smaller dataset.

Historical weather, climate statistics, and historical forecasts

These datasets answer different questions.

Historical weather answers:

What actually happened?

For example:

What was the high temperature on July 15, 2025?

Climate statistics answer:

What typically happens?

For example:

What is the typical July 15 high temperature?

Historical forecast data answers:

What did the forecast predict at the time?

For example:

What temperature did the July 12 forecast predict for July 15?

These datasets can also be combined. For example:

Observed high:        96°F
Historical mean high: 86°F
Difference:          +10°F

This provides historical context that the observed value alone cannot provide.

Summary

Creating a climate summary requires five basic choices:

  1. Location — where are you analyzing?
  2. Reference period — which historical years should be included?
  3. Grouping — month, year, day, season, or another period?
  4. Weather elements — temperature, precipitation, wind, snow, etc.?
  5. Statistic — mean, sum, minimum, maximum, percentile, or another calculation?

For most monthly or annual climate analyses, start with a multi-year daily historical weather dataset and create a Statistical Summary.

For example, to calculate a 30-year monthly temperature normal:

Location: New York, NY
Period: 1996–2025
Data resolution: Daily
Grouping: Month
Elements: tempmax, tempmin, temp
Statistics: Mean
Years: Combined

Changing the grouping or whether the years are combined lets the same dataset answer many other questions, from annual precipitation totals to year-to-year temperature variability.

For custom calculations, retrieve the historical records through the Timeline Weather API and perform the aggregation in Python, R, Excel, SQL, Power BI, or another analytical tool.