Skip to content

Call Tracking Attribution Workflow

Track phone calls with UTM attribution and update CRM automatically


Overview

This intermediate workflow demonstrates how to capture incoming phone calls, match them to existing leads, attribute calls to marketing sources using UTM parameters, and log all call activity in your CRM.

What You'll Build: - Capture incoming call notifications - Match caller to existing contact - Extract UTM attribution from call source - Update CRM with call details and source - Calculate marketing ROI

Real-World Applications: - Marketing attribution tracking - Lead source analysis - Call center automation - Sales performance monitoring - ROI calculation


Workflow Diagram

graph LR
    A[Call Tracking<br/>TRIGGER] --> B[Match to Client<br/>Find by Phone]
    B --> C[Variable<br/>Extract UTM Data]
    C --> D[Edit Client<br/>Update Attribution]
    D --> E[Workflow Note<br/>Log Call]
    E --> F{If Statement<br/>Source=Google Ads?}
    F -->|Yes| G[Google Ads<br/>Upload Conversion]
    F -->|No| H[End]
    G --> H

Tasks Used

Order Task Type Purpose Difficulty
1 Call Tracking Trigger Capture call events ⭐⭐ Intermediate
2 Match to Client Find contact by phone ⭐ Beginner
3 Variable Parse UTM parameters ⭐⭐ Intermediate
4 Edit Client Update attribution fields ⭐ Beginner
5 Workflow Note Log call activity ⭐ Beginner
6 If Statement Check call source ⭐ Beginner
7 Google Ads Track conversion ⭐⭐⭐ Advanced

Total Setup Time: 30 minutes
Skill Level: Intermediate
Prerequisites: Call tracking numbers configured, UTM tracking active, Google Ads connection (optional)


Step-by-Step Setup

Step 1: Configure Call Tracking Numbers

Before building workflow, set up tracking numbers:

  1. Go to Settings → Call Tracking
  2. Click Add Tracking Number
  3. Configure:
  4. Number: +1-555-TRACK-01
  5. Forward To: Main business line
  6. Call Whisper: "This call is from Google Ads campaign"
  7. Recording: Enabled
  8. Repeat for each marketing source

Example Numbers: - Google Ads: +1-555-GOOGLE - Facebook Ads: +1-555-FACEBOOK - Organic Search: +1-555-ORGANIC - Direct Mail: +1-555-DIRECT


Step 2: Create Workflow

  1. Go to Settings → Automation
  2. Click Add Workflow
  3. Configure:
  4. Name: Call Tracking Attribution
  5. Description: Track calls and update CRM with attribution
  6. Click Create Workflow

Step 3: Add Call Tracking Trigger

  1. Click Add Task on canvas
  2. Select Call Tracking Trigger
  3. Configure:
  4. Trigger Event: Call Completed
  5. Tracking Numbers: All (or select specific numbers)
  6. Minimum Call Duration: 30 seconds (filter out wrong numbers)
  7. Call Status: Answered (exclude missed calls)
  8. Task Name: Call Received

Output Variables:

{{task_1001_caller_phone}}           // Caller's phone number
{{task_1001_caller_name}}            // Caller ID name (if available)
{{task_1001_tracking_number}}        // Which number was called
{{task_1001_call_duration}}          // Call length in seconds
{{task_1001_call_recording_url}}     // Recording URL
{{task_1001_call_timestamp}}         // When call occurred
{{task_1001_utm_source}}             // UTM source parameter
{{task_1001_utm_medium}}             // UTM medium
{{task_1001_utm_campaign}}           // Campaign name
{{task_1001_utm_content}}            // Ad content/variation
{{task_1001_utm_term}}               // Search term (PPC)
{{task_1001_gclid}}                  // Google Click ID
{{task_1001_call_status}}            // answered/missed/voicemail

Call Tracking Trigger


Step 4: Match Caller to Contact

  1. Click Add Task after trigger
  2. Select Match to Client
  3. Configure:
  4. Parent Task: Call Received
  5. Match by: Phone
  6. Phone Field: {{task_1001_caller_phone}}
  7. Name Field: {{task_1001_caller_name}}
  8. Create if not found: ✅ Yes (create new lead from cold call)
  9. Initial Status: "Lead" (for new contacts)
  10. Initial Tags: Phone Inbound
  11. Task Name: Find or Create Contact

What This Does: - Searches for existing contact by phone number - Creates new lead if first time calling - Associates call with customer record - Tags new leads as phone inquiries

Output:

{{task_1002_client_id}}              // Contact ID
{{task_1002_is_new_client}}          // true/false
{{task_1002_client_name}}            // Contact name
{{task_1002_client_phone}}           // Formatted phone


Step 5: Parse and Store UTM Attribution

  1. Click Add Task after Match to Client
  2. Select Variable
  3. Configure:
  4. Parent Task: Find or Create Contact
  5. Variable Name: attribution_data
  6. Value Type: Object/JSON
  7. Calculation:
    // Extract and clean UTM parameters
    const source = '{{task_1001_utm_source}}' || 'Direct';
    const medium = '{{task_1001_utm_medium}}' || 'phone';
    const campaign = '{{task_1001_utm_campaign}}' || 'none';
    const content = '{{task_1001_utm_content}}' || '';
    const term = '{{task_1001_utm_term}}' || '';
    const gclid = '{{task_1001_gclid}}' || '';
    
    // Determine attribution channel
    let channel = 'Direct';
    if (source.toLowerCase().includes('google')) {
      channel = medium === 'cpc' ? 'Google Ads' : 'Google Organic';
    } else if (source.toLowerCase().includes('facebook')) {
      channel = 'Facebook Ads';
    } else if (source.toLowerCase().includes('bing')) {
      channel = 'Bing Ads';
    } else if (medium === 'referral') {
      channel = 'Referral';
    }
    
    // Calculate attribution value (example: call value $50)
    const callValue = 50.00;
    
    return {
      source: source,
      medium: medium,
      campaign: campaign,
      content: content,
      term: term,
      gclid: gclid,
      channel: channel,
      call_value: callValue,
      attribution_date: '{{task_1001_call_timestamp}}'
    };
    
  8. Task Name: Parse Attribution Data

Output:

{{task_1003_source}}                 // Cleaned source
{{task_1003_medium}}                 // Medium
{{task_1003_campaign}}               // Campaign name
{{task_1003_channel}}                // Attribution channel
{{task_1003_gclid}}                  // Google Click ID
{{task_1003_call_value}}             // Assigned value

Variable Attribution Parsing


Step 6: Update Contact with Attribution

  1. Click Add Task after Variable
  2. Select Edit Client
  3. Configure:
  4. Parent Task: Parse Attribution Data
  5. Client ID: {{task_1002_client_id}}
  6. Action: Update Custom Fields
  7. Custom Fields:
    • first_call_source = {{task_1003_source}} (only if new)
    • first_call_channel = {{task_1003_channel}} (only if new)
    • last_call_date = {{current_date}}
    • last_call_source = {{task_1003_source}}
    • last_call_campaign = {{task_1003_campaign}}
    • total_calls = {{existing_total + 1}}
    • gclid = {{task_1003_gclid}}
  8. Tags: Add Inbound Call, {{task_1003_channel}}
  9. Task Name: Update Attribution Fields

Field Strategy: - First Touch: Capture initial attribution (never overwrite) - Last Touch: Track most recent source - Call Count: Increment total call counter - GCLID: Store for Google Ads conversion tracking


Step 7: Log Call in Timeline

  1. Click Add Task after Edit Client
  2. Select Workflow Note
  3. Configure:
  4. Parent Task: Update Attribution Fields
  5. Client ID: {{task_1002_client_id}}
  6. Note Type: Call
  7. Note:
    📞 Inbound Call Received
    
    **Call Details:**
    - Duration: {{task_1001_call_duration}} seconds
    - Tracking Number: {{task_1001_tracking_number}}
    - Status: {{task_1001_call_status}}
    - Recording: {{task_1001_call_recording_url}}
    
    **Attribution:**
    - Source: {{task_1003_source}}
    - Channel: {{task_1003_channel}}
    - Campaign: {{task_1003_campaign}}
    - Medium: {{task_1003_medium}}
    - Search Term: {{task_1003_term}}
    
    **Caller Information:**
    - Phone: {{task_1001_caller_phone}}
    - Name: {{task_1001_caller_name}}
    - New Contact: {{task_1002_is_new_client}}
    
    Call Value: ${{task_1003_call_value}}
    
  8. Attachments: {{task_1001_call_recording_url}}
  9. Task Name: Log Call Activity

Call Log in Timeline


Step 8: Check if Google Ads Call

  1. Click Add Task after Workflow Note
  2. Select If Statement
  3. Configure:
  4. Parent Task: Log Call Activity
  5. Condition Type: Text comparison
  6. Field 1: {{task_1003_channel}}
  7. Operator: Equals
  8. Field 2: Google Ads
  9. Task Name: Check if Google Ads

What This Does: - Identifies calls from Google Ads campaigns - Enables conversion tracking back to Google - Allows for ROI calculation


Step 9: Upload Conversion to Google Ads (Optional)

  1. Click Add Task on TRUE branch
  2. Select Google Ads
  3. Configure:
  4. Parent Task: Check if Google Ads (TRUE)
  5. Action: Upload Offline Conversion
  6. App Connection: Select Google Ads connection
  7. Customer ID: Your Google Ads customer ID
  8. Conversion Action: Phone Call Lead (configured in Google Ads)
  9. GCLID: {{task_1003_gclid}}
  10. Conversion Date/Time: {{task_1001_call_timestamp}}
  11. Conversion Value: {{task_1003_call_value}}
  12. Currency: USD
  13. Task Name: Track Google Ads Conversion

Prerequisites: - Google Ads offline conversion tracking enabled - Conversion action "Phone Call Lead" created - GCLID parameter in tracking URLs

What This Does: - Reports phone call as conversion to Google Ads - Enables accurate ROI tracking - Feeds data back into Google's optimization algorithms - Links call to original ad click

Google Ads Conversion Upload


Step 10: Test Workflow

Test with Sample Call:

  1. Place test call to tracking number
  2. Stay on line for 30+ seconds
  3. Check workflow execution

Expected Results:

  1. ✅ Call captured with all details
  2. ✅ Contact matched/created
  3. ✅ UTM parameters parsed correctly
  4. ✅ Attribution fields updated in CRM
  5. ✅ Call logged in timeline
  6. ✅ Google Ads conversion tracked (if applicable)

Verify: - Check contact record for new call log - Verify custom fields updated - Confirm tags added - Listen to call recording - Check Google Ads conversions (24-hour delay)


Expected Output

For Each Inbound Call:

  1. Call details captured in real-time
  2. Contact created/matched within 1 second
  3. Attribution updated with source data
  4. Timeline logged with call recording
  5. Conversion tracked in ad platform
  6. Marketing ROI calculable

Marketing Insights: - Which channels drive most calls - Cost per call by source - Call-to-conversion rate - Campaign performance comparison


Common Issues & Solutions

Issue: UTM parameters showing as empty

Cause: Tracking URL not configured with UTM parameters

Solution: 1. Add UTM parameters to all marketing URLs:

https://yoursite.com/?utm_source=google&utm_medium=cpc&utm_campaign=summer_sale&gclid={gclid}
2. Verify call tracking script passes UTM to webhook 3. Test by clicking URL with UTMs before calling 4. Check browser cookies for UTM storage


Issue: Duplicate contacts being created

Cause: Phone number formatting mismatch

Solution: 1. Use Phone Formatter task before Match to Client:

Format: E.164 (+1234567890)
Country: Auto-detect
2. Standardize all existing phone numbers in CRM 3. Enable "Match by Phone" with fuzzy matching


Issue: GCLID not captured

Cause: GCLID not in tracking URL or expired

Solution: 1. Add {gclid} parameter to Google Ads destination URLs 2. Store GCLID in cookie (90-day retention) 3. Pass GCLID through contact form submissions 4. Verify call tracking script extracts GCLID from session


Issue: Google Ads conversion not showing

Cause: Conversion action not properly configured

Solution: 1. Verify conversion action exists in Google Ads 2. Check conversion action is "importable" 3. Wait 24 hours for processing (Google delay) 4. Verify GCLID is valid (not expired >90 days) 5. Check Google Ads conversion upload logs


Issue: Call value incorrect

Cause: Static value assigned to all calls

Solution: Use dynamic call value calculation:

// In Variable task
let callValue = 0;

// High-value keywords get higher attribution
if ('{{task_1003_term}}'.includes('enterprise')) {
  callValue = 500;
} else if ('{{task_1003_term}}'.includes('pricing')) {
  callValue = 100;
} else {
  callValue = 50; // Default
}

// Longer calls more valuable
if ({{task_1001_call_duration}} > 300) {
  callValue *= 1.5;
}

return { call_value: callValue };


Workflow Enhancements

Add Call Recording Transcription

Use Speech to Text task after call:

Action: Transcribe Recording
Audio URL: {{task_1001_call_recording_url}}
Output: {{task_XXXX_transcription}}

Then use AI Prompt to analyze transcript:
- Extract customer intent
- Identify product interest
- Detect urgency level
- Suggest follow-up actions

Add Multi-Touch Attribution

Track entire customer journey:

Custom Fields:
- touch_1_source, touch_1_date
- touch_2_source, touch_2_date
- ...
- touch_n_source, touch_n_date

Each interaction adds new touch point
Final conversion credits all touches

Add SMS Follow-Up

Send SMS after missed calls:

If {{task_1001_call_status}} equals missed:
  Send SMS:
  "Sorry we missed your call! Reply here or 
  call us back at {{business_number}}. - Company Name"

Add Google Sheets Logging

Log all calls to spreadsheet for analysis:

Google Sheets task:
Action: Append Row
Values:
{{current_date}}, {{task_1001_caller_phone}}, 
{{task_1001_call_duration}}, {{task_1003_source}},
{{task_1003_campaign}}, {{task_1003_call_value}}

Creates call attribution report

Add Lead Scoring

Assign points based on call behavior:

Lead Score Calculation:
- First call: +10 points
- Call > 2 minutes: +20 points
- From paid ad: +15 points
- Multiple calls: +5 per call
- Business hours call: +10 points




Next Steps

You've built a complete call attribution system!

Try these enhancements: 1. Add call recording transcription and AI analysis 2. Create attribution reports in Google Sheets 3. Set up multi-touch attribution modeling 4. Build lead scoring based on call behavior 5. Track full customer journey from ad to call to purchase

Need help? Check Call Tracking Guide or Attribution Best Practices