SGA Dental Partners · Marketing Operations
Marketing Attribution Data Flow
How paid media, calls, and form leads land in one place. Today everything aggregates in Google Sheets for clean company-level attribution. The data warehouse is the next chapter.
Owner
Growth Team
Date
May 6, 2026
Current Sink
Google Sheets
Future Sink
Marketing Data Warehouse
Marketing Sources
Capture Layer
Aggregation
Destination
Paid Search
Google Ads
Clicks, GCLID, campaign and keyword data on every form fill or call.
Paid Search
Microsoft Ads
Bing inventory. MSCLKID and campaign metadata flow with the lead.
Paid Social
Meta Ads
Facebook and Instagram. FBCLID, ad set, creative, placement.
Call Tracking
CallRail Numbers
Dynamic numbers per source. Every ring is tagged to its origin channel.
Form Capture
GoHighLevel
Every web form, landing page, and chat lead lands here as a contact.
What GHL captures on the contact
gclid msclkid fbclid utm_source utm_medium utm_campaign utm_content utm_term device name phone email landing_page
Call Capture
CallRail
Calls with source, duration, recording, and first-time vs repeat caller.
What CallRail captures on the call
source campaign keyword caller_name caller_phone duration first_call qualified
Aggregation
Coupler.io
Pulls GHL contacts and CallRail calls on a schedule. Normalizes columns, stamps run timestamps, writes everything into one destination.
Refresh
hourly append + dedupe
Today
Google Sheets
Single workbook, one tab per source. Pivots and a top-line ROAS view sit on top. This is the source of truth for company-level attribution today.
Tabs
ghl_contacts callrail_calls spend_google spend_msft spend_meta revenue
Next Quarter
Marketing Data Warehouse
Postgres for ops, ClickHouse for analytics, Power BI on top. Same Coupler pipes, cleaner joins, location-level views.
Closing the Loop
Revenue back to the lead, so we can compute true ROAS
Production revenue lives in each practice's DPMS. We export it, push it into GoHighLevel, and match it to the originating contact on name and phone. From there it rides the same Coupler pipeline into the sheet.
Step 1
Practice DPMS
Dentrix, Eaglesoft, Open Dental
Step 2
Revenue Export
Patient + production by visit
Step 3
Upload to GoHighLevel
Attached to existing contact
match on name + phone
Step 4
Coupler → Sheet
Revenue rides the same pipe
Why This Works Today
One sheet, every channel, real attribution
GHL holds the click IDs and UTMs from the moment a lead arrives. Coupler keeps the sheet fresh. We can already answer "what did Google Ads return last month" at a company level.
The Tradeoff
Sheets are flat, joins are manual
Per-location and per-procedure cuts get fragile in a workbook. Name and phone matching is good, not perfect. We accept that for the speed of getting clean ROAS now.
What Comes Next
Same flow, warehouse destination
When the warehouse goes live, Coupler points at Postgres and ClickHouse instead of Sheets. Power BI replaces the pivots. Nothing upstream changes.
Google Ads Microsoft Ads Meta Ads CallRail GoHighLevel Coupler.io Google Sheets (today) Data Warehouse (next)