{
  "id": "",
  "name": "Google Shopping Price Monitor powered by Bright Data",
  "tags": [],
  "nodes": [
    {
      "id": "a5be5986-f53b-42d3-b347-5692cd06a343",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        -176
      ],
      "parameters": {
        "width": 480,
        "height": 832,
        "content": "## Google Shopping Price Monitor powered by Bright Data\n\n### How it works\n\nThis workflow runs on a schedule to monitor product prices from a Google Sheet using Bright Data's Google Shopping data. It creates a Bright Data shopping snapshot, waits and polls until the snapshot is ready, then retrieves and aggregates the shopping results. Claude identifies the lowest price, and the workflow formats and writes the latest price details back to the Google Sheet.\n\n### Setup steps\n\n- Configure Google Sheets credentials and select the spreadsheet/range containing the products to monitor.\n- Configure Bright Data credentials and ensure the Google Shopping snapshot/data collection settings are valid for the target products and locations.\n- Configure Anthropic credentials for the Claude node used to determine the lowest price from aggregated results.\n- Verify the output Google Sheet columns match the formatted fields: Lowest Price, Retailer, Product Title, and Last Checked.\n\n### Customization\n\nAdjust the schedule frequency, Bright Data search parameters, polling wait time, and the Claude prompt or output fields to match the products, markets, and pricing rules you want to monitor."
      },
      "typeVersion": 1
    },
    {
      "id": "833d318c-b00a-4d63-a170-080d3175dc8e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -160
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 320,
        "content": "## Schedule product input\n\nStarts the workflow on a schedule and reads the list of products to monitor from Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "9a947eee-ac9f-41db-9a41-7e91b95b169e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 304,
        "content": "## Create and poll snapshot\n\nCreates a Bright Data shopping snapshot, waits, checks its status, and loops until the snapshot is ready for retrieval."
      },
      "typeVersion": 1
    },
    {
      "id": "4f282b2b-c009-4d41-bb4c-9218d065aa87",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1344,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 608,
        "height": 304,
        "content": "## Analyze shopping results\n\nRetrieves the completed Bright Data shopping results, aggregates them, and uses Claude to determine the lowest price and retailer."
      },
      "typeVersion": 1
    },
    {
      "id": "601c21be-7a95-4d74-8b60-46004b9ff825",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2112,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 320,
        "content": "## Update price sheet\n\nFormats the selected pricing details for the spreadsheet and updates Google Sheets with the latest monitored price information."
      },
      "typeVersion": 1
    },
    {
      "id": "67a415a9-3f1e-4d16-92f9-8cfbd6994a80",
      "name": "Every Morning at 8am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "b799cb65-9b5b-4c97-aec7-9fade906fb65",
      "name": "Read Products from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        208,
        0
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Price Intelligence Sheet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "6168c2d2-90f9-4ddd-9980-61e88bc91c2c",
      "name": "Initiate Shopping Snapshot",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        448,
        0
      ],
      "parameters": {
        "resource": "marketplaceDataset",
        "operation": "filterDataset",
        "dataset_id": {
          "__rl": true,
          "mode": "list",
          "value": "gd_m31f2k0d2m1bah4f3b",
          "cachedResultName": "Google Shopping products search US"
        },
        "field_name": "=title",
        "field_value": "={{ $json[\"Product Keyword\"] }}",
        "field_operator": "includes",
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a22a39ae-1f2f-4ef2-804c-e49c21e6596a",
      "name": "Wait 50 Seconds for Snapshot",
      "type": "n8n-nodes-base.wait",
      "position": [
        656,
        0
      ],
      "parameters": {
        "amount": 50
      },
      "typeVersion": 1.1
    },
    {
      "id": "6170f747-1002-41ed-b343-c45e2d8ad5ac",
      "name": "Verify Snapshot Completion",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        864,
        0
      ],
      "parameters": {
        "resource": "marketplaceDataset",
        "operation": "getSnapshotMetadata",
        "snapshot_id": "={{ $json.snapshot_id }}",
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4ac6c8d5-db02-4bc2-bf8b-31003e198e3e",
      "name": "If Snapshot Ready",
      "type": "n8n-nodes-base.if",
      "position": [
        1072,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a9f318e4-c5b9-4a70-9e70-e187384644b7",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "ready"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "5c8b14d7-2843-4765-b521-4d078e4b8386",
      "name": "Retrieve Shopping Data",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        1392,
        -16
      ],
      "parameters": {
        "format": "=json",
        "resource": "marketplaceDataset",
        "operation": "getSnapshotContent",
        "snapshot_id": "={{ $json.id }}",
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2c79c084-785e-4f3f-a478-d04c12d8edff",
      "name": "Combine Shopping Results",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1600,
        -16
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "677d2b13-01cf-4d0e-a6be-5a965ef905d4",
      "name": "AI Determine Lowest Price",
      "type": "@n8n/n8n-nodes-langchain.anthropic",
      "position": [
        1808,
        -16
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "claude-opus-4-8",
          "cachedResultName": "claude-opus-4-8"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a price monitoring assistant.\nThe product being searched is: \"{{ $('Read Products from Sheets').item.json['Product Keyword'] }}\"\n\nHere are the Google Shopping results (JSON):\n{{ JSON.stringify($json.data) }}\n\nKeep ONLY the products that are genuinely this exact product\n(exclude accessories: cases, ear tips, cables, chargers, covers, replacement parts).\nAmong the kept products, find the one with the lowest price.\n\nRespond ONLY in JSON, no preamble, no markdown, no code fences:\n{\n  \"lowest_price\": <number>,\n  \"retailer\": \"<tag>\",\n  \"title\": \"<title>\",\n  \"product_count_valid\": <number>\n}"
            }
          ]
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "34fc7d4d-c686-4e58-b0bd-436511810d3f",
      "name": "Prepare Data for Sheet",
      "type": "n8n-nodes-base.set",
      "position": [
        2160,
        -16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0f94679c-cdb8-4744-93ff-27aa18d855f8",
              "name": "Lowest Price",
              "type": "string",
              "value": "={{ JSON.parse($json.content[0].text).lowest_price }}"
            },
            {
              "id": "8547b8f7-cf06-4d35-9e8c-bdb47b924950",
              "name": "Retailer",
              "type": "string",
              "value": "={{ JSON.parse($json.content[0].text).retailer }}"
            },
            {
              "id": "d8ed567c-3d7b-4088-9a65-1db21199a320",
              "name": "Product Title",
              "type": "string",
              "value": "={{ JSON.parse($json.content[0].text).title }}"
            },
            {
              "id": "7d16d470-5f38-4809-823b-bca51769d7ce",
              "name": "Last Checked",
              "type": "string",
              "value": "={{ $now.format('yyyy-MM-dd') }}"
            },
            {
              "id": "1c1e25f8-c24a-4519-93a9-c7cd6e9e1257",
              "name": "Product Keyword",
              "type": "string",
              "value": "={{ $('Read Products from Sheets').first().json['Product Keyword'] }}"
            },
            {
              "id": "1d16947d-1942-4d44-aded-03c1179d91b8",
              "name": "row_number",
              "type": "string",
              "value": "={{ $('Read Products from Sheets').first().json.row_number }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "3af19e35-538a-4225-bed1-22a41d276d03",
      "name": "Update Prices in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2368,
        -16
      ],
      "parameters": {
        "columns": {
          "value": {
            "Retailer": "={{ $json.Retailer }}",
            "row_number": "={{ $json.row_number }}",
            "Last Checked": "={{ $json[\"Last Checked\"] }}",
            "Lowest Price": "={{ $json[\"Lowest Price\"] }}",
            "Product Keyword": "={{ $json[\"Product Keyword\"] }}"
          },
          "schema": [
            {
              "id": "Product Keyword",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lowest Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Lowest Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Retailer",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Retailer",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Checked",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last Checked",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Price Intelligence Sheet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "",
  "nodeGroups": [],
  "connections": {
    "If Snapshot Ready": {
      "main": [
        [
          {
            "node": "Retrieve Shopping Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 50 Seconds for Snapshot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every Morning at 8am": {
      "main": [
        [
          {
            "node": "Read Products from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Data for Sheet": {
      "main": [
        [
          {
            "node": "Update Prices in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Shopping Data": {
      "main": [
        [
          {
            "node": "Combine Shopping Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Shopping Results": {
      "main": [
        [
          {
            "node": "AI Determine Lowest Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Determine Lowest Price": {
      "main": [
        [
          {
            "node": "Prepare Data for Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Products from Sheets": {
      "main": [
        [
          {
            "node": "Initiate Shopping Snapshot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Initiate Shopping Snapshot": {
      "main": [
        [
          {
            "node": "Wait 50 Seconds for Snapshot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Snapshot Completion": {
      "main": [
        [
          {
            "node": "If Snapshot Ready",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 50 Seconds for Snapshot": {
      "main": [
        [
          {
            "node": "Verify Snapshot Completion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}