This workflow corresponds to n8n.io template #6974 — 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": "WvrxIu1q3XWWkbdc",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "My workflow 3",
"tags": [
{
"id": "IZ3TCbPLnlWJhHZq",
"name": "Amazon Intelligence",
"createdAt": "2025-08-04T14:47:06.250Z",
"updatedAt": "2025-08-04T14:47:06.250Z"
}
],
"nodes": [
{
"id": "e7b5f996-645e-4e89-aa4f-f1e995b1e4af",
"name": "Sticky Note - Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-736
],
"parameters": {
"width": 337,
"height": 928,
"content": "# \ud83c\udfaf WORKFLOW OVERVIEW\n\n**Purpose:** Automated Amazon market intelligence system that runs daily to provide competitive insights\n\n**Key Capabilities:**\n- Pricing intelligence & competitor analysis\n- Keyword opportunity identification\n- Market gap analysis\n- Strategic positioning recommendations\n- Automated reporting to Google Docs\n\n**Business Value:**\n- Save 10+ hours of manual research weekly\n- Real-time competitive positioning\n- Data-driven pricing decisions\n- Market opportunity identification\n\n**Execution:** Daily at 6:00 AM UTC"
},
"typeVersion": 1
},
{
"id": "9c7c749b-5ce7-4d45-bcd1-7e24e1a7a8df",
"name": "Daily Schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"notes": "\ud83c\udfaf WORKFLOW OVERVIEW\n\nEsecuzione automatica giornaliera alle 6:00\nAnalizza mercato Amazon per:\n\u2022 Pricing intelligence\n\u2022 Competitor analysis \n\u2022 Keyword opportunities\n\u2022 Strategic insights",
"position": [
144,
224
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 6 * * *"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f3446896-4e2c-48d4-b380-8326064ab15b",
"name": "Sticky Note - Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
112,
-736
],
"parameters": {
"width": 298,
"height": 919,
"content": "# \u2699\ufe0f SETUP REQUIREMENTS\n\n**Required Credentials:**\n1. ScrapeGraphAI API key\n2. Google OAuth2 (Docs API)\n\n**Configuration Steps:**\n1. Update Amazon search URL for your category\n2. Configure IP rotation if needed\n3. Set up Google Drive folder permissions\n4. Test with small product set first\n\n**Rate Limits:**\n- Amazon: Respect robots.txt\n- ScrapeGraphAI: Check your plan limits"
},
"typeVersion": 1
},
{
"id": "bd65dfe5-68fb-4fee-9cf1-402fde5fa66c",
"name": "Amazon Product Scraper",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"notes": "\ud83d\udd27 SCRAPING CONFIG\n\n\u26a0\ufe0f IMPORTANTE:\n\u2022 Configurare credenziali ScrapeGraphAI\n\u2022 Modificare URL per categoria specifica\n\u2022 Monitorare rate limits Amazon\n\u2022 Aggiungere IP rotation se necessario",
"position": [
448,
224
],
"parameters": {
"userPrompt": "Extract product data: title, price, rating, review_count, asin, prime_eligible, image_url. Return as JSON array.",
"websiteUrl": "https://www.amazon.com/s?k=wireless+bluetooth+headphones"
},
"typeVersion": 1
},
{
"id": "af9aa953-c32b-4cdf-b333-eb0de2cd7ac8",
"name": "Sticky Note - Analysis",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
-736
],
"parameters": {
"width": 298,
"height": 919,
"content": "# \ud83d\udcca ANALYSIS OUTPUTS\n\n**Pricing Intelligence:**\n- Market average, min/max prices\n- Price distribution (budget/mid/premium)\n- Competitive positioning gaps\n\n**Quality Analysis:**\n- Rating distribution and averages\n- Top performers identification\n- Quality vs price correlation\n\n**Market Opportunities:**\n- Under-served price segments\n- Quality gaps in market\n- Positioning recommendations"
},
"typeVersion": 1
},
{
"id": "272ad934-3900-4cca-9a57-224e5774eec5",
"name": "Product Analyzer",
"type": "n8n-nodes-base.code",
"notes": "\ud83d\udcca CORE ANALYSIS\n\nAnalizza automaticamente:\n\u2713 Prezzi (min/max/media/distribuzione)\n\u2713 Rating e qualit\u00e0 prodotti\n\u2713 Top performers del mercato\n\u2713 Gap di qualit\u00e0 e prezzo\n\u2713 Opportunit\u00e0 competitive",
"position": [
752,
224
],
"parameters": {
"jsCode": "// Simplified Product Analyzer\nconst products = $input.first().json.result || $input.first().json || [];\n\nfunction analyzeProducts(productList) {\n if (!Array.isArray(productList) || productList.length === 0) {\n return {\n error: 'No products found',\n timestamp: new Date().toISOString()\n };\n }\n\n const analysis = {\n summary: {\n total_products: productList.length,\n analyzed_at: new Date().toISOString()\n },\n pricing: {\n average: 0,\n min: 0,\n max: 0,\n distribution: {\n budget: 0, // < $50\n mid_range: 0, // $50-150\n premium: 0 // > $150\n }\n },\n ratings: {\n average: 0,\n excellent: 0, // >= 4.5\n good: 0, // 4.0-4.4\n fair: 0, // 3.5-3.9\n poor: 0 // < 3.5\n },\n top_products: [],\n opportunities: [],\n insights: []\n };\n\n // Extract and clean price data\n const validProducts = productList.filter(p => p.price && p.rating).map(p => ({\n ...p,\n price_numeric: parseFloat(String(p.price).replace(/[$,]/g, '') || '0'),\n rating_numeric: parseFloat(p.rating || '0'),\n review_count_numeric: parseInt(String(p.review_count || '0').replace(/[,]/g, '') || '0')\n }));\n\n if (validProducts.length === 0) {\n return { ...analysis, error: 'No valid product data found' };\n }\n\n // Pricing analysis\n const prices = validProducts.map(p => p.price_numeric).filter(p => p > 0);\n if (prices.length > 0) {\n analysis.pricing.average = Math.round(prices.reduce((a, b) => a + b, 0) / prices.length);\n analysis.pricing.min = Math.min(...prices);\n analysis.pricing.max = Math.max(...prices);\n \n // Price distribution\n analysis.pricing.distribution.budget = prices.filter(p => p < 50).length;\n analysis.pricing.distribution.mid_range = prices.filter(p => p >= 50 && p <= 150).length;\n analysis.pricing.distribution.premium = prices.filter(p => p > 150).length;\n }\n\n // Rating analysis\n const ratings = validProducts.map(p => p.rating_numeric).filter(r => r > 0);\n if (ratings.length > 0) {\n analysis.ratings.average = Math.round(ratings.reduce((a, b) => a + b, 0) / ratings.length * 10) / 10;\n analysis.ratings.excellent = ratings.filter(r => r >= 4.5).length;\n analysis.ratings.good = ratings.filter(r => r >= 4.0 && r < 4.5).length;\n analysis.ratings.fair = ratings.filter(r => r >= 3.5 && r < 4.0).length;\n analysis.ratings.poor = ratings.filter(r => r < 3.5).length;\n }\n\n // Top products (by rating and review count)\n analysis.top_products = validProducts\n .filter(p => p.rating_numeric >= 4.0)\n .sort((a, b) => {\n const scoreA = a.rating_numeric * Math.log(a.review_count_numeric + 1);\n const scoreB = b.rating_numeric * Math.log(b.review_count_numeric + 1);\n return scoreB - scoreA;\n })\n .slice(0, 5)\n .map(p => ({\n title: p.title,\n price: p.price_numeric,\n rating: p.rating_numeric,\n reviews: p.review_count_numeric,\n asin: p.asin\n }));\n\n // Market opportunities\n const lowRatedCount = analysis.ratings.poor + analysis.ratings.fair;\n if (lowRatedCount > validProducts.length * 0.3) {\n analysis.opportunities.push({\n type: 'Quality Gap',\n description: `${lowRatedCount} products have ratings below 4.0`,\n potential: 'High'\n });\n }\n\n const highPriceCount = analysis.pricing.distribution.premium;\n if (highPriceCount > validProducts.length * 0.4) {\n analysis.opportunities.push({\n type: 'Price Gap',\n description: 'Market skews toward premium pricing',\n potential: 'Medium'\n });\n }\n\n // Market insights\n analysis.insights.push(`Average price point: $${analysis.pricing.average}`);\n analysis.insights.push(`${Math.round(analysis.ratings.excellent / validProducts.length * 100)}% of products have excellent ratings`);\n \n if (analysis.pricing.distribution.budget > analysis.pricing.distribution.premium) {\n analysis.insights.push('Budget-friendly market with value opportunities');\n } else if (analysis.pricing.distribution.premium > analysis.pricing.distribution.budget) {\n analysis.insights.push('Premium market with higher margin potential');\n }\n\n return analysis;\n}\n\nconst result = analyzeProducts(products);\nreturn [{ json: result }];"
},
"typeVersion": 2
},
{
"id": "cb271036-216e-4368-977f-b3c453f30371",
"name": "Sticky Note - SEO",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
-736
],
"parameters": {
"width": 298,
"height": 913,
"content": "# \ud83d\udd0d SEO & KEYWORD STRATEGY\n\n**Keyword Extraction:**\n- Analyzes top performer titles\n- Identifies high-frequency terms\n- Filters out stop words\n\n**Market Trends:**\n- Premium vs value keyword focus\n- Emerging keyword opportunities\n- Voice search optimization\n\n**Competitive Intelligence:**\n- Long-tail keyword gaps\n- Competitor keyword strategies\n- Search volume opportunities\n\n**Actionable Outputs:**\n- Primary keyword targets\n- Content optimization suggestions\n- PPC campaign keywords"
},
"typeVersion": 1
},
{
"id": "8237113b-3b07-4bfc-acbb-2ea40a042e33",
"name": "Keyword Analyzer",
"type": "n8n-nodes-base.code",
"notes": "\ud83d\udd0d SEO INTELLIGENCE\n\n\u2022 Estrae keyword dai top products\n\u2022 Identifica trend di mercato emergenti\n\u2022 Suggerisce opportunit\u00e0 SEO\n\u2022 Analizza gap competitivi keyword\n\u2022 Focus su long-tail keywords",
"position": [
1040,
224
],
"parameters": {
"jsCode": "// Keyword and SEO Analyzer\nconst analysis = $input.first().json;\n\nfunction extractKeywords(productAnalysis) {\n const keywords = {\n primary_keywords: [],\n opportunities: [],\n trends: [],\n recommendations: [],\n timestamp: new Date().toISOString()\n };\n\n // Extract keywords from top products\n if (productAnalysis.top_products && productAnalysis.top_products.length > 0) {\n const allTitles = productAnalysis.top_products.map(p => p.title || '').join(' ');\n \n // Simple keyword extraction\n const words = allTitles.toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter(word => word.length > 3 && !isStopWord(word));\n \n // Count frequency\n const wordCount = {};\n words.forEach(word => {\n wordCount[word] = (wordCount[word] || 0) + 1;\n });\n \n // Get top keywords\n keywords.primary_keywords = Object.entries(wordCount)\n .filter(([word, count]) => count >= 2)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([word, count]) => ({\n keyword: word,\n frequency: count,\n potential: count > 3 ? 'High' : 'Medium'\n }));\n }\n\n // SEO opportunities based on market analysis\n if (productAnalysis.opportunities) {\n productAnalysis.opportunities.forEach(opp => {\n if (opp.type === 'Quality Gap') {\n keywords.opportunities.push({\n type: 'Quality Keywords',\n suggestion: 'Target quality-focused keywords like \"premium\", \"durable\", \"high-quality\"',\n reason: 'Market has quality gap opportunity'\n });\n }\n \n if (opp.type === 'Price Gap') {\n keywords.opportunities.push({\n type: 'Value Keywords',\n suggestion: 'Use value-oriented keywords like \"affordable\", \"best value\", \"budget\"',\n reason: 'Price-sensitive market opportunity'\n });\n }\n });\n }\n\n // Market trends\n if (productAnalysis.pricing) {\n const { budget, mid_range, premium } = productAnalysis.pricing.distribution;\n const total = budget + mid_range + premium;\n \n if (premium > total * 0.4) {\n keywords.trends.push({\n trend: 'Premium Focus',\n keywords: ['premium', 'luxury', 'high-end', 'professional'],\n market_share: Math.round(premium / total * 100) + '%'\n });\n }\n \n if (budget > total * 0.4) {\n keywords.trends.push({\n trend: 'Value Focus',\n keywords: ['affordable', 'budget', 'value', 'economical'],\n market_share: Math.round(budget / total * 100) + '%'\n });\n }\n }\n\n // Basic recommendations\n keywords.recommendations = [\n {\n action: 'Target Long-tail Keywords',\n description: 'Focus on 3-4 word specific phrases',\n priority: 'High'\n },\n {\n action: 'Monitor Competitor Keywords',\n description: 'Analyze top performer titles for keyword ideas',\n priority: 'Medium'\n },\n {\n action: 'Optimize for Voice Search',\n description: 'Include natural language phrases',\n priority: 'Low'\n }\n ];\n\n return keywords;\n}\n\nfunction isStopWord(word) {\n const stopWords = ['with', 'for', 'and', 'the', 'that', 'this', 'from', 'wireless', 'bluetooth'];\n return stopWords.includes(word);\n}\n\nconst keywordAnalysis = extractKeywords(analysis);\nreturn [{ json: keywordAnalysis }];"
},
"typeVersion": 2
},
{
"id": "ca5b0fc8-ef7e-4a62-82ef-1143c5e4f80a",
"name": "Sticky Note - Pricing",
"type": "n8n-nodes-base.stickyNote",
"position": [
1024,
-736
],
"parameters": {
"width": 298,
"height": 913,
"content": "# \ud83d\udcb0 PRICING STRATEGIES\n\n**Three Strategic Approaches:**\n\n\ud83d\udd35 **Competitive Pricing**\n- Within \u00b15% of market average\n- Low risk, market acceptance\n- Best for new entrants\n\n\ud83d\udfe1 **Value Pricing** \n- 10-25% below market average\n- Higher volume potential\n- Risk: Price wars, lower margins\n\n\ud83d\udfe0 **Premium Pricing**\n- 15-35% above market average\n- Higher margins, brand positioning\n- Requires superior quality/features\n\n**Risk Assessment:**\n- Competition level analysis\n- Market saturation indicators\n- Quality gap opportunities"
},
"typeVersion": 1
},
{
"id": "edc944e4-2495-4370-ab33-c0cc77f237ed",
"name": "Pricing Strategy",
"type": "n8n-nodes-base.code",
"notes": "\ud83d\udcb0 PRICING STRATEGIES\n\n3 Approcci principali:\n\ud83d\udd35 Competitive (\u00b15% media mercato)\n\ud83d\udfe1 Value (-10-25% sotto media)\n\ud83d\udfe0 Premium (+15-35% sopra media)\n\nInclude analisi rischi e positioning",
"position": [
1344,
224
],
"parameters": {
"jsCode": "// Simple Pricing Strategy Generator\nconst productAnalysis = $input.item(0).json;\nconst keywordAnalysis = $input.item(1).json;\n\nfunction generatePricingStrategy(products, keywords) {\n const strategy = {\n current_market: {\n average_price: products.pricing?.average || 0,\n price_range: {\n min: products.pricing?.min || 0,\n max: products.pricing?.max || 0\n },\n market_distribution: products.pricing?.distribution || {}\n },\n recommendations: [],\n competitive_analysis: {\n positioning_options: [],\n risk_assessment: 'Medium'\n },\n action_items: [],\n timestamp: new Date().toISOString()\n };\n\n const avgPrice = products.pricing?.average || 100;\n \n // Generate pricing recommendations\n strategy.recommendations = [\n {\n strategy: 'Competitive Pricing',\n price_range: {\n min: Math.round(avgPrice * 0.95),\n max: Math.round(avgPrice * 1.05)\n },\n description: 'Price within 5% of market average',\n pros: ['Market acceptance', 'Lower risk'],\n cons: ['Limited differentiation'],\n best_for: 'New market entrants'\n },\n {\n strategy: 'Value Pricing',\n price_range: {\n min: Math.round(avgPrice * 0.75),\n max: Math.round(avgPrice * 0.90)\n },\n description: 'Undercut market by 10-25%',\n pros: ['Higher volume potential', 'Market share gains'],\n cons: ['Lower margins', 'Price war risk'],\n best_for: 'Cost-optimized products'\n },\n {\n strategy: 'Premium Pricing',\n price_range: {\n min: Math.round(avgPrice * 1.15),\n max: Math.round(avgPrice * 1.35)\n },\n description: 'Price 15-35% above market',\n pros: ['Higher margins', 'Premium positioning'],\n cons: ['Lower volume', 'Higher marketing needs'],\n best_for: 'Superior quality products'\n }\n ];\n\n // Positioning analysis\n const distribution = products.pricing?.distribution || {};\n const total = (distribution.budget || 0) + (distribution.mid_range || 0) + (distribution.premium || 0);\n \n if (total > 0) {\n strategy.competitive_analysis.positioning_options = [\n {\n position: 'Budget Leader',\n market_share: Math.round((distribution.budget || 0) / total * 100) + '%',\n competition_level: distribution.budget > 5 ? 'High' : 'Medium',\n opportunity: distribution.budget < total * 0.3 ? 'High' : 'Low'\n },\n {\n position: 'Mid-Range Player',\n market_share: Math.round((distribution.mid_range || 0) / total * 100) + '%',\n competition_level: distribution.mid_range > 5 ? 'High' : 'Medium',\n opportunity: distribution.mid_range < total * 0.4 ? 'Medium' : 'Low'\n },\n {\n position: 'Premium Brand',\n market_share: Math.round((distribution.premium || 0) / total * 100) + '%',\n competition_level: distribution.premium > 3 ? 'High' : 'Low',\n opportunity: distribution.premium < total * 0.2 ? 'High' : 'Medium'\n }\n ];\n }\n\n // Risk assessment\n const qualityIssues = products.opportunities?.some(o => o.type === 'Quality Gap') || false;\n const priceCompetition = distribution.budget > distribution.premium;\n \n if (qualityIssues && priceCompetition) {\n strategy.competitive_analysis.risk_assessment = 'High';\n } else if (qualityIssues || priceCompetition) {\n strategy.competitive_analysis.risk_assessment = 'Medium';\n } else {\n strategy.competitive_analysis.risk_assessment = 'Low';\n }\n\n // Action items\n strategy.action_items = [\n {\n priority: 'High',\n action: 'Choose pricing strategy',\n timeline: '1-2 weeks',\n description: 'Select from competitive, value, or premium pricing'\n },\n {\n priority: 'High',\n action: 'Monitor competitor pricing',\n timeline: 'Ongoing',\n description: 'Track price changes of top 5 competitors weekly'\n },\n {\n priority: 'Medium',\n action: 'Test price sensitivity',\n timeline: '4-6 weeks',\n description: 'A/B test different price points'\n },\n {\n priority: 'Low',\n action: 'Optimize for keywords',\n timeline: '2-4 weeks',\n description: 'Use keyword insights for product positioning'\n }\n ];\n\n return strategy;\n}\n\nconst pricingStrategy = generatePricingStrategy(productAnalysis, keywordAnalysis);\nreturn [{ json: pricingStrategy }];"
},
"typeVersion": 2
},
{
"id": "0d24fa51-3534-47c7-a955-cf81505c620a",
"name": "Sticky Note - Reporting",
"type": "n8n-nodes-base.stickyNote",
"position": [
1328,
-736
],
"parameters": {
"width": 298,
"height": 913,
"content": "# \ud83d\udccb STRATEGIC REPORTING\n\n**Executive Summary Includes:**\n- Market health assessment\n- Key performance indicators\n- Immediate action items\n- Strategic recommendations\n\n**Phased Action Plan:**\n- **Phase 1:** Market entry (0-4 weeks)\n- **Phase 2:** Optimization (4-12 weeks) \n- **Phase 3:** Expansion (12+ weeks)\n\n**KPI Tracking:**\n- Market share monitoring\n- Price competitiveness\n- Customer satisfaction metrics\n- Keyword ranking performance\n- Sales velocity tracking\n\n**Output:** Professional Google Doc report"
},
"typeVersion": 1
},
{
"id": "e6b4bbfc-6799-43c6-8148-2fae832872a1",
"name": "Report Generator",
"type": "n8n-nodes-base.code",
"notes": "\ud83d\udccb STRATEGIC REPORT\n\n\u2022 Executive Summary completo\n\u2022 Piano d'azione per fasi temporali\n\u2022 KPI da monitorare quotidianamente\n\u2022 Insights strategici actionable\n\u2022 Raccomandazioni immediate e LT",
"position": [
1648,
224
],
"parameters": {
"jsCode": "// Final Report Generator\nconst productAnalysis = $input.item(0).json;\nconst keywordAnalysis = $input.item(1).json;\nconst pricingStrategy = $input.item(2).json;\n\nfunction generateFinalReport(products, keywords, pricing) {\n const report = {\n executive_summary: {\n market_overview: {\n total_products_analyzed: products.summary?.total_products || 0,\n average_market_price: products.pricing?.average || 0,\n average_rating: products.ratings?.average || 0,\n market_health: calculateMarketHealth(products)\n },\n key_insights: [],\n recommendations: {\n immediate: [],\n short_term: [],\n long_term: []\n }\n },\n detailed_analysis: {\n pricing_insights: pricing,\n keyword_opportunities: keywords,\n product_performance: products\n },\n action_plan: {\n phase_1: [],\n phase_2: [],\n phase_3: []\n },\n kpis_to_track: [],\n generated_at: new Date().toISOString()\n };\n\n // Generate key insights\n const insights = [];\n \n if (products.pricing?.average) {\n insights.push(`Market average price is $${products.pricing.average}`);\n }\n \n if (products.opportunities?.length > 0) {\n insights.push(`${products.opportunities.length} market opportunities identified`);\n }\n \n if (products.ratings?.excellent > products.ratings?.poor) {\n insights.push('Market prioritizes quality over price');\n } else if (products.ratings?.poor > products.ratings?.excellent) {\n insights.push('Quality gap presents opportunity for premium positioning');\n }\n \n const premiumShare = pricing.current_market?.market_distribution?.premium || 0;\n const budgetShare = pricing.current_market?.market_distribution?.budget || 0;\n \n if (premiumShare > budgetShare) {\n insights.push('Premium segment dominates - consider quality focus');\n } else if (budgetShare > premiumShare) {\n insights.push('Value segment is strong - cost optimization important');\n }\n \n report.executive_summary.key_insights = insights;\n\n // Generate recommendations by timeline\n report.executive_summary.recommendations.immediate = [\n 'Select primary pricing strategy based on analysis',\n 'Identify top 3 competitor products to monitor',\n 'Choose initial keyword targets for product listing'\n ];\n \n report.executive_summary.recommendations.short_term = [\n 'Optimize product features based on market gaps',\n 'Implement competitor price monitoring',\n 'Test different price points with small batches'\n ];\n \n report.executive_summary.recommendations.long_term = [\n 'Build brand positioning based on market insights',\n 'Develop product line extensions',\n 'Consider market expansion opportunities'\n ];\n\n // Create phased action plan\n report.action_plan.phase_1 = [\n {\n task: 'Market Entry Strategy',\n timeline: '0-4 weeks',\n priority: 'Critical',\n description: 'Finalize pricing, positioning, and initial keyword strategy'\n },\n {\n task: 'Competitive Monitoring Setup',\n timeline: '1-2 weeks',\n priority: 'High',\n description: 'Establish weekly tracking of top 5 competitors'\n }\n ];\n \n report.action_plan.phase_2 = [\n {\n task: 'Product Optimization',\n timeline: '4-12 weeks',\n priority: 'High',\n description: 'Refine product based on market feedback and competitor analysis'\n },\n {\n task: 'Marketing Strategy',\n timeline: '6-10 weeks',\n priority: 'Medium',\n description: 'Develop marketing campaigns based on keyword insights'\n }\n ];\n \n report.action_plan.phase_3 = [\n {\n task: 'Market Expansion',\n timeline: '12+ weeks',\n priority: 'Medium',\n description: 'Consider additional products or market segments'\n },\n {\n task: 'Brand Building',\n timeline: '16+ weeks',\n priority: 'Low',\n description: 'Invest in brand development and customer loyalty'\n }\n ];\n\n // Define KPIs to track\n report.kpis_to_track = [\n {\n metric: 'Market Share',\n target: 'Top 10 in category',\n frequency: 'Monthly'\n },\n {\n metric: 'Price Competitiveness',\n target: 'Within 10% of optimal price point',\n frequency: 'Weekly'\n },\n {\n metric: 'Customer Satisfaction',\n target: '4.5+ star rating',\n frequency: 'Daily'\n },\n {\n metric: 'Keyword Rankings',\n target: 'Top 3 for primary keywords',\n frequency: 'Weekly'\n },\n {\n metric: 'Sales Velocity',\n target: 'Above category average',\n frequency: 'Daily'\n }\n ];\n\n return report;\n}\n\nfunction calculateMarketHealth(products) {\n let score = 0;\n let factors = 0;\n \n // Rating health\n if (products.ratings?.average >= 4.0) {\n score += 3;\n } else if (products.ratings?.average >= 3.5) {\n score += 2;\n } else {\n score += 1;\n }\n factors++;\n \n // Opportunity assessment\n const opportunityCount = products.opportunities?.length || 0;\n if (opportunityCount >= 2) {\n score += 3;\n } else if (opportunityCount >= 1) {\n score += 2;\n } else {\n score += 1;\n }\n factors++;\n \n // Market size\n const totalProducts = products.summary?.total_products || 0;\n if (totalProducts >= 20) {\n score += 3;\n } else if (totalProducts >= 10) {\n score += 2;\n } else {\n score += 1;\n }\n factors++;\n \n const avgScore = score / factors;\n \n if (avgScore >= 2.5) return 'Healthy';\n if (avgScore >= 2.0) return 'Moderate';\n return 'Challenging';\n}\n\nconst finalReport = generateFinalReport(productAnalysis, keywordAnalysis, pricingStrategy);\nreturn [{ json: finalReport }];"
},
"typeVersion": 2
},
{
"id": "ea32c996-b3cf-4998-b1b3-0698c4d41979",
"name": "Sticky Note - Google Docs",
"type": "n8n-nodes-base.stickyNote",
"position": [
1632,
-736
],
"parameters": {
"width": 298,
"height": 913,
"content": "# \ud83d\udd10 GOOGLE DOCS INTEGRATION\n\n**Setup Requirements:**\n- Google OAuth2 API credentials\n- Google Docs API enabled\n- Shared folder permissions\n\n**Report Features:**\n- Professional formatting\n- Executive summary\n- Actionable insights\n- Phased action plans\n- KPI tracking metrics\n\n**Automation Benefits:**\n- Daily market intelligence\n- Consistent reporting format\n- Shareable business insights\n- Historical trend tracking\n\n**Access:** Reports saved to Google Drive with timestamp"
},
"typeVersion": 1
},
{
"id": "978248d3-0919-43d7-b5f8-13041f0f5b51",
"name": "Create Google Doc",
"type": "n8n-nodes-base.googleDocs",
"notes": "\ud83d\udd10 GOOGLE DOCS OUTPUT\n\n\u26a0\ufe0f SETUP REQUIRED:\n\u2022 Configurare OAuth2 Google API\n\u2022 Abilitare Google Docs API\n\u2022 Permessi cartella condivisa\n\n\u2705 Report professionale automatico",
"position": [
1952,
224
],
"parameters": {
"title": "Amazon Market Analysis - {{$json.generated_at}}"
},
"typeVersion": 2
},
{
"id": "6013a1fb-6874-415c-ac1d-d241fe1f6c6c",
"name": "Sticky Note - Business Impact",
"type": "n8n-nodes-base.stickyNote",
"position": [
1936,
-736
],
"parameters": {
"width": 337,
"height": 912,
"content": "# \ud83d\ude80 BUSINESS IMPACT\n\n**Time Savings:**\n- Manual research: 10+ hours/week\n- Automated workflow: 5 minutes setup\n- ROI: 99% time reduction\n\n**Strategic Advantages:**\n- Real-time competitive intelligence\n- Data-driven pricing decisions\n- Market opportunity identification\n- Keyword optimization insights\n\n**Success Metrics:**\n- Improved price positioning\n- Higher conversion rates\n- Better keyword rankings\n- Increased market share\n\n**Scalability:**\n- Multi-category analysis\n- International market expansion\n- Product portfolio optimization\n\n**Next Steps:**\n1. Configure API credentials\n2. Test with sample category\n3. Schedule daily execution\n4. Monitor and optimize"
},
"typeVersion": 1
},
{
"id": "28befcb6-02da-4d0c-ab41-4d13672a415d",
"name": "Sticky Note - Considerations",
"type": "n8n-nodes-base.stickyNote",
"position": [
2272,
-736
],
"parameters": {
"width": 298,
"height": 919,
"content": "# \u26a0\ufe0f IMPORTANT CONSIDERATIONS\n\n**Legal & Compliance:**\n- Respect Amazon's robots.txt\n- Follow ToS for scraping\n- Use appropriate delays between requests\n- Consider rate limiting\n\n**Data Quality:**\n- Validate scraped data\n- Handle missing/malformed data\n- Monitor for Amazon layout changes\n- Implement error handling\n\n**Maintenance:**\n- Regular credential updates\n- Monitor API usage limits\n- Update selectors if needed\n- Review output quality weekly\n\n**Security:**\n- Secure API key storage\n- Limit workflow access\n- Monitor execution logs"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "dcbd410a-6c30-41f3-a0e7-67ad02e15be2",
"connections": {
"Daily Schedule": {
"main": [
[
{
"node": "Amazon Product Scraper",
"type": "main",
"index": 0
}
]
]
},
"Keyword Analyzer": {
"main": [
[
{
"node": "Pricing Strategy",
"type": "main",
"index": 0
}
]
]
},
"Pricing Strategy": {
"main": [
[
{
"node": "Report Generator",
"type": "main",
"index": 0
}
]
]
},
"Product Analyzer": {
"main": [
[
{
"node": "Keyword Analyzer",
"type": "main",
"index": 0
}
]
]
},
"Report Generator": {
"main": [
[
{
"node": "Create Google Doc",
"type": "main",
"index": 0
}
]
]
},
"Amazon Product Scraper": {
"main": [
[
{
"node": "Product 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
Turn Amazon into your personal competitive intelligence goldmine! This AI-powered workflow automatically monitors Amazon markets 24/7, delivering deep competitor insights and pricing intelligence that would take you 10+ hours of manual research weekly. Daily Market Scan - Runs…
Source: https://n8n.io/workflows/6974/ — 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.
Add Liked Songs To A Spotify Monthly Playlist. Uses stickyNote, spotify, nocoDb, noOp. Scheduled trigger; 30 nodes.
> This Workflow is a port of Add saved songs to a monthly playlist from IFTTT.
This automation template allows you to automatically receive news from RSS feeds, process their content, and publish or schedule posts on various social media platforms using PostPulse.
Send Google Analytics Data To A I To Analyze Then Save Results In Baserow. Uses scheduleTrigger, manualTrigger, stickyNote, googleAnalytics. Scheduled trigger; 22 nodes.
This n8n template automates daily backups of workflows and credentials to S3-compatible storage with automatic retention management. Designed for self-hosted n8n instances requiring disaster recovery