Dispensary local SEO playbook · Spoke 13

Tracking and attribution for dispensaries

Here is the sentence that should change how you read every dispensary report you have ever been sent.

Calls: The number of times a customer clicked on the call button on your Business Profile.

Google Business Profile Help, read September 8, 2026

A call, in the number your agency shows you, is a button press. Not a connected call. Not a conversation. Not a customer. Every other metric in that report works the same way, and once you know the definitions, most dispensary reporting reads differently.

Google counts taps and views, and says so plainly in its own documentation. The job of attribution is building the bridge from those taps to money, and the honest version of this page tells you the two places that bridge cannot be built: nobody can connect a direction request to an arrival, and nobody can tell you whether a call connected.

What Google actually counts

Straight from Google's Business Profile performance documentation, quoted rather than summarized, because the wording is the point.

Two more that shape everything above. Performance data "is available only for verified Business Profiles", so an unverified or suspended profile reports nothing at all. And the data "includes views, searches, and actions from both organic search results and Google Ads", which for a dispensary is mostly academic since the ads are prohibited, but it does mean the metric is not an organic metric by definition.

None of this is Google being evasive. It is Google being precise, and the precision is available to anyone who reads the help page. Almost nobody selling dispensary reporting does.

Three systems, three different views

A dispensary has three sources of truth and they do not agree, for reasons that are structural rather than fixable.

The Business Profile sees the map surface: how people found the profile and what they tapped. This is where a Map Pack ranking actually cashes out, and it is invisible to your website analytics because most of those actions never touch your site. Someone who searches, taps directions and drives over is a complete customer journey with zero website sessions.

Search Console sees your website in Google's results: impressions, clicks, average position by query and page. It is the only first-party view of what Google is willing to show you for, and the keyword research spoke covers what it does and does not name.

Your analytics and point of sale see behavior on your property and the money. This is the only one that contains revenue, and it is the one most local reporting leaves out.

The mistake is trying to make these reconcile. Profile views count a person once a day; analytics counts sessions; the point of sale counts transactions. Track each against its own history and stop trying to make the columns tie.

Where the chain breaks, specifically

Two breaks, and both are worth naming because vendors routinely paper over them.

The direction request to the door. Nobody outside Google can tell you who arrived. There is no dispensary-grade store-visit measurement we can point at, and any conversion rate you are quoted between direction requests and visits is an assumption wearing a number. The honest workaround is a proxy you control: ask at the counter, or watch whether direction requests and same-day transactions move together over months. Correlation across a long enough window is not attribution, and it is better than a made-up rate.

The call button to the sale. Google counts the tap. Whether anyone answered, how long the call lasted and whether it ended in an order are all outside the metric. Call tracking on your own line closes that gap, with one caution carried from the multi-location spoke: Google requires a profile's phone number to be "the single, authoritative phone number ... verifiable by the business owner", and whether a tracking number satisfies that is not addressed anywhere in Google's documentation. We flag it as an open question rather than recommending around it.

There is a third, softer break specific to this industry: if your menu lives inside a third-party widget, the behavior inside it belongs to that platform's reporting. What each menu provider counts, and how, is something we cannot verify without account access, so this page tells you what to ask them rather than characterizing their numbers.

Tying the offline part back, and its documented limit

Google names the mechanism. Among the uses of the GA4 Measurement Protocol it lists "Tie online to offline behavior" and "Send events that happen outside standard user-interaction, like offline conversions".

Then it names the limit, which is the part that matters:

Advertising identifiers ... are automatically joined with Measurement Protocol events using client_id or app_instance_id.

Google Analytics, Measurement Protocol for GA4

The join key is the visitor's own identifier. A system that never met the visitor, a nightly job reading your point of sale, a booking calendar, a call log, has no client_id to send. So the event arrives with no source attached and lands as direct traffic. That is not a misconfiguration, it is the documented behavior, and it has three practical consequences.

One more small trap in the same documentation: if device information is not sent, it "defaults to desktop for Web streams", which quietly skews a device report nobody thinks to question.

A worked example: booking a call

Take the case that breaks most local setups, because it shows every rule on this page at once.

A form submission is easy: the page fires a browser event on success, the visitor's identifier is present, and the conversion can be derived from that event in the tag manager. A booked call is not. Google publishes no event API for its appointment scheduling, so completion cannot be observed in the browser at all. The only way to count it is server-side, reading the calendar feed on a schedule and sending the result in.

Which lands you exactly where the client_id rule above says you will land: that scheduled job never met the visitor, so the event arrives with no source attached and is attributed to direct. The correct response is not to fight it. It is to keep the booking count as its own event, never merged into the form-conversion count, so one honest number is not quietly poisoning the other.

That is the shape of nearly every offline-to-online problem in a dispensary. The outcome you care about happens somewhere the browser cannot see, the bridge back is server-side, and the bridge loses the source. Design the report around that instead of pretending the join is clean, and set out which parts of the chain are instrumented and which are inference before anyone signs off on the numbers.

What to report instead of rankings

Rankings are an input. Google states there is "no way to request or pay for a better local ranking", and separately that third-party tools "don't have access to Google's internal ranking data" and that none is "approved by Google Search". A report made only of positions is describing an input, measured by an instrument nobody validates, against an outcome it never looked at.

Report these four instead, every month, in this order.

  1. Profile actions. Calls, direction requests, website clicks and menu clicks, downloaded from the profile rather than retyped. Google supports exporting these to a spreadsheet, and multi-location operators can export several profiles at once. If your columns come back full of asterisks, downloads are not enabled on those profiles yet.
  2. Position across the trade area. Sampled from where customers actually are, since distance is measured from the searcher. Label it as your measurement, not Google's.
  3. Revenue from the point of sale, split by new and returning. This is the column that makes the rest of the report an argument rather than a slide.
  4. Search Console by query family, with families defined before you look at the data so it cannot flatter you afterwards.

The working checklist

  1. Verify the profile or nothing else on this list produces data.
  2. Add the phone number to the profile, which Google notes is required for the calls metric to exist.
  3. Export profile performance monthly rather than screenshotting it, and enable downloads if you manage several locations.
  4. Stop calling button taps "calls" in your own reporting, and rename the row.
  5. Decide the call-tracking question deliberately, knowing Google's authoritative-number rule and that the interaction is undocumented.
  6. Keep server-recovered conversions as separate events from browser conversions.
  7. Check whether any conversion is derived by a rule before sending its raw event server-side.
  8. Send device information with server events so the report does not default everything to desktop.
  9. Define query families in advance and report core separately from anything you no longer sell.
  10. Put revenue in the report. If it is not there, the report is not finished.

Frequently asked questions

Does Google tell me how many calls my dispensary got?

It tells you how many people tapped the call button, which is not the same thing. Google's definition is explicit: calls are "the number of times a customer clicked on the call button on your Business Profile". Whether the call connected, how long it lasted, whether anyone answered and whether the caller bought anything are all outside that metric. Closing that gap needs call tracking on your own line, not a better reading of the profile report.

Can I tell how many people actually visited after asking for directions?

Not from anything Google publishes. Direction requests count people who asked, and Google says it filters multiple taps, canceled requests and spam out of that number, which makes it cleaner than raw taps. It still stops at the request. Nobody outside Google can connect a direction request to an arrival, and we publish no estimate of the conversion rate between them because none exists that meets our sourcing standard.

Why do my Google Business Profile numbers not match my website analytics?

Because they count different things on different rules. Google says a profile view counts unique visitors and that a person is counted only once a day no matter how many times they look, and that someone using several devices may be counted a limited number of times. Website analytics counts sessions and events on your own site. Those two populations overlap without matching, and no reconciliation method makes them agree. Track each against itself over time rather than against each other.

How do I connect an in-store purchase back to a search?

Through server-side events, with a documented limit. Google names "tie online to offline behavior" as a use case for the GA4 Measurement Protocol. The catch is the join key: Measurement Protocol events are matched to online behavior using client_id, so an event sent by a system that never met the visitor arrives without a source and lands as direct traffic. That is a real limit rather than a configuration mistake, and it is why a server-recovered conversion should be a separate event rather than merged into your main one.

What should a dispensary actually report each month?

Four things, in this order: profile actions (calls, direction requests, website clicks, menu clicks), map position sampled across the area you serve rather than at your own address, orders and revenue from your point of sale split by new and returning, and Search Console impressions and clicks by query family. Rankings alone are an input. Google states there is no way to request or pay for a better local ranking, so a report that only shows positions is describing an input you cannot buy and an outcome it never measured.

Do I need a rank tracking tool?

A grid is useful for seeing where your visibility stops, and it is worth knowing whose number it is. Google publishes no grid metric and no share-of-voice metric, and it states that third-party tools have no access to its internal ranking data and that none is approved by Google. So a grid is a measurement your agency takes of Google's output, not a figure Google issues. Use it for direction, and judge the work on profile actions and revenue.

Why is my profile's search terms report always out of date?

Because it is monthly by design. Google says the searches metric "is updated at the start of each month" and "might take up to 5 days to show up". If you are checking search terms mid-month you are reading the previous month. Search Console is the daily-ish view; the profile's search terms are the monthly one.

What if my profile is not verified?

Then you have no measurement at all. Google states that performance data is available only for verified Business Profiles. Verification is not just a visibility question; an unverified or suspended profile stops reporting, which means a suspension costs you the record of what was happening before it.

Guillermo Bravo
Guillermo Bravo
Founder & CEO of Nearfront. In SEO since 2007. Founded Foottraffik, the first cannabis-focused SEO company, and exited in 2021. Hosts the SEO Rockstars podcast.

Want a report that ends in revenue?

Start with a free data audit. We pull your profile actions, sample your map position across the area you serve, and show you exactly which parts of the chain to your point of sale are instrumented and which are guesswork.

Get Ranked Free