Universal Analytics stops processing new data on July 1, 2023, and that is less than six months away. If you still rely on it, you need a GA4 migration checklist you can work through now, so you don’t lose tracking or year-over-year data. This is the checklist I use, in the order I use it.
The short version: list everything your Universal Analytics property tracks, rebuild what matters in GA4, test it, and save the old reports you will want later. The earlier you finish, the more months of GA4 data you will have before the switch-off.
The Dates That Shape Your GA4 Migration Checklist
Google set the timeline in March 2022, and it has only changed for paying customers since. Here is where things stand in January 2023:
- Standard Universal Analytics properties stop processing new hits on July 1, 2023.
- Universal Analytics 360 properties (the paid version) now stop on July 1, 2024. Google moved this from October 2023 back in October 2022.
- Old reports stay viewable for at least six months after processing stops, according to Google. After that, the data goes away.
You can read the official dates on Google’s Universal Analytics shutdown help page. I covered the original announcement in Google’s Universal Analytics shutdown date announcement, if you want the background.
The key point is simple. Your old data will not move into GA4. GA4 only holds data from the day you added its tag. So every week you wait is a week of missing history when you compare this year to next year.
Step 1: Audit What Universal Analytics Tracks Today
Before I touch GA4, I write down what the old property actually does. Most sites have built up years of settings that nobody remembers. A simple spreadsheet is enough.
Go through the Admin area of each Universal Analytics property and list:
- Goals in each view: destination goals (thank-you pages), event goals, duration goals and pages-per-session goals.
- Events you send: look at Behavior > Events > Top Events for the category, action and label values.
- Custom dimensions and metrics: things like author, logged-in status or membership level.
- Filters: IP exclusions, hostname filters, lowercase filters and any rewrite rules.
- Views: why each one exists and who uses it.
- Segments and audiences: especially remarketing lists used in Google Ads.
- Linked products: Google Ads, Search Console, Merchant Center, Optimize, BigQuery (360 only).
- Ecommerce: standard or enhanced ecommerce, and which steps are tracked.
- Reports and dashboards: custom reports, Data Studio (now called Looker Studio) dashboards and any tool that pulls data through the API.
Then mark each item as “keep”, “rebuild differently” or “drop”. In my experience, about half of the goals and events on an older site are no longer used by anyone. The move is a good time to clean them out instead of copying the clutter across.
Ask Who Uses the Data
I also ask each team one question: which three numbers do you check every month? The answers tell you what must work on day one. Everything else can wait a few weeks.
Step 2: Create or Check Your GA4 Property
Many sites already have a GA4 property that someone created in 2021 or 2022 and then forgot. Check that first, because an older property already holds months of useful data.
If you have one, confirm it is tagged on every page and that it still receives data. Look at the Realtime report while you browse the site. If you don’t have one, the GA4 Setup Assistant in your Universal Analytics Admin area will create it and link it for you.
I explained the setup steps, including the tag options for gtag.js, Google Tag Manager and CMS plugins, in how to set up GA4 alongside Universal Analytics. Running both at the same time is exactly what you want until July.
Get the Account Structure Right
GA4 has no views. One property holds one set of data, with one or more data streams (a stream is a single website or app sending data). So think about structure now:
- One website usually means one property with one web data stream.
- A website and its app can share one property, with a web stream and an app stream.
- Separate brands or countries that never need combined reports are often easier as separate properties.
I’d avoid creating one GA4 property per old view. Views were mostly filtered copies of the same data. In GA4 you do that with comparisons, report filters and Explorations instead.
Step 3: Change the Default Settings Most People Miss
These settings take ten minutes, and they protect the quality of everything you collect from here on. I do them before I build any events.
- Set data retention to 14 months. Go to Admin > Data Settings > Data Retention. The default is 2 months, which limits how far back your Explorations can go. Standard reports are not affected, but you will want the longer window.
- Define internal traffic. In your data stream settings, add your office IP addresses as internal traffic. Then turn the “Internal Traffic” data filter from Testing to Active once you have checked it works.
- List unwanted referrals. Add payment gateways and similar sites (for example, PayPal) so they don’t steal credit for sales.
- Set up cross-domain measurement if visitors move between your own domains, such as a main site and a separate booking site.
- Review enhanced measurement. GA4 can track scrolls, outbound clicks, site search, file downloads and YouTube video plays without extra code. Turn off any you don’t want, and check the site search query parameter matches your site (often
sorq). - Check the time zone and currency at property level, so they match Universal Analytics and your ad accounts.
Step 4: Rebuild Events and Conversions
This is the biggest job in most migrations. Universal Analytics used hit types (page views, events, transactions). GA4 uses events for everything, and each event can carry parameters (extra details, like a button name or page location).
Map Old Events to New Ones
Go back to your audit sheet. For each old event, choose a clear GA4 event name. Use lowercase with underscores, and keep names short and consistent.
Here is a practical example. In Universal Analytics, you might have sent a newsletter signup like this: category “Form”, action “Submit”, label “Newsletter”. In GA4, I would send one event called newsletter_signup, with a parameter for where the form sits:
gtag('event', 'newsletter_signup', {
form_location: 'footer'
});
Before you invent a name, check whether Google has a recommended event for it. Names like login, sign_up, generate_lead and purchase unlock extra report features. I always use the recommended name when one fits.
Turn Goals Into Conversions
GA4 has no goals. Instead, you mark any event as a conversion. You can do this in Configure > Events by switching on “Mark as conversion”.
- Event goals become conversion events with the same meaning.
- Destination goals (thank-you page visits) need a new event. I create it in GA4 with Configure > Events > Create event, using the
page_viewevent and apage_locationrule, or I fire it from Tag Manager. - Duration and pages-per-session goals mostly don’t need rebuilding. GA4’s engagement metrics cover the same idea.
The Setup Assistant also has a goals migration tool that copies eligible goals across as conversion events. It is handy, but I still check every one by hand afterwards.
A standard GA4 property allows up to 30 conversion events. That is plenty if you only mark the actions that matter to the business. I’d rather have five honest conversions than thirty that nobody trusts.
Register Custom Dimensions
Parameters you send with events don’t appear in reports until you register them. Go to Configure > Custom definitions and add each one as a custom dimension or metric. Do this early, because custom dimensions only show data from the day you create them, not before.
Step 5: Rebuild Ecommerce Tracking
If you run an online shop, this needs the most care. GA4 ecommerce uses a new set of events, so your old Universal Analytics ecommerce code will not feed GA4 reports properly.
The main events to set up are:
view_item_listandview_itemfor category and product pages.add_to_cartandremove_from_cart.begin_checkout,add_shipping_infoandadd_payment_info.purchase, with the transaction ID, value, currency and items.refund, if you track refunds.
Many ecommerce platforms and plugins can send these events for you. Even so, I always place a test order and compare the revenue in GA4 with the order total in the shop. The currency parameter is the one I most often see missing, and without it revenue can show as zero.
Step 6: Link Google Ads, Search Console and Other Tools
Links do not carry over from Universal Analytics. You need to create each one again in GA4 under Admin > Product links.
- Google Ads: link the account, then import your GA4 conversions into Google Ads. Check that you are not counting the same action twice, once from the old import and once from the new one.
- Audiences: rebuild your remarketing audiences in GA4. Audiences only start filling from the day you create them, so build them now so they have members by July.
- Search Console: link it so you can see organic queries and landing pages inside GA4. You then publish the Search Console report collection from the Library. If you use the links data too, my guide to the Search Console Links report shows how I read it.
- BigQuery: link it if you want raw event data. The BigQuery export is free for standard GA4 properties, which was not true in Universal Analytics.
Step 7: Check the Numbers and Understand Why They Differ
Run both tools side by side for a few weeks, then compare. Don’t expect them to match. They count things in different ways, and that is normal.
The main differences I explain to clients and teams are:
- Sessions: Universal Analytics starts a new session at midnight and when campaign source changes. GA4 doesn’t, so GA4 often shows fewer sessions.
- Users: GA4’s main user metric is active users, not total users, so the headline figure can look different.
- Bounce rate: in GA4, bounce rate is the opposite of engagement rate. An engaged session lasts longer than 10 seconds, has a conversion, or has two or more page views. It is not the same as the old bounce rate, so don’t compare them directly.
- Conversions: a Universal Analytics goal counts once per session. A GA4 conversion counts every time the event fires, unless you set it up differently.
As a rule of thumb, I am happy when page views and purchases are close between the two tools. If those are far apart, something is wrong with the tag, not with the way GA4 counts. Users and sessions can differ more without being a problem.
Common Tracking Gaps I Look For
- Pages or templates without the GA4 tag, such as landing pages built in a separate tool.
- Checkout or booking steps on a different domain with no cross-domain setup.
- Thank-you pages that load without a full page refresh, so no page view fires.
- Your own team’s visits still counted because the internal traffic filter was left in Testing.
Step 8: Rebuild Your Reports and Dashboards
GA4 reports look very different. Many popular Universal Analytics reports are gone or have moved. Plan where each team will find its numbers.
- Use the Reports section for quick, everyday numbers. You can customise the left menu through the Library.
- Use Explorations for funnels, paths and detailed tables. These are close to the old custom reports.
- Rebuild Looker Studio dashboards on the GA4 data source. Old dashboards built on Universal Analytics will stop updating after July.
For SEO reporting, I build one simple organic report first: sessions, engaged sessions and conversions from organic search, by landing page. That covers most of what clients and managers actually ask about.
Step 9: Save Your Universal Analytics Data
Once processing stops, you can still look at old reports for a while. After that, the data is gone, so decide now what to keep.
- Choose the reports you will want for year-over-year comparisons, such as monthly traffic by channel, top landing pages and conversions by source.
- Export them from the report screen as CSV, Excel or Google Sheets files.
- For larger or repeated exports, use the Google Analytics Sheets add-on or the Reporting API.
- If you have Universal Analytics 360, use the BigQuery export to keep raw data.
- Store the files somewhere shared, with a note on which view and date range each one covers.
I’d export monthly totals rather than daily data for most small and medium sites. You rarely need daily figures from three years ago, and monthly tables are much easier to work with later.
Step 10: Train the Team and Write It Down
The last step is the one most people skip. Write a short tracking plan: every event name, what it means, its parameters, and which ones are conversions. Keep it next to your audit sheet.
Then show each team where their numbers now live. Ten minutes of training saves weeks of “the numbers look wrong” emails after July. If you are planning your year, I also put this migration near the top of my list in SEO priorities for 2023.
A Simple Timeline to Finish Before July
If you are starting in January, this pace works for most sites:
- January: audit Universal Analytics, create or check GA4, fix the default settings.
- February: rebuild events, conversions, custom dimensions and ecommerce.
- March: link Google Ads and Search Console, build audiences, compare data.
- April and May: rebuild dashboards, fix gaps, train the team.
- June: export the Universal Analytics reports you want to keep.
Smaller sites can do most of this in a couple of weeks. Larger sites with ecommerce, several domains or heavy Google Ads use should start now and not leave anything to June.
Conclusion: Work Through Your GA4 Migration Checklist Now
A GA4 migration checklist is not about copying Universal Analytics line by line. It is about deciding what you really need to measure, setting it up properly, and saving the history you will miss later.
My advice is to do Steps 1 to 3 this week. They are quick, and they make sure GA4 is collecting clean data while you work on the rest. Then move to events and conversions, because those take the longest to get right.



