This workflow corresponds to n8n.io template #6626 — we link there as the canonical source.
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 →
{
"id": "VhEwspDqzu7ssFVE",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "My workflow 2",
"tags": [
{
"id": "DxXGubfBzRKh6L8T",
"name": "Revenue Optimization",
"createdAt": "2025-07-25T16:24:30.370Z",
"updatedAt": "2025-07-25T16:24:30.370Z"
},
{
"id": "IxkcJ2IpYIxivoHV",
"name": "Content Strategy",
"createdAt": "2025-07-25T12:57:37.677Z",
"updatedAt": "2025-07-25T12:57:37.677Z"
},
{
"id": "PAKIJ2Mm9EvRcR3u",
"name": "Trend Monitoring",
"createdAt": "2025-07-25T12:57:37.670Z",
"updatedAt": "2025-07-25T12:57:37.670Z"
},
{
"id": "YtfXmaZk44MYedPO",
"name": "Dynamic Pricing",
"createdAt": "2025-07-25T16:24:30.369Z",
"updatedAt": "2025-07-25T16:24:30.369Z"
},
{
"id": "wJ30mjhtrposO8Qt",
"name": "Simple RAG",
"createdAt": "2025-07-28T12:55:14.424Z",
"updatedAt": "2025-07-28T12:55:14.424Z"
}
],
"nodes": [
{
"id": "d983af2a-51ee-49dd-ab37-3930ba3970f8",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1056,
528
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "01feb351-2bd6-4946-bf78-d1152ce14707",
"name": "ScrapeGraphAI - Plumbing",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
-656,
384
],
"parameters": {
"userPrompt": "Extract plumbing services and costs. Use this schema: {\"service_name\": \"Drain Cleaning\", \"provider_name\": \"ABC Plumbing\", \"price_range\": \"$150-$300\", \"rating\": \"4.5\", \"location\": \"Local Area\", \"phone\": \"555-0123\", \"description\": \"Professional drain cleaning service\", \"provider_url\": \"https://example.com\"}",
"websiteUrl": "https://www.angi.com/plumbers/"
},
"typeVersion": 1
},
{
"id": "da7e50bc-2b5c-4418-a928-d14e95e03768",
"name": "ScrapeGraphAI - Electrical",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
-656,
544
],
"parameters": {
"userPrompt": "Extract electrical services and costs. Use this schema: {\"service_name\": \"Outlet Installation\", \"provider_name\": \"Electric Pro\", \"price_range\": \"$200-$400\", \"rating\": \"4.8\", \"location\": \"Local Area\", \"phone\": \"555-0456\", \"description\": \"Professional electrical services\", \"provider_url\": \"https://example.com\"}",
"websiteUrl": "https://www.angi.com/electrical-contractors/"
},
"typeVersion": 1
},
{
"id": "ddad669a-9f0a-4dc8-8afb-242c5f55cb67",
"name": "ScrapeGraphAI - HVAC",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
-656,
704
],
"parameters": {
"userPrompt": "Extract HVAC services and costs. Use this schema: {\"service_name\": \"AC Repair\", \"provider_name\": \"Cool Air HVAC\", \"price_range\": \"$300-$600\", \"rating\": \"4.7\", \"location\": \"Local Area\", \"phone\": \"555-0789\", \"description\": \"HVAC repair and maintenance\", \"provider_url\": \"https://example.com\"}",
"websiteUrl": "https://www.angi.com/hvac-contractors/"
},
"typeVersion": 1
},
{
"id": "52bd4121-25a5-46e5-978a-b31beef1f727",
"name": "Cost Analyzer",
"type": "n8n-nodes-base.code",
"notes": "Analyzes costs and\ncategorizes services\nby price level",
"position": [
-256,
304
],
"parameters": {
"jsCode": "// Cost Analyzer - Process and analyze maintenance costs\nconst allInputs = $input.all();\nconst currentDate = new Date().toISOString().split('T')[0];\nconst analysisResults = [];\n\n// Process each service category\nallInputs.forEach((input, index) => {\n const serviceData = input.json;\n let services = [];\n \n // Extract services from different possible structures\n if (serviceData.result && serviceData.result.services) {\n services = serviceData.result.services;\n } else if (serviceData.result && Array.isArray(serviceData.result)) {\n services = serviceData.result;\n } else if (Array.isArray(serviceData)) {\n services = serviceData;\n }\n \n // Determine service category based on input index\n const categories = ['Plumbing', 'Electrical', 'HVAC'];\n const category = categories[index] || 'General';\n \n services.forEach(service => {\n if (service && service.service_name) {\n // Parse price range to get average cost\n let averageCost = 0;\n let minCost = 0;\n let maxCost = 0;\n \n if (service.price_range) {\n const priceMatch = service.price_range.match(/\\$(\\d+)[-\u2013](\\d+)/);\n if (priceMatch) {\n minCost = parseInt(priceMatch[1]);\n maxCost = parseInt(priceMatch[2]);\n averageCost = (minCost + maxCost) / 2;\n } else {\n const singlePrice = service.price_range.match(/\\$(\\d+)/);\n if (singlePrice) {\n averageCost = parseInt(singlePrice[1]);\n minCost = maxCost = averageCost;\n }\n }\n }\n \n // Determine cost level\n let costLevel = 'Medium';\n if (averageCost < 200) costLevel = 'Low';\n else if (averageCost > 500) costLevel = 'High';\n \n analysisResults.push({\n date_analyzed: currentDate,\n category: category,\n service_name: service.service_name || 'Unknown Service',\n provider_name: service.provider_name || 'Unknown Provider',\n price_range: service.price_range || 'Price not available',\n average_cost: averageCost,\n min_cost: minCost,\n max_cost: maxCost,\n cost_level: costLevel,\n rating: service.rating || 'No rating',\n location: service.location || 'Location not specified',\n phone: service.phone || 'No phone',\n description: service.description || 'No description',\n provider_url: service.provider_url || '#',\n urgency_score: category === 'Plumbing' ? 8 : category === 'Electrical' ? 9 : 6\n });\n }\n });\n});\n\nconsole.log(`Analyzed ${analysisResults.length} services across categories`);\n\nreturn analysisResults.map(result => ({ json: result }));"
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "694967bc-86bc-40d8-b73e-8440b93c013a",
"name": "Service Comparer",
"type": "n8n-nodes-base.code",
"notes": "Compares providers\nand finds best\noptions by rating\nand cost",
"position": [
48,
304
],
"parameters": {
"jsCode": "// Service Comparer - Compare services and find best options\nconst services = $input.all().map(item => item.json);\nconst comparisonResults = [];\nconst serviceGroups = {};\n\n// Group services by category and service name\nservices.forEach(service => {\n const key = `${service.category}_${service.service_name}`;\n if (!serviceGroups[key]) {\n serviceGroups[key] = [];\n }\n serviceGroups[key].push(service);\n});\n\n// Compare services within each group\nObject.keys(serviceGroups).forEach(groupKey => {\n const group = serviceGroups[groupKey];\n if (group.length > 1) {\n // Sort by rating and cost\n const sortedByRating = [...group].sort((a, b) => {\n const ratingA = parseFloat(a.rating) || 0;\n const ratingB = parseFloat(b.rating) || 0;\n return ratingB - ratingA;\n });\n \n const sortedByCost = [...group].sort((a, b) => a.average_cost - b.average_cost);\n \n const bestRated = sortedByRating[0];\n const cheapest = sortedByCost[0];\n const mostExpensive = sortedByCost[sortedByCost.length - 1];\n \n // Calculate price variance\n const costs = group.map(s => s.average_cost).filter(c => c > 0);\n const avgGroupCost = costs.length > 0 ? costs.reduce((a, b) => a + b, 0) / costs.length : 0;\n const priceVariance = costs.length > 1 ? Math.max(...costs) - Math.min(...costs) : 0;\n \n comparisonResults.push({\n service_category: group[0].category,\n service_name: group[0].service_name,\n provider_count: group.length,\n average_market_price: Math.round(avgGroupCost),\n price_variance: priceVariance,\n best_rated_provider: {\n name: bestRated.provider_name,\n rating: bestRated.rating,\n price: bestRated.price_range,\n phone: bestRated.phone\n },\n cheapest_provider: {\n name: cheapest.provider_name,\n rating: cheapest.rating,\n price: cheapest.price_range,\n phone: cheapest.phone\n },\n most_expensive_provider: {\n name: mostExpensive.provider_name,\n rating: mostExpensive.rating,\n price: mostExpensive.price_range,\n phone: mostExpensive.phone\n },\n recommendation: bestRated.provider_name === cheapest.provider_name ? \n 'Best Value (High Rating + Low Cost)' : \n parseFloat(bestRated.rating) > 4.5 ? 'Quality Focus' : 'Cost Focus',\n all_providers: group\n });\n } else {\n // Single provider for this service\n const service = group[0];\n comparisonResults.push({\n service_category: service.category,\n service_name: service.service_name,\n provider_count: 1,\n average_market_price: service.average_cost,\n price_variance: 0,\n single_provider: {\n name: service.provider_name,\n rating: service.rating,\n price: service.price_range,\n phone: service.phone\n },\n recommendation: 'Single Option Available',\n all_providers: [service]\n });\n }\n});\n\nconsole.log(`Created comparisons for ${comparisonResults.length} service types`);\n\nreturn comparisonResults.map(result => ({ json: result }));"
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "866b42f0-4b11-493c-bfd9-031dfb32d30a",
"name": "Budget Planner",
"type": "n8n-nodes-base.code",
"notes": "Creates annual\nbudget plan with\nquarterly breakdown\nand recommendations",
"position": [
352,
304
],
"parameters": {
"jsCode": "// Budget Planner - Create maintenance budget and scheduling recommendations\nconst comparisons = $input.all().map(item => item.json);\nconst currentDate = new Date();\nconst currentMonth = currentDate.getMonth() + 1;\nconst currentYear = currentDate.getFullYear();\n\n// Define maintenance categories and typical frequencies\nconst maintenanceSchedule = {\n 'HVAC': { frequency: 'biannual', urgency: 'high', typical_cost: 400 },\n 'Plumbing': { frequency: 'annual', urgency: 'medium', typical_cost: 300 },\n 'Electrical': { frequency: 'biannual', urgency: 'high', typical_cost: 350 }\n};\n\n// Create budget recommendations\nconst budgetPlan = {\n planning_date: currentDate.toISOString().split('T')[0],\n budget_year: currentYear,\n quarterly_budgets: [],\n annual_summary: {\n total_estimated_cost: 0,\n high_priority_services: [],\n medium_priority_services: [],\n low_priority_services: []\n },\n service_recommendations: [],\n cost_optimization_tips: []\n};\n\n// Process each service comparison\ncomparisons.forEach(comparison => {\n const category = comparison.service_category;\n const schedule = maintenanceSchedule[category] || { frequency: 'annual', urgency: 'medium', typical_cost: 250 };\n \n // Determine priority based on service type and cost\n let priority = 'Medium';\n if (category === 'Electrical' || category === 'HVAC') priority = 'High';\n if (comparison.average_market_price > 500) priority = 'High';\n if (comparison.average_market_price < 200) priority = 'Low';\n \n const recommendation = {\n service: comparison.service_name,\n category: category,\n priority: priority,\n estimated_annual_cost: comparison.average_market_price,\n recommended_frequency: schedule.frequency,\n best_provider: comparison.best_rated_provider || comparison.single_provider,\n budget_provider: comparison.cheapest_provider || comparison.single_provider,\n next_service_month: schedule.frequency === 'biannual' ? \n [3, 9] : schedule.frequency === 'quarterly' ? [3, 6, 9, 12] : [6],\n cost_savings_potential: comparison.price_variance || 0\n };\n \n budgetPlan.service_recommendations.push(recommendation);\n budgetPlan.annual_summary.total_estimated_cost += comparison.average_market_price;\n \n // Categorize by priority\n if (priority === 'High') {\n budgetPlan.annual_summary.high_priority_services.push(recommendation);\n } else if (priority === 'Medium') {\n budgetPlan.annual_summary.medium_priority_services.push(recommendation);\n } else {\n budgetPlan.annual_summary.low_priority_services.push(recommendation);\n }\n});\n\n// Create quarterly budget breakdown\nfor (let quarter = 1; quarter <= 4; quarter++) {\n const quarterMonths = [(quarter - 1) * 3 + 1, (quarter - 1) * 3 + 2, (quarter - 1) * 3 + 3];\n let quarterBudget = 0;\n const quarterServices = [];\n \n budgetPlan.service_recommendations.forEach(rec => {\n rec.next_service_month.forEach(month => {\n if (quarterMonths.includes(month)) {\n quarterBudget += rec.estimated_annual_cost;\n quarterServices.push({\n service: rec.service,\n month: month,\n cost: rec.estimated_annual_cost,\n provider: rec.best_provider.name\n });\n }\n });\n });\n \n budgetPlan.quarterly_budgets.push({\n quarter: quarter,\n months: quarterMonths,\n total_budget: quarterBudget,\n services: quarterServices\n });\n}\n\n// Add cost optimization tips\nbudgetPlan.cost_optimization_tips = [\n 'Bundle multiple services with the same provider for discounts',\n 'Schedule preventive maintenance to avoid emergency repairs',\n 'Get multiple quotes for expensive services (>$500)',\n 'Consider seasonal pricing - HVAC services may be cheaper in off-season',\n 'Join service contracts for regular maintenance at reduced rates'\n];\n\n// Calculate budget metrics\nbudgetPlan.annual_summary.monthly_average = Math.round(budgetPlan.annual_summary.total_estimated_cost / 12);\nbudgetPlan.annual_summary.high_priority_cost = budgetPlan.annual_summary.high_priority_services\n .reduce((sum, service) => sum + service.estimated_annual_cost, 0);\nbudgetPlan.annual_summary.potential_savings = budgetPlan.service_recommendations\n .reduce((sum, rec) => sum + rec.cost_savings_potential, 0);\n\nconsole.log(`Created budget plan with total estimated cost: $${budgetPlan.annual_summary.total_estimated_cost}`);\n\nreturn [{ json: budgetPlan }];"
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "027966fe-cee6-445e-a839-61333bb31e98",
"name": "Property Manager Alert",
"type": "n8n-nodes-base.code",
"notes": "Formats comprehensive\nalert for property\nmanager with budget\nanalysis and recommendations",
"position": [
640,
304
],
"parameters": {
"jsCode": "// Property Manager Alert - Format comprehensive maintenance report\nconst budgetData = $input.all()[0].json;\nconst currentDate = new Date().toLocaleDateString();\nconst currentTime = new Date().toLocaleTimeString();\n\n// Create formatted alert message\nfunction formatCurrency(amount) {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0\n }).format(amount);\n}\n\nfunction createMaintenanceAlert() {\n const { annual_summary, quarterly_budgets, service_recommendations } = budgetData;\n \n let alertMessage = `\ud83c\udfe0 **PROPERTY MAINTENANCE COST ANALYSIS**\\n`;\n alertMessage += `\ud83d\udcc5 Generated: ${currentDate} at ${currentTime}\\n\\n`;\n \n // Annual Summary\n alertMessage += `\ud83d\udcb0 **ANNUAL BUDGET SUMMARY**\\n`;\n alertMessage += `\u2022 Total Estimated Cost: ${formatCurrency(annual_summary.total_estimated_cost)}\\n`;\n alertMessage += `\u2022 Monthly Average: ${formatCurrency(annual_summary.monthly_average)}\\n`;\n alertMessage += `\u2022 Potential Savings: ${formatCurrency(annual_summary.potential_savings)}\\n\\n`;\n \n // Priority Breakdown\n alertMessage += `\ud83d\udea8 **SERVICE PRIORITIES**\\n`;\n alertMessage += `\u2022 High Priority: ${annual_summary.high_priority_services.length} services (${formatCurrency(annual_summary.high_priority_cost)})\\n`;\n alertMessage += `\u2022 Medium Priority: ${annual_summary.medium_priority_services.length} services\\n`;\n alertMessage += `\u2022 Low Priority: ${annual_summary.low_priority_services.length} services\\n\\n`;\n \n // Quarterly Breakdown\n alertMessage += `\ud83d\udcca **QUARTERLY BUDGET BREAKDOWN**\\n`;\n quarterly_budgets.forEach(quarter => {\n if (quarter.total_budget > 0) {\n alertMessage += `Q${quarter.quarter}: ${formatCurrency(quarter.total_budget)} (${quarter.services.length} services)\\n`;\n }\n });\n alertMessage += `\\n`;\n \n // Top Service Recommendations\n alertMessage += `\ud83d\udd27 **TOP SERVICE RECOMMENDATIONS**\\n`;\n const topServices = service_recommendations\n .filter(rec => rec.priority === 'High')\n .slice(0, 5);\n \n topServices.forEach((service, index) => {\n alertMessage += `${index + 1}. **${service.service}** (${service.category})\\n`;\n alertMessage += ` \u2022 Cost: ${formatCurrency(service.estimated_annual_cost)}\\n`;\n alertMessage += ` \u2022 Provider: ${service.best_provider.name}\\n`;\n alertMessage += ` \u2022 Rating: ${service.best_provider.rating}\\n`;\n alertMessage += ` \u2022 Phone: ${service.best_provider.phone}\\n\\n`;\n });\n \n // Cost Optimization Tips\n alertMessage += `\ud83d\udca1 **COST OPTIMIZATION TIPS**\\n`;\n budgetData.cost_optimization_tips.slice(0, 3).forEach((tip, index) => {\n alertMessage += `${index + 1}. ${tip}\\n`;\n });\n \n alertMessage += `\\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\n`;\n alertMessage += `\ud83d\udcc8 **Next Update**: Next week\\n`;\n alertMessage += `\ud83d\udd04 **Data Source**: Multiple contractor websites\\n`;\n \n return alertMessage;\n}\n\n// Create summary for property management system\nfunction createSystemSummary() {\n return {\n alert_type: 'maintenance_cost_analysis',\n severity: 'info',\n property_count: 1, // Adjust based on actual properties\n total_annual_budget: budgetData.annual_summary.total_estimated_cost,\n high_priority_count: budgetData.annual_summary.high_priority_services.length,\n next_quarter_budget: budgetData.quarterly_budgets[0]?.total_budget || 0,\n top_expense_category: budgetData.service_recommendations\n .reduce((max, current) => \n current.estimated_annual_cost > max.estimated_annual_cost ? current : max\n ).category,\n generated_at: new Date().toISOString(),\n recommendations_count: budgetData.service_recommendations.length\n };\n}\n\nconst alertMessage = createMaintenanceAlert();\nconst systemSummary = createSystemSummary();\n\nconsole.log(`Generated property manager alert with ${budgetData.service_recommendations.length} service recommendations`);\n\nreturn [\n {\n json: {\n message_text: alertMessage,\n system_summary: systemSummary,\n full_budget_data: budgetData,\n alert_timestamp: new Date().toISOString(),\n requires_action: budgetData.annual_summary.high_priority_services.length > 0\n }\n }\n];"
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "ad11589e-d46d-4bcb-8a12-cdde5d10ceb2",
"name": "Sticky Note - Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1200,
-160
],
"parameters": {
"color": 5,
"width": 400,
"height": 1036,
"content": "# Step 1: Weekly Schedule Trigger \u23f0\n\nTriggers the workflow every week to update maintenance cost data.\n\n## Configuration\n- Set to run weekly (every 7 days)\n- Customize time of day as needed\n- Can change to different intervals"
},
"typeVersion": 1
},
{
"id": "5ab406ac-6e07-4bd2-b393-745f23a14372",
"name": "Sticky Note - Scraping",
"type": "n8n-nodes-base.stickyNote",
"position": [
-800,
-160
],
"parameters": {
"color": 5,
"width": 400,
"height": 1040,
"content": "# Step 2: Multi-Source Scraping \ud83e\udd16\n\nThree ScrapeGraphAI nodes scrape different contractor categories:\n\n- **Plumbing Services**: Drain cleaning, pipe repair, etc.\n- **Electrical Services**: Outlet installation, wiring, etc.\n- **HVAC Services**: AC repair, heating maintenance, etc.\n\n## What it extracts\n- Service names and descriptions\n- Provider details and ratings\n- Price ranges and contact info"
},
"typeVersion": 1
},
{
"id": "4c5d33d2-3c00-4bcb-a4c4-023bfdd51f9b",
"name": "Sticky Note - Analysis",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-160
],
"parameters": {
"color": 5,
"width": 400,
"height": 1040,
"content": "# Step 3: Cost Analysis & Comparison \ud83d\udcca\n\n**Cost Analyzer**: Processes scraped data and calculates average costs, cost levels, and urgency scores.\n\n**Service Comparer**: Compares providers within each service category to find:\n- Best rated providers\n- Most cost-effective options\n- Price variance analysis\n\n## Output\n- Categorized cost analysis\n- Provider comparisons\n- Recommendation logic"
},
"typeVersion": 1
},
{
"id": "9f34b893-579d-4ccd-85ac-9113905e4db9",
"name": "Sticky Note - Planning",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-160
],
"parameters": {
"color": 5,
"width": 832,
"height": 1040,
"content": "# Step 4: Budget Planning & Alerts \ud83d\udcb0\n\n**Budget Planner**: Creates comprehensive annual budget with:\n- Quarterly budget breakdown\n- Service scheduling recommendations\n- Cost optimization strategies\n- Priority-based planning\n\n**Property Manager Alert**: Formats results into actionable alerts with:\n- Budget summaries\n- High-priority services\n- Provider recommendations\n- Cost-saving tips"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "f6d045df-1c7e-4a0d-a03a-89745d18f990",
"connections": {
"Cost Analyzer": {
"main": [
[
{
"node": "Service Comparer",
"type": "main",
"index": 0
}
]
]
},
"Budget Planner": {
"main": [
[
{
"node": "Property Manager Alert",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "ScrapeGraphAI - Plumbing",
"type": "main",
"index": 0
},
{
"node": "ScrapeGraphAI - Electrical",
"type": "main",
"index": 0
},
{
"node": "ScrapeGraphAI - HVAC",
"type": "main",
"index": 0
}
]
]
},
"Service Comparer": {
"main": [
[
{
"node": "Budget Planner",
"type": "main",
"index": 0
}
]
]
},
"ScrapeGraphAI - HVAC": {
"main": [
[
{
"node": "Cost Analyzer",
"type": "main",
"index": 0
}
]
]
},
"ScrapeGraphAI - Plumbing": {
"main": [
[
{
"node": "Cost Analyzer",
"type": "main",
"index": 0
}
]
]
},
"ScrapeGraphAI - Electrical": {
"main": [
[
{
"node": "Cost Analyzer",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/6626/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Sustainability managers and ESG officers Environmental compliance teams Corporate social responsibility (CSR) managers Energy and facilities managers Supply chain sustainability coordinators Environme
This workflow automatically monitors government regulatory changes and provides comprehensive compliance tracking and executive alerts. Scheduled Monitoring - Runs daily at 9 AM to check for new regul
> ⚠️ IMPORTANT: This template requires a self-hosted n8n instance with ScrapeGraphAI integration. It cannot be used with n8n Cloud due to web scraping capabilities.
This template is an interactive playground designed to help you master the most useful keyboard shortcuts in n8n and supercharge your building speed. Forget boring lists—this workflow gives you hands-
Perfect for content publishing with organic scheduling patterns, social media automation, API systems that need to avoid rate limiting, or any automation requiring randomised timing control across mul