AutomationFlowsEmail & Gmail › Monitor Ios App Store Reviews & Send Email Notifications Automatically

Monitor Ios App Store Reviews & Send Email Notifications Automatically

ByWeblineIndia @weblineindia on n8n.io

This workflow runs on a scheduled basis (default: every 6 hours, customizable) and monitors new App Store reviews for your iOS apps. It fetches reviews via Apple’s iTunes RSS API, filters only new reviews since the last run and sends real-time notifications to your team via…

Cron / scheduled trigger★★★★☆ complexity12 nodesHTTP RequestGmail
Email & Gmail Trigger: Cron / scheduled Nodes: 12 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #9343 — we link there as the canonical source.

This workflow follows the Gmail → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "jokolRfKCTJ4umAw",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "iOS App Store Review Monitor",
  "tags": [],
  "nodes": [
    {
      "id": "156c62c9-b236-4d0d-ad17-540dfe8d60ff",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -336,
        -48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "*/30 * * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b33809e1-6e0e-4c3c-955c-3d5f7d200d72",
      "name": "Extract Reviews",
      "type": "n8n-nodes-base.code",
      "position": [
        384,
        -80
      ],
      "parameters": {
        "jsCode": "const jsonData = JSON.parse($input.all()[0].json.data);\n\nconst reviews = jsonData.feed.entry || [];\n\nreturn reviews.map(review => ({\n  rating: review['im:rating']?.label,\n  title: review.title?.label,\n  content: review.content?.label,\n  author: review.author?.name?.label,\n  version: review['im:version']?.label,\n  date: review.updated?.label,\n  reviewId: review.id?.label\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "db2f0933-6af5-440f-bbad-90878482d23f",
      "name": "Any new reviews?",
      "type": "n8n-nodes-base.if",
      "position": [
        880,
        -96
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "24aadf61-9388-47df-a03f-734b06589ed0",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $items().length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1f4e4fbc-abe7-4d2a-9a54-bcc5992413a6",
      "name": "App Config",
      "type": "n8n-nodes-base.set",
      "position": [
        -96,
        -64
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "31946ee3-e6d5-4084-93b4-4ef0f62c8cfe",
              "name": "appId",
              "type": "string",
              "value": "1234567890"
            },
            {
              "id": "4b88dc12-53e3-430e-9b88-f55903f943bf",
              "name": "country",
              "type": "string",
              "value": "US"
            },
            {
              "id": "22cec944-85bc-4786-b988-0c2cc71abad3",
              "name": "lang",
              "type": "string",
              "value": "en"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7fa5c285-0645-4641-8e27-2c2e33ff1a9c",
      "name": "Fetch Reviews",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        160,
        -80
      ],
      "parameters": {
        "url": "=https://itunes.apple.com/rss/customerreviews/page=1/id={{$json[\"appId\"]}}/sortby=mostrecent/json?l={{$json[\"lang\"]}}&cc={{$json[\"country\"]}}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "f4e2673d-1bb8-4871-9b84-124587e29d30",
      "name": "Filter latest Review",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        -80
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst sixHoursAgo = new Date(Date.now() - 78 * 60 * 60 * 1000);\nconst newOnes = [];\n\nfor (const item of items) {\n  const reviewDate = new Date(item.json.date);\n  if (reviewDate > sixHoursAgo) {\n    newOnes.push(item);\n  }\n}\n\nreturn newOnes;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bafee2c9-19cc-4f31-b1c5-7870b58ddcca",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -192
      ],
      "parameters": {
        "width": 256,
        "height": 112,
        "content": "**Runs every 6 hours to check for new reviews - adjust timing based on your monitoring needs**"
      },
      "typeVersion": 1
    },
    {
      "id": "fe8162f2-745e-4ea4-8e1f-8d3fef8d9303",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        80
      ],
      "parameters": {
        "width": 224,
        "height": 112,
        "content": "**Set your App Store ID, country (us/gb/de), and language (en/es/fr) - find App ID in your App Store URL**"
      },
      "typeVersion": 1
    },
    {
      "id": "fb9c717b-f9b2-4e53-a4b3-7fba3b5f4e71",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -208
      ],
      "parameters": {
        "height": 96,
        "content": "**Calls Apple's iTunes API to get latest customer reviews - sorted by most recent first**"
      },
      "typeVersion": 1
    },
    {
      "id": "51b33b2b-379b-4232-9fa0-fa45b427ab5b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        64
      ],
      "parameters": {
        "height": 96,
        "content": "**Compares with last check time to find only NEW reviews since previous run - prevents duplicate notifications**"
      },
      "typeVersion": 1
    },
    {
      "id": "fa7128e3-4ee0-4553-b999-f24b7bc43067",
      "name": "Send notification",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1200,
        -240
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=\ud83c\udd95 New iOS App Store Review (\u2b50 {{$json.rating}}/5) \u201c{{$json.title}}\u201d by {{$json.author}} \u2014 v{{$json.version}} \u2014 {{$json.content}} ",
        "options": {},
        "subject": "=New App Store Review (\u2b50 {{$json.rating}}/5) \u2014 {{$json.title}}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c2fce7f5-6b22-4d79-b374-19514c164d22",
      "name": "False Case",
      "type": "n8n-nodes-base.set",
      "position": [
        1216,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8f36ed49-5b1a-4687-9a49-36eee4197824",
              "name": "status",
              "type": "string",
              "value": "no new reviews"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8b6459a1-d008-44db-8ebd-c516e2c111d1",
  "connections": {
    "App Config": {
      "main": [
        [
          {
            "node": "Fetch Reviews",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Reviews": {
      "main": [
        [
          {
            "node": "Extract Reviews",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Reviews": {
      "main": [
        [
          {
            "node": "Filter latest Review",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Any new reviews?": {
      "main": [
        [
          {
            "node": "Send notification",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "False Case",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "App Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter latest Review": {
      "main": [
        [
          {
            "node": "Any new reviews?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow runs on a scheduled basis (default: every 6 hours, customizable) and monitors new App Store reviews for your iOS apps. It fetches reviews via Apple’s iTunes RSS API, filters only new reviews since the last run and sends real-time notifications to your team via…

Source: https://n8n.io/workflows/9343/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.

Gmail, Google Drive, Google Sheets +1
Email & Gmail

Instead of providing a routine check, it focuses on significant movements by: Sending a Slack alert only if a query crosses a defined movement threshold. Emailing a structured report with the Top 25 i

HTTP Request, Slack, Gmail
Email & Gmail

Looking for a way to track GitHub bounty issues automatically and get notified in real time? This GitHub Bounty Tracker workflow monitors repositories for issues labeled 💎 Bounty, logs them in Google

Google Sheets, HTTP Request, WhatsApp +1
Email & Gmail

This workflow automatically sends a beautifully designed HTML newsletter every Sunday at 8 AM, featuring products currently on sale from your Algolia-powered e-commerce store.

Google Sheets, HTTP Request, Gmail
Email & Gmail

This workflow automatically identifies your weekly bestselling product from your Algolia-powered e-commerce store and generates a cinematic product video using Google VEO 3.0 AI, helping marketing tea

HTTP Request, Gmail