Weather Underground APIweatherunderground.com ↗
Access real-time weather conditions and 10-day forecasts from Weather Underground. Search locations, get temperature, wind, humidity, and daily narratives.
What is the Weather Underground API?
The Weather Underground API provides 3 endpoints covering location search, current weather observations, and 10-day daily forecasts. get_current_conditions returns 9 observation fields including temperature, wind speed, relative humidity, and cloud cover percentage. get_forecast delivers day-by-day high/low temperatures, daypart breakdowns, precipitation chance, and human-readable narrative strings for up to 10 days ahead.
curl -X GET 'https://api.parse.bot/scraper/dc569c5e-6b93-4885-af60-ca8f7beb79ec/search_locations?query=New+York' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace weatherunderground-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Weather Underground SDK — search locations, get current conditions and forecasts."""
from parse_apis.weather_underground_api import WeatherUnderground, UnitSystem, LocationNotFound
client = WeatherUnderground()
# Search for locations — limit caps total items returned.
for loc in client.locations.search(query="New York", limit=3):
print(loc.name, loc.geocode)
# Drill into the first result for current weather.
location = client.locations.search(query="Los Angeles", limit=1).first()
if location:
conditions = location.conditions.get(units=UnitSystem.IMPERIAL)
print(conditions.temperature, conditions.wx_phrase, conditions.relative_humidity)
# Get the 10-day forecast for the same location in metric.
forecast = location.forecast.get(units=UnitSystem.METRIC)
for i, day in enumerate(forecast.day_of_week[:3]):
print(day, forecast.temperature_max[i], forecast.temperature_min[i], forecast.narrative[i])
# Construct a location directly from a known geocode.
nyc = client.location(geocode="40.713,-74.006")
try:
current = nyc.conditions.get()
print(current.temperature, current.wind_direction_cardinal, current.visibility)
except LocationNotFound as exc:
print(f"Location not found: {exc}")
print("exercised: locations.search / conditions.get / forecast.get / location()")
Search for locations by city name, zip code, or address. Returns matching locations with geocode coordinates and place IDs. Use the geocode from results as input to get_current_conditions and get_forecast.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | City, zip code, or address to search for (e.g., 'New York', '90210', 'Los Angeles'). |
{
"type": "object",
"fields": {
"locations": "array of location objects each containing name (display address), geocode (latitude,longitude string), and place_id (unique identifier)"
},
"sample": {
"data": {
"locations": [
{
"name": "New York City, New York, United States",
"geocode": "40.713,-74.006",
"place_id": "98e8083bb7de0fc467fd1e22a1692f8f200343e4e0acc3b3fc31e71d29113b54"
}
]
},
"status": "success"
}
}About the Weather Underground API
Location Search
Before fetching weather data, use search_locations to resolve a city name, ZIP code, or address into a geocode string. Pass any freeform query — such as 'New York', '90210', or a street address — and the endpoint returns an array of matching location objects. Each object includes a name (display address), a geocode (latitude,longitude string), and a place_id. The geocode value is the required input for both other endpoints.
Current Conditions
get_current_conditions accepts a geocode and an optional units parameter: 'e' for Imperial (°F, mph, inches) or 'm' for Metric (°C, kph, mm). The response includes temperature, windSpeed, windDirection (degrees), windDirectionCardinal (e.g., 'SSW'), relativeHumidity, cloudCover, visibility, pressureMeanSeaLevel, and wxPhraseLong — a plain-language condition string like 'Rain' or 'Partly Cloudy'. These are point-in-time observations, not averages.
10-Day Forecast
get_forecast returns parallel arrays indexed by day: dayOfWeek, narrative (full prose forecast per day), calendarDayTemperatureMax, and calendarDayTemperatureMin. The daypart array holds a single object with sub-arrays for each half-day period, including precipChance, windSpeed, and a per-daypart narrative. The same units parameter controls all forecast values. The forecast covers exactly 10 calendar days from the current date.
The Weather Underground API is a managed, monitored endpoint for weatherunderground.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when weatherunderground.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official weatherunderground.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display current temperature and humidity on a location-aware dashboard using
get_current_conditions. - Build a 10-day trip planner that surfaces daily high/low temperatures and narrative forecasts from
get_forecast. - Trigger alerts when
precipChanceexceeds a threshold in thedaypartforecast array. - Resolve user-entered city names or ZIP codes to geocoordinates with
search_locationsbefore querying conditions. - Show wind speed and cardinal direction (
windDirectionCardinal) for outdoor activity planning. - Render a weekly forecast card using
dayOfWeek,calendarDayTemperatureMax, andcalendarDayTemperatureMinarrays. - Switch between Imperial and Metric display units by toggling the
unitsparameter across all endpoints.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Weather Underground have an official developer API?+
What does `get_forecast` return for each day versus each daypart?+
calendarDayTemperatureMax, calendarDayTemperatureMin, dayOfWeek, and a full-day narrative string. The daypart object breaks each day into half-day segments and adds precipChance, windSpeed, and a shorter narrative per segment. Both sets of arrays are aligned by index position.Does the API return hourly forecasts or historical weather data?+
get_current_conditions and 10-day daily/daypart forecasts via get_forecast. You can fork this API on Parse and revise it to add an hourly or historical endpoint.Is precipitation amount returned in current conditions?+
get_current_conditions response schema lists precipitation as a returned field but does not break it out as a named discrete field the way temperature or humidity are. The dedicated numeric precipitation accumulation field is not currently surfaced as a standalone response key. You can fork this API on Parse and revise it to expose that field explicitly.What is the geographic coverage of location search?+
search_locations endpoint accepts city names, ZIP codes, and street addresses and works globally wherever Weather Underground maintains station data. Coverage is strongest in North America and Western Europe; station density varies in less-monitored regions, which can affect the availability and accuracy of returned observations.