Google reviews to Power BI
A business with twelve sites has twelve reputations, and the group average hides all of them. Reviewflowz publishes an OData feed where Locations is a table of its own, so ranking your sites by rating is one visual in Power BI instead of a spreadsheet somebody rebuilds every month.
Set up in under five minutes • No demo required
Average rating by location
Locations is its own table in the feed, so this is one field on an axis.
The group average is 4.4 across twelve sites. Dashed line is the group average, 4.4 across twelve sites. The axis starts at 3.0.
Location is a table, not a column
Twelve sites, twelve reputations, and one number on the board pack that describes none of them. In the Reviewflowz feed Locations is its own entity set: one row per site with a name, a street address, a city, a country, a primary category and a latitude and longitude. Power BI loads it as a dimension table and treats it like one.
So the league table stops being a monthly job. Drop Location on the axis, average rating on the value, sort descending, and the ranking your operations lead used to assemble by hand redraws itself on every refresh. Nobody rebuilds it, so nobody skips it in a busy month.
Because it is a real dimension it does more than rank. Average rating by city, by category, or on a map, since the coordinates are columns rather than something you geocode afterwards. That is the difference between a site list and a site model.
The review row carries the location name too, so the first chart needs no join at all. The join is what buys you the rest: the address, the category, the coordinates.
- Id Edm.Int64
- ReviewProfileId Edm.Int64
- Rating Edm.Double
- ReviewDate Edm.DateTimeOffset
- LocationName Edm.String
- Tags Edm.String
- Id Edm.Int64
- LocationId Edm.Int64
- ProfileName Edm.String
- Platform Edm.String
- Url Edm.String
- Paused Edm.Boolean
- Id Edm.Int64
- Name Edm.String
- City Edm.String
- Country Edm.String
- PrimaryCategory Edm.String
- Latitude Edm.Double
- Longitude Edm.Double
- PostalCode Edm.String
Rating by city, by category, or on a map, with no data-prep step. Reviews carries LocationName too, so the simplest chart needs no join at all.
Power BI has read this format for years
Reviewflowz publishes an OData v4 feed, and Power BI’s built-in OData connector reads it. There is nothing to install: no download, no AppSource listing, no Power Query M to write. Get data, OData feed, paste the URL, tick the tables you want. The same URL opens in Excel or Tableau if somebody asks.
The credential is one token you create inside Reviewflowz. Paste it into the user name field and leave the password blank. That is the whole authentication story, and it ends the moment you revoke the token.
Behind the URL are six tables, named the way your saved report will bind to them: Reviews, ReviewProfiles, Locations, RatingsHistory, ReviewSummary and ReviewChanges. Nobody has to guess at a schema or ask us for one, because the feed publishes its own metadata and Power BI reads it before it reads a single row.
Setup is the same at three sites or thirty. Connect the Google Business Profile listings, create the connection, paste the URL. Under five minutes on the Reviewflowz side, with no call with a salesperson standing in front of it.
Feed URL, one service root per account
https://app.reviewflowz.com/api/odata/v1/accounts/1482/ Basic authentication
User name
bi_••••••••3f2a
Password
left blank
Navigator
- Reviews 9,412 rows
- Locations 12 rows
- ReviewProfiles 12 rows
- RatingsHistory daily
- ReviewSummary monthly
- ReviewChanges change stream
Nothing to install: no download and no Power Query to write. The token is created in Reviewflowz and revoked there.
The average that notices
A lifetime average is four years of goodwill outvoting three bad months. A site can fall from 4.6 to 3.6 on its recent reviews while its all-time number drifts from 4.5 to 4.3, and by the time the all-time number moves enough to argue about, the manager who could have fixed it has already left.
A rolling average is a measure, not a project. CALCULATE, DATESINPERIOD, ninety days, over an ordinary table. Put Location on the legend and you have one line per site on one chart, and the site pulling away from the others is visible from across the room.
The alerting is then Power BI’s own. Set a threshold on the rolling measure, pin it to a dashboard tile, and the site that crosses it says so rather than waiting to be discovered in the quarterly review.
The reason usually sits in the tags, which arrive filled in. Reviewflowz reads each review as it lands and files it under the themes your customers actually raise, so “wait time” appearing on forty of a site’s last sixty reviews is a column you can chart rather than a hunch somebody had in a meeting.
90 day rolling average rating by location
Halden Coffee, 12 sites, 9,412 Google reviews all time
Over the same twelve weeks the rolling average fell a full point, 4.6 to 3.6. The lifetime average moved two tenths, because four years of good reviews outvote three bad months.
Reviewflowz tagged Wait time on 41 of Cabot Circus’s last 60 reviews.
Google review volume is footfall
Google reviews are left by people who walked in, so volume follows footfall and has a weekly shape. Saturdays run about three times a Tuesday. A loyalty card launch or a bank holiday shows up within a day or two, at some sites and not others.
A monthly average erases both. One number a month cannot tell you that the weekend team is carrying the rating while the weekday one is not, and it cannot tell you that a campaign moved reviews at nine sites and did nothing at three. Those are the two facts an area manager would act on.
The review date is on every row as a real datetimeoffset, so reviews per day is a column chart rather than a data project. Split it by rating and the busy weekend separates itself from the bad one, which are easy to confuse when you only have a total.
Then put review volume beside the numbers you already model. Revenue per site, footfall per site, covers per session: the outliers explain themselves once the two sit on one page, and neither of them had to leave the workspace to meet.
Google reviews per day
Sat and Sun Mon to FriHalden Coffee, 3 August to 6 September 2026.
A monthly average flattens all of this to 29 a day and loses both the weekend and the launch. The review date is on every row, so this is a column chart rather than a project.
Right on Monday, without anyone touching it
Power BI refreshes on its own schedule. Point it at the feed, set the cadence, and the page the leadership team opens on Monday morning is current because nobody had to export anything on Sunday night.
Incremental refresh works too. The review date is a real datetimeoffset the feed can filter on, which is exactly what Power Query folds a RangeStart and RangeEnd window into, so the first load brings your history and every refresh after it pulls a window rather than the whole estate.
A deletion is a row, not a silence. The feed carries a change stream of inserts, updates and deletes, so a reviewer who edits a one-star up after your manager called them, and a review Google takes down, both reach the model as events. The report never quietly diverges from the listing.
The history comes with the first load. Connecting a Google Business Profile listing brings its review history with it, so the trend line at each site is complete from the first refresh instead of filling up over the next quarter.
Incremental refresh on ReviewDate
Store rows in the last 3 years, refresh rows in the last 10 days.
$filter=ReviewDate ge 2026-08-28T00:00:00Z and ReviewDate le 2026-09-07T00:00:00Z
ReviewChanges
A deletion is a row, not a silence. A review its author edits and a review Google takes down both arrive as events, so the report never quietly diverges from the listing.
One token per connection, and you can take it back
A connection is a token: created in Reviewflowz, revoked in Reviewflowz. Give the agency running your local listings one of its own, end the engagement, revoke it, and their report stops refreshing that afternoon. No shared password, and no export you cannot un-send.
A token carries the access of the person who created it. If that user only sees the four Bristol sites, so does every report built on their token. The permissions are the ones you already set up in the app rather than a second set that drifts away from them over a year.
The list shows who created each connection and when it was last used, and a revoked token stays on it with the date it went. That trail is kept on purpose, because “which report was still pulling this” is a question that only ever gets asked after the fact.
One connection feeds every report. The estate-wide page the board reads and the single-site page a manager opens are two reports on one feed, filtered in Power BI, not two pipelines kept agreeing with each other.
BI connections
Each one is a token, bound to the person who created it.
Priya Raman All 12 locations Last used 3 minutes ago
Tom Adeyemi All 12 locations Last used 6 hours ago
Dan Okafor 4 of 12 locations Last used yesterday
Bristol Clifton, Bristol Harbourside, Bristol Gloucester Road, Bristol Cabot Circus
So their Power BI report only ever shows these four.
Dan Okafor No longer refreshing Kept on the list for the audit trail
End the engagement, revoke the token, and their report stops refreshing that afternoon. No shared password and no export you cannot un-send.
Stop rebuilding the location league table
Set up in under five minutes. No demo required.
How do Google reviews actually get into Power BI?
Through an OData v4 feed that Reviewflowz publishes. You create a connection in Reviewflowz and copy its feed URL, then in Power BI choose Get data, OData feed, and paste it. Authenticate with the token as the user name and a blank password. Power BI’s navigator lists the tables and you load the ones you want. There is nothing to install: OData is a format Power BI has read for years.
Is location a real dimension, or a text column?
A real one. Locations is its own table in the feed, one row per site, with the name, the address, the city, the country, the primary category and the latitude and longitude. It joins to your reviews through the review profile, so rating by city, by category or on a map is a field on a visual. The review row also carries the location name directly, so the simplest chart needs no join at all.
Which columns arrive?
One row per review with the rating, the review date, the platform, the location name, the reviewer, the language, the tags, the topics and the full text, plus the owner reply and when it was posted. Alongside it sit tables for your locations, your review profiles, your ratings history, a monthly summary and a change stream of inserts, updates and deletes.
Does the report refresh on its own?
Yes. Power BI’s scheduled refresh pulls from the feed on whatever cadence you set, and incremental refresh works as well because the review date is a datetimeoffset the feed can filter on. A review that is edited or taken down arrives through the change stream, so the report does not quietly drift away from what is on the listing.
Does the first load include our Google review history?
Yes. Connecting a Google Business Profile listing loads its review history, so every site has a full trend line from the first refresh rather than one that fills up over the next quarter.
Which plan includes the BI feed?
The BI feed is a Premium feature and it is not part of the free trial, so budget for that rather than discovering it on day three. Everything else works the way the trial suggests: you connect your listings yourself and see your reviews in minutes.
Do I need a demo to get started?
No. You connect your Google Business Profile listings and create the BI connection yourself, in under five minutes. If you get stuck, support is the people who build it.





