How to Track ROI Per Lead Source in GoHighLevel (Without Third-Party Tools)
TL;DR
You can track ROI by lead source directly in GoHighLevel using custom fields, opportunity pipelines, and native dashboards. Set up three custom fields (revenue, ad spend, source), configure your pipeline to capture source data, build a dashboard widget to display ROI by channel, and automate the calculation with a workflow that runs when deals close. No Zapier, no spreadsheets, no third-party analytics. Start building your ROI tracking system in GoHighLevel and know exactly which channels drive profit.
🏆 Start your Highlevel journey today
The Problem: You're Spending Money Without Knowing What Works
Your CRM shows 200 leads from Facebook and 50 from Google Ads. Which one made you more money? You don't know because you're not tracking revenue and cost at the source level.
This creates three expensive problems. First, you overspend on channels that generate cheap leads but low-value customers. Second, you underfund channels that bring fewer leads but higher revenue. Third, you make decisions based on volume instead of profit.
GoHighLevel's built-in custom fields, opportunity pipelines, and dashboards solve this without adding tools to your stack.
What Custom Fields Do You Need to Track ROI?
You need three custom fields attached to each opportunity: revenue, ad spend, and lead source.
Revenue captures the deal value when it closes. This is your income from that specific customer. Set this as a currency field so GoHighLevel formats it correctly in reports.
Ad Spend tracks how much you invested to acquire that lead. If you spent $500 on Facebook Ads and generated 10 leads, each lead costs $50. Assign that cost to the lead when it enters your system. Use a currency field here too.
Lead Source identifies where the lead came from. Create a dropdown with your active channels: Google Ads, Facebook Ads, SEO, Referral, Cold Outreach, Direct. Keep it simple and standardized so your data stays clean.
Here's how to add them. Go to Settings → Custom Fields → Opportunities. Click "Add Field" and create each one. Name them clearly: deal_revenue, acquisition_cost, lead_source. Set the field type to Currency for revenue and ad spend, and Dropdown for lead source.
Once these fields exist, you'll populate them manually or via automation depending on your lead capture method. Set up your custom fields in GoHighLevel now and start tracking the data that matters.
How Do You Configure Your Opportunity Pipeline to Capture Source Data?
Your pipeline needs to connect lead source to each deal automatically. This happens at the point of contact creation or form submission.
When someone fills out your landing page form, GoHighLevel can pass UTM parameters or hidden form fields into custom fields. Add three hidden fields to your form: revenue (leave blank initially), ad_spend (pre-populate with your cost per lead), and lead_source (auto-fill based on UTM source).
Example: Your Facebook Ad sends traffic to a landing page with UTM parameters ?utm_source=facebook&utm_campaign=jan2025. Your form captures utm_source and writes "Facebook Ads" to the lead_source custom field. Your form also writes $45 to the ad_spend field because that's your current Facebook CPL.
If you're manually adding leads or they come through phone calls, train your team to fill these fields when creating the opportunity. Make lead_source and ad_spend required fields so no opportunity moves through the pipeline without this data.
For referral leads, set ad_spend to $0 unless you pay referral fees. For SEO, calculate your monthly SEO cost divided by monthly organic leads to get cost per lead, then apply that to each SEO opportunity.
This setup ensures every opportunity in your pipeline has the three data points you need to calculate ROI. Learn advanced pipeline configuration in GoHighLevel Bootcamp to automate even more of this process.
How Do You Build a Dashboard to Display ROI by Lead Source?
GoHighLevel's dashboard builder lets you create custom reports that calculate and display ROI by source in real time.
Navigate to Reporting → Dashboards → Create New Dashboard. Name it "Lead Source ROI Tracker" or something equally direct. Now add widgets.
First widget: Revenue by Lead Source. Choose a bar chart. Set the data source to Opportunities, filter by stage "Closed Won," group by lead_source, and display sum of deal_revenue. This shows which sources generate the most revenue.
Second widget: Ad Spend by Lead Source. Same bar chart format, but display sum of acquisition_cost grouped by lead_source. Now you see how much you invested per channel.
Third widget: ROI by Lead Source (the important one). This requires a calculated field. GoHighLevel's dashboard builder supports basic calculations. Create a formula widget that pulls deal_revenue minus acquisition_cost, divides by acquisition_cost, then multiplies by 100.
The formula looks like this:
ROI = (Revenue - Ad Spend) / Ad Spend × 100
If your Facebook Ads generated $10,000 in revenue and cost you $2,000, your ROI is (10000 - 2000) / 2000 × 100 = 400%. You made $4 for every $1 spent.
If Google Ads brought in $8,000 but cost $3,000, your ROI is (8000 - 3000) / 3000 × 100 = 166%. Still profitable, but less efficient than Facebook.
Display this as a table with columns: Lead Source, Total Revenue, Total Ad Spend, ROI %. Sort by ROI descending so your best-performing channel sits at the top.
Set the date range to "Last 30 Days" or "Last Quarter" depending on your sales cycle. Refresh the dashboard daily so your data stays current.
Can You Automate ROI Calculation When a Deal Closes?
Yes. Build a workflow that triggers when an opportunity moves to "Closed Won" and automatically calculates ROI, then stores it in a custom field or sends a notification to your team.
Go to Automation → Workflows → Create Workflow. Set the trigger to "Opportunity Stage Changed" with the condition "New Stage = Closed Won."
Add an action: "Update Opportunity Custom Field." Create a new custom field called calculated_roi if you haven't already. Use GoHighLevel's formula builder to calculate:({{opportunity.deal_revenue}} - {{opportunity.acquisition_cost}}) / {{opportunity.acquisition_cost}} * 100
This writes the ROI percentage directly to the opportunity record. Now you can filter and report on opportunities by ROI.
Add a second action: "Send Internal Notification" to Slack or email. Include the lead source, revenue, ad spend, and calculated ROI so your team sees results immediately.
Example notification:
"New deal closed! Source: Google Ads | Revenue: $5,000 | Ad Spend: $800 | ROI: 525%"
This workflow eliminates manual spreadsheet updates and gives you instant feedback on what's working. Explore GoHighLevel's automation capabilities to extend this logic to other parts of your funnel.
What Metrics Should You Track Alongside ROI?
ROI per source is your north star metric, but you need supporting data to make decisions.
Cost Per Acquisition (CPA): Total ad spend divided by number of leads. If your Facebook Ads cost $2,000 and generated 50 leads, your CPA is $40. Compare this across channels to identify the cheapest lead sources.
Close Rate by Source: Percentage of leads that become customers. If Google Ads sends 100 leads and 20 close, your close rate is 20%. A lower CPA means nothing if the close rate is 5%.
Average Deal Size by Source: Total revenue divided by number of closed deals. Referrals might have a higher average deal size ($8,000) than paid ads ($3,000) even if paid ads send more volume.
Time to Close by Source: Days from lead capture to closed won. SEO leads might take 45 days while referrals close in 15. Factor this into your cash flow planning.
Build dashboard widgets for each metric and place them next to your ROI chart. Now you see the full picture: which sources deliver leads fast, which close at higher rates, and which generate the most profit per dollar spent.
How Do You Scale This System Across Multiple Campaigns?
If you run multiple campaigns within the same channel, add a secondary custom field called campaign_name to track performance at the campaign level.
Example: You run three Facebook Ad campaigns (Lead Gen, Retargeting, Lookalike). Each has a different cost per lead and performance. Your lead_source field says "Facebook Ads" but your campaign_name field specifies which campaign.
Modify your dashboard to group by both lead_source and campaign_name. Now you see ROI broken down by:
- Facebook Ads > Lead Gen Campaign: 380% ROI
- Facebook Ads > Retargeting Campaign: 520% ROI
- Facebook Ads > Lookalike Campaign: 210% ROI
This granularity shows you exactly which creative, audience, or offer drives the best results. Pause underperforming campaigns and double down on winners.
For agencies managing multiple clients, clone this setup into each sub-account. Use GoHighLevel's reporting snapshots to consolidate ROI data across all clients into a single agency-level dashboard.
Frequently Asked Questions
Can I track ROI if I use offline lead sources like events or cold calls?
Yes. Estimate your cost per lead by dividing total event cost or sales team time by leads generated, then assign that cost to each opportunity. The process stays the same.
What if my sales cycle spans multiple months?
Use date filters in your dashboard to analyze closed deals by the month they originated, not the month they closed. This shows you which channels delivered profitable leads even if they took time to convert.
Does this work for agencies tracking ROI for multiple clients?
Absolutely. Set up the same custom fields and dashboards in each client sub-account. Use GoHighLevel's white-label reporting to deliver ROI dashboards directly to clients.
How do I handle leads that come from multiple sources?
Assign the lead to the first touchpoint (first-touch attribution) or the final touchpoint before conversion (last-touch attribution). Pick one model and stay consistent. For more accuracy, use UTM parameters to track each touchpoint in a custom field.
Can I integrate this with Google Analytics or Facebook Ads Manager?
You don't need to. GoHighLevel's custom fields and dashboards give you profit-level data that ad platforms don't provide. However, if you want to enrich your data, use Zapier to pull ad spend from Facebook or Google Sheets into GoHighLevel custom fields automatically.
What's the minimum ad spend needed to make this worthwhile?
If you're spending more than $500 per month on any lead source, tracking ROI is essential. Below that threshold, focus on volume and close rates first.
Start Tracking Profit, Not Just Leads
Most businesses optimize for lead volume because that's what their tools measure. You're optimizing for profit because you're measuring what matters.
Custom fields capture revenue and cost at the source level. Dashboards display ROI in real time. Automation calculates ROI the moment a deal closes. You make decisions based on data instead of guesses.
Set this up once and your ROI tracking runs automatically. No spreadsheets, no third-party tools, no manual calculations. Just clean data showing which channels make you money and which ones waste it.
Build your ROI tracking system in GoHighLevel today
and stop guessing where your next profitable customer comes from.