{
  "id": "iTYjhgQEFE4ap1c8",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "FireCrawl Summary Bot",
  "tags": [],
  "nodes": [
    {
      "id": "471044c1-cafd-4810-973d-b40c74ef6999",
      "name": "Daily Market Research Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -160,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8f6e97b6-6910-4c6b-8c9a-29a0cf95ac09",
      "name": "Crawl TechCrunch (FireCrawl)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        140,
        0
      ],
      "parameters": {
        "url": "https://api.firecrawl.dev/v1/crawl",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "https://techcrunch.com"
            },
            {
              "name": "crawl_type",
              "value": "scrape"
            },
            {
              "name": "extract_article",
              "value": "true"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7d446441-d882-4816-805e-2d52cd8aea87",
      "name": "Filter Relevant Articles",
      "type": "n8n-nodes-base.code",
      "position": [
        360,
        0
      ],
      "parameters": {
        "jsCode": "const keywords = ['AI', 'machine learning', 'startup', 'generative'];\nconst results = [];\n\nfor (const item of items) {\n  const title = item.json.article?.title?.toLowerCase() || '';\n  const content = item.json.article?.content?.toLowerCase() || '';\n\n  const isRelevant = keywords.some(keyword =>\n    title.includes(keyword.toLowerCase()) ||\n    content.includes(keyword.toLowerCase())\n  );\n\n  if (isRelevant) {\n    results.push(item); // keep only relevant articles\n  }\n}\n\nreturn results;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "a326e8fd-bfc8-4380-9c66-20481aaa8a6c",
      "name": "Summarizer Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        700,
        0
      ],
      "parameters": {
        "text": "=Summarize the following article in 3 bullet points:\nTitle: {{ $json.article.title }}\ndescription: {{ $json.meta.description }}\nContent: {{ $json.article.content }}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "d8576228-6261-4654-84de-0864e398c22d",
      "name": "OpenAI Summarizer",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        640,
        240
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f5965b4a-4ab1-4e5f-868c-2dc11c59fc28",
      "name": "Send Summary to Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1060,
        0
      ],
      "parameters": {
        "text": "=\ud83d\udd0d AI Research Summary: \nTitle: {{ $('Filter Relevant Articles').item.json.article.title }}\nLink: {{ $('Filter Relevant Articles').item.json.url }}\nSummary: {{ $json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C08TTV0CC3E",
          "cachedResultName": "all-nathing"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "295fae17-e75e-47db-a321-0379899f44cc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -580
      ],
      "parameters": {
        "color": 3,
        "width": 440,
        "height": 800,
        "content": "\ud83c\udf10\ud83d\udcbb 2. Crawling & Filtering\nNodes:\n\ud83c\udf10 Crawl TechCrunch (FireCrawl) (HTTP Request)\n\n\ud83e\udde0 Filter Relevant Articles (Code)\n\n\ud83d\udd0d What these nodes do:\n\ud83c\udf10 Crawl TechCrunch (FireCrawl)\nUses a POST request to FireCrawl\u2019s API\n\nInputs:\n\nurl: Target site (e.g., https://techcrunch.com)\n\ncrawl_type: \"scrape\"\n\nextract_article: true\n\nRetrieves:\n\ntitle, content, author, published_at\n\n\ud83e\udde0 Filter Relevant Articles\nUses a Code node to check if the article is relevant\n\nKeywords like \"AI\", \"machine learning\", \"startup\" are matched\n\nFilters only the articles that matter to your domain"
      },
      "typeVersion": 1
    },
    {
      "id": "5fe2fbcc-8489-42cf-a578-48a46f18977d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        -540
      ],
      "parameters": {
        "color": 5,
        "width": 640,
        "height": 920,
        "content": "\ud83e\udd16\ud83d\udcac 3. Summarization & Delivery\nNodes:\n\ud83e\udde0 Summarize Article with AI (AI Agent)\n\n\ud83d\udd17 OpenAI Chat (Summarizer) (OpenAI Chat Model)\n\n\ud83d\udcac Send Summary to Slack (Slack)\n\n\ud83d\udccc What happens here:\n\ud83e\udd16 Summarize Article with AI\nPasses the article to a GPT-4 or GPT-3.5 agent\n\nUses a prompt like:\n\n\u201cSummarize the following article in 3 bullet points\u2026\u201d\n\n\ud83d\udca1 OpenAI Chat (Summarizer)\nExecutes the actual summarization\n\nOutputs a short, clean summary ideal for fast reading\n\n\ud83d\udcac Send Summary to Slack\nPosts the summary to a specific Slack channel (e.g., #market-research)"
      },
      "typeVersion": 1
    },
    {
      "id": "97ecbbb2-e763-47f0-82b8-2fede05b486f",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2100,
        -560
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d28d5f04-db81-4833-869f-158b4586a337",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2100,
        -220
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 2758,
        "content": "Absolutely! Here's your **Market Research Automation Workflow** beautifully divided into logical sections, with clear explanations and fitting icons to help you grasp each part at a glance.\n\n---\n\n# \ud83d\ude80 **n8n Market Research Automation Workflow**\n\nAutomate the process of **crawling news sites**, **filtering for relevant content**, **summarizing it with AI**, and **posting it to Slack** \u2014 all in a seamless flow.\n\n---\n\n## \u23f0 1. **Trigger & Scheduling**\n\n**Node:** `\ud83d\udd52 Daily Market Research Trigger`\n\n> Starts the workflow on a recurring schedule.\n\n\ud83d\udd27 **What it does:**\n\n* Runs every morning (or your defined time)\n* Ensures your team receives fresh updates daily\n\n\ud83d\udcc5 **Example Cron Setting:**\n\n* Every day at 8:00 AM\n\n---\n\n## \ud83c\udf10\ud83d\udcbb 2. **Crawling & Filtering**\n\n### **Nodes:**\n\n* `\ud83c\udf10 Crawl TechCrunch (FireCrawl)` *(HTTP Request)*\n* `\ud83e\udde0 Filter Relevant Articles` *(Code)*\n\n### \ud83d\udd0d What these nodes do:\n\n#### \ud83c\udf10 **Crawl TechCrunch (FireCrawl)**\n\n* Uses a **POST** request to FireCrawl\u2019s API\n* Inputs:\n\n  * `url`: Target site (e.g., `https://techcrunch.com`)\n  * `crawl_type`: `\"scrape\"`\n  * `extract_article`: `true`\n* Retrieves:\n\n  * `title`, `content`, `author`, `published_at`\n\n#### \ud83e\udde0 **Filter Relevant Articles**\n\n* Uses a `Code` node to check if the article is relevant\n* Keywords like `\"AI\"`, `\"machine learning\"`, `\"startup\"` are matched\n* Filters only the articles that **matter to your domain**\n\n\ud83d\udcc4 **Sample Code:**\n\n```javascript\nconst keywords = ['AI', 'machine learning', 'startup', 'generative'];\nconst results = [];\n\nfor (const item of items) {\n  const title = item.json.article?.title?.toLowerCase() || '';\n  const content = item.json.article?.content?.toLowerCase() || '';\n\n  const isRelevant = keywords.some(keyword =>\n    title.includes(keyword.toLowerCase()) ||\n    content.includes(keyword.toLowerCase())\n  );\n\n  if (isRelevant) {\n    results.push(item); // keep only relevant articles\n  }\n}\n\nreturn results;\n```\n\n---\n\n## \ud83e\udd16\ud83d\udcac 3. **Summarization & Delivery**\n\n### **Nodes:**\n\n* `\ud83e\udde0 Summarize Article with AI` *(AI Agent)*\n* `\ud83d\udd17 OpenAI Chat (Summarizer)` *(OpenAI Chat Model)*\n* `\ud83d\udcac Send Summary to Slack` *(Slack)*\n\n### \ud83d\udccc What happens here:\n\n#### \ud83e\udd16 **Summarize Article with AI**\n\n* Passes the article to a GPT-4 or GPT-3.5 agent\n* Uses a prompt like:\n\n  > \u201cSummarize the following article in 3 bullet points\u2026\u201d\n\n#### \ud83d\udca1 **OpenAI Chat (Summarizer)**\n\n* Executes the actual summarization\n* Outputs a short, clean summary ideal for fast reading\n\n#### \ud83d\udcac **Send Summary to Slack**\n\n* Posts the summary to a specific Slack channel (e.g., `#market-research`)\n* Message format example:\n\n  ```\n  \ud83d\udd0d *Market Research Summary*\n  *Title:* OpenAI launches GPT-5\n  *Link:* https://techcrunch.com/article\n  *Summary:*\n  - GPT-5 improves reasoning\n  - Enhanced safety mechanisms\n  - Better multilingual performance\n  ```\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8d64bd18-6a8f-4a2b-a952-5d8417122a2e",
  "connections": {
    "Summarizer Agent": {
      "main": [
        [
          {
            "node": "Send Summary to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Summarizer": {
      "ai_languageModel": [
        [
          {
            "node": "Summarizer Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Filter Relevant Articles": {
      "main": [
        [
          {
            "node": "Summarizer Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Crawl TechCrunch (FireCrawl)": {
      "main": [
        [
          {
            "node": "Filter Relevant Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Market Research Trigger": {
      "main": [
        [
          {
            "node": "Crawl TechCrunch (FireCrawl)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}