{
  "id": "SNTDFoVXuLb0OsHg",
  "name": "Online Review Monitoring (Apify \u2192 Sheets \u2192 Gemini)",
  "tags": [],
  "nodes": [
    {
      "id": "239510b8-ab37-4c3b-996c-2de42ed330f2",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2560,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 368,
        "content": "## Merge and notify\n\nCombines the outputs from all three Google Sheets update branches, then sends a Gmail message once the merged review-monitoring results are ready."
      },
      "typeVersion": 1
    },
    {
      "id": "0c7403b8-3206-45c4-b6a5-81112f499f1b",
      "name": "Fetch Google Maps Reviews",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        2064,
        32
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "Xb8osYTtOjlsgI6k9",
          "cachedResultUrl": "https://console.apify.com/actors/Xb8osYTtOjlsgI6k9/input",
          "cachedResultName": "Google Maps Reviews Scraper (compass/Google-Maps-Reviews-Scraper)"
        },
        "timeout": {},
        "operation": "Run actor and get dataset",
        "customBody": "{\n    \"language\": \"en\",\n    \"maxReviews\": 50,\n    \"personalData\": true,\n    \"reviewsStartDate\": \"2026-01-01\",\n    \"startUrls\": [\n        {\n            \"url\": \"https://www.google.com/maps/place/San+Carlo+Mala+Strana/@50.0870868,14.4002294,17z/data=!3m1!4b1!4m6!3m5!1s0x470b94e367240611:0x7cb0bfdb21a4cd8d!8m2!3d50.0870868!4d14.4028043!16s%2Fg%2F11b8r7d48b?entry=ttu&g_ep=EgoyMDI2MDUwMi4wIKXMDSoASAFQAw%3D%3D\"\n        },\n        {\n            \"url\": \"https://www.google.com/maps/place/San+Carlo+Dittrichova/@50.0761995,14.4129542,17z/data=!4m14!1m7!3m6!1s0x470b94f6b4f5bb33:0x606ee74f5e93c790!2sSan+Carlo+Dittrichova!8m2!3d50.0761995!4d14.4155291!16s%2Fg%2F11b8b2p43l!3m5!1s0x470b94f6b4f5bb33:0x606ee74f5e93c790!8m2!3d50.0761995!4d14.4155291!16s%2Fg%2F11b8b2p43l?entry=ttu&g_ep=EgoyMDI2MDUwMi4wIKXMDSoASAFQAw%3D%3D\"\n        }\n    ]\n}",
        "actorSource": "store",
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {
        "apifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "05510c26-22b6-481f-babd-23eea86356e5",
      "name": "Fetch Yelp Reviews",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        2064,
        384
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "c7MfRDqfYvZWOtMrJ",
          "cachedResultUrl": "https://console.apify.com/actors/c7MfRDqfYvZWOtMrJ/input",
          "cachedResultName": "Fast Yelp Reviews Scraper API | Extract Review Text & Ratings (agents/yelp-reviews)"
        },
        "timeout": {},
        "operation": "Run actor and get dataset",
        "customBody": "{\n    \"maxReviewsPerUrl\": 50,\n    \"startUrls\": [\n        {\n            \"url\": \"https://www.yelp.com/biz/san-carlo-praha-2?osq=San+Carlo\"\n        },\n        {\n            \"url\": \"https://www.yelp.com/biz/san-carlo-praha-3?osq=San+Carlo\"\n        }\n    ]\n}",
        "actorSource": "store",
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {
        "apifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "93d8e8ed-b644-452e-8ee9-37fac7f94d2e",
      "name": "Fetch Tripadvisor Reviews",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        2064,
        736
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "Hvp4YfFGyLM635Q2F",
          "cachedResultUrl": "https://console.apify.com/actors/Hvp4YfFGyLM635Q2F/input",
          "cachedResultName": "Tripadvisor Reviews Scraper (maxcopell/tripadvisor-reviews)"
        },
        "timeout": {},
        "operation": "Run actor and get dataset",
        "customBody": "{\n    \"maxItemsPerQuery\": 50,\n    \"reviewRatings\": [\n        \"ALL_REVIEW_RATINGS\"\n    ],\n    \"reviewsLanguages\": [\n        \"ALL_REVIEW_LANGUAGES\"\n    ],\n    \"scrapeReviewerInfo\": true,\n    \"startUrls\": [\n        {\n            \"url\": \"http://tripadvisor.com/Restaurant_Review-g274707-d7938899-Reviews-San_Carlo_Dittrichova-Prague_Bohemia.html\"\n        },\n        {\n            \"url\": \"https://www.tripadvisor.com/Restaurant_Review-g274707-d13340787-Reviews-San_Carlo_Mala_Strana-Prague_Bohemia.html\"\n        }\n    ]\n}",
        "actorSource": "store",
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {
        "apifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f5a24a89-1454-467f-b56e-604760faba38",
      "name": "Update Google Maps in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2352,
        32
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.publishedAtDate }}",
            "Text": "={{ $json.text }}",
            "Author": "={{ $json.name }}",
            "Location URL": "={{ $json.searchString }}",
            "Text translated": "={{ $json.textTranslated }}"
          },
          "schema": [
            {
              "id": "Location URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Location URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Author",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Author",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text translated",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Text translated",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Location URL"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw/edit#gid=0",
          "cachedResultName": "Google Maps"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw/edit?usp=drivesdk",
          "cachedResultName": "Online review monitoring"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "0e75d2d1-66ac-4113-9699-583f6f893390",
      "name": "Update Yelp in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2352,
        384
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.scrapedAt }}",
            "Text": "={{ $json.message }}",
            "Author": "={{ $json.reviewer.name }}",
            "Location URL": "={{ $json.inputSource }}"
          },
          "schema": [
            {
              "id": "Location URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Location URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Author",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Author",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text translated",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Text translated",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Location URL"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 446667629,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw/edit#gid=446667629",
          "cachedResultName": "Yelp"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw/edit?usp=drivesdk",
          "cachedResultName": "Online review monitoring"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "073d561c-13ef-45fc-be5e-660bc6bc81d1",
      "name": "Update Tripadvisor in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2352,
        736
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.publishedDate }}",
            "Text": "={{ $json.text }}",
            "Author": "={{ $json.user.name }}",
            "Location URL": "={{ $json.url }}"
          },
          "schema": [
            {
              "id": "Location URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Location URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Author",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Author",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text translated",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Text translated",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Location URL"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1521687947,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw/edit#gid=1521687947",
          "cachedResultName": "Sheet3"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y6xJcD_x-KWiPM5aOTsHMiiomlMu1oAAonyu-22hKSw/edit?usp=drivesdk",
          "cachedResultName": "Online review monitoring"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "436bf3ef-8a14-4b4e-a7b3-84ac41c5cf37",
      "name": "Merge All Reviews",
      "type": "n8n-nodes-base.merge",
      "position": [
        2608,
        224
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "dda35d67-95ad-4f1a-9020-93cd9a34a35d",
      "name": "Every 4 Days at 7am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1728,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "daysInterval": 4,
              "triggerAtHour": 7
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "9fee9579-e8f0-45ad-9386-dcce710d42d7",
      "name": "Send Email Notification",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2816,
        240
      ],
      "parameters": {
        "message": "Your reviews are ready for analysis.",
        "options": {},
        "subject": "Workflow complete."
      },
      "executeOnce": true,
      "typeVersion": 2.2
    },
    {
      "id": "297060dd-b4a0-4a65-8ff1-4190dbbf1288",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        -128
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## Online Review Monitoring (Apify \u2192 Sheets \u2192 Gmail)\n\n### How it works\n\nThis workflow runs on a schedule to monitor online reviews from Google Maps, Yelp, and Tripadvisor using separate Apify extraction branches. Each branch writes its results into Google Sheets, then the outputs are merged. After all review-source branches complete, the workflow sends a Gmail notification with the combined result context.\n\n### Setup steps\n\n- Configure the Schedule Trigger with the desired monitoring frequency.\n- Set up Apify credentials and, input parameters, and target business/listing for Google Maps, Yelp, and Tripadvisor.\n- Make a copy of the [Google Sheet template](https://docs.google.com/spreadsheets/d/1ADgjq0NGz3rlKJPKuNfXjbae7Uh90sGjCcs7RoD-I8k/edit?usp=sharing)\n- Connect Google Sheets credentials and choose the spreadsheet, sheet tabs, key columns, and field mappings for each append-or-update node.\n- Connect Gmail credentials and configure the recipient, subject, and message body for the notification email.\n\n### Customization\n\nAdjust the Apify Actor inputs to monitor different businesses or review sources, change the Google Sheets mappings to match your reporting schema, or customize the Gmail message to summarize new or updated reviews."
      },
      "typeVersion": 1
    },
    {
      "id": "a5f6d544-01e9-4211-924c-6959b0d3496b",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        0
      ],
      "parameters": {
        "color": 7,
        "height": 400,
        "content": "## Scheduled workflow start\n\nTriggers the review monitoring workflow on a configured schedule and fans out execution to the three review-source lanes."
      },
      "typeVersion": 1
    },
    {
      "id": "b7619868-aa8f-47b7-819a-e869c6a90627",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2000,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 336,
        "content": "## Google Maps review sync\n\nFetches Google Maps reviews with Apify and appends or updates the corresponding rows in Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "f90b39ba-771e-4d66-9f70-0c3c100d726f",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2000,
        224
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 320,
        "content": "## Yelp review sync\n\nFetches Yelp reviews with Apify and writes them into Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "15bcd4fb-4da1-4ef2-b3fe-c7ceb3abb52e",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2000,
        576
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 352,
        "content": "## Tripadvisor review sync\n\nFetches Tripadvisor Reviews with Apify and appends or updates the matching rows in Google Sheets."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "63b9584a-5708-49e6-86dd-f70bdca8c504",
  "connections": {
    "Merge All Reviews": {
      "main": [
        [
          {
            "node": "Send Email Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Yelp Reviews": {
      "main": [
        [
          {
            "node": "Update Yelp in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every 4 Days at 7am": {
      "main": [
        [
          {
            "node": "Fetch Google Maps Reviews",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Yelp Reviews",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Tripadvisor Reviews",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Yelp in Sheets": {
      "main": [
        [
          {
            "node": "Merge All Reviews",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Fetch Google Maps Reviews": {
      "main": [
        [
          {
            "node": "Update Google Maps in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Tripadvisor Reviews": {
      "main": [
        [
          {
            "node": "Update Tripadvisor in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Google Maps in Sheets": {
      "main": [
        [
          {
            "node": "Merge All Reviews",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Tripadvisor in Sheets": {
      "main": [
        [
          {
            "node": "Merge All Reviews",
            "type": "main",
            "index": 2
          }
        ]
      ]
    }
  }
}