{"workflow":{"id":13994,"name":"Monitor AppSumo lifetime deals with ScrapeOps and Google Sheets","views":1,"recentViews":0,"totalViews":1,"createdAt":"2026-03-11T07:56:27.342Z","description":"## Overview\nThis n8n template automates daily monitoring of AppSumo lifetime deals. Using ScrapeOps Proxy with JavaScript rendering to reliably fetch pages and a structured parsing pipeline, the workflow tracks new and updated deals — saving everything to Google Sheets with full deduplication and change tracking.\n\n## Who is this for?\n- SaaS enthusiasts and deal hunters who follow AppSumo regularly\n- Founders and marketers tracking competitor tools available as lifetime deals\n- Agencies managing software budgets who want alerts on new tools\n- Investors or analysts monitoring the AppSumo marketplace\n\n## What problem does it solve?\nManually checking AppSumo for new lifetime deals is easy to forget and inconsistent. This workflow runs every day, automatically fetches the latest listings, filters by categories you care about, and keeps your Google Sheet updated — appending new deals and refreshing existing ones — so you never miss a deal.\n\n## How it works\n1. A daily schedule triggers the workflow at 09:00 automatically.\n2. ScrapeOps Proxy fetches the AppSumo browse page with JavaScript rendering to bypass dynamic content blocks.\n3. The HTML is parsed into structured JSON: name, URL, prices, discount, category, rating, reviews, image, and timestamps.\n4. A filter node keeps only deals matching your target categories or keywords.\n5. Each deal is looked up in Google Sheets by its URL to check if it already exists.\n6. New deals are appended as fresh rows; existing deals have their data updated in place.\n\n## Set up steps (~10–15 minutes)\n1. Register for a free ScrapeOps API key: [https://scrapeops.io/app/register/n8n](https://scrapeops.io/app/register/n8n)\n2. Install the ScrapeOps community node and add credentials. Docs: [https://scrapeops.io/docs/n8n/overview/](https://scrapeops.io/app/register/n8n)\n3. [Duplicate the Google Sheet](https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit#gid=0\") template and paste your Sheet URL into the **Lookup**, **Append**, and **Update** nodes.\n4. Edit the category/keyword list inside **Filter Relevant Deal Categories** to match what you want to track.\n5. Run the workflow once manually to confirm results, then activate.\n\n## Pre-conditions\n- Active ScrapeOps account (free tier available): [https://scrapeops.io/app/register/n8n](https://scrapeops.io/app/register/n8n)\n- n8n instance with the ScrapeOps community node installed. Docs: [https://scrapeops.io/docs/n8n/overview/](https://scrapeops.io/app/register/n8n)\n- Google Sheets credentials configured in n8n\n- A duplicated Google Sheet with correct column headers matching the parser output\n\n## Disclaimer\nThis template uses [ScrapeOps](https://n8n.io/integrations/scrapeops/) as a community node. You are responsible for complying with AppSumo's Terms of Use, robots.txt directives, and applicable laws in your jurisdiction. Scraping targets may change at any time; adjust render, scroll, and wait settings and parsers as needed. Use responsibly and only for legitimate business purposes.","workflow":{"id":"r3lMp8YtaKakgEp6","meta":{"instanceId":"c2ff056313a72210aa803da7c5191a260dbed0dab6ae2b8e39a8dd21701bf0ab"},"name":"AppSumo Lifetime Deal Monitor with ScrapeOps and Google Sheets","tags":[{"id":"Doq8CwkJgEUz5O8W","name":"AppSumo Deal Tracker","createdAt":"2026-03-10T07:27:04.779Z","updatedAt":"2026-03-10T07:27:04.779Z"},{"id":"IzlHq5HmwX4xIIHt","name":"Lifetime Deal Monitor","createdAt":"2026-03-10T07:27:36.260Z","updatedAt":"2026-03-10T07:27:36.260Z"},{"id":"Nabo4ItzmGCcNoDA","name":"SaaS Deal Tracking","createdAt":"2026-03-10T07:27:41.598Z","updatedAt":"2026-03-10T07:27:41.598Z"},{"id":"lZKSh2IoxHklnOUw","name":"ScrapeOps","createdAt":"2025-10-20T20:27:13.410Z","updatedAt":"2025-10-20T20:27:13.410Z"},{"id":"yzylwxvLF3YwGBRm","name":"Google Sheets Automation","createdAt":"2026-03-10T07:03:25.329Z","updatedAt":"2026-03-10T07:03:25.329Z"}],"nodes":[{"id":"d1bad033-e9cb-45f7-b7de-03b88d3340c2","name":"Daily Schedule Trigger (09:00)","type":"n8n-nodes-base.scheduleTrigger","position":[800,512],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 9 * * *"}]}},"typeVersion":1.1},{"id":"bc66da17-e038-4442-9899-0ce0d04a4b72","name":"Fetch AppSumo Deals via ScrapeOps (JS Render)","type":"@scrapeops/n8n-nodes-scrapeops.ScrapeOps","position":[1024,512],"parameters":{"url":"https://appsumo.com/browse/?tags=lifetime-deal","advancedOptions":{"render_js":true}},"typeVersion":1},{"id":"78501754-4e71-43f1-8c76-35ac809f86e8","name":"Parse AppSumo Deals HTML → Structured JSON","type":"n8n-nodes-base.code","position":[1360,512],"parameters":{"jsCode":"// Parse AppSumo HTML to extract deals using String Splitting (Robust & No External Libs)\nconst item = items[0].json;\n// Extract HTML from ScrapeOps response - try multiple formats\nlet html = '';\n\n// ScrapeOps can return data in different formats\nif (typeof item === 'string') {\n  html = item;\n} else if (item.response?.body) {\n  html = item.response.body;\n} else if (item.body) {\n  html = item.body;\n} else if (item.content) {\n  html = item.content;\n} else if (item.data) {\n  html = item.data;\n} else if (Array.isArray(item)) {\n  // If it's an array, join it\n  html = item.join('');\n} else {\n  // Last resort - stringify and check\n  const str = JSON.stringify(item);\n  if (str.includes('<!DOCTYPE') || str.includes('<html')) {\n    html = str;\n  }\n}\n\nconst deals = [];\n\n// Split by the deal container identified in the HTML\n// Using a broader regex to catch variations in class spacing\nconst cardChunks = html.split(/class=[\"'][^\"']*relative h-full[^\"']*[\"']/i);\n\n// Skip the first chunk (header/nav)\nfor (let i = 1; i < cardChunks.length; i++) {\n  const card = cardChunks[i];\n  \n  // Extract Title and URL\n  const urlMatch = card.match(/href=[\"'](\\/products\\/[^\"']+)[\"']/i);\n  const titleMatch = card.match(/<span class=[\"']sr-only[\"']>([^<]+)<\\/span>/i);\n  \n  if (urlMatch && titleMatch) {\n    const url = `https://appsumo.com${urlMatch[1]}`;\n    const title = titleMatch[1];\n    \n    // Image\n    const imgMatch = card.match(/<img[^>]+src=[\"']([^\"']+)[\"']/i);\n    const img = imgMatch ? imgMatch[1] : null;\n    \n    // Price\n    const priceMatch = card.match(/id=[\"']deal-price[\"'][^>]*>([^<]+)</i);\n    const currentPrice = priceMatch ? priceMatch[1].trim() : null;\n    \n    // Original Price\n    const lastPriceMatch = card.match(/id=[\"']deal-price-original[\"'][^>]*>([^<]+)</i);\n    const lastPrice = lastPriceMatch ? lastPriceMatch[1].trim() : null;\n    \n    // Discount Calculation\n    let discount = null;\n    if (currentPrice && lastPrice) {\n        try {\n            const curr = parseFloat(currentPrice.replace(/[^0-9.]/g, ''));\n            const last = parseFloat(lastPrice.replace(/[^0-9.]/g, ''));\n            if (last > 0) {\n                const off = Math.round(((last - curr) / last) * 100);\n                discount = `${off}% Off`;\n            }\n        } catch (e) {}\n    }\n    \n    // Category\n    // HTML: in<!-- --> <a ...>Productivity</a>\n    // Regex needs to be loose about spaces and attributes\n    const catMatch = card.match(/in<!-- -->\\s*<a[^>]*>([^<]+)<\\/a>/i);\n    const category = catMatch ? catMatch[1].trim() : null;\n    \n    // Rating\n    const ratingMatch = card.match(/alt=[\"']([0-9.]+)\\s*stars[\"']/i);\n    const rating = ratingMatch ? ratingMatch[1] : null;\n    \n    // Reviews\n    // HTML: <span>92<!-- --> reviews</span>\n    const reviewsMatch = card.match(/<span>(\\d+)<!-- -->\\s*reviews<\\/span>/i);\n    const reviewsCount = reviewsMatch ? reviewsMatch[1] : null;\n    \n    // Status\n    let dealStatus = \"Active\";\n    if (card.match(/Deal ends in/i)) dealStatus = \"Ending Soon\";\n    if (card.match(/Sold Out/i)) dealStatus = \"Sold Out\";\n    if (card.match(/Expired/i)) dealStatus = \"Expired\";\n\n    deals.push({\n      \"Product Name\": title,\n      \"AppSumo URL\": url,\n      \"Category\": category,\n      \"Current Price\": currentPrice,\n      \"Last Price\": lastPrice,\n      \"Discount\": discount,\n      \"Deal Status\": dealStatus,\n      \"Rating\": rating,\n      \"Reviews Count\": reviewsCount,\n      \"Image\": img,\n      \"scraped_at\": new Date().toISOString()\n    });\n  }\n}\n\nif (deals.length === 0) {\n  return [{\n    json: {\n      \"Debug\": \"No deals found\",\n      \"HTML Length\": html ? html.length : 0,\n      \"Input Keys\": Object.keys(item),\n      \"HTML Preview\": html ? html.substring(0, 500) : \"No HTML found\",\n      \"Split Chunks\": cardChunks.length,\n      \"Item Type\": typeof item,\n      \"Is Array\": Array.isArray(item)\n    }\n  }];\n}\n\nreturn deals.map(deal => ({ json: deal }));"},"typeVersion":2},{"id":"cb136318-0c2b-4db8-be62-d0bb91e9522a","name":"Lookup Deal in Google Sheet (by URL)","type":"n8n-nodes-base.googleSheets","position":[2032,512],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"={{ $json[\"AppSumo URL\"] }}","lookupColumn":"AppSumo URL"}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"url","value":"https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit?usp=sharing"}},"credentials":{"googleSheetsOAuth2Api":{"id":"ScA4DXJowherOrNG","name":"Google Sheets account 4"}},"typeVersion":4,"continueOnFail":true},{"id":"123561d8-ec1c-4c1e-9a1e-ca717dc85f24","name":"Merge Scrape + Existing Row (Enrich by URL)","type":"n8n-nodes-base.merge","position":[2240,512],"parameters":{"mode":"combine","options":{"fuzzyCompare":false,"multipleMatches":"first","disableDotNotation":false},"joinMode":"enrichInput1","mergeByFields":{"values":[{"field1":"AppSumo URL","field2":"AppSumo URL"}]}},"typeVersion":2.1},{"id":"28505fc8-7c3d-45fc-bcb3-54125d32465e","name":"IF New Deal (Last Checked is empty)","type":"n8n-nodes-base.if","position":[2480,512],"parameters":{"conditions":{"string":[{"value1":"={{ $json['Last Checked'] }}","operation":"isEmpty"}]}},"typeVersion":1},{"id":"a87a44c2-7db6-4a15-b4bf-ed053b718002","name":"Stamp Last Checked (New Deal Path)","type":"n8n-nodes-base.code","position":[2720,416],"parameters":{"jsCode":"// Prepare New Deal - Process ALL items\nconst output = [];\n\nfor (const item of items) {\n  output.push({\n    json: {\n      ...item.json,\n      'Last Checked': new Date().toISOString()\n    }\n  });\n}\n\nreturn output;"},"typeVersion":2},{"id":"efb4c2a2-56b3-4305-8e54-dc21a627b22a","name":"Stamp Last Checked (Existing Deal Path)","type":"n8n-nodes-base.code","position":[2720,624],"parameters":{"jsCode":"// Compare Existing Deal - Process ALL items\nconst output = [];\n\nfor (const item of items) {\n  // Just update timestamp\n  output.push({\n    json: {\n      ...item.json,\n      'Last Checked': new Date().toISOString()\n    }\n  });\n}\n\nreturn output;"},"typeVersion":2},{"id":"cf999433-15af-44cd-966b-07bc4664a1bb","name":"Append New Deal to Sheet","type":"n8n-nodes-base.googleSheets","position":[2928,416],"parameters":{"columns":{"value":{"Image":"={{ $json['Image'] }}","Rating":"={{ $json['Rating'] }}","Category":"={{ $json['Category'] }}","Discount":"={{ $json['Discount'] }}","Last Price":"={{ $json['Last Price'] }}","AppSumo URL":"={{ $json['AppSumo URL'] }}","Deal Status":"={{ $json['Deal Status'] }}","Last Checked":"={{ $json['Last Checked'] }}","Product Name":"={{ $json['Product Name'] }}","Current Price":"={{ $json['Current Price'] }}","Reviews Count":"={{ $json['Reviews Count'] }}"},"schema":[{"id":"Product Name","type":"string","display":true,"required":false,"displayName":"Product Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"AppSumo URL","type":"string","display":true,"required":false,"displayName":"AppSumo URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Category","type":"string","display":true,"required":false,"displayName":"Category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Last Price","type":"string","display":true,"required":false,"displayName":"Last Price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Current Price","type":"string","display":true,"required":false,"displayName":"Current Price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Discount","type":"string","display":true,"required":false,"displayName":"Discount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Deal Status","type":"string","display":true,"required":false,"displayName":"Deal Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Rating","type":"string","display":true,"required":false,"displayName":"Rating","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Reviews Count","type":"string","display":true,"required":false,"displayName":"Reviews Count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Last Checked","type":"string","display":true,"required":false,"displayName":"Last Checked","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Change Detected","type":"string","display":true,"removed":true,"required":false,"displayName":"Change Detected","defaultMatch":false,"canBeUsedToMatch":true},{"id":"New Deal","type":"string","display":true,"removed":true,"required":false,"displayName":"New Deal","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Image","type":"string","display":true,"required":false,"displayName":"Image","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"url","value":"https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit?usp=sharing"}},"credentials":{"googleSheetsOAuth2Api":{"id":"ScA4DXJowherOrNG","name":"Google Sheets account 4"}},"typeVersion":4},{"id":"74076d65-8611-4360-9591-65ef5c11bce1","name":"Update Existing Deal Row in Sheet","type":"n8n-nodes-base.googleSheets","position":[2928,624],"parameters":{"columns":{"value":{"Image":"={{ $json['Image'] }}","Rating":"={{ $json['Rating'] }}","Category":"={{ $json['Category'] }}","Discount":"={{ $json['Discount'] }}","Last Price":"={{ $json['Last Price'] }}","AppSumo URL":"={{ $json['AppSumo URL'] }}","Deal Status":"={{ $json['Deal Status'] }}","Last Checked":"={{ $json['Last Checked'] }}","Product Name":"={{ $json['Product Name'] }}","Current Price":"={{ $json['Current Price'] }}","Reviews Count":"={{ $json['Reviews Count'] }}"},"schema":[{"id":"Product Name","type":"string","display":true,"required":false,"displayName":"Product Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"AppSumo URL","type":"string","display":true,"removed":false,"required":false,"displayName":"AppSumo URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Category","type":"string","display":true,"required":false,"displayName":"Category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Last Price","type":"string","display":true,"required":false,"displayName":"Last Price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Current Price","type":"string","display":true,"required":false,"displayName":"Current Price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Discount","type":"string","display":true,"required":false,"displayName":"Discount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Deal Status","type":"string","display":true,"required":false,"displayName":"Deal Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Rating","type":"string","display":true,"required":false,"displayName":"Rating","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Reviews Count","type":"string","display":true,"required":false,"displayName":"Reviews Count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Last Checked","type":"string","display":true,"required":false,"displayName":"Last Checked","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Change Detected","type":"string","display":true,"removed":true,"required":false,"displayName":"Change Detected","defaultMatch":false,"canBeUsedToMatch":true},{"id":"New Deal","type":"string","display":true,"removed":true,"required":false,"displayName":"New Deal","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Image","type":"string","display":true,"required":false,"displayName":"Image","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["AppSumo URL"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"url","value":"https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit?usp=sharing"}},"credentials":{"googleSheetsOAuth2Api":{"id":"ScA4DXJowherOrNG","name":"Google Sheets account 4"}},"typeVersion":4},{"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**, parses each deal into structured data, filters by your target categories, and saves new or updated deals to Google Sheets with full deduplication.\n\n### How it works\n1. ⏰ **Daily Schedule Trigger** fires every day at 09:00 automatically.\n2. 🌐 **Fetch AppSumo Deals via ScrapeOps** loads the browse page with JavaScript rendering enabled.\n3. 🔍 **Parse AppSumo Deals HTML → Structured JSON** extracts name, URL, category, prices, discount, rating, reviews, image, and timestamps.\n4. 🔎 **Filter Relevant Deal Categories** keeps only deals matching your target keywords.\n5. 📋 **Lookup Deal in Google Sheet (by URL)** checks if the deal already exists in your sheet.\n6. 🔀 **Merge Scrape + Existing Row** combines scraped data with any existing sheet row.\n7. 🔀 **IF New Deal** routes new vs. existing deals to separate write paths.\n8. 💾 **Append New Deal to Sheet** adds a fresh row for new deals.\n9. 🔄 **Update Existing Deal Row** refreshes pricing and status for known deals.\n\n### Setup steps\n- Register for a free ScrapeOps API key: https://scrapeops.io/app/register/n8n\n- Add ScrapeOps credentials in n8n. Docs: https://scrapeops.io/docs/n8n/overview/\n- [Duplicate the Google Sheet](https://docs.google.com/spreadsheets/d/1L_Fn_wm55wc5EXi_ZIVmmXyFrz9nJ-29Xd71Ndz_XIk/edit#gid=0\") and paste your Sheet URL into the Lookup, Append, and Update nodes.\n- Edit the category/keyword list in **Filter Relevant Deal Categories** to match your interests.\n- Run once manually to confirm, then activate.\n\n### Customization\n- Add Slack, Gmail, or Discord alerts on the **New Deal** path.\n- Change the schedule time in the trigger node to suit your timezone."},"typeVersion":1},{"id":"d4da614f-e5ca-4b2e-8062-49e840ff0e75","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[736,400],"parameters":{"color":7,"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."},"typeVersion":1},{"id":"3c8d58b5-7f66-46c2-9f65-259aa428abde","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1248,400],"parameters":{"color":7,"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."},"typeVersion":1},{"id":"7b2a13d0-3b48-427a-8cb2-51663953981a","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1600,400],"parameters":{"color":7,"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."},"typeVersion":1},{"id":"c65b592c-690c-4abe-be87-517ede20c410","name":"Filter Relevant Deal Categories","type":"n8n-nodes-base.code","position":[1712,512],"parameters":{"jsCode":"// Filter for specific categories\nconst targetCategories = ['No-Code', 'Automation', 'AI', 'Productivity', 'Marketing'];\n\nreturn items.filter(item => {\n  const category = item.json['Category'] || '';\n  const title = item.json['Product Name'] || '';\n  \n  // Check if any target category is mentioned in tags or title\n  const isRelevant = targetCategories.some(cat => \n    category.toLowerCase().includes(cat.toLowerCase()) || \n    title.toLowerCase().includes(cat.toLowerCase())\n  );\n  \n  return isRelevant;\n});"},"typeVersion":2},{"id":"af8f272e-50e8-4b9f-8bda-8b4c8195b63b","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1952,400],"parameters":{"color":7,"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."},"typeVersion":1},{"id":"db326fc5-7633-4926-9658-5139bb6efbbc","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2416,320],"parameters":{"color":7,"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."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"47b7f578-3c75-4173-bad1-0b4b064b6bd9","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}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":17,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.googleSheets":{"count":3},"n8n-nodes-base.scheduleTrigger":{"count":1},"@scrapeops/n8n-nodes-scrapeops.ScrapeOps":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Ian Kerins","username":"iankerins","bio":"","verified":true,"links":["x.com/ianjkerins"],"avatar":"https://gravatar.com/avatar/890cb31fc440a02555fafa9eb072fb2282af0d51f9239c04e356c5eeda68be76?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":32,"name":"Market Research"}],"image":[]}}