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

Google reviews 9,412 rows Power BI

Average rating by location

Locations is its own table in the feed, so this is one field on an axis.

Bristol Clifton 4.8
Bath Milsom 4.7
Bristol Harbourside 4.6
Cardiff Castle Street 4.6
Exeter Cathedral 4.5
Bristol Gloucester Road 4.5
Cheltenham Promenade 4.4
Swindon Old Town 4.3
Newport Friars 4.2
Taunton High Street 4.1
Gloucester Quays 3.9
Bristol Cabot Circus 3.6

The group average is 4.4 across twelve sites. The axis starts at 3.0.

  • chewy
  • qonto
  • brevo
  • jins
  • filmin
  • lugg

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.

Google reviews 12 locations Model view
Reviews
  • Id Edm.Int64
  • ReviewProfileId Edm.Int64
  • Rating Edm.Double
  • ReviewDate Edm.DateTimeOffset
  • LocationName Edm.String
  • Tags Edm.String
ReviewProfiles
  • Id Edm.Int64
  • LocationId Edm.Int64
  • ProfileName Edm.String
  • Platform Edm.String
  • Url Edm.String
  • Paused Edm.Boolean
ReviewProfiles.LocationId Locations.Id
Locations its own entity set, one row per site
  • 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.

Get data OData feed Google reviews

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.

Google reviews Power BI

90 day rolling average rating by location

Halden Coffee, 12 sites, 9,412 Google reviews all time

Group, all 12 sites 4.4 flat
Bristol Cabot Circus, 90 day rolling 4.6 → 3.6
Bristol Cabot Circus, lifetime 4.5 → 4.3
Bristol Cabot Circus falls from 4.6 to 3.6 on a 90 day rolling average while the group of twelve sites stays flat at 4.4 and the same site’s lifetime average moves only 4.5 to 4.3.
15 Jun13 Jul10 Aug7 Sep

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 12 sites, 1,013 rows Power BI

Google reviews per day

Sat and Sun Mon to Fri

Halden Coffee, 3 August to 6 September 2026.

3 Aug 17 Aug 31 Aug

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.

Google reviews Halden Coffee, twelve sites 9,412 all time
Power BI Scheduled refresh On
06:00 18:00 Twice a day, Europe/London Last refreshed 18:04

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

insert Bristol Cabot Circus rv_8841c2 07 Sep 09:14
update Bath Milsom rv_8712af 07 Sep 08:02
delete Gloucester Quays rv_8409de 06 Sep 17:41

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.

Google reviews Connected Halden Coffee, 12 locations

BI connections

Each one is a token, bound to the person who created it.

Leadership dashboard

Priya Raman All 12 locations Last used 3 minutes ago

Ops weekly refresh

Tom Adeyemi All 12 locations Last used 6 hours ago

Northgate agency

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.

Old Excel workbook Revoked 14 Aug 2026

Dan Okafor No longer refreshing Kept on the list for the audit trail

Power BI User name bi_••••••••••3f2a Password leave it blank

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.