Monitor real-time pollen levels from the Google Maps Pollen API directly in Home Assistant.
Get sensors for grass, tree, weed pollen, plus individual plants like OAK, PINE, OLIVE, and many more!
- Multi-language support β UI in 21 languages (EN, ES, CA, DE, FR, IT, PL, RU, UK, NL, ZH-Hans, SV, CS, PT-BR, DA, NB, PT-PT, RO, FI, HU, ZH-Hant) + API responses in any language.
- Dynamic sensors β Auto-creates sensors for all pollen types found in your location.
- Multi-day forecast for TYPES & PLANTS β
forecast
list with{offset, date, has_index, value, category, description, color_*}
- Convenience:
tomorrow_*
andd2_*
- Derived:
trend
andexpected_peak
- Per-day sensors: remain TYPES-only (optional
D+1
/D+2
).
PLANTS expose forecast as attributes only (no extra entities).
- Smart grouping β Organizes sensors into:
- Pollen Types (Grass / Tree / Weed)
- Plants (Oak, Pine, Birch, etc.)
- Pollen Info (Region / Date metadata)
- Configurable updates β Change update interval, language, forecast days, and per-day sensors without reinstalling.
- Manual refresh β Call
pollenlevels.force_update
to trigger an immediate update and reset the timer. - Last Updated sensor β Shows timestamp of last successful update.
- Rich attributes β Includes
inSeason
, indexdescription
, healthadvice
,color_hex
,color_rgb
,color_raw
, and plant details.
- Your API key is stored by Home Assistantβs secure config entries.
- We never log your API key. As a safety net, if it ever appears in an error message, it is redacted as
***
. - We do not log request parameters (coordinates). Debug logs only include non-sensitive metadata (e.g., forecast days and whether a language is set).
- Avoid sharing full debug logs publicly; review them for sensitive information before posting.
You can change:
- Update interval (hours)
- API response language code
- Forecast days (
1β5
) for pollen TYPES - Per-day TYPE sensors via
create_forecast_sensors
:none
β no extra sensorsD+1
β sensors for each TYPE with suffix(D+1)
D+1+2
β sensors for(D+1)
and(D+2)
Validation rules:
D+1
requiresforecast_days β₯ 2
D+1+2
requiresforecast_days β₯ 3
After saving Options: if per-day sensors are disabled or
forecast_days
becomes insufficient, the integration removes any stale D+1/D+2 entities from the Entity Registry automatically. No manual cleanup needed.
Go to Settings β Devices & Services β Pollen Levels β Configure.
You need a valid Google Cloud API key with access to the Maps Pollen API.
- Open the Google Cloud Console.
- Create or select a project and enable billing for it.
- Go to APIs & Services β Library and enable the
Maps Pollen API. - Go to APIs & Services β Credentials β Create credentials β API key.
- Restrict your key (recommended):
- API restrictions β Restrict key β select Maps Pollen API only.
- Application restrictions (optional but recommended):
- HTTP referrers (for frontend usages) or
- IP addresses (for server-side usage, e.g. your HA host).
- Copy the key and paste it in the integration setup.
π See the FAQ for quota tips, rate-limit behavior, and best practices to avoid exhausting your free tier.
Home Assistant does not color icons natively from attributes.
If you want dynamic colors driven by color_hex
/ color_rgb
, you have these options:
- Entities card (attribute row)
type: entities
title: Grass
entities:
- type: attribute
entity: sensor.type_grass
attribute: category
name: Category
- type: attribute
entity: sensor.type_grass
attribute: description
name: Index description
Simple and robust. It shows attributes clearly but doesnβt color the icon.
- Gauge card (color by severity based on numeric value)
type: gauge
entity: sensor.type_grass
min: 0
max: 5
severity:
green: 0
yellow: 2
red: 4
Color is driven by thresholds, not by
color_hex
.
If you need the icon/badge to follow the exact API color (color_hex
):
Mushroom (mushroom-template-card)
type: custom:mushroom-template-card
entity: sensor.type_grass
primary: >-
Grass: {{ states(entity) }} ({{ state_attr(entity, "category") }})
icon: mdi:grass
badge_icon: mdi:circle
badge_color: >-
{{ state_attr(entity, "color_hex") or "var(--primary-color)" }}
button-card
type: custom:button-card
entity: sensor.type_grass
icon: mdi:grass
show_state: false
name: '[[[
const s = states[entity];
const cat = s?.attributes?.category ?? "";
return `Grass: ${s?.state ?? "unknown"} (${cat})`;
]]]'
color: '[[[
const s = states[entity];
return s?.attributes?.color_hex || "var(--primary-color)";
]]]'
- Localized plant codes: Google may localize
plantInfo.code
in some locales (e.g.,GRAMINALES
in ES) while others remain English (OLIVE
,MUGWORT
). ChanginglanguageCode
may recreate plant sensors with a different suffix. Recommendation: keep API language stable or rename entities in UI after changing it.
- Open HACS β Integrations in Home Assistant.
- Click Explore & Download Repositories.
- Search for Pollen Levels or click the badge above.
- Click Download and follow prompts.
- Restart or Reload HA when prompted.
-
Go to Settings β Devices & Services β Add Integration.
-
Search for Pollen Levels.
-
Enter:
- Google API Key
- Location
- Update Interval (hours)
- Language Code
curl -X GET "https://pollen.googleapis.com/v1/forecast:lookup?key=YOUR_KEY&location.latitude=48.8566&location.longitude=2.3522&days=2&languageCode=es"
If this integration helps you, consider supporting development:
MIT Β© 2025 eXPerience83 Data Source: Google Maps Pollen API