Does GA4 have annotations in 2026?
Yes — GA4 annotations were reintroduced after being absent from the initial GA4 launch. To create an annotation in GA4: open any standard report → click the annotation icon (speech bubble) in the bottom-right corner of a chart → click "+" → add your annotation text and date.
Annotations appear as markers on time-series charts within GA4 standard reports. Critical limitation: annotations do not appear in Looker Studio charts or BigQuery exports. For annotation visibility in Looker Studio, you need to maintain a separate annotation table (Google Sheet or BigQuery table) and blend it into your Looker Studio dashboards manually.
What must be annotated
An annotation record should exist for any event that could explain a visible change in GA4 data. The rule: if you look at this data 12 months from now, without the annotation, would you be able to explain a spike or drop on this date? If not, annotate it.
Must-annotate events:
Tracking changes:
- GA4 implementation deployment (new or updated)
- GTM container publishes affecting measurement
- Consent Mode V2 implementation date
- New custom events added or modified
- Data stream additions or changes
- Any tag removal or event deprecation
Site changes:
- Major site redesign or navigation changes
- New page templates deployed
- Checkout flow changes
- Form changes (if forms are tracked)
- URL structure changes
Marketing and external events:
- Major paid campaign launches or pauses
- PR/media coverage causing traffic spikes
- Google core algorithm updates (flag with "Google Core Update" + estimated date)
- Seasonality events (Black Friday, January sales, etc.) for context
- Competitor major events if they may affect your traffic
Technical events:
- Site outages or degraded performance
- CDN changes
- Server migrations
- Payment gateway changes
Organisational changes:
- Internal traffic filter changes (new office IPs, VPN changes)
- Team members who were previously unfiltered now filtered (or vice versa)
- GA4 property configuration changes (data retention, reporting identity, timezone changes)
Do not over-annotate:
Annotating every minor event creates noise that drowns out meaningful signals. As a guideline: annotate anything that would explain a >5% change in sessions or a >10% change in key events on any given day. Small routine changes (minor copy updates, individual blog posts published) do not need annotations unless they are specifically hypothesised to drive traffic changes.
Building an annotation workflow
For single properties
Use GA4's native annotation feature directly. Establish a habit: whenever you deploy a GTM change, immediately annotate it in GA4 before closing the browser tab.
Template annotation text:
Want to see which hidden implementation gaps are affecting your GA4 data quality?
- Format:
[Category]: [Description] | [Who made the change] - Examples:
Tracking: Deployed Consent Mode V2 via GTM | TYSite: Checkout flow redesigned - new 3-step process | Dev teamCampaign: Black Friday campaign launched - expected 3x traffic | MarketingConfig: Data retention extended to 14 months | TY
For agencies managing multiple client properties
GA4 native annotations only cover one property at a time. For multi-property management:
Step 1 — Central annotation log (Google Sheet)
Maintain a master annotation sheet with columns:
- Date
- Property (client name + GA4 property ID)
- Category (Tracking / Site / Campaign / Config / External)
- Description
- Made by
- Severity (for data interpretation: High = materially affects metrics, Medium = minor effect, Low = context only)
Step 2 — Weekly annotation review
At the end of each week, add annotations from your central log to each relevant GA4 property's native annotation interface. 5–10 minutes per week.
Step 3 — Looker Studio annotation overlay
For client dashboards, create a Google Sheet data source in Looker Studio that pulls from your annotation log. Blend it with GA4 data on the date field. Add a table below the main time-series chart showing annotations for the current date range.
Annotations in BigQuery-connected dashboards
For BigQuery-powered Looker Studio dashboards, maintain an annotation table in BigQuery:
In Looker Studio, connect to this table as a secondary data source and blend it with your GA4 daily sessions data on the date field. Add a dimension to show annotation descriptions as hover-over or table rows below the main trend chart.
Looker Studio blend configuration:
- Primary source: GA4 (or BigQuery sessions summary)
- Secondary source: BigQuery annotations table
- Join key: Date (GA4 date = annotation_date)
- Join type: Left outer (all GA4 dates shown, annotations overlaid where they exist)
- Field from secondary: description, category, severity
The business case for systematic annotation
An unannotated GA4 property becomes increasingly uninterpretable over 12–24 months. Common scenarios that annotation prevents:
Scenario 1: A new client asks why their organic traffic dropped 30% in November 2024. Without annotations, you spend 3 hours investigating — eventually finding a Google Core Update that coincided with a site migration. With annotations, you see "Site: migrated to new domain" and "External: Google Core Update" on the same date in 30 seconds.
Scenario 2: Stakeholders notice a conversion rate drop in Q3 and blame the marketing team. The annotation record shows "Tracking: removed legacy UA conversion goal — previous conversion counts included GA4 test property traffic." The marketing team is exonerated.
Scenario 3: An agency takes over a client account with 3 years of GA4 history. Without annotations, the history is a black box. With annotations, it's a documented record of every change that shaped the data.
Annotations are the cheapest high-value practice in analytics. They take 30 seconds per change. They save hours of investigation time over the lifetime of a property.
FAQ: GA4 Annotations: Documenting Changes That Make Your Data Explainable
What should a team validate first when ga4 annotations: documenting changes that make your data explainable appears?
How do I know whether the fix actually worked?
When should this become a full GA4 audit instead of a quick fix?
Related guides for GA4 Annotations: Documenting Changes That Make Your Data Explainable
BigQuery Cost Optimisation for GA4 Exports: 9 SQL Patterns (2026)
The biggest cost wins come from nine SQL patterns: (1) partition pruning via _TABLE_SUFFIX BETWEEN (10–50x cost difference vs derived filters), (2) clustering on source/medium/event_name (30–60% reduction on top of partitioning), (3) explicit column selection (never SELECT *)…
How to Stitch GA4 BigQuery Sessions Manually (2026)
GA4 doesn't store sessions as records in BigQuery exports — only individual events with session identifiers. To reconstruct sessions: join on user_pseudo_id + (SELECT value.int_value FROM UNNEST(event_params) WHERE key='ga_session_id') as the unique session key…
Run a GA4 audit before ga4 annotations: documenting changes that make your data explainable spreads into reporting decisions
Use GA4 Audits to surface implementation gaps, broken signals, and the next fixes to prioritize before the issue becomes harder to trust or explain.