Scrape Trustpilot Reviews with DeepSeek, Analyze Sentiment with OpenAI

Automate the process of scraping Trustpilot reviews, extracting key information, and analyzing sentiment with this powerful n8n workflow. This workflow connects to Trustpilot via HTTP requests to retrieve review data, then uses an HTML node to extract the relevant content. It integrates with Google Sheets to store and manage a list of company Trustpilot URLs, fetching these URLs and updating review data as it processes. The core of the AI functionality comes from DeepSeek and OpenAI, with a DeepSeek Chat Model node for general AI processing and an OpenAI Chat Model node specifically for sentiment analysis, categorizing reviews as positive, negative, or neutral. This workflow is ideal for businesses monitoring their brand reputation, market researchers gathering customer feedback, or product managers seeking insights from user reviews. It significantly reduces the manual effort of collecting and analyzing customer feedback, providing actionable insights quickly and efficiently, and ensuring that businesses can react promptly to public perception.

20 nodesmanual trigger193 views0 copiesAI
Google SheetsOpenAI

Workflow JSON

{"id": "w434EiZ2z7klQAyp", "meta": {"instanceId": "a4bfc93e975ca233ac45ed7c9227d84cf5a2329310525917adaf3312e10d5462", "templateCredsSetupCompleted": true}, "name": "Scrape Trustpilot Reviews with DeepSeek, Analyze Sentiment with OpenAI", "tags": [{"id": "2VG6RbmUdJ2VZbrj", "name": "Google Drive", "createdAt": "2024-12-04T16:50:56.177Z", "updatedAt": "2024-12-04T16:50:56.177Z"}, {"id": "paTcf5QZDJsC2vKY", "name": "OpenAI", "createdAt": "2024-12-04T16:52:10.768Z", "updatedAt": "2024-12-04T16:52:10.768Z"}], "nodes": [{"id": "095a8e10-1630-4a1a-b6c9-7950ae1ed803", "name": "Split Out", "type": "n8n-nodes-base.splitOut", "position": [320, -380], "parameters": {"options": {}, "fieldToSplitOut": "recensioni"}, "typeVersion": 1}, {"id": "6ff4dd9d-eedd-4d84-b13a-b3c0db717409", "name": "Information Extractor", "type": "@n8n/n8n-nodes-langchain.informationExtractor", "position": [-440, 140], "parameters": {"text": "=You need to extract the review from the following HTML: {{ $json.recensione }}", "options": {"systemPromptTemplate": "You are a review expert. You need to extract only the required information and report it without changing anything.\nAll the required information is in the text."}, "attributes": {"attributes": [{"name": "autore", "required": true, "description": "Extract the name of the review author"}, {"name": "valutazione", "type": "number", "required": true, "description": "Extract the rating given to the review (from 1 to 5)"}, {"name": "data", "required": true, "description": "Extract review date in YYYY-MM-DD format"}, {"name": "titolo", "required": true, "description": "Extract the review title"}, {"name": "testo", "required": true, "description": "Extract the review text"}, {"name": "n_recensioni", "type": "number", "required": true, "description": "Extract the total number of reviews made by the user"}, {"name": "nazione", "required": true, "description": "Extract the country of the user who wrote the review. Must be two characters"}]}}, "typeVersion": 1}, {"id": "0036f3b1-4832-4a35-8694-0893475a4119", "name": "If", "type": "n8n-nodes-base.if", "position": [60, -100], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "loose"}, "combinator": "and", "conditions": [{"id": "ab666549-4eec-40e2-a702-0575c094a2d4", "operator": {"type": "string", "operation": "empty", "singleValue": true}, "leftValue": "={{ $json.Valutazione }}", "rightValue": "={{ $('Split Out').item.json.recensioni.replace('/reviews/','') }}"}]}, "looseTypeValidation": true}, "executeOnce": false, "typeVersion": 2.2}, {"id": "5423b55d-eb6c-41c6-9b26-410e3c92b85d", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [-700, -380], "parameters": {}, "typeVersion": 1}, {"id": "506cdaa1-e0ba-4f29-b137-69d321b13c94", "name": "Limit1", "type": "n8n-nodes-base.limit", "position": [540, -380], "parameters": {"maxItems": 3}, "typeVersion": 1}, {"id": "40f1e30d-8aed-4995-b4e4-2239248bd6e7", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-460, -480], "parameters": {"width": 212.25249169435213, "height": 245.55481727574733, "content": "Change to the name of the company registered on Trustpilot and the maximum number of pages to scrape"}, "typeVersion": 1}, {"id": "e6d2fec1-7255-4270-86b4-6d6f39f44ccb", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-460, 80], "parameters": {"width": 381, "height": 177, "content": "Extract all information with DeepSeek (remember to change base_url with https://api.deepseek.com/v1)"}, "typeVersion": 1}, {"id": "af5e962c-4faf-41cc-a8b8-2fbb145b7af6", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [-240, -160], "parameters": {"width": 501.28903654485043, "height": 195.84053156146172, "content": "Check if the review has already been saved to Google Drive"}, "typeVersion": 1}, {"id": "400dff0c-8b2e-4fe2-933e-1f4d14624ca1", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [40, 80], "parameters": {"width": 301.27574750830576, "height": 177.34219269102988, "content": "Analyze review sentiment"}, "typeVersion": 1}, {"id": "52757ade-4206-40f9-bf4f-c3aefb004d2e", "name": "Set Parameters", "type": "n8n-nodes-base.set", "position": [-440, -380], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "556e201d-242a-4c0e-bc13-787c2b60f800", "name": "company_id", "type": "string", "value": "COMPANY"}, {"id": "a1f239df-df08-41d8-8b78-d6502266a581", "name": "max_page", "type": "number", "value": 2}]}}, "typeVersion": 3.4}, {"id": "cd7e9d36-7ecd-4d9c-b552-8f46b0cfcc03", "name": "Get reviews", "type": "n8n-nodes-base.httpRequest", "position": [-200, -380], "parameters": {"url": "=https://it.trustpilot.com/review/{{ $json.company_id }}", "options": {"pagination": {"pagination": {"parameters": {"parameters": [{"name": "page", "value": "={{ $pageCount + 1 }}"}]}, "maxRequests": "={{ $json.max_page }}", "requestInterval": 5000, "limitPagesFetched": true}}}, "sendQuery": true, "queryParameters": {"parameters": [{"name": "sort", "value": "recency"}]}}, "typeVersion": 4.2}, {"id": "476ff7b6-ab30-4674-a7fe-b032128ee51a", "name": "Extract", "type": "n8n-nodes-base.html", "position": [60, -380], "parameters": {"options": {}, "operation": "extractHtmlContent", "extractionValues": {"values": [{"key": "recensioni", "attribute": "href", "cssSelector": "article section a", "returnArray": true, "returnValue": "attribute"}]}}, "typeVersion": 1.2}, {"id": "a2a35455-7d3e-4c4c-aa66-6cbbd48d867a", "name": "Get rows", "type": "n8n-nodes-base.googleSheets", "position": [-200, -100], "parameters": {"options": {}, "filtersUI": {"values": [{"lookupValue": "={{ $('Split Out').item.json.recensioni.replace('/reviews/','') }}", "lookupColumn": "Id"}]}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "", "cachedResultName": "Foglio1"}, "documentId": {"__rl": true, "mode": "list", "value": "1QZhQqg79-HVBQh8Y2ihMq67UIYIRrJFKLQalcFvtDaY", "cachedResultUrl": "", "cachedResultName": "Trustpilot Review"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "", "name": "[Your googleSheetsOAuth2Api]"}}, "typeVersion": 4.5}, {"id": "2d507fe6-a4fc-42ff-97ff-dfd552c651ab", "name": "Get Google Sheets", "type": "n8n-nodes-base.googleSheets", "position": [-440, -100], "parameters": {"columns": {"value": {"Id": "={{ $('Split Out').item.json.recensioni.replace('/reviews/','') }}"}, "schema": [{"id": "Id", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Id", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Data", "type": "string", "display": true, "required": false, "displayName": "Data", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Nome", "type": "string", "display": true, "required": false, "displayName": "Nome", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Titolo", "type": "string", "display": true, "required": false, "displayName": "Titolo", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Testo", "type": "string", "display": true, "required": false, "displayName": "Testo", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Localit\u00e0", "type": "string", "display": true, "required": false, "displayName": "Localit\u00e0", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "N. Recensioni", "type": "string", "display": true, "required": false, "displayName": "N. Recensioni", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "URL", "type": "string", "display": true, "required": false, "displayName": "URL", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Valutazione", "type": "string", "display": true, "required": false, "displayName": "Valutazione", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Sentiment", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Sentiment", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["Id"], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "appendOrUpdate", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "", "cachedResultName": "Foglio1"}, "documentId": {"__rl": true, "mode": "list", "value": "1QZhQqg79-HVBQh8Y2ihMq67UIYIRrJFKLQalcFvtDaY", "cachedResultUrl": "", "cachedResultName": "Trustpilot Reviews"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "", "name": "[Your googleSheetsOAuth2Api]"}}, "executeOnce": false, "typeVersion": 4.5}, {"id": "0a1fab6e-96b7-403b-884e-f67be6e23fa5", "name": "Get Single review", "type": "n8n-nodes-base.httpRequest", "position": [320, -120], "parameters": {"url": "=https://it.trustpilot.com{{ $('Split Out').item.json.recensioni }}", "options": {}}, "typeVersion": 4.2, "alwaysOutputData": false}, {"id": "7d322d76-1032-405a-9d46-2958761a184d", "name": "Extract review", "type": "n8n-nodes-base.html", "position": [540, -120], "parameters": {"options": {}, "operation": "extractHtmlContent", "extractionValues": {"values": [{"key": "recensione", "cssSelector": "article", "returnArray": true}]}}, "typeVersion": 1.2}, {"id": "952484e5-8e87-4eb3-99a6-5bf26c701ba8", "name": "Update sheet", "type": "n8n-nodes-base.googleSheets", "position": [520, 120], "parameters": {"columns": {"value": {"Id": "={{ $('Split Out').item.json.recensioni.replace('/reviews/','') }}", "URL": "=https://it.trustpilot.com{{ $('Split Out').item.json.recensioni }}", "Data": "={{ $('Information Extractor').item.json.output.data }}", "Nome": "={{ $json.output.autore }}", "Testo": "={{ $('Information Extractor').item.json.output.testo }}", "Titolo": "={{ $('Information Extractor').item.json.output.titolo }}", "Localit\u00e0": "={{ $('Information Extractor').item.json.output.nazione }}", "Sentiment": "={{ $json.sentimentAnalysis.category }}", "Valutazione": "={{ $('Information Extractor').item.json.output.valutazione }}", "N. Recensioni": "={{ $('Information Extractor').item.json.output.n_recensioni }}"}, "schema": [{"id": "Id", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Id", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Data", "type": "string", "display": true, "required": false, "displayName": "Data", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Nome", "type": "string", "display": true, "required": false, "displayName": "Nome", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Titolo", "type": "string", "display": true, "required": false, "displayName": "Titolo", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Testo", "type": "string", "display": true, "required": false, "displayName": "Testo", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Localit\u00e0", "type": "string", "display": true, "required": false, "displayName": "Localit\u00e0", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "N. Recensioni", "type": "string", "display": true, "required": false, "displayName": "N. Recensioni", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "URL", "type": "string", "display": true, "required": false, "displayName": "URL", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Valutazione", "type": "string", "display": true, "required": false, "displayName": "Valutazione", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Sentiment", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Sentiment", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["Id"], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "appendOrUpdate", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "", "cachedResultName": "Foglio1"}, "documentId": {"__rl": true, "mode": "list", "value": "1QZhQqg79-HVBQh8Y2ihMq67UIYIRrJFKLQalcFvtDaY", "cachedResultUrl": "", "cachedResultName": "Trustpilot Reviews"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "", "name": "[Your googleSheetsOAuth2Api]"}}, "typeVersion": 4.5}, {"id": "eb853885-816d-4df7-b5ac-900fa89d3df9", "name": "Sentiment Analysis", "type": "@n8n/n8n-nodes-langchain.sentimentAnalysis", "position": [60, 140], "parameters": {"options": {"categories": "Positive, Neutral, Negative", "systemPromptTemplate": "You are highly intelligent and accurate sentiment analyzer. Analyze the sentiment of the provided text. Categorize it into one of the following: {categories}. Use the provided formatting instructions. Only output the JSON."}, "inputText": "={{ $json.output.testo }}"}, "typeVersion": 1}, {"id": "79f1b9ea-6297-4735-9c0f-9f28dd65efa0", "name": "DeepSeek Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "position": [-460, 320], "parameters": {"model": "deepseek-reasoner", "options": {"baseURL": "https://api.deepseek.com/v1"}}, "credentials": {"openAiApi": {"id": "", "name": "[Your openAiApi]"}}, "typeVersion": 1}, {"id": "159cc88e-1dd3-4bba-a3c8-59a9aad14c88", "name": "OpenAI Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "position": [40, 320], "parameters": {"options": {}}, "credentials": {"openAiApi": {"id": "", "name": "[Your openAiApi]"}}, "typeVersion": 1.1}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1"}, "versionId": "43c8ee74-159c-4217-9cb4-554c63a3b183", "connections": {"If": {"main": [[{"node": "Get Single review", "type": "main", "index": 0}]]}, "Limit1": {"main": [[{"node": "Get Google Sheets", "type": "main", "index": 0}]]}, "Extract": {"main": [[{"node": "Split Out", "type": "main", "index": 0}]]}, "Get rows": {"main": [[{"node": "If", "type": "main", "index": 0}]]}, "Split Out": {"main": [[{"node": "Limit1", "type": "main", "index": 0}]]}, "Get reviews": {"main": [[{"node": "Extract", "type": "main", "index": 0}]]}, "Extract review": {"main": [[{"node": "Information Extractor", "type": "main", "index": 0}]]}, "Set Parameters": {"main": [[{"node": "Get reviews", "type": "main", "index": 0}]]}, "Get Google Sheets": {"main": [[{"node": "Get rows", "type": "main", "index": 0}]]}, "Get Single review": {"main": [[{"node": "Extract review", "type": "main", "index": 0}]]}, "OpenAI Chat Model": {"ai_languageModel": [[{"node": "Sentiment Analysis", "type": "ai_languageModel", "index": 0}]]}, "Sentiment Analysis": {"main": [[{"node": "Update sheet", "type": "main", "index": 0}], [{"node": "Update sheet", "type": "main", "index": 0}], [{"node": "Update sheet", "type": "main", "index": 0}]]}, "DeepSeek Chat Model": {"ai_languageModel": [[{"node": "Information Extractor", "type": "ai_languageModel", "index": 0}]]}, "Information Extractor": {"main": [[{"node": "Sentiment Analysis", "type": "main", "index": 0}]]}, "When clicking \u2018Test workflow\u2019": {"main": [[{"node": "Set Parameters", "type": "main", "index": 0}]]}}}

How to Import This Workflow

  1. 1Copy the workflow JSON above using the Copy Workflow JSON button.
  2. 2Open your n8n instance and go to Workflows.
  3. 3Click Import from JSON and paste the copied workflow.

Don't have an n8n instance? Start your free trial at n8nautomation.cloud

Ready to automate with n8n?

Get affordable managed n8n hosting with 24/7 support.