Most shop owners can tell you what they spend on marketing. Very few can tell you which of those dollars turned into a car in the bay. This guide sets up a tracking system a one-person front desk can run: a question for every customer, tagged links, a clear rule for phone numbers and a sheet you update once a week.
The goal is one number per channel that you can act on: what it costs you to book a job from that source, and what those jobs bring in. If you want the exact definitions we use for those numbers, they're on our results page. This page is about collecting the data that feeds them.
Step one: ask every customer the same question
The cheapest tracking tool you'll ever have is a person asking, "How did you hear about us?" It works for phone calls, walk-ins, DMs and texts, which is where most tint and detailing jobs start. Website analytics can't see any of those.
When and how to ask
- On the phone: ask right after you get the vehicle. "Got it, a 2023 RAV4. Quick question before I price it out: how'd you find us?" Asking early feels natural. Asking at the end, after the price, often gets a rushed "Google, I guess."
- Walk-ins: ask while you're writing up the car, the same way you'd ask for a phone number.
- DMs and texts: add it to your first reply. "Happy to quote that. What's the year, make and model? And how did you find us?"
- Website quote form: add a required dropdown with your categories. Keep "Other" with a short text box.
Follow up on vague answers
Customers compress everything into "Google" or "Instagram." One follow-up question fixes most of it:
| They say | Ask | Why it matters |
|---|---|---|
| "Google" | "Did you find us on the map, or was it an ad at the top?" | Free map traffic and paid search are different channels with different costs |
| "Instagram" or "Facebook" | "Was it a video that came up while you were scrolling, or did you look up our page?" | A video that "came up" is often a paid ad. Looking you up is organic. |
| "A friend" | "Nice, who was it?" | You can thank the referrer, and you'll see who sends you work |
| "I drove by" | "Did you see us online before you came in?" | Some drive-by customers looked you up first, which shows your profile doing work you'd otherwise miss |
Use fixed categories
Free-text answers turn into a mess nobody can total. Pick 8 to 10 categories and use only those. A typical list for a tint, PPF or detailing shop:
- Google Maps / Business Profile
- Google ad
- Meta ad (Facebook or Instagram)
- Instagram or Facebook, organic (your page, posts, reels)
- Website (found the site, can't say how)
- Referral (record the person's name in a separate column)
- Repeat customer
- Dealer or partner (record which one)
- Drive-by, sign or wrapped vehicle
- Don't know
"Don't know" is an honest answer. Keep it. If it climbs above roughly one in five leads, check first whether the question is being asked at the start of the call.
Where to log it
Log it in the same place you already write down the job, so it can't get skipped. If your booking software has a "referral source" or custom field, use that (more on this below). If not, keep a shared spreadsheet open on the front-desk computer or phone. A paper sheet by the phone works too, as long as someone types it in weekly.
Step two: tag the links you control with UTMs
A UTM is a short tag added to the end of a link. When someone clicks the link, your website analytics records where they came from. You need analytics installed on your site to read these. Google Analytics 4 is free and is the usual choice.
What each part means
| Parameter | What it answers | Example value |
|---|---|---|
utm_source | Which site or platform sent the click? | google, instagram, facebook |
utm_medium | What kind of traffic is it? | organic, social, paid_social, print |
utm_campaign | Which specific link or promotion? | gbp_listing, bio_link, spring_ceramic |
utm_content (optional) | Which version of the ad or link? | suv_video, before_after |
Here's what a tagged Google Business Profile website link looks like:
https://yourshop.com/?utm_source=google&utm_medium=organic&utm_campaign=gbp_listing
Everything after the ? is the tag. The page the customer sees is the same. Google's free Campaign URL Builder will assemble the link for you if you'd rather not type it.
Which links to tag
| Where the link lives | Suggested tags |
|---|---|
| Google Business Profile website button | utm_source=google&utm_medium=organic&utm_campaign=gbp_listing |
| Google Business Profile booking or quote link, if you use one | Same as above with utm_campaign=gbp_booking |
| Instagram bio link | utm_source=instagram&utm_medium=social&utm_campaign=bio_link |
| Facebook page website link | utm_source=facebook&utm_medium=social&utm_campaign=page_link |
| Meta ads | utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}, entered in the ad's URL parameters field so Meta fills in the names |
| QR code on a flyer, invoice or window sticker | utm_source=flyer&utm_medium=print&utm_campaign=fall_flyer |
Google Ads handles this differently. It can tag clicks automatically when it's linked to Google Analytics, so you usually don't add UTMs by hand there.
Rules that keep UTM data clean
- Use lowercase, always. Analytics treats
Instagramandinstagramas two different sources. - Write your tags down once in a tab of your tracking sheet and copy from there. Don't improvise new spellings.
- Never tag links between pages of your own site. It overwrites the real source of the visit.
- Capture the tags on your quote form. Your web designer can pass the UTM values into a hidden form field, so each quote request arrives labeled with its source. The site has to save the tags when the visitor first lands (in a cookie or browser session storage) and fill them in later, because they drop off the URL as soon as the visitor clicks to another page. Ask your designer to prove it works by submitting a test quote from a tagged link.
UTMs only track visits to your website. A customer who taps "Call" on your Google profile, or messages you straight from an Instagram reel, never touches a tagged link. That's why the source question in step one stays your primary tool, and UTMs fill in the website side.
Step three: decide how you'll handle phone numbers
Call tracking services give you separate phone numbers that forward to your real line. Each number is tied to one source, so the service can count calls by channel. Most offer two kinds:
- Static numbers: one fixed number per source, such as a number printed only on your flyers or a vehicle wrap.
- Dynamic numbers: a script on your website swaps the displayed number depending on how the visitor arrived, so an ad visitor sees a different number than a map visitor.
The tradeoffs
What you gain
Accurate call counts by source without relying on the customer's memory. Many services also record calls and log missed ones, which shows you how many leads go unanswered during installs.
What it costs
A monthly fee, usually priced by numbers and minutes. Another vendor to manage. Customers who save a tracking number end up calling it for years, so canceling the service later can strand old customers.
Recording rules
Call recording laws vary by state and depend on where both callers are. If you record, announce it at the start of the call. This is general information, not legal advice, so check your state's rules before turning recording on.
Keep your main number consistent on Google
Our recommendation for most shops: keep your real main number as the primary number on your Google Business Profile, and use that same number on your website and in directories. A number that matches everywhere helps customers and keeps your listings consistent. If you decide to put a tracking number on the profile anyway, use a local number that rings your shop directly, and put your real number in the profile's "Additional phone" field so the two stay connected. Never let a profile number route callers anywhere other than your shop.
You often don't need a tracking number there anyway. Your Business Profile's performance report already shows how many people tapped the call button from your profile. That count isn't the same as answered calls, but it's a free starting point. The rest of the profile setup is covered in our Google Business Profile guide.
The cleanest place for tracking numbers is where your real number would never appear anyway: a specific ad landing page, a flyer or a direct mailer.
Step four: use your booking software's source field
If you book jobs in shop-management or scheduling software, check its settings for a "referral source," "lead source" or custom field on the customer or job record. Then:
- Load the same categories from your source list as dropdown options. No free text.
- Make it required if the software allows, so a job can't be saved without it.
- Fill it on the first contact, not at checkout. By pickup, nobody remembers.
- Pull a monthly report of jobs and revenue by source, if the software offers one. If it doesn't, export the jobs list to your spreadsheet.
If your software has no source field, put a short fixed code at the start of the notes field, like "SRC: META AD." It's ugly, but you can search and count it.
Step five: the weekly 10-minute tracking sheet
Everything above feeds one spreadsheet. Each lead gets one row. Once a week, update the "booked" and "ticket" columns for anyone who scheduled.
Columns
| Date | Customer | Vehicle | Service asked about | Source | Source detail | Booked? | Job date | Ticket $ |
|---|---|---|---|---|---|---|---|---|
| 10/1 | Mike R. | 2024 F-150 | Ceramic tint, full | Meta ad | Truck video | Y | 10/6 | $450 |
| 10/1 | Dana K. | 2022 Model Y | Full front PPF | Google Maps | Quoted | |||
| 10/2 | Chris L. | 2019 Civic | Interior detail | Referral | Sent by Tony B. | Y | 10/3 | $180 |
| 10/3 | Sam P. | 2023 Tahoe | Windshield tint | Repeat customer | First came via Meta ad, 2025 | Y | 10/9 | $320 |
| 10/4 | Alex M. | 2021 Camry | Tint price check | Don't know | N |
The names and ticket amounts above are made-up examples to show the format. They aren't prices or typical tickets. Use "Quoted" for leads still deciding. Protection and coating jobs often take weeks to close, so keep those rows open and check them each week.
The 10-minute weekly routine
- Add any leads that didn't get logged from your call log, DMs and form inbox. (3 minutes)
- Update "Booked?" and "Ticket $" for every row from the last few weeks. (4 minutes)
- Refresh the summary tab: a pivot table or COUNTIFS and SUMIFS by source. Enter what you spent on each paid channel that week. (3 minutes)
The summary: leads, booked and revenue by source
Your summary tab should show, for each source: leads (count of rows), booked (count of "Y"), booking rate (booked divided by leads), revenue (sum of tickets for booked rows) and spend. Count each lead under the date of first contact, even if it books a month later. Otherwise a slow-closing PPF job makes last month's marketing look worse and this month's look better.
The math: cost per booked job and revenue per ad dollar
Two divisions tell you most of what you need. Both are defined on the results page. Here's how to compute them from your sheet.
The figures below are made up to show the math. They aren't benchmarks, typical results or prices for any shop.
| Source (example month) | Spend | Leads | Booked | Revenue | Cost per booked job | Revenue per ad dollar |
|---|---|---|---|---|---|---|
| Meta ad | $600 | 30 | 6 | $2,400 | $600 ÷ 6 = $100 | $2,400 ÷ $600 = $4.00 |
| Google ad | $500 | 12 | 2 | $900 | $500 ÷ 2 = $250 | $900 ÷ $500 = $1.80 |
| Google Maps | $0 | 25 | 10 | $3,500 | No ad spend | Not applicable |
In this example, the Meta ads cost $100 to book each job and returned $4 in booked revenue per ad dollar. The Google ads cost more than twice as much per booked job. Before you compare them, also compare against your margin. A source that returns $1.80 per ad dollar may still lose money once you pay for film, labor and the agency or software fees. Unpaid channels like the map still cost you time, so judge them by booked jobs and revenue, and keep doing what feeds them.
What to do with the answers
Give a channel enough time before you judge it
- Wait for enough bookings to mean something. Two booked jobs versus four is noise. A practical rule of thumb: don't make a keep-or-cut call on a paid channel until it has had at least 4 to 6 weeks and roughly 20 or more leads, whichever comes later.
- Let slow-closing services finish. PPF and coating leads may book weeks after the first contact. Judge those campaigns on leads from at least a month earlier.
- Compare like seasons. In Michigan, tint demand rises with the first hot weeks and detailing changes with salt season. A March campaign and a June campaign aren't a fair comparison. Compare against the same period last year when you can.
When to cut or change a channel
- Lots of leads, few bookings: before you cut the channel, check the sheet for leads that were never quoted or called back. Slow follow-up is covered in our tint shop marketing guide.
- Leads book fine, but cost per booked job is above what a job earns you: change the offer, the creative or the service you're promoting, then give it another full test period.
- Few leads and few bookings after a full test, with good follow-up: cut it or pause it, and move the money to the channel with the best revenue per ad dollar.
- A channel books well and the calendar has room: raise its budget in steps, and watch whether cost per booked job holds.
Common mistakes
Counting likes and views
Keep likes, followers and reach out of the sheet. Our Meta ads guide explains why booked jobs are the measure.
Double-counting repeat customers
A returning customer who says "Instagram" probably means they follow you now. Log them as "Repeat customer" and note the original source once in the detail column. Otherwise your ads get credit for every return visit.
The referral who saw an ad
A friend recommends you, then the customer sees your ad and calls. Both played a part. Log the source the customer names first, and add the other in "Source detail." Over time, you'll see how often ads support referrals.
Trusting the platform's numbers alone
Ad platforms count conversions their own way, including people who saw an ad and later acted. Their reports are useful, but your sheet of booked jobs is the record you make decisions on.
One lead counted twice
The same person DMs on Monday and calls on Wednesday. That's one lead. Search the sheet by phone number before you add a row.
Skipping weeks
A sheet updated once a quarter is a guess. Ten minutes every week keeps it accurate, and you'll catch a dead channel before it eats a month of budget.
Tracking questions from shop owners
Do I need call tracking to get started?
No. The source question plus your Google profile's call-button count covers most small shops. Add tracking numbers when you're spending enough on a channel that guessing would cost you real money.
What if customers give the wrong answer?
Some will. That's why you combine the question with tagged links and form data. Use the follow-up questions above. A few wrong answers won't hide a channel that books dozens of jobs, or one that books none.
Will an agency do this for me?
An agency can set up the links, forms and reports, but only your shop knows which leads booked and for how much. When we run ads for a shop, we ask the owner to share that weekly, because it's what tells us where to put the budget.
Can my Meta ad links tell Instagram and Facebook apart?
Yes. In the ad's URL parameters, use utm_source={{site_source_name}} in place of a fixed source. Meta fills in a short code for where the ad ran, such as fb for Facebook or ig for Instagram, so your analytics splits the two without separate ads.
Want help setting up the links, form fields and sheet for your shop? Book a call and we'll walk through what you're running now and what's worth tracking.