Analistable

How to combine YouTube Analytics and GA4 data

By the Analistable team · Updated · 6 min read

Export video-level views and watch time from YouTube Studio, and from GA4 export sessions, key events and landing page for traffic whose session source contains youtube. The reliable join key is a UTM tag on each video's description link (utm_content = video ID); without it you can only join by date or landing page. One row per video then shows views, site sessions and conversions.

Part of our guide: How to answer questions across multiple spreadsheets

The problem: two systems, no shared ID

YouTube Studio reports views, watch time and subscribers per video. GA4 reports what happened when people arrived on your site. By default GA4 sees YouTube visits as source youtube.com (or m.youtube.com) with medium referral, without saying which video the click came from. To answer “which videos send buyers?”, you need to put the video identity into the link.

Tag links in video descriptions

Add UTM parameters to every link in descriptions, pinned comments and end screens that point to your site:

https://example.com/pricing?utm_source=youtube&utm_medium=video&utm_campaign=tutorials&utm_content=dQw4w9WgXcQ

Use the video ID (the part after watch?v= in its URL) as utm_content. It never changes, unlike titles, and it's a column in YouTube Studio exports, so it becomes the join key. GA4 reports utm_content as the Session manual ad content dimension.

Links in descriptions pass through a YouTube redirect, and some in-app browsers don't pass referrer data. UTMs survive this; referrer-based source detection may not, so expect some YouTube visits to show as direct.

What to export

Exports for the join
SourceReportColumns
YouTube StudioAnalytics → Advanced mode → Content, exportedContent (video ID), Video title, Views, Watch time (hours), Subscribers
GA4Exploration filtered to Session source contains youtubeSession manual ad content, Landing page, Sessions, Engaged sessions, Key events, Total revenue

Use the same date range in both. YouTube Studio data typically lags by a day or two, so leave a gap before the end date. If you already join several GA4 properties, the same approach applies — see combining GA4 properties into one report.

Join on video ID

SELECT y."Video title", y."Views", y."Watch time (hours)",
       COALESCE(g.sessions, 0) AS site_sessions,
       COALESCE(g.key_events, 0) AS key_events,
       g.sessions * 1000.0 / NULLIF(y."Views", 0) AS sessions_per_1k_views
FROM youtube y
LEFT JOIN (
  SELECT "Session manual ad content" AS video_id,
         SUM("Sessions") AS sessions, SUM("Key events") AS key_events
  FROM ga4_youtube
  GROUP BY 1
) g ON g.video_id = y."Content"
ORDER BY key_events DESC;

Sessions per 1,000 views normalises for reach: a niche video with few views can still be the best traffic driver per viewer.

Worked example: four videos, Q3

YouTube Studio joined to GA4 by video ID, Q3 2026
videoviewswatch hourssite sessionskey eventssessions per 1k views
Setup tutorial4000032006003015
Product comparison120009004803640
Behind the scenes2500015005012
Customer story80006401601220
Total850006240129079

The setup tutorial has the most views, but the product comparison sends 40 sessions per 1,000 views and the most key events (36). Behind-the-scenes content builds the channel but sends almost no one to the site. GA4 also recorded 210 YouTube-referred sessions with no utm_content — untagged links or older videos — so the 1,290 tagged sessions are a floor, not the total.

Without UTM tags

For past videos you can't retro-tag, two weaker joins are possible:

  • By landing page: if each video links to a distinct page, join GA4 landing pages to a table mapping page → video.
  • By date: compare daily YouTube-referred sessions with each video's publish date. This shows launch spikes but can't separate overlapping videos.

Analistable can pull the GA4 report through its Google Analytics connection and read your YouTube Studio CSV alongside it, then answer “which videos drove key events last quarter?” in the browser. It reads the data and doesn't change your channel or property. More cross-source patterns are in the guide to answering questions across spreadsheets.

Which metrics belong in the joined report

YouTube Studio offers dozens of metrics. For a video-to-site report, a handful is enough, and adding more makes the table harder to read:

Metrics worth keeping
MetricFromWhy
ViewsYouTube StudioReach of the video
Watch time (hours)YouTube StudioDepth of attention
SessionsGA4Visits the video sent to the site
Engaged sessionsGA4Visits that weren't immediate bounces
Key eventsGA4Sign-ups, purchases or leads from those visits
Sessions per 1k viewsCalculatedCompares videos of different reach

Engagement rate (engaged sessions ÷ sessions) is worth a look per video. A video that promises something the landing page doesn't deliver shows high sessions and low engagement — a message mismatch rather than a traffic problem.

Keep the publish date as a column too. A video published in the last week of the quarter has had a fraction of the time to earn views and clicks, so compare it with others at the same age or leave it out of the ranking until it has caught up.

Shorts and paid video

Shorts have limited link options compared with long-form videos, so expect far fewer site sessions from them and judge them on channel growth instead. Paid video campaigns run through Google Ads have their own reporting and auto-tagging (gclid), so keep them out of this organic comparison and analyse them with your other ad data, as in merging GA4 with ad cost data.

Make tagging a habit

Add the tagged link to your video upload checklist, built from a template with the video ID filled in once the video is uploaded. Update descriptions of your top ten older videos as well; they often still send most of the traffic.

Once every new video is tagged, the join becomes a monthly routine: export, load, join, and read the sessions-per-1k-views column. Over a few quarters it shows which formats — tutorials, comparisons, case studies — send visitors who convert, which is the question the two tools can't answer on their own.

Checking the join worked

Before reading the results, compare the total of tagged sessions in the joined table with GA4's total for session source containing youtube. The tagged share tells you how much of YouTube traffic the report explains. If it's below half, most traffic is coming from untagged links — older videos, comments, community posts or channel links — and the per-video ranking only covers part of the picture. Also check that every video ID in GA4 matches one in the YouTube export; an unmatched ID usually means a typo in a description link.

Frequently asked questions

Can I include channel-page and About-page links?
Yes. Tag them with a fixed utm_content such as channel_about so they appear as their own row instead of being lumped in with untagged traffic.
Does YouTube strip UTM parameters?
Description links go through a YouTube redirect, but the destination URL, including its query string, is passed through. Test one link from a logged-out browser and check GA4's real-time report to confirm.
Should I join on publish month instead of view month?
Use the date range of views and sessions, not publish date. Older videos keep sending traffic, and a publish-month join hides that long tail.
Does GA4 have a YouTube integration that does this?
Not as a per-video join. Linking Google Ads to YouTube helps with paid video campaigns, but organic video-to-site analysis still relies on tagged links.
Can I use video title instead of video ID?
You can, but titles change and can contain characters that get encoded differently in URLs. The video ID is stable and appears in both exports.
Why are YouTube sessions in GA4 higher than clicks in YouTube Studio?
YouTube's card and end-screen click metrics don't cover description links, and one viewer may visit several times. They measure different things, so don't expect them to match.

Related guides