Trustpilot reviews to Power BI
Reviewflowz publishes an OData v4 feed and Power BI’s built-in OData connector reads it. Paste one URL and your Trustpilot reviews arrive as an ordinary table, on the same page as the order volume they explain. There is nothing to install.
Set up in under five minutes • No demo required
- 1 Get data Home ribbon
- 2 OData feed Built in, already there
- 3 Paste The URL below
https://app.reviewflowz.com /api/odata/v1/accounts/4821/
- User name
- bi_9f4c2ad7e10b
- Password
- left blank
Nothing to install. OData is a format Power BI has read for years, so its built-in connector does the work.
Reviews beside the number they explain
Trustpilot volume tracks order volume. More orders, more invitations, more reviews. Which means your review count and your operational numbers are two views of the same week, and keeping them in two tools is the reason nobody notices when they disagree.
Put them on one page and the raw count stops being the metric. One-stars per thousand orders is the metric. A good week produces more one-stars in absolute terms and nobody should be woken up for that; the ratio holds flat through a good week and moves the moment something operational breaks.
It is one measure. A count of Trustpilot reviews at rating 1, divided by orders, times a thousand. Both tables are already in the model, so the DAX is a DIVIDE and the alarm is a card with conditional formatting on it.
The retailer in the visual runs about 8,400 orders a day and takes about 310 Trustpilot reviews a day. On 2 September that ratio went from 0.9 to 3.4 while the raw count still looked like an ordinary busy day. The carrier had missed delivery windows in one region since the Monday.
Orders and Trustpilot reviews, daily
Invitations go out against orders, so the two series move together.
One-stars per 1,000 orders
3.4 against 0.9 normal
A busy week raises the count of one-stars. It does not raise the ratio. That is what makes this the alarm, and it is one measure: a count divided by orders.
Six tables, named the way your report will bind to them
Paste the feed URL and Power BI’s navigator lists six tables: Reviews, ReviewProfiles, Locations, RatingsHistory, ReviewSummary and ReviewChanges. Tick what you want and load. The names are PascalCase and stable, because a saved report binds to them.
Reviews is one row per Trustpilot review: Rating, ReviewDate, Title, the full text, ReviewerName, LocationName, Language, Tags and the link back. Typed, not stringly. Rating is a number you can average and ReviewDate is a real datetimeoffset, which is what makes the incremental refresh work.
RatingsHistory and ReviewSummary hand you the rating over time already computed. If all you need is a trend line and a monthly average, that is two small tables instead of aggregating fifty thousand rows.
The tags arrive filled in. Reviewflowz reads each review in the language it was written in, so a French one-star about a late delivery and a Dutch one land on the same tag.
Display Options
Six tables from the Reviewflowz OData feed. Tick what you need and load.
- Rating Edm.Double
- ReviewDate Edm.DateTimeOffset
- Title Edm.String
- Overall Edm.String
- LocationName Edm.String
- Language Edm.String
- Tags Edm.String
- ReviewProfiles The profiles you connected.
- Locations So a review joins to a site.
- RatingsHistory The rating over time, computed.
- ReviewSummary Counts and averages per period.
- ReviewChanges Inserts, updates and deletes.
The names are stable, because a saved report binds to them.
The TrustScore weights recency, so build the window
Trustpilot does not publish a lifetime mean. The TrustScore weights recent reviews more heavily, which is why a bad month costs more than an old bad year and why the number on your profile can fall while your all-time average barely twitches.
So model the window rather than the lifetime. A rolling ninety day average rating is a CALCULATE, an AVERAGE over Rating and a DATESINPERIOD over ReviewDate. Four lines of ordinary DAX over an ordinary table. It is a measure, not a feature request, and nobody has to wait for a vendor to ship it.
Put both series on one chart and the gap does the arguing. The retailer’s lifetime average sits at 4.4 and has sat there for two years. Its rolling ninety day rating is 3.9. The lifetime number is the one that gets screenshotted into the board deck, and it is the one hiding the quarter.
Then the same window slices. Rolling ninety days by region, by location, by tag, off the same measure and the same table, because slicing is what a semantic model is for.
48,200 rows, arriving over the Reviewflowz OData feed.
Average rating: rolling 90 days against lifetime
Rating (rolling 90d) =
CALCULATE(
AVERAGE( Reviews[Rating] ),
DATESINPERIOD( Reviews[ReviewDate],
MAX( Reviews[ReviewDate] ), -90, DAY ) ) A lifetime average hides the month that is actually costing you, and the TrustScore does not average that way either.
Predictable volume is what makes a deviation mean something
Most Trustpilot reviews arrive because somebody was invited to leave one, and invitations go out against orders. That makes the daily count a function of a number you already forecast, which is unusual: on most review platforms volume is weather.
A predictable series has a baseline, and a baseline is what turns a spike into a signal. Three hundred and ten reviews a day is not interesting. Four hundred and seventy on a Wednesday, against a band you can draw, is a phone call to operations before the support queue has finished filling up.
That is a chart anyone can build once and never touch again: daily review count, an expected band behind it, and the days that break out coloured. It sits on the page next to orders and it is read the same way an inventory chart is read.
It also runs the other way. Volume falling below the band is not good news, it is usually the invitation flow having quietly broken, and a dashboard that only watches for bad reviews will never tell you that.
Trustpilot reviews per day against expected
Expected is that day’s orders at your usual invitation rate, plus or minus 12 percent.
470 on Wednesday 2 September, against 333 expected
About 3.7 percent of these orders leave a review, week in and week out. That is what makes the band an expectation rather than a guess.
A deletion is a row, not a silence
Trustpilot reviews get edited, and they get flagged and taken down. A feed that only ever hands you the current state makes both of those look like nothing happened, and your report quietly diverges from the profile it claims to describe.
The feed carries a change stream. ReviewChanges is inserts, updates and deletes as rows, so a one-star a customer raised to four after you fixed the delivery, and a one-star Trustpilot removed on appeal, both reach the model as events with a timestamp on them.
On Trustpilot that matters more than most places. Flagging is part of how the platform works, the review is public the whole time it is under review, and how many of yours get removed is itself a number worth watching rather than a gap in a chart.
Incremental refresh works for the same reason. ReviewDate is a real datetimeoffset the feed can filter on, so Power Query folds a RangeStart and RangeEnd window straight into the request. The first load brings your history, then the dataset pulls the window instead of the world.
ReviewChanges, every edit and takedown as a row
- Insert 2 Sep 09:14 1 star “Delivery window came and went twice.”
- Insert 2 Sep 11:02 2 star “Third missed slot from the same courier.”
- Update 4 Sep 16:40 1 → 4 star “Delivery window came and went twice.” Reviewer edited after the fix
- Delete 5 Sep 08:27 1 star “Courier left it with the wrong building.” Removed by Trustpilot on appeal
Incremental refresh
$filter=ReviewDate ge {RangeStart} and ReviewDate le {RangeEnd} ReviewDate is a real Edm.DateTimeOffset, so Power Query folds the window straight into the request.
It joins to what you already model
Once Reviews is a table in your semantic model it behaves like every other table in it. Relate it to your date table and your region dimension and Trustpilot review volume sits beside churn, tickets and revenue on one page, in the workspace the leadership team already opens.
Which is what a dashboard inside a review tool can never do. That dashboard knows your reviews and nothing else, so every question that crosses the boundary becomes an export, a VLOOKUP and an argument about which file is current.
Row level security still applies, because it is your model. A regional manager who opens the report sees their region’s orders and their region’s Trustpilot reviews, on the rules you already wrote, with no second permission system to keep in step with the first.
The connection is one token you create inside Reviewflowz and revoke inside Reviewflowz. It goes in the user name field with the password left blank, it carries the access of the person who made it, and when the agency building your dashboard finishes, you revoke it and their report stops refreshing that afternoon.
- ReviewDate
- Rating
- LocationName
- Language
- Tags
- Title
Loaded from the Reviewflowz OData feed
- Date
- Month
- Week
on ReviewDate
- OrderDate
- Region
- Revenue
on Region
- CreatedAt
- Region
- Queue
on Region
- Security
- Your RLS roles, unchanged
- Connection
- One token, revocable
- New tables
- One. The rest were already here
Put Trustpilot reviews on the page the business already reads
Set up in under five minutes. No demo required.
How do Trustpilot 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. The 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, so its built-in connector does the work.
Which tables and columns arrive?
Six: Reviews, ReviewProfiles, Locations, RatingsHistory, ReviewSummary and ReviewChanges. Reviews is one row per Trustpilot review with the rating, the review date, the title, the full text, the reviewer name, the location, the language, the tags and the link. RatingsHistory and ReviewSummary give you the rating over time without computing it yourself, and ReviewChanges is the 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. Incremental refresh works too, because the review date is a datetimeoffset the feed can filter on, which is exactly what Power Query folds a RangeStart and RangeEnd window into. The first load brings your Trustpilot history, then the dataset pulls the window.
What happens when a Trustpilot review is removed?
It arrives as a delete row in ReviewChanges, with a timestamp. That is the difference between a change stream and a snapshot: a review that gets flagged and taken down is an event in your model rather than a row that silently stops appearing. Edits come through the same way, so a one-star raised to four after you fixed the problem is visible as a change.
Can I put Trustpilot review volume next to our order volume?
Yes, and it is the reason to do this at all. The reviews land as a table in your own semantic model, so you relate them to your date table and your region dimension like anything else. One-stars per thousand orders is then a DIVIDE across two tables you already have. Reviewflowz does not supply the orders: they are yours, already in the model.
Does our row level security still work?
Yes. The model is yours, so your existing RLS roles apply to the review tables the same way they apply to everything else. Separately, the feed token carries the access of the Reviewflowz user who created it, so someone restricted to a subset of profiles cannot mint a token that exposes the rest.
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 Trustpilot profile yourself and see your reviews in minutes.
Do I need a demo to get started?
No. You connect your Trustpilot profile and create the BI connection yourself, in under five minutes. If you get stuck, support is the people who build it.





