Resolving CallRail and GA4 Attribution Discrepancies?

Question from Reddit user:

I work for an agency that utilzies CallRail to track calls made from Google Ads for both on site calls and ad extension calls.

We discovered that GA4 properties that have been integrated with CallRail are sending call data into GA4 in a way that is make reporting difficult.

In short, CallRail is still sending call data into GA4 with tagging for dimensions such as “source’ or “medium” as they were for Universal Analytics. This causes an issue as GA4 does not use the dimensions “source” and “medium” for its attribution any longer.

They instead use “sessions source” and “session medium” or “user source” and “user medium”.

The is resulting in phone_call conversions being attributed with a value of (not set) for the dimensions of “session source / medium” or “session source / medium” and a calue of “Unassigned” the dimnesnion of “sessions default channel grouping”.

While we can report on data directly from Google Ads it obviolsy leaves us with the inabailityto fully utilize GA4 for goal reporting.

In speaking with CallRail, they did note they were aware of this issue but have no imeddiate plans for an update.

As such, I was wondering if anyone other there found a way to transform the data in GA4 to correect these attirbution issues or if there is a different platform that has solved this issue I should be exploring?

Answer from Nabil:

The short answer is:

How do I resolve attribution discrepancies between CallRail and GA4?

You’ve correctly identified the root cause of the GA4 attribution discrepancy: CallRail is sending custom parameters like source and medium that are event-level parameters, which do not automatically override the session-level dimensions like session source / medium or session default channel grouping, resulting in the dreaded (not set) or Unassigned attribution.

The immediate technical solution is to use Google Tag Manager to capture the current session’s attribution parameters (the session source, session medium, etc.) right before the call event fires and then pass those values as custom event parameters along with the phone_call conversion.

However, the most robust and future-proof solution is to implement server-side tracking using the CallRail API to link call conversions to Google Ads and GA4 via the Measurement Protocol.

The long answer is:

It’s frustrating when platform integrations don’t keep up with changes in the destination system, but the core problem here is a fundamental shift in GA4’s data model.

In Universal Analytics, a simple source and medium parameter on an event was often enough to hijack the session’s attribution; in GA4, attribution is much more rigid and built around the session_start event, making the session-level dimensions the source of truth.

The phone_call event is not a session_start event, so the event-level source and medium sent by CallRail are being ignored for session-level attribution, leading to the Unassigned result.

The best path forward is to build a server-side solution that gives you complete control over the data being sent to GA4 and allows you to link the call back to the original Google Ads click with certainty, regardless of browser or cookie issues.

This involves using the Google Ads API, the CallRail API, the Google Analytics Data API, and a server-side tagging environment like Stape or Google Cloud Platform.

Here is the in-depth solution: First, ensure that the Google Click ID (gclid) is consistently captured and associated with every call lead in CallRail, which it generally does automatically.

Second, instead of relying on CallRail’s built-in GA4 integration, you disable it and use the CallRail API to extract the call conversion data, including the gclid.

Third, you use the Google Ads API to look up the full campaign, ad group, and keyword details associated with that gclid.

Fourth, you use the Google Analytics Data API to find the initial session data in GA4 associated with the user who generated that gclid.

Finally, you use your server-side GTM container (Stape or GCP) to combine the call data from CallRail, the click data from Google Ads, and the session data from GA4.

You then send a single, authoritative phone_call event to GA4 via the Measurement Protocol, ensuring you include the correct session parameters like session_id, client_id, and explicitly setting the full attribution path using custom parameters that are then mapped correctly in GA4 to populate the session-level dimensions.

This powerful, server-side method completely bypasses the limitations of CallRail’s current client-side integration and provides you with accurate, consistent, and first-party-validated attribution for your calls.

About The Author