DDS Web Solutions
Analytics & Reporting

How a dental group builds a marketing report leadership can read across every office

14 min

The short answer

For a dental group of about 3 to 50 or more offices, build one marketing report that uses the same definitions at every door. Give each office one office slug, and carry that slug on tagged links, on the Google Ads campaign name when the campaign is that office, on one GA4 custom dimension, and on the label of that office's tracking number. The sheet has three blocks: a group roll-up, one row per office, and an exceptions list for anything that could not be tied to a door. Read the exceptions on a weekly operations pass. Read the full sheet once a month with leadership. Neither reading is a forecast. None of the Google pages below publish a benchmark, a percent, or a return for doing this.

This guide is for a marketing lead who has to put every location on one sheet. It covers the dictionary, the office identifier, and the layout. A single office should use the monthly practice report and which marketing KPIs a practice tracks. This guide reads the offices side by side. The service page for the measurement stack is dashboards and reporting. The map of the other group jobs is marketing a multi-location practice or DSO.

KPI dictionary

Write the seven definitions once. Three offices and fifty offices use the same sentences. A larger group has more rows. It does not get a private meaning for "qualified." If two offices disagree, the sheet is not ready to compare them.

Calls

Count this

Connected calls to a number labeled with that office, from the one system named in the dictionary, for the same dates as every other row.

Leave this out

A tap on a call button, a click on a call asset, or a Business Profile call-button click. Those are separate measurements.

Qualified calls

Count this

The subset of calls that meet the single rule the group wrote down and uses at every office. Name the rule in the header: a minimum length you set in Google Ads, an imported mark from the practice system, or the lead classification Google describes when call recording is on.

Leave this out

The sum of duration, an AI classification, and a front-desk note. Those are three counts. Only the named rule fills this cell.

Form leads

Count this

Form submissions recorded as the form key event, with that office's slug on the event, and nothing about the person in the payload.

Leave this out

A view of the form page, a click on the submit button that did not send, or a row copied from another office because the slug was blank.

Online bookings

Count this

Booking confirmations for that office in the same dates: either the booking key event with the office slug, or the count the scheduler exported for that door. Say which one the column uses.

Leave this out

A Business Profile booking, which Google counts only when a booking provider manages the profile booking, and which belongs in the profile-actions lines.

Business Profile actions

Count this

The interactions Google shows for that verified profile in the performance report: call-button clicks, website clicks, and direction requests, plus messages or provider bookings only when that profile shows them. Read them from that profile, or from the multi-profile download.

Leave this out

A substitute for calls or for website bookings. The performance report includes actions from organic results and from Google Ads, so adding it to an Ads column counts some activity twice.

Ad cost per office

Count this

The cost Google Ads reports for campaigns whose names are that office, over the same dates. The campaign name is the label you chose so you can find the campaign. Customers do not see it.

Leave this out

A share of a campaign that covers several offices. That cost stays on the exceptions list until the campaign is one office.

New patient starts

Count this

The count the practice's own records show as a new patient start at that office for those dates. If the practice did not export the count, the cell stays empty.

Leave this out

An estimate built from calls, forms, or ad clicks. An agency does not fill this cell. It is not a Google Ads conversion and not a key event.

A qualified call is only as clear as the rule in the header. Phone call conversion tracking can count a call from an ad, or a call to a forwarding number on the site, when the call lasts at least a minimum length you set. A shorter call is not counted. The same page counts a click on a phone number on a mobile site as a click, not as the call. Measure calls from ads adds a second path: when call recording is on, Google's AI can classify lead quality, and when recording is off or a call cannot be recorded, the count uses the duration you set. Recording, on that page, is limited to calls where both parties are in the United States or Canada. Importing a call your own system already marked is a third path. Pick one for the column.

A key event is an event you mark because the action matters. Reports can show the count by a dimension. You can create a Google Ads conversion from that key event so the two products are aimed at the same action. Marking the event does not make a name safe to attach. How those events are named, without patient details, is already written in GA4 calls, forms, and bookings. This page only requires that the report column and the event are the same action.

One office slug

The slug is a stable label, such as oak-park. It is how the four systems join. It is not a doctor's name, not a patient's name, and not the string on the sign. Publish the list before you rename campaigns. Changing the spelling later splits history into two offices.

UTM parameters

What carries the slug

The same lowercase slug on every tagged link. Set utm_source, utm_medium, and utm_campaign together. When the campaign name is already the office, that name is the slug. When one campaign covers several doors, put the slug in utm_content and keep the campaign name stable.

What stays out

A patient name, email, phone number, or chart id. Google's privacy page lists campaign content among the fields that must not carry that kind of information. Different capitalization is a second office, because the values are case sensitive.

Google Ads campaign name

What carries the slug

The office slug, when that campaign's budget and location settings belong to one door. Google's account is the access and billing layer. Campaigns hold the budget and the settings. A different budget or a different location target is a reason to use a separate campaign.

What stays out

The slug does not go in the public Business Profile name. A location asset can show the profile address, a map or distance, and a call button. That public string stays the real-world name.

GA4 dimension

What carries the slug

One event parameter, registered once as an event-scoped custom dimension, on the form event, the booking event, and the call event. The dimension name uses a space or an underscore. Google does not allow a hyphen in that name.

What stays out

A value per person or per session. Google warns that a high-cardinality dimension can collapse into an (other) row, and that a value which looks like a number can be stored as a number. A patient id fails both tests. A repeated office label that starts with a letter does not.

Call tracking numbers

What carries the slug

A label on each number the group controls, and that label is one office slug. The call report can then be joined to the office row without guessing.

What stays out

A Google forwarding number used as the printed number or as a label shared by two doors. Call reporting assigns that number so Ads can see duration and whether the call connected. Google owns it, and it can be reassigned. It stays inside call reporting and the post-click website swap.

URL builders describe utm_content as the parameter that tells creatives apart, and they say to set source, medium, and campaign whenever you tag a link. Parameter values are case sensitive. They are omitted from the landing page and page path dimensions and show on page location instead. A group that already has a spelling should keep it. The pattern used with profiles is in profile governance. Do not invent a second spelling for paid links. Avoiding personally identifiable information applies to those campaign fields, to custom dimensions, and to page titles. If you are unsure a field counts, ask counsel. Do not test the question with a patient record.

Account organization is three layers: the account, its campaigns, and its ad groups. The account is the sign-in and the billing. Campaign settings include the campaign name, which customers do not see, and Google recommends a name that describes the campaign so you can find it. Organizing with ad groups says to create a separate campaign when you need a different budget or a different set of location targets. That is the naming rule for ad cost per office: the campaign name is the slug when the campaign is one door. Location assets can show the address, a map or distance, and a call button drawn from the profile of an office you own. They are not a field for the slug. Budgets, shared pools, and which asset type belongs on an owned office are in DSO Google Ads budgets and call attribution.

Register the parameter as an event-scoped custom dimension. That scope is for a category on an action. Google says to prefer a predefined dimension when one exists, and not to create a high-cardinality dimension, because reports can condense that data under an (other) row. The examples to avoid are a unique id per user, a session id, and a timestamp. The same page says a value that looks like a number can be stored as a number. Creating the dimension asks for a name with no hyphen, a scope you cannot change later, and the event parameter name. An editor or administrator can add it to a report 24 to 48 hours after the data was sent and the dimension was created. That interval is Google's note about the dimension. It is not a promise about calls or new patients.

The page has to supply the slug before the tag fires. Tag Manager can hold a value in the data layer for tags and variables. The data layer does not carry itself to the next page, so each office page sets the slug. A data layer variable reads the key you pushed. Point the Analytics tag at that variable. Do not point it at the form fields. A name, a phone number, or the text a visitor typed does not belong in the push.

Call reporting uses a Google forwarding number to record duration, start time, and whether the call connected. For a call longer than 15 seconds it can include the caller number, except in India. That number can sit in the ads report. It does not sit on this sheet. The forwarding number is Google's and can be reassigned, so it is not the profile phone and not a slug you print. The number you control gets the office label. Who answers, and which number stays on the profile, is in office phones, a central call team, or a hybrid.

Report layout

Read the sheet in this order. A group total with the exceptions hidden is the failure mode this layout is meant to prevent.

1. Group roll-up

The first block sums the office rows for the columns that are counts of the same thing: calls, qualified calls, form leads, online bookings, and ad cost for campaigns named as one office. It also states how many offices have an exception. It does not turn Business Profile actions into a count of people. Views on a profile are a separate metric, and a person can appear on more than one door. If a Google Analytics property is linked to the profiles, that link shows the sum of the linked profiles for the metrics Google lists, and it cannot be filtered to one profile. Use it as a check on the group total, not as the office rows.

2. One row per office

The second block is one row for every open office, in the same order as the slug list, for one start date and one end date. Columns are the seven metrics above, filled from the systems the dictionary names. A closed door stays on the list with a status, so a missing row is not mistaken for a quiet office. Sort by the slug, not by whichever office had the largest number that month.

3. Exceptions

The third block lists what the first two blocks could not place: a visit or a form with no office slug, a number shared by more than one office, a campaign whose cost covers several doors, a new-patient cell the practice did not supply, and any call total that mixed two definitions. Leave the rows here. Deleting them makes the roll-up look finished when the tagging is not.

Business Profile performance is available for a verified profile, to an owner or manager signed in on that profile. The report can include call-button clicks, website clicks, direction requests, messages, and bookings when a booking provider is connected. Only metrics that apply to that business are shown. Performance data includes views, searches, and actions from organic results and from Google Ads. If you manage several profiles, you can download them together and compare locations. That download is the per-office source.

Linking those profiles to a GA4 property adds a Business Profile collection with interactions, website clicks, calls, directions, messages, bookings, and menus, summed across the linked profiles. Google says you cannot segment that sum by one profile, and the metrics cover the last 6 months. The link is a group check. It is not the office block. Business Profile actions stay on the office row only when they were read for that profile.

Weekly check and monthly read

Use two readings of the same sheet. They answer different questions. Neither one promises a result.

  • •Weekly operations check. Open the exceptions block and any office row that is blank or that lost its slug. Repair the tag, the number label, or the campaign name. A new custom dimension may not be reportable on the day you create it. Google's note is 24 to 48 hours after the data was sent and the dimension was created. The week is a repair pass. It is not a verdict on the marketing.
  • •Monthly leadership read. Walk the roll-up, then every office row, then the exceptions that are still open. Use the same definitions and the same date rule as the previous export the group kept. If you compare a number, compare it with that prior export.

A single practice's monthly habit, including which supporting numbers to pull for one door, stays on the practice report. The list of single-practice measures stays on the KPI guide. Do not paste either page into the group sheet and drop the office column. Questions to ask a firm about reconciliation, without a league table, are in how to choose a DSO dental marketing company.

Data-quality checks

Run these three checks before the monthly read. A failed check stays in the exceptions block. It is not smoothed into a neighboring office.

1. Missing office tag

A URL, an event, or a call export with no slug cannot be assigned to a door after the fact. Park it in exceptions. Do not drop it on the first office in the list, and do not create a row called corporate to hide it. UTM parameters are omitted from the landing page and page path dimensions and show on page location, so a check that only reads the path can miss a slug that was sent.

2. Shared numbers

One tracking number labeled for two offices, or one line pasted onto more than one profile, cannot be split by a report. Call reporting can say that a call connected and how long it lasted. It cannot invent which door a shared number belonged to. Give the number one slug, or take it off the per-office columns. Which number is allowed on the profile is in the phone guide.

3. Double-counted calls

A tap on a call asset is charged as a click. A call that lasts at least the minimum length you set can be a conversion, and a shorter call is not. A click on a phone number on a mobile site is a click, not a connected call. Business Profile calls are clicks on the call button, and that performance report includes actions from organic results and from ads. Keep each of those in the column its definition names. Adding them produces a larger call total and a less honest office row.

Office slug and tag checker

Check that every tagged link and report label uses an office slug from your published list.

Paste the published office slug list, the tagged landing URLs, and any other labels you want to compare with that list. Slug rules are the ones in One office slug and the office slug glossary entry. A missing office tag or a shared number is explained in Data-quality checks. Rows that cannot be tied to one door stay on the exceptions list described in Report layout. The sample uses made-up offices: oak-park, pine-hill, and elm-street.

If this browser allows it, a draft is saved on this device after you type. Nothing is sent to a server. Do not paste patient names, phone numbers, emails, or other patient data.

One slug per line, up to 200. This is the published list. A slug starts with a letter, stays lowercase, and is not a person or a record id.

Optional. One per line, up to 200, in this format: kind | value | office slug. Kind is campaign, number, or dimension. Campaign is the campaign name, number is the tracking-number label, and dimension is the GA4 custom dimension name.

Summary

Example, not your offices. 3 slugs listed. 3 links checked. 2 links tied to one office. 1 link in exceptions. 0 label findings.

Example

The rows below are an example, not your offices. oak-park, pine-hill, and elm-street are placeholder slugs. What you paste replaces these tables.

Exceptions

Example exceptions. Not your offices. Each row names the guide section that explains it.
Input line What was found Guide section
Line 3: https://example.com/x?utm_source=email&utm_campaign=spring utm_medium is missing. Set utm_source, utm_medium, and utm_campaign together. One office slug
Line 3: https://example.com/x?utm_source=email&utm_campaign=spring Missing office tag, park it in exceptions. Data-quality checks

Tagged links per office

Example count of tagged links for each placeholder office slug. Not your offices.
Office slug Tagged links
oak-park 1
pine-hill 1
elm-street 0

Red flags in agency reporting

These are checks on the report a firm hands you. They do not name or rank any firm.

  1. 1. The deck has a group total and no office rows.

    Leadership cannot see which door the calls, forms, or cost belonged to. A total is the first block of the report, not the whole report.

  2. 2. Qualified means something different at each office.

    Then the column cannot be compared. The header has to name one rule: the duration you set, the imported practice mark, or the recorded lead classification, and every office uses that rule.

  3. 3. The export contains a patient name, a phone number, an email, or a chart note.

    The marketing row is the office and the counts. Google's Analytics guidance says not to send information Google could recognize as personally identifiable, including in campaign parameters and custom dimensions. Ask counsel once before anyone turns on call recording or copies a caller number out of call details. Keep patient details out of the sheet.

  4. 4. New patient starts are filled in without the practice export.

    Calls and form leads are not starts. If the practice system did not report the count for that office and those dates, the cell stays empty.

  5. 5. Shared campaign cost is split across offices by a ratio.

    Google reports cost on the campaign. When the campaign covers several doors, that cost is an exception, not an office cost. A separate campaign is how a different budget or a different location target is held apart.

  6. 6. Unmatched rows were removed so the roll-up looks complete.

    The exceptions block is part of the report. A missing slug, a shared number, or a blank start count is the finding. Hiding it does not repair the tag.

Checklist

Twelve checks before the monthly read. Ticks stay in this browser only.

Per-office report checklist

12 items

What DDS Web Solutions builds

DDS Web Solutions builds practice websites. Our team has been building websites since 2014, and we have served 100+ practices. Offices are in Sacramento and San Mateo. The products are Smyly, SmileTrak, and ToothRank. The planning page is DSO and multi-location marketing.

Sources

Wording on these pages can change, so confirm the live page. This is marketing guidance, not legal advice.

Explore Our Services

Next step

Need help turning reading into results?

Our team specializes in dental and healthcare marketing. Get a quote and we will scope a plan that fits your practice.