{
  "name": "Monitor AppSumo lifetime deals with ScrapeOps and Google Sheets",
  "nodes": [
    {
      "id": "d1bad033-e9cb-45f7-b7de-03b88d3340c2",
      "name": "Daily Schedule Trigger (09:00)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        800,
        512
      ]
    },
    {
      "id": "bc66da17-e038-4442-9899-0ce0d04a4b72",
      "name": "Fetch AppSumo Deals via ScrapeOps (JS Render)",
      "type": "@scrapeops/n8n-nodes-scrapeops.ScrapeOps",
      "position": [
        1024,
        512
      ]
    },
    {
      "id": "78501754-4e71-43f1-8c76-35ac809f86e8",
      "name": "Parse AppSumo Deals HTML → Structured JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        512
      ]
    },
    {
      "id": "cb136318-0c2b-4db8-be62-d0bb91e9522a",
      "name": "Lookup Deal in Google Sheet (by URL)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2032,
        512
      ]
    },
    {
      "id": "123561d8-ec1c-4c1e-9a1e-ca717dc85f24",
      "name": "Merge Scrape + Existing Row (Enrich by URL)",
      "type": "n8n-nodes-base.merge",
      "position": [
        2240,
        512
      ]
    },
    {
      "id": "28505fc8-7c3d-45fc-bcb3-54125d32465e",
      "name": "IF New Deal (Last Checked is empty)",
      "type": "n8n-nodes-base.if",
      "position": [
        2480,
        512
      ]
    },
    {
      "id": "a87a44c2-7db6-4a15-b4bf-ed053b718002",
      "name": "Stamp Last Checked (New Deal Path)",
      "type": "n8n-nodes-base.code",
      "position": [
        2720,
        416
      ]
    },
    {
      "id": "efb4c2a2-56b3-4305-8e54-dc21a627b22a",
      "name": "Stamp Last Checked (Existing Deal Path)",
      "type": "n8n-nodes-base.code",
      "position": [
        2720,
        624
      ]
    },
    {
      "id": "cf999433-15af-44cd-966b-07bc4664a1bb",
      "name": "Append New Deal to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2928,
        416
      ]
    },
    {
      "id": "74076d65-8611-4360-9591-65ef5c11bce1",
      "name": "Update Existing Deal Row in Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2928,
        624
      ]
    },
    {
      "id": "fdefa234-338b-4616-8e86-542e8cf22371",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 688,
        "height": 784,
        "content": "# 🛍️ AppSumo Lifetime Deal Monitor → Google Sheets\n\nThis workflow automatically tracks AppSumo lifetime deals daily. It fetches the AppSumo browse page using **ScrapeOps Proxy with JS rendering**, par"
      }
    },
    {
      "id": "d4da614f-e5ca-4b2e-8062-49e840ff0e75",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        400
      ],
      "parameters": {
        "width": 496,
        "height": 288,
        "content": "## 1. Trigger & Fetch\nRuns daily at 09:00 and loads the AppSumo browse page via [ScrapeOps Proxy](https://scrapeops.io/docs/n8n/proxy-api/) with JavaScript rendering enabled."
      }
    },
    {
      "id": "3c8d58b5-7f66-46c2-9f65-259aa428abde",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        400
      ],
      "parameters": {
        "width": 336,
        "height": 288,
        "content": "## 2. Parse Deals\nExtracts title, URL, prices, discount, category, rating, reviews, image, status, and timestamps from the raw HTML into clean structured JSON."
      }
    },
    {
      "id": "7b2a13d0-3b48-427a-8cb2-51663953981a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        400
      ],
      "parameters": {
        "width": 336,
        "height": 288,
        "content": "## 3. Filter by Category\nKeeps only deals that match your target categories or keywords. Edit the list inside this node to customize what gets tracked."
      }
    },
    {
      "id": "c65b592c-690c-4abe-be87-517ede20c410",
      "name": "Filter Relevant Deal Categories",
      "type": "n8n-nodes-base.code",
      "position": [
        1712,
        512
      ]
    },
    {
      "id": "af8f272e-50e8-4b9f-8bda-8b4c8195b63b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1952,
        400
      ],
      "parameters": {
        "width": 448,
        "height": 288,
        "content": "## 4. Deduplicate & Merge\nLooks up each deal by its AppSumo URL in Google Sheets, then merges scraped data with any existing row to enrich the record."
      }
    },
    {
      "id": "db326fc5-7633-4926-9658-5139bb6efbbc",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2416,
        320
      ],
      "parameters": {
        "width": 784,
        "height": 480,
        "content": "## 5. Route & Write to Google Sheets\nNew deals are appended as fresh rows. Existing deals have their price, status, and timestamps updated in place."
      }
    }
  ],
  "connections": {
    "Daily Schedule Trigger (09:00)": {
      "main": [
        [
          {
            "node": "Fetch AppSumo Deals via ScrapeOps (JS Render)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Relevant Deal Categories": {
      "main": [
        [
          {
            "node": "Lookup Deal in Google Sheet (by URL)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Scrape + Existing Row (Enrich by URL)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Stamp Last Checked (New Deal Path)": {
      "main": [
        [
          {
            "node": "Append New Deal to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF New Deal (Last Checked is empty)": {
      "main": [
        [
          {
            "node": "Stamp Last Checked (New Deal Path)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stamp Last Checked (Existing Deal Path)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lookup Deal in Google Sheet (by URL)": {
      "main": [
        [
          {
            "node": "Merge Scrape + Existing Row (Enrich by URL)",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Stamp Last Checked (Existing Deal Path)": {
      "main": [
        [
          {
            "node": "Update Existing Deal Row in Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Scrape + Existing Row (Enrich by URL)": {
      "main": [
        [
          {
            "node": "IF New Deal (Last Checked is empty)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AppSumo Deals HTML → Structured JSON": {
      "main": [
        [
          {
            "node": "Filter Relevant Deal Categories",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch AppSumo Deals via ScrapeOps (JS Render)": {
      "main": [
        [
          {
            "node": "Parse AppSumo Deals HTML → Structured JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}