Event-level data in a standard GA4 property lives for 2 or 14 months, then it is deleted. If your year-over-year comparisons matter, the export has to happen before the window closes, not after.
GA4 event-level data expires. In a standard property the retention setting is 2 months or 14 months, and the shorter value is where a new property starts. Aggregated standard reports keep longer, but anything that reads user-level or event-level data (Explorations, custom segments, most ad-hoc questions) only reaches as far back as that window.
Short on time? Jump to the numbered archive checklist below and do steps 1 to 3 today.
The word "retention" in GA4 is narrower than most people assume. It does not mean your account, your property, or your standard reports vanish after 14 months. It refers to how long Google keeps user-level and event-level data: the granular rows that record individual events tied to identifiers such as cookies, user IDs and advertising IDs.
For a standard property that setting has two choices: 2 months or 14 months. A newly created property starts at the shorter one, so a lot of teams have been running on a 2-month window without ever choosing it. The setting lives in Admin under Data Settings, then Data Retention. Larger paid tiers of Google's product offer longer options; check current Google documentation for the exact scope on your property type, because the details differ between property types.
What survives past the window is the aggregated data that powers the standard reports: the Reports section with its overview, acquisition, engagement and retention cards. Those are built from aggregated tables, not from raw events, so a report showing sessions by channel for the last 26 months will still load after the event-level window has passed.
What does not survive is everything that needs to walk back through the individual events:
There is also a subtlety worth knowing: the retention setting has a "reset user data on new activity" toggle that extends a returning user's data window when they come back. It does not turn a 2-month property into a 14-month one, and it does not affect event data older than the window. Treat it as a nuance, not a rescue plan.
Retention limits are invisible until the day you need the data. The pattern is consistent: someone builds a funnel Exploration in September, compares it against last September, and the older half is missing or empty. The standard reports still load, so nothing looks broken, and the question of what happened to the granular data gets asked months after the window closed.
Three situations make it costly:
Year-over-year analysis. A 2-month window makes any comparison beyond the last quarter impossible at the event level. Even at 14 months, the window is only just longer than one full year, which leaves no margin for a seasonal comparison that needs two Septembers plus the weeks around them.
Migrations. When a team decides to leave GA4 (for cost, consent-banner burden or the privacy questions covered in our GA4 privacy issues breakdown), the natural instinct is to switch the tag and move on. If the old property is never archived, the last 2 or 14 months of granular data disappear on a schedule nobody is watching, and the historical baseline the new tool should be compared against goes with it.
Audits and disputes. Attribution disputes, ad-spend reviews and agency handovers all reach back further than the retention window. The conversation "what did traffic from that campaign look like last spring" is answerable only if someone exported last spring.
None of this is an argument that GA4 is misleading about the limit. The limit is documented. It is an argument that the default is shorter than most reporting cycles, and that the fix costs about an hour if done before the deadline and is impossible after it.
There are four practical ways to get data out of GA4. They differ a lot in how much detail they hold and in whether they can capture the past or only the future.
| Method | What you get | Covers the past? | Effort | Best for |
|---|---|---|---|---|
| BigQuery export | Raw event rows in your own BigQuery project, queryable with SQL | No. Starts the day you link the property | One-time setup, then hands-off | The permanent archive. Everything else is secondary |
| Report CSV / Sheets download | The rows currently shown in one standard report | Yes, for the date range and aggregation the report supports | Manual, one report at a time | Snapshots of specific reports you will need to cite later |
| Looker Studio | Dashboards and tables connected to the property, exportable to CSV or Sheets | Same limits as the source: aggregated reach is long, event-level reach is the retention window | Low to medium | Sharing a recurring view with stakeholders |
| Data API | Programmatic report queries, same dimensions and metrics as the interface | Bounded by the same retention and aggregation rules | Needs a script and credentials | Scheduled pulls into your own warehouse or spreadsheet |
The important row is the first one. BigQuery is the only route that gives you the raw events under your own control, and it is forward-only. Every day you postpone linking is a day of granular data that will never be in your archive. The other three routes export what GA4 currently holds in a shaped, aggregated form. They are useful, and they are how you preserve the old aggregated history, but they cannot reconstruct events after the fact.
Linking the property to BigQuery has no fee from Google's side. Storing and querying the data in BigQuery is billed under Google's own pricing, with a free allowance; check the current BigQuery documentation for the allowances that apply to you. For a small or mid-sized site the archive is typically modest in size, but that depends entirely on your event volume, so look at your own numbers before assuming.
One more limit to plan around: the standard export options are subject to sampling and thresholding on some reports and explorations, so a CSV pulled from a heavily filtered view can differ from the same view pulled unfiltered. When exact counts matter, prefer the BigQuery rows and do the aggregation yourself.
Do these in order. Steps 1 to 3 take under an hour and protect everything that has not expired yet.
events_YYYYMMDD naming pattern. Use a Cloud project with billing enabled: a BigQuery sandbox project (no billing account) expires tables automatically, which quietly deletes the archive you are building. Very high-traffic standard properties can also hit the daily export event limit, so watch for export warnings.generate_lead meant on your site in that quarter. A short document beats a lost dictionary.Once the export is running, a query like the one below answers the kind of question the retention window would otherwise block: event counts by name for one archived day. Replace the project, dataset and date suffix with your own (if your project ID contains hyphens, wrap the whole table path in backticks), and switch to a wildcard table when you want a range of days.
SELECT
PARSE_DATE('%Y%m%d', event_date) AS day,
event_name,
COUNT(*) AS events
FROM yourproject.analytics_123456789.events_YYYYMMDD
GROUP BY day, event_name
ORDER BY day, events DESC;
Two habits make the archive far more useful later. First, keep the raw tables and build views on top of them rather than overwriting anything. Second, export a copy of the property configuration alongside the data, because event definitions drift and the meaning of a row is only recoverable if you kept the dictionary.
Retention is a product decision, and tools make it differently. GA4's limit exists because Google stores granular data tied to identifiers, and keeping those indefinitely creates privacy exposure. Cookieless tools that store no personal data have less reason to expire rows, and several keep history for as long as you are a customer. The comparison below is qualitative.
| Tool | History window | Raw / bulk export | Notes |
|---|---|---|---|
| GA4 | Event-level: 2 or 14 months in standard properties. Aggregated reports longer | Free BigQuery export (forward-only), report CSV, Data API | Strongest export tooling of the group, with the shortest granular window |
| Plausible | Hosted: set by plan terms. Community Edition: your own database | CSV export; self-hosting keeps the raw database in your hands | Paid hosted plans; open source and self-hostable |
| Fathom | Full analytics history while subscribed | Check current docs for export options | Paid, pageview-tiered; history is tied to an active subscription |
| Cloudflare Web Analytics | Limited window | No CSV button; data reachable through the GraphQL Analytics API | Free, cookieless, no custom events |
| GhostMetrics | Full history, every plan including free | CSV from the dashboard or JSON from the API, every stored row and column, every plan | Ships a manifest.json describing each column. Hosted only |
Two practical points come out of that table. First, "full history while subscribed" and "full history on a free plan" are different promises: a tool that ties history to an active subscription means the archive question returns the day you cancel. Second, an export that produces aggregated tables is not the same as an export of every stored row. If you might one day switch tools, or need to audit a number, the rows are what matter.
If you are weighing where to go from GA4 more broadly, our Google Analytics alternatives comparison and the shorter GA4 alternative guide cover the trade-offs beyond retention.
GhostMetrics is our product, so treat this section as a description rather than a neutral review. The relevant facts for this topic are short.
Full history, on every plan. The free plan (free forever, no card, one website, unlimited pageviews) includes the real-time dashboard, every dashboard view and full history. There is no 2-month or 14-month event window and no paywall in front of older rows.
Raw export, on every plan. The Export data button in the dashboard downloads every stored row and every column as CSV. The same data is available as JSON from the API. This is not a Pro feature; the free plan gets it too. The export ships with a manifest.json that describes each column, including the dates on which the Core Web Vitals definitions changed, so someone opening the file a year from now can interpret it without asking anyone.
Why the retention question looks different. GhostMetrics sets no cookies, stores no IP addresses (they are hashed), keeps no personal data and uses no cross-session identifier. There is no user-level profile to expire, so the reason GA4 ages out granular data does not apply in the same way. That is a design property, not a claim that the two products are equivalent: GhostMetrics does far less than GA4 by design.
What it does not do with your GA4 history. There is no GA4 importer. Nothing carries over automatically, and the new tool starts its own history from the day the tag goes live. That is why the archive in the previous section matters: your old numbers live in the BigQuery tables and CSVs you save, and your new numbers live in GhostMetrics. For rebuilding your GA4 events on the new side, see our custom events without Google Analytics guide.
What you give up by leaving GA4. Google Ads attribution, audiences, ecommerce funnels and multi-session user analysis have no equivalent in a cookieless tool, and those are the capabilities that justify staying on GA4 for some teams. If your business is paid-acquisition-heavy, keep GA4 running for that, archive it properly, and consider running a lightweight tool beside it. If your questions are "which pages, from where, how fast, and what did people click", the cookieless model covers them, and it sets no cookies for a consent banner to ask about, as described in our note on analytics without a consent banner.
The install is one line in <head>, about 3 KB compressed on the wire:
<script defer src="https://ghostmetrics.nullagency.io/gm.js" data-site="YOUR-SITE-ID"></script>
You do not need to keep everything. A sensible split, based on what teams actually ask for later:
The last point is the one that gets missed. Exporting solves a data-loss problem and creates a data-governance one. A cookieless tool sidesteps the second half of that trade, since there is no personal data in the rows to govern; a GA4 archive does not.
GhostMetrics is cookieless web analytics: no cookies, no localStorage, no stored IP addresses, no personal data, and it honors Global Privacy Control and Do Not Track. Install one script tag and you are live; no plugin, no tag manager, no build step. The free plan is free forever: one site, unlimited pageviews, real-time dashboard, every view, full history.
Need more than one site or a public shareable dashboard? Pro is $9.99/mo flat, unlimited pageviews, unlimited websites (fair-use ceiling of 250), with a 30-day free trial: a card starts the trial, nothing is charged for 30 days, and you can cancel anytime. Raw event export as CSV or JSON, with a manifest.json for the columns, is available on every plan, including free.
Disclosure: GhostMetrics is built by Null Agency and we use it on this site, so we are not a neutral party about our own product. We kept the claims to what the free and paid plans actually do, and pointed to GA4's export tooling where it is stronger. Retention limits, export options and pricing for third-party products can change; always check the vendor's current documentation before deciding.