New Trustpilot reviews to Google Sheets and Slack
Every morning the reviews not delivered before, appended to a sheet, with one Slack summary of new and 1-2 star reviews. Uses Trustpilot Reviews Scraper.
Every morning this workflow runs Trustpilot Reviews Scraper (arcadium/trustpilot-reviews) in only-new mode for a list of companies, appends each new review to a Google Sheet and posts one summary message to a Slack channel: new reviews per company and the newest 1★ and 2★ reviews with a link.
Schedule (07:00) → Apify: Run actor and get dataset → Code: review rows ─┬→ Google Sheets: Append row
└→ Code: Slack summary → Slack: Send message
File: workflow.json (n8n workflow export format, with a sticky note that repeats the setup steps). Want a weekly competitor report with TrustScore snapshots and edits instead? Use the n8n-trustpilot-competitors-to-google-sheets template.
What you need
| Credential | Where | Placeholder in the file |
|---|---|---|
| Apify API token | Apify Console → Settings → API & Integrations | REPLACE_WITH_YOUR_APIFY_CREDENTIAL_ID (credential type Apify API) |
| Google Sheets | n8n's Google Sheets OAuth2 credential | REPLACE_WITH_YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| A spreadsheet | Your Google Drive | REPLACE_WITH_YOUR_SPREADSHEET_ID in the sheet URL |
| Slack | A Slack app with the chat:write scope, or n8n's Slack OAuth2 | REPLACE_WITH_YOUR_SLACK_CREDENTIAL_ID (credential type Slack API) |
The Apify node is Apify's official n8n node, package @apify/n8n-nodes-apify (checked against version 0.9.0, node version 2, operation Run actor and get dataset). On n8n Cloud search for "Apify" in the nodes panel. On self-hosted n8n: Settings → Community nodes → Install → @apify/n8n-nodes-apify. Only need one destination? Delete the Sheets node or the two Slack nodes.
Import
- Create a Google Sheet with a tab named Reviews and this header row (the node maps columns by name):
reviewId | date | company | rating | title | text | companyReply | verified | language | edited | url | scrapedAt
- n8n → Workflows → Import from File →
workflow.json. - Get new reviews: pick your Apify credential and edit the JSON input:
companies: company domains (www.bestbuy.com) or Trustpilot review page URLs (any country subdomain).stateKey: the name of this watchlist. The actor remembers the reviews it delivered under this name, so a run returns only reviews it has not delivered before and repeats are not charged. Keep it stable; a new name starts over.dateFrom:7 dayskeeps the first run to the last week and stops later runs from walking back into older reviews.maxReviewsPerCompany: an upper limit per company and run (100 in the template).- Append to Google Sheets: pick your credential and paste your sheet URL.
- Post to Slack: pick your Slack credential and change the channel (
#reviewsin the template). Invite the Slack app to that channel. - Execute once, check the sheet and Slack, then Activate.
Cost per run
Pay per event. Prices are the actor's Store pricing at the time of writing (Free plan; paid Apify plans pay less). The live price is on the Store page.
| Event | Price | In this template |
|---|---|---|
| Review | $0.00052 ($0.52 per 1,000) | 30 new reviews = $0.016 |
| Repeats in only-new mode, error rows | free |
Plus Apify's small start event per run. The node caps a run at $0.50 (maxTotalChargeUsd).
What to expect
- The first run delivers the reviews of the last 7 days. Later runs deliver only reviews that were not delivered before; on a day without new reviews nothing is written and no Slack message is sent.
- With
markEditedon, a review whose text changed in the last 7 days comes back once more withedited = true(marked[edited]in Slack). - Reviewer names are never collected and are removed from review and reply text.
- A company that cannot be read gives a free
errorrow with acode; Reviews to rows skips it. Add a branch onrowType = "error"if you want to see those.