You asked us to reconcile the RFQ counts across the CRM, GA4, Google Ads and Microsoft Ads — say which to trust, and explain why they differ. Two questions, answered with the work shown. All on website RFQs only, settled days, against the CRM as the source of truth.
Bottom line
Which GA4 tag should we trust?
rfq_thankyoupage_w_rfqid_gtm — tracks the CRM to +2.7%
Do the ad platforms reconcile?
Yes — Google +2.1% over GA4 (modeled, expected). Microsoft's first-party check pends its API.
Microsoft Ads API isn't connected yet. We show GA4's Microsoft-Paid segment (observed), but can't pull Microsoft's platform-reported count first-party this window. Native API access is the open follow-up — it completes the Microsoft comparison; it won't change the conclusion.
Question 1
Which GA4 tag should we trust for website RFQs?
How we reached it
You run three GA4 events in parallel to test tracking methods. We compared each, day by day, against the CRM's Website RFQs — the settled source of truth — over Jun 15–24 (settled weekdays). Closest to the CRM, without over- or under-counting, wins.
CRM Websitethe truth · 1,009
ref
w_rfqid_gtmgated on valid rfq_id
+2.7%
gtmfires broadly
+6.3%
gafires broadly
+6.2%
Date
CRM Web
w_rfqid_gtm
gtm
ga
Jun 15
123
132
136
136
Jun 16
174
179
184
184
Jun 17
123
118
122
122
Jun 18
127
132
141
141
Jun 19
96
98
100
100
Jun 22
114
123
129
129
Jun 23
132
131
136
135
Jun 24
120
123
125
125
Total
1,009
1,036
1,073
1,072
Answer
Use rfq_thankyoupage_w_rfqid_gtm. It tracks the CRM to +2.7%; gtm (+6.3%) and ga (+6.2%) over-count because they fire on events that aren't always a valid RFQ.
Takeaway: make w_rfqid_gtm the canonical website-RFQ signal everywhere — dashboards, the offline-conversion match, alerts. Keep the other two for tracking experiments only.
A live catch (Jun 25). The two broad tags — gtm and ga — stopped recording at ~noon UTC on Jun 25 (a hard cliff in the hourly data), while w_rfqid_gtm kept firing and matching the CRM. That's why this comparison ends Jun 24. It points to a GTM/tag change that day worth checking — and it's the strongest case yet to standardize on w_rfqid_gtm: when the broad tags failed, it didn't.
Question 2
Do Google Ads and Microsoft Ads reconcile?
How we reached it
Each ad platform only sees its own paid clicks, so we compared each platform's reported RFQs against GA4's paid segment for that platform — like for like — over the same Jun 15–24 window. Google is a first-party refresh; Microsoft's platform count still awaits its API (below).
Google
Google Ads · RFQs625
GA4 · Google Paid612
+2.1% — Ads runs higher (modeled)
Microsoft GA4-observed · API pending
GA4 · Microsoft Paid161
Microsoft Ads · RFQspending API
no first-party delta yet · prior window +5.1%
Google Ads runs a few percent above what GA4 observed. That's expected: ad platforms are modeled and click-dated — they credit the day of the click and model unobserved conversions — while GA4 is observed and event-dated. Microsoft: we can see GA4's Microsoft-Paid segment (161), but without a Microsoft Ads API connection we can't pull its platform-reported count first-party this window — on the prior window it ran +5.1% over GA4, the same pattern. Wiring the native API completes it.
Answer
Yes — Google reconciles to GA4 within ~2% (Ads modeled, runs a touch higher). The small excess is attribution method, not lost or phantom conversions — structural and stable. Microsoft's first-party check awaits its API; the pattern is the same.
Takeaway: trust each ad platform for its own optimization (modeled is fine there), but report the true paid count from GA4 / the CRM — not the platform totals.
Which system to trust for which question
Question
Trust
Why
How many RFQs total (incl. phone/email)?
CRM · Total RFQs
Only the CRM sees non-web RFQs (~⅓ of the total).
How many website RFQs?
CRM · Website RFQs
Settled source of truth; the denominator.
Is web tracking healthy / which tag?
GA4 · w_rfqid_gtm
Tracks the CRM to +2.7%; validates the signal — and it kept firing when the broad tags broke.
How is paid Google / Microsoft performing?
Google Ads / Microsoft Ads
Modeled + click-dated; runs ~4–5% over observed — for optimization, not the true count.
What the non-web third is made of
Every comparison above is against Website RFQs for one structural reason: a large share of activity never touches the website — it arrives by phone, email, or the customer portal, and only the CRM sees it. Here's that non-web slice of converted deals (Quotes + Orders), by channel, over the 60-day window — the conversions GA4 and the ad platforms simply can't measure.
Email DirectEMD
1,640
PhonePHN
73
Phone DirectPHND
30
Email MarketingEM
13
Customer PortalCP
5
1,761 non-web converted deals in the 60-day window — overwhelmingly Email Direct · 1,631 carry consented email/phone. They have no ad click to attribute, so they're never part of the offline-conversion upload or any platform comparison — this is the structural reason "Total" always exceeds what GA4 or the ad platforms can show.
How this connects to Ask 1. The offline-conversions Marketing Worker feeds Google Ads the matched Quote/Order outcomes it can't self-attribute — closing the recoverable part of that paid gap over time. Reconciliation is how you'll watch it move.
Basis. Website RFQs only (rfq_source_id = 1) · unsettled days excluded · settled window Jun 15–24 (weekdays; ends Jun 24 — the broad tags broke Jun 25). Google Ads first-party; Microsoft's platform count pends the Microsoft Ads API. CRM = source of truth (Supabase). GA4 events via the GA4 Data API; Google Ads via the RFQs conversion action; Microsoft via GA4's paid segment + your reporting audit (native API pending). Cross-checked against your Reporting Audit sheet — same numbers, reproducible first-party (python -m fourstar.recon --reconcile). Read-only — this surface only reads and compares; it never writes.