├── Automated-Linkedin-Post-FromX
├── News Posts.xlsx
└── README.md
├── Real-Life-Login-System
├── Login Sample Sheet.xlsx
├── README.md
└── Real_Life_Login_System.json
├── Deep Research
└── Deep Research - Sheet1.csv
├── README.md
├── LICENSE
├── Gmail-Label-Optimiser
├── README.md
└── Gmail_Optimiser.json
├── Competitor-Analysis-Linkedin-Post
├── README.md
└── competitor-analysis-linkedin-post.json
├── Personal-Assistant-Video
├── Youtube Agent (architjn.com).json
├── Architjn.com Agent.json
└── Youtube Knowledge (architjn).json
├── Cold-Mailing-v0.1
├── README.md
└── Cold_Mailing.json
├── ElevenLabs-Chatbot
└── Website_Chatbot_Elevenlabs.json
├── Lead-Gen-Copy
└── Get Leads for Free.json
└── HackerNews Trending Product
└── HN_Top_Product.json
/Automated-Linkedin-Post-FromX/News Posts.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/architjn/n8n-workflows/HEAD/Automated-Linkedin-Post-FromX/News Posts.xlsx
--------------------------------------------------------------------------------
/Real-Life-Login-System/Login Sample Sheet.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/architjn/n8n-workflows/HEAD/Real-Life-Login-System/Login Sample Sheet.xlsx
--------------------------------------------------------------------------------
/Deep Research/Deep Research - Sheet1.csv:
--------------------------------------------------------------------------------
1 | Search Topic,Title,Introduction,Chapter 1,Chapter 2,Chapter 3,Chapter 4,Chapter 5,Topic 1 Sources,Topic 1 Sections,Topic 1 Content,Topic 2 Sources,Topic 2 Sections,Topic 2 Content,Topic 3 Sources,Topic 3 Sections,Topic 3 Content,Topic 4 Sources,Topic 4 Sections,Topic 4 Content,Topic 5 Sources,Topic 5 Sections,Topic 5 Content,Sources,ToC,Final
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # n8n Workflows Collection
2 |
3 | This repository contains various workflow automations built using n8n.
4 |
5 | ## Workflows
6 |
7 | * **[Cold Mailing v0.1](./Cold-Mailing-v0.1/README.md):** An automated workflow for generating and sending personalized cold emails using AI and Airtable.
8 |
9 | Feel free to explore the individual workflow directories for their specific README files and `.json` configurations.
10 |
11 | ## License
12 |
13 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Gmail-Label-Optimiser/README.md:
--------------------------------------------------------------------------------
1 | # Gmail Label Optimiser n8n Workflow
2 |
3 | This workflow automates the process of classifying and organizing your Gmail inbox by intelligently labeling emails using AI, making it easier to manage and prioritize your messages.
4 |
5 | ## Overview
6 |
7 | The workflow operates in several key steps:
8 | 1. **Email Trigger:** Automatically triggers on new emails received in your Gmail inbox.
9 | 2. **AI Classification:** Uses an AI text classifier to analyze the content and subject of each email, categorizing it into predefined types (e.g., Marketing, Stock Updates, Newsletter, Security Alert, etc.).
10 | 3. **Label Management:** Checks if the appropriate label exists in Gmail; if not, it creates the label.
11 | 4. **Label Application:** Applies the correct label to the email thread, organizing your inbox in real time.
12 |
13 | ## Features
14 |
15 | * Automatically classifies incoming emails into categories such as Marketing, Stock Updates, Newsletter, Security Alert, Payment Receipt, and more.
16 | * Uses AI (OpenRouter GPT-4.1-nano or compatible) for accurate email content classification.
17 | * Creates new Gmail labels on the fly if they do not already exist.
18 | * Applies the correct label to each email thread for streamlined inbox management.
19 | * Fully automated and runs continuously in the background.
20 |
21 | ## Prerequisites
22 |
23 | 1. **Gmail Account:**
24 | * Gmail account with OAuth2 credentials configured in n8n.
25 | 2. **n8n Instance:**
26 | * Self-hosted or n8n Cloud account.
27 | 3. **AI Provider:**
28 | * OpenRouter (or compatible) API credentials for the AI classification node.
29 |
30 | ## Setup
31 |
32 | 1. **Import Workflow:** Import the `Gmail_Optimiser.json` file into your n8n instance.
33 | 2. **Configure Credentials:**
34 | * Add Gmail OAuth2 credentials in n8n and select them in all Gmail nodes.
35 | * Add your OpenRouter (or compatible) API credentials for the AI classification node.
36 | 3. **Review Node Settings:**
37 | * Double-check all node settings, especially credentials and field mappings, to match your Gmail and AI provider setup.
38 | 4. **Activate Workflow:**
39 | * Save and activate the workflow in n8n. It will run automatically on new incoming emails.
40 |
41 | ## Usage
42 |
43 | 1. **Enable Workflow:** Ensure the workflow is active in n8n.
44 | 2. **Automatic Operation:**
45 | * The workflow will trigger on every new email received.
46 | * Each email is analyzed and classified by the AI model.
47 | * The appropriate label is created (if needed) and applied to the email thread.
48 | 3. **Inbox Management:**
49 | * Check your Gmail inbox for automatically organized and labeled emails.
50 |
51 | ## Workflow Structure
52 |
53 | * **Trigger Path:** `Gmail Trigger` -> `Text Classifier (AI)` -> `Set Category Nodes` -> `Merge` -> `Gmail (Get/Create Label)` -> `Filter` -> `Switch` -> `Create Label (if needed)` -> `Apply Label`
54 | * **AI Model:** OpenRouter GPT-4.1-nano (or compatible) is used for email classification.
55 | * **Label Management:** Labels are created and applied dynamically based on classification results.
56 |
57 | ## Cost Considerations (Potentially Free)
58 |
59 | This workflow can be run essentially for free, depending on the usage volume and chosen services:
60 |
61 | * **n8n:** Can be self-hosted or used via n8n Cloud (free tier available). If you're new to n8n, you can check it out here: [n8n (affiliate)](https://architjn.com/r/n8n)
62 | * **Gmail:** Free for personal use within Google account limits.
63 | * **OpenRouter/AI Provider:** May incur costs depending on API/model usage; check your provider's pricing.
64 |
65 | **Note:** Costs may be incurred if you exceed free tier limits of any service or use paid AI models.
66 |
67 | ## Customization
68 |
69 | * **Changing Categories:**
70 | * Edit the categories in the AI classification node to match your personal or business needs.
71 | * **Changing AI Models:**
72 | * Swap out the OpenRouter node for your preferred AI provider and adjust prompts as needed.
73 | * **Adjusting Label Logic:**
74 | * Modify the workflow to add, remove, or change label application logic as required for your workflow.
75 |
76 | ## License
77 |
78 | This project is licensed under the MIT License - see the [LICENSE](../LICENSE) file for details.
79 |
--------------------------------------------------------------------------------
/Competitor-Analysis-Linkedin-Post/README.md:
--------------------------------------------------------------------------------
1 | # Competitor Analysis LinkedIn Post n8n Workflow
2 |
3 | This workflow automates the process of analyzing competitor LinkedIn posts and generating high-performing, founder-style posts for your own DTC clothing brand, using AI and Google Sheets for data management.
4 |
5 | ## Overview
6 |
7 | The workflow operates in three main parts:
8 | 1. **Competitor Data Collection:** Triggered manually, it fetches a list of competitor LinkedIn URLs from Google Sheets, scrapes their recent posts using Apify, and stores the results in another Google Sheet.
9 | 2. **Post Format Analysis:** Uses AI (Anthropic Claude) to analyze competitor posts, extracting popular hook types and post formats.
10 | 3. **Post Generation:** AI generates new, high-performing LinkedIn posts for your brand, mimicking successful formats but tailored to a founder-led, authentic voice. The generated posts are appended to a Google Sheet for review and use.
11 |
12 | ## Features
13 |
14 | * Fetches competitor LinkedIn URLs from Google Sheets.
15 | * Scrapes competitor posts using Apify's LinkedIn Profile Posts API.
16 | * Analyzes post formats and hooks using Anthropic Claude via n8n's LangChain integration.
17 | * Generates 5 high-performing, founder-style LinkedIn posts for your brand, based on competitor insights.
18 | * Stores both the original competitor post and the generated post in Google Sheets for easy review and tracking.
19 |
20 | ## Prerequisites
21 |
22 | 1. **Google Sheets:**
23 | * A Google Sheet containing competitor LinkedIn URLs.
24 | * A Google Sheet to store scraped posts and generated content.
25 | * Google Sheets API credentials configured in n8n.
26 | 2. **Apify:**
27 | * An Apify account and API token for the LinkedIn Profile Posts actor.
28 | 3. **Anthropic Claude (via LangChain):**
29 | * Access to the Claude 3.7 Sonnet model (or similar) via n8n's LangChain nodes.
30 | * API credentials configured in n8n.
31 |
32 | ## Setup
33 |
34 | 1. **Import Workflow:** Import the `competitor-analysis-linkedin-post.json` file into your n8n instance.
35 | 2. **Configure Credentials:**
36 | * Add Google Sheets credentials in n8n and select them in all Google Sheets nodes.
37 | * Add your Apify API token in the HTTP Request node for scraping LinkedIn posts.
38 | * Add Anthropic Claude (or compatible) credentials for the LangChain nodes.
39 | 3. **Prepare Google Sheets:**
40 | * Ensure your input sheet contains a column for LinkedIn URLs.
41 | * Set up output sheets for scraped posts and generated content as referenced in the workflow.
42 | 4. **Review Node Settings:**
43 | * Double-check all node settings, especially document IDs, sheet names, and field mappings, to match your Google Sheets setup.
44 | 5. **Activate Workflow:**
45 | * Save and activate the workflow in n8n. Trigger manually as needed to process new competitors or generate new posts.
46 |
47 | ## Usage
48 |
49 | 1. **Populate Competitor List:** Add competitor LinkedIn URLs to your input Google Sheet.
50 | 2. **Run Workflow:** Manually trigger the workflow in n8n. It will:
51 | * Fetch competitor URLs from Google Sheets.
52 | * Scrape recent posts using Apify.
53 | * Store posts in Google Sheets.
54 | * Analyze post formats and hooks using AI.
55 | * Generate new, founder-style posts for your brand.
56 | * Append both the original and generated posts to your output Google Sheet.
57 | 3. **Review Output:** Check your output Google Sheet for both competitor post examples and your new, AI-generated posts.
58 |
59 | ## Workflow Structure
60 |
61 | * **Manual Trigger Path:** `Manual Trigger` -> `Google Sheets2 (Get Competitor List)` -> `Limit` -> `HTTP Request1 (Apify Scraper)` -> `Limit1` -> `Google Sheets3 (Store Posts)` -> `Analyze Posts - Anthropic` -> `Basic LLM Chain (Generate Posts)` -> `Google Sheets (Store Generated Posts)`
62 | * **AI Models:** Anthropic Claude 3.7 Sonnet (via LangChain) is used for both post analysis and generation.
63 | * **Data Storage:** All input and output is managed via Google Sheets for easy access and review.
64 |
65 | ## Cost Considerations (Potentially Free)
66 |
67 | This workflow can be run essentially for free, depending on the usage volume and chosen services:
68 |
69 | * **n8n:** Can be self-hosted or used via n8n Cloud (free tier available).
70 | * **Google Sheets:** Free for moderate usage within Google account limits.
71 | * **Apify:** Free tier available, but scraping LinkedIn may incur costs depending on volume.
72 | * **Anthropic Claude:** May incur costs depending on API/model usage; check your provider's pricing.
73 |
74 | **Note:** Costs may be incurred if you exceed free tier limits of any service or use paid AI models.
75 |
76 | ## Customization
77 |
78 | * **Changing Data Source:**
79 | * Replace Google Sheets nodes with your preferred data source (e.g., Airtable) and update field mappings accordingly.
80 | * **Changing AI Models:**
81 | * Swap out Anthropic Claude nodes for your preferred AI provider (e.g., OpenAI, Google Gemini) and adjust prompts as needed.
82 | * **Adjusting Output:**
83 | * Modify the output Google Sheet structure or add additional columns as required for your workflow.
84 |
--------------------------------------------------------------------------------
/Real-Life-Login-System/README.md:
--------------------------------------------------------------------------------
1 | # Real-Life Login System n8n Workflow
2 |
3 | This workflow implements a real-world login and user management system using Telegram for authentication, Google Sheets for user data storage, and Redis for session management—all orchestrated via n8n.
4 |
5 | ## Overview
6 |
7 | The workflow operates in several main parts:
8 | 1. **Telegram Authentication:** Listens for messages from users via a Telegram bot and uses their chat ID as a unique identifier.
9 | 2. **User Lookup & Registration:** Checks if the user exists in Google Sheets. If not, generates a new user ID and registers the user.
10 | 3. **Session Management:** Uses Redis to cache user sessions for fast lookup and login state management.
11 | 4. **User Data Management:** Stores and retrieves user details (name, Telegram chat ID, etc.) in Google Sheets.
12 | 5. **Workflow Integration:** Supports triggering from other workflows and merging user/session data as needed.
13 |
14 | ## Features
15 |
16 | * Telegram-based login and authentication.
17 | * Google Sheets as a user database (stores user ID, name, Telegram chat ID, etc.).
18 | * Redis for fast session caching and lookup.
19 | * Automatic user registration for new users.
20 | * Easy integration with other n8n workflows.
21 | * Modular design for real-life login and session management scenarios.
22 |
23 | ## Prerequisites
24 |
25 | 1. **Telegram Bot:**
26 | * A Telegram bot and its API token, configured in n8n.
27 | 2. **Google Sheets:**
28 | * A Google Sheet with a `Users` sheet to store user data (UserId, Name, Telegram Chat Id, etc.).
29 | * Google Sheets API credentials configured in n8n.
30 | 3. **Redis:**
31 | * Redis instance and credentials configured in n8n for session caching.
32 |
33 | ## Setup
34 |
35 | 1. **Import Workflow:** Import the `Real_Life_Login_System.json` file into your n8n instance.
36 | 2. **Create Local Redis Instance:**
37 | * If you don't already have Redis running, you can start a local instance for development/testing:
38 | * **On macOS (with Homebrew):**
39 | ```sh
40 | brew install redis
41 | brew services start redis
42 | ```
43 | * **On Linux:**
44 | ```sh
45 | sudo apt-get install redis-server
46 | sudo service redis-server start
47 | ```
48 | * **On Windows:**
49 | Download and run from https://github.com/microsoftarchive/redis/releases
50 | * By default, Redis will run on `localhost:6379`.
51 | 3. **Configure Credentials:**
52 | * Add Telegram bot credentials in n8n and select them in the Telegram Trigger node.
53 | * Add Google Sheets credentials for all Google Sheets nodes.
54 | * Add Redis credentials for all Redis nodes (use `localhost:6379` for local development).
55 | 4. **Prepare Google Sheets:**
56 | * Ensure your sheet has columns for UserId, Name, Telegram Chat Id, etc., as referenced in the workflow.
57 | 5. **Review Node Settings:**
58 | * Double-check all node settings, especially document IDs, sheet names, and field mappings, to match your Google Sheets setup.
59 | 6. **Activate Workflow:**
60 | * Save and activate the workflow in n8n. The workflow will listen for Telegram messages and manage user sessions automatically.
61 |
62 | ## Usage
63 |
64 | 1. **User Sends Message:** A user sends a message to your Telegram bot.
65 | 2. **User Lookup:** The workflow checks if the user exists in Google Sheets.
66 | 3. **Registration (if needed):** If the user is new, a user ID is generated and the user is registered in Google Sheets.
67 | 4. **Session Caching:** The user's session is cached in Redis for fast future lookups.
68 | 5. **Integration:** The workflow can be triggered by other workflows to fetch or update user/session data as needed.
69 |
70 | ## Workflow Structure
71 |
72 | * **Telegram Trigger Path:** `Telegram Trigger` -> `Edit Fields` -> `Merge` -> `Find Cached User` -> `Is Cached` -> `Find User`/`UserId`/`Get UserId`/`Create User`/`Cache User`
73 | * **Google Sheets Integration:** Used for both user lookup and registration.
74 | * **Redis Integration:** Used for session caching and fast user lookup.
75 | * **Workflow Trigger:** Can be triggered by other workflows for modular integration.
76 |
77 | ## Cost Considerations (Potentially Free)
78 |
79 | This workflow can be run essentially for free, depending on the usage volume and chosen services:
80 |
81 | * **n8n:** Can be self-hosted or used via n8n Cloud (free tier available).
82 | * **Google Sheets:** Free for moderate usage within Google account limits.
83 | * **Telegram:** Free for bots and messaging.
84 | * **Redis:** Free if self-hosted or using a free-tier cloud instance.
85 |
86 | **Note:** Costs may be incurred if you exceed free tier limits of any service or use paid cloud Redis providers.
87 |
88 | ## Customization
89 |
90 | * **Changing Data Source:**
91 | * Replace Google Sheets nodes with your preferred data source (e.g., Airtable, SQL) and update field mappings accordingly.
92 | * **Changing Session Store:**
93 | * Swap out Redis nodes for your preferred session/cache provider.
94 | * **Expanding User Data:**
95 | * Add more fields to the Google Sheet and update the workflow to handle additional user attributes.
96 | * **Integration:**
97 | * Use the workflow as a module in larger automation systems for real-life login and session management.
98 |
--------------------------------------------------------------------------------
/Automated-Linkedin-Post-FromX/README.md:
--------------------------------------------------------------------------------
1 | # Automated LinkedIn Post From X (Twitter) n8n Workflow
2 |
3 | This workflow automates the process of scraping trending posts from X (Twitter), generating LinkedIn-ready content using AI, and posting or scheduling them to LinkedIn, with Google Sheets for data management and Telegram for notifications.
4 |
5 | ## Overview
6 |
7 | The workflow operates in several main parts:
8 | 1. **Scrape Trending X Posts:** On a schedule, fetches the latest posts from selected X (Twitter) accounts using RapidAPI.
9 | 2. **Deduplication & Storage:** Cleans and deduplicates posts, storing new ones in a Google Sheet.
10 | 3. **AI Post Generation:** Uses an AI agent to generate LinkedIn-ready posts from the scraped X content.
11 | 4. **Approval & Scheduling:** Allows for manual or automated approval, then schedules posts for LinkedIn.
12 | 5. **Posting & Notification:** Posts to LinkedIn (or prepares for posting), updates status in Google Sheets, and sends a Telegram notification when new posts are available.
13 |
14 | ## Features
15 |
16 | * Scrapes latest posts from X (Twitter) using RapidAPI.
17 | * Cleans, deduplicates, and stores posts in Google Sheets.
18 | * Uses AI to generate LinkedIn-optimized content from X posts.
19 | * Supports approval workflow and scheduled posting.
20 | * Notifies via Telegram when new posts are ready.
21 | * Tracks all post statuses and metadata in Google Sheets.
22 |
23 | ## Prerequisites
24 |
25 | 1. **Google Sheets:**
26 | * A Google Sheet to store scraped X posts and generated LinkedIn content.
27 | * Google Sheets API credentials configured in n8n.
28 | 2. **RapidAPI:**
29 | * RapidAPI account and credentials for the X (Twitter) scraping API.
30 | 3. **AI Model:**
31 | * Access to an AI model (e.g., OpenAI, Anthropic, or similar) via n8n's AI nodes for post generation.
32 | 4. **Telegram (optional):**
33 | * Telegram bot credentials for notifications.
34 | 5. **LinkedIn API (optional):**
35 | * LinkedIn API credentials if you want to automate posting directly to LinkedIn (not included in this workflow by default, but can be added).
36 |
37 | ## Setup
38 |
39 | 1. **Import Workflow:** Import the `Linkedin_Automation.json` file into your n8n instance.
40 | 2. **Configure Credentials:**
41 | * Add Google Sheets credentials in n8n and select them in all Google Sheets nodes.
42 | * Add RapidAPI credentials for the X (Twitter) scraping node.
43 | * Add AI model credentials for the AI Agent node.
44 | * Add Telegram bot credentials for the Telegram node (optional).
45 | 3. **Prepare Google Sheets:**
46 | * Ensure your sheet has columns for post content, status, metadata, etc., as referenced in the workflow.
47 | 4. **Review Node Settings:**
48 | * Double-check all node settings, especially document IDs, sheet names, and field mappings, to match your Google Sheets setup.
49 | 5. **Activate Workflow:**
50 | * Save and activate the workflow in n8n. The workflow will run on the defined schedule and can also be triggered manually as needed.
51 |
52 | ## Usage
53 |
54 | 1. **Scrape X Posts:** The workflow will automatically fetch and store new X posts on schedule.
55 | 2. **Generate LinkedIn Content:** AI will generate LinkedIn-ready posts from the scraped X content.
56 | 3. **Review & Approve:** Review generated posts in Google Sheets. Approve or edit as needed.
57 | 4. **Schedule/Publish:** Approved posts are scheduled for posting to LinkedIn (if integrated) or can be posted manually.
58 | 5. **Notifications:** Receive Telegram notifications when new posts are available for review or posting.
59 |
60 | ## Workflow Structure
61 |
62 | * **Scheduled Scraping Path:** `Schedule Trigger` -> `Get AI Tweets (RapidAPI)` -> `Clean Tweets` -> `Deduplication (Find Existing Tweet)` -> `Save New Tweet (Google Sheets)`
63 | * **AI Generation Path:** `Limit` -> `AI Agent (AI Model)` -> `Loop Posts` -> `Aggregate` -> `Telegram Notification`
64 | * **Approval & Posting Path:** `Google Sheets Trigger` -> `Filter Approved` -> `Max 20` -> `Get Post Timings` -> `Loop Approved Posts` -> `Update User/Wait for Posting` -> `Set Posting (Google Sheets)`
65 | * **Data Storage:** All input and output is managed via Google Sheets for easy access and review.
66 |
67 | ## Cost Considerations (Potentially Free)
68 |
69 | This workflow can be run essentially for free, depending on the usage volume and chosen services:
70 |
71 | * **n8n:** Can be self-hosted or used via n8n Cloud (free tier available).
72 | * **Google Sheets:** Free for moderate usage within Google account limits.
73 | * **RapidAPI:** Free tier available, but scraping X (Twitter) may incur costs depending on volume.
74 | * **AI Model:** May incur costs depending on API/model usage; check your provider's pricing.
75 | * **Telegram:** Free for notifications.
76 |
77 | **Note:** Costs may be incurred if you exceed free tier limits of any service or use paid AI models.
78 |
79 | ## Customization
80 |
81 | * **Changing Data Source:**
82 | * Replace Google Sheets nodes with your preferred data source (e.g., Airtable) and update field mappings accordingly.
83 | * **Changing AI Models:**
84 | * Swap out the AI Agent node for your preferred AI provider (e.g., OpenAI, Anthropic) and adjust prompts as needed.
85 | * **LinkedIn Integration:**
86 | * Add LinkedIn API nodes to automate posting directly to LinkedIn.
87 | * **Adjusting Output:**
88 | * Modify the output Google Sheet structure or add additional columns as required for your workflow.
89 |
--------------------------------------------------------------------------------
/Personal-Assistant-Video/Youtube Agent (architjn.com).json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Youtube Agent (architjn.com)",
3 | "nodes": [
4 | {
5 | "parameters": {
6 | "workflowInputs": {
7 | "values": [
8 | {
9 | "name": "query"
10 | }
11 | ]
12 | }
13 | },
14 | "type": "n8n-nodes-base.executeWorkflowTrigger",
15 | "typeVersion": 1.1,
16 | "position": [
17 | 0,
18 | 0
19 | ],
20 | "id": "2b4e3f32-ab4d-4c89-987a-efaf5567c31e",
21 | "name": "When Executed by Another Workflow"
22 | },
23 | {
24 | "parameters": {
25 | "options": {}
26 | },
27 | "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
28 | "typeVersion": 1,
29 | "position": [
30 | 80,
31 | 220
32 | ],
33 | "id": "dffc3659-8d10-4a8a-a754-186701a93a80",
34 | "name": "OpenRouter Chat Model",
35 | "credentials": {
36 | "openRouterApi": {
37 | "id": "CGW0UD2Uwkzjnlyv",
38 | "name": "OpenRouter account"
39 | }
40 | }
41 | },
42 | {
43 | "parameters": {
44 | "description": "Call this tool to get the information about the youtube channel assigned.",
45 | "workflowId": {
46 | "__rl": true,
47 | "value": "TZ3tGTvdrzlDeafI",
48 | "mode": "list",
49 | "cachedResultName": "Youtube Knowledge (architjn)"
50 | },
51 | "workflowInputs": {
52 | "mappingMode": "defineBelow",
53 | "value": {
54 | "type": "channel info"
55 | },
56 | "matchingColumns": [
57 | "video query"
58 | ],
59 | "schema": [
60 | {
61 | "id": "type",
62 | "displayName": "type",
63 | "required": false,
64 | "defaultMatch": false,
65 | "display": true,
66 | "canBeUsedToMatch": true,
67 | "type": "string",
68 | "removed": false
69 | },
70 | {
71 | "id": "video query",
72 | "displayName": "video query",
73 | "required": false,
74 | "defaultMatch": false,
75 | "display": true,
76 | "canBeUsedToMatch": true,
77 | "type": "string",
78 | "removed": true
79 | }
80 | ],
81 | "attemptToConvertTypes": false,
82 | "convertFieldsToString": false
83 | }
84 | },
85 | "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
86 | "typeVersion": 2.2,
87 | "position": [
88 | 340,
89 | 220
90 | ],
91 | "id": "6dd79b0a-276f-484d-a396-241bd245af85",
92 | "name": "Youtube Channel Info"
93 | },
94 | {
95 | "parameters": {
96 | "description": "Call this tool to get the information about the videos in the youtube channel. This tool takes video query as input which is search query performed on youtube on a specific channel.",
97 | "workflowId": {
98 | "__rl": true,
99 | "value": "TZ3tGTvdrzlDeafI",
100 | "mode": "list",
101 | "cachedResultName": "Youtube Knowledge (architjn)"
102 | },
103 | "workflowInputs": {
104 | "mappingMode": "defineBelow",
105 | "value": {
106 | "video query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('video_query', `search query to filter out videos on specified youtube channel. query can be small and direct to the point. This is only needed when type is \"search channel\" otherwise it can be blank`, 'string') }}",
107 | "type": "search channel"
108 | },
109 | "matchingColumns": [
110 | "video query"
111 | ],
112 | "schema": [
113 | {
114 | "id": "type",
115 | "displayName": "type",
116 | "required": false,
117 | "defaultMatch": false,
118 | "display": true,
119 | "canBeUsedToMatch": true,
120 | "type": "string",
121 | "removed": false
122 | },
123 | {
124 | "id": "video query",
125 | "displayName": "video query",
126 | "required": false,
127 | "defaultMatch": false,
128 | "display": true,
129 | "canBeUsedToMatch": true,
130 | "type": "string",
131 | "removed": false
132 | }
133 | ],
134 | "attemptToConvertTypes": false,
135 | "convertFieldsToString": false
136 | }
137 | },
138 | "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
139 | "typeVersion": 2.2,
140 | "position": [
141 | 520,
142 | 220
143 | ],
144 | "id": "180c0622-f306-47cd-ad80-7a3632dd5a0f",
145 | "name": "Youtube Channel Videos"
146 | },
147 | {
148 | "parameters": {
149 | "promptType": "define",
150 | "text": "={{ $json.query }}",
151 | "options": {
152 | "systemMessage": "=You are a youtube channel assistant for the channel assigned.\n\nYou have access to various tools, you can use them to get the desired information\n\n## Instructions\n- You must use tools to get the information required\n\n## Tools\n### Youtube Channel Info\n- This tool tells you which channel is assigned to you.\n- You can use \"Youtube Channel Info\" tool to get the channel info.\n\n### Youtube Channel Videos\nYou can use \"Youtube Channel Videos\" tool to get the channel videos."
153 | }
154 | },
155 | "type": "@n8n/n8n-nodes-langchain.agent",
156 | "typeVersion": 2,
157 | "position": [
158 | 220,
159 | 0
160 | ],
161 | "id": "954c515c-703e-4b8f-9fea-8d6e3a870a7a",
162 | "name": "Youtube Agent"
163 | }
164 | ],
165 | "pinData": {
166 | "When Executed by Another Workflow": [
167 | {
168 | "json": {
169 | "query": "Do you have any youtube channel?"
170 | }
171 | }
172 | ]
173 | },
174 | "connections": {
175 | "When Executed by Another Workflow": {
176 | "main": [
177 | [
178 | {
179 | "node": "Youtube Agent",
180 | "type": "main",
181 | "index": 0
182 | }
183 | ]
184 | ]
185 | },
186 | "OpenRouter Chat Model": {
187 | "ai_languageModel": [
188 | [
189 | {
190 | "node": "Youtube Agent",
191 | "type": "ai_languageModel",
192 | "index": 0
193 | }
194 | ]
195 | ]
196 | },
197 | "Youtube Channel Info": {
198 | "ai_tool": [
199 | [
200 | {
201 | "node": "Youtube Agent",
202 | "type": "ai_tool",
203 | "index": 0
204 | }
205 | ]
206 | ]
207 | },
208 | "Youtube Channel Videos": {
209 | "ai_tool": [
210 | [
211 | {
212 | "node": "Youtube Agent",
213 | "type": "ai_tool",
214 | "index": 0
215 | }
216 | ]
217 | ]
218 | }
219 | },
220 | "active": false,
221 | "settings": {
222 | "executionOrder": "v1"
223 | },
224 | "versionId": "83bac678-86f9-4b88-b172-cb73dfc7e087",
225 | "meta": {
226 | "templateCredsSetupCompleted": true,
227 | "instanceId": "933df83c84196d70ce3ffd0bf5d3e1aca31b7366f2f84e1f3482640096e4a3a9"
228 | },
229 | "id": "AVXSMnXdoqa2Hf91",
230 | "tags": []
231 | }
--------------------------------------------------------------------------------
/Personal-Assistant-Video/Architjn.com Agent.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Architjn.com Agent",
3 | "nodes": [
4 | {
5 | "parameters": {
6 | "path": "bf662133-bbf5-42b6-8e9d-169c7a1b9d3a",
7 | "responseMode": "responseNode",
8 | "options": {}
9 | },
10 | "type": "n8n-nodes-base.webhook",
11 | "typeVersion": 2,
12 | "position": [
13 | 0,
14 | 0
15 | ],
16 | "id": "7f904bcb-b959-47a8-b209-c3876e53bf62",
17 | "name": "Webhook",
18 | "webhookId": "bf662133-bbf5-42b6-8e9d-169c7a1b9d3a"
19 | },
20 | {
21 | "parameters": {
22 | "options": {}
23 | },
24 | "type": "n8n-nodes-base.respondToWebhook",
25 | "typeVersion": 1.3,
26 | "position": [
27 | 800,
28 | 0
29 | ],
30 | "id": "237a2fa3-d7e2-4ca2-acb1-38702a2fb44a",
31 | "name": "Respond to Webhook"
32 | },
33 | {
34 | "parameters": {
35 | "promptType": "define",
36 | "text": "={{ $('Webhook').item.json.body.query }}",
37 | "options": {
38 | "systemMessage": "=You are a impersonating {{ $json['user name'] }}'s assistant.\n\nYou have access to tools."
39 | }
40 | },
41 | "type": "@n8n/n8n-nodes-langchain.agent",
42 | "typeVersion": 2,
43 | "position": [
44 | 440,
45 | 0
46 | ],
47 | "id": "5b9b5b41-0258-4150-b4a4-ff1b9e6fec52",
48 | "name": "Architjn.com Agent"
49 | },
50 | {
51 | "parameters": {
52 | "sessionIdType": "customKey",
53 | "sessionKey": "={{ $('Webhook').item.json.body.sessionId }}",
54 | "databaseName": "architjn_website"
55 | },
56 | "type": "@n8n/n8n-nodes-langchain.memoryMongoDbChat",
57 | "typeVersion": 1,
58 | "position": [
59 | 440,
60 | 260
61 | ],
62 | "id": "2ece3c97-c074-463f-8d70-fce649720491",
63 | "name": "MongoDB Chat Memory",
64 | "credentials": {
65 | "mongoDb": {
66 | "id": "n6weSJULTJxTCHoO",
67 | "name": "MongoDB account"
68 | }
69 | }
70 | },
71 | {
72 | "parameters": {
73 | "model": "openai/gpt-4.1-nano",
74 | "options": {}
75 | },
76 | "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
77 | "typeVersion": 1,
78 | "position": [
79 | 280,
80 | 260
81 | ],
82 | "id": "3f576850-830e-42a3-aef1-1d3117786daa",
83 | "name": "oAI",
84 | "credentials": {
85 | "openRouterApi": {
86 | "id": "CGW0UD2Uwkzjnlyv",
87 | "name": "OpenRouter account"
88 | }
89 | }
90 | },
91 | {
92 | "parameters": {
93 | "description": "Call this tool to get the youtube videos you have on the channel.",
94 | "workflowId": {
95 | "__rl": true,
96 | "value": "AVXSMnXdoqa2Hf91",
97 | "mode": "list",
98 | "cachedResultName": "Youtube Agent (architjn.com)"
99 | },
100 | "workflowInputs": {
101 | "mappingMode": "defineBelow",
102 | "value": {
103 | "query": "={{ $('Webhook').item.json.body.query }}"
104 | },
105 | "matchingColumns": [
106 | "query"
107 | ],
108 | "schema": [
109 | {
110 | "id": "query",
111 | "displayName": "query",
112 | "required": false,
113 | "defaultMatch": false,
114 | "display": true,
115 | "canBeUsedToMatch": true,
116 | "type": "string",
117 | "removed": false
118 | }
119 | ],
120 | "attemptToConvertTypes": false,
121 | "convertFieldsToString": false
122 | }
123 | },
124 | "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
125 | "typeVersion": 2.2,
126 | "position": [
127 | 680,
128 | 260
129 | ],
130 | "id": "47a2213a-f17a-4fb4-a0a1-6f509764c6f2",
131 | "name": "Youtube Channel"
132 | },
133 | {
134 | "parameters": {
135 | "assignments": {
136 | "assignments": [
137 | {
138 | "id": "4239faf1-eaa9-4f41-8b4c-303f597ecadf",
139 | "name": "user name",
140 | "value": "Archit Jain",
141 | "type": "string"
142 | }
143 | ]
144 | },
145 | "options": {}
146 | },
147 | "type": "n8n-nodes-base.set",
148 | "typeVersion": 3.4,
149 | "position": [
150 | 220,
151 | 0
152 | ],
153 | "id": "80dced2f-ccbf-424d-a70a-69b75fe91e9b",
154 | "name": "User Info"
155 | }
156 | ],
157 | "pinData": {
158 | "Webhook": [
159 | {
160 | "json": {
161 | "headers": {
162 | "connection": "upgrade",
163 | "host": "n8n.architjn.com",
164 | "x-real-ip": "49.36.189.84",
165 | "x-forwarded-for": "49.36.189.84",
166 | "x-forwarded-proto": "https",
167 | "content-length": "83",
168 | "content-type": "application/json",
169 | "user-agent": "PostmanRuntime/7.44.1",
170 | "accept": "*/*",
171 | "cache-control": "no-cache",
172 | "postman-token": "edab0698-99a3-4a39-84e3-a4aa0162e67a",
173 | "accept-encoding": "gzip, deflate, br"
174 | },
175 | "params": {},
176 | "query": {},
177 | "body": {
178 | "query": "Do you have any youtube channel?",
179 | "sessionId": "X0Ti4V&!4I$"
180 | },
181 | "webhookUrl": "https://n8n.architjn.com/webhook/bf662133-bbf5-42b6-8e9d-169c7a1b9d3a",
182 | "executionMode": "production"
183 | }
184 | }
185 | ]
186 | },
187 | "connections": {
188 | "Webhook": {
189 | "main": [
190 | [
191 | {
192 | "node": "User Info",
193 | "type": "main",
194 | "index": 0
195 | }
196 | ]
197 | ]
198 | },
199 | "Architjn.com Agent": {
200 | "main": [
201 | [
202 | {
203 | "node": "Respond to Webhook",
204 | "type": "main",
205 | "index": 0
206 | }
207 | ]
208 | ]
209 | },
210 | "MongoDB Chat Memory": {
211 | "ai_memory": [
212 | [
213 | {
214 | "node": "Architjn.com Agent",
215 | "type": "ai_memory",
216 | "index": 0
217 | }
218 | ]
219 | ]
220 | },
221 | "oAI": {
222 | "ai_languageModel": [
223 | [
224 | {
225 | "node": "Architjn.com Agent",
226 | "type": "ai_languageModel",
227 | "index": 0
228 | }
229 | ]
230 | ]
231 | },
232 | "Youtube Channel": {
233 | "ai_tool": [
234 | [
235 | {
236 | "node": "Architjn.com Agent",
237 | "type": "ai_tool",
238 | "index": 0
239 | }
240 | ]
241 | ]
242 | },
243 | "User Info": {
244 | "main": [
245 | [
246 | {
247 | "node": "Architjn.com Agent",
248 | "type": "main",
249 | "index": 0
250 | }
251 | ]
252 | ]
253 | }
254 | },
255 | "active": true,
256 | "settings": {
257 | "executionOrder": "v1"
258 | },
259 | "versionId": "495ceaa5-2034-42dc-b562-63fa84c2496f",
260 | "meta": {
261 | "templateCredsSetupCompleted": true,
262 | "instanceId": "933df83c84196d70ce3ffd0bf5d3e1aca31b7366f2f84e1f3482640096e4a3a9"
263 | },
264 | "id": "s1ZvsCwnoBGj6kit",
265 | "tags": []
266 | }
--------------------------------------------------------------------------------
/Cold-Mailing-v0.1/README.md:
--------------------------------------------------------------------------------
1 | # Cold Mailing n8n Workflow
2 |
3 | This workflow automates the process of generating and sending personalized cold emails using AI, leveraging Airtable for contact management and status tracking.
4 |
5 | ## Overview
6 |
7 | The workflow operates in two main parts:
8 | 1. **Email Generation:** Triggered manually, it fetches a contact record marked as 'Pending' from Airtable, generates a personalized email body and subject line using AI (OpenRouter), and updates the Airtable record with the generated content and sets the status to 'Approval Pending'.
9 | 2. **Email Sending:** Triggered on a schedule, it fetches contact records marked as 'Approved' from Airtable, updates their status to 'Sending', sends the email using the pre-generated content, and finally updates the status to 'Sent'.
10 |
11 | ## Features
12 |
13 | * Fetches contact data from an Airtable base.
14 | * Uses AI (via OpenRouter models) to generate personalized email copy based on contact details (company, name, industry, location, job title, etc.).
15 | * Generates catchy, professional subject lines using AI.
16 | * Integrates a manual approval step within Airtable ('Approval Pending' -> 'Approved').
17 | * Sends emails via SMTP on a defined schedule for approved contacts.
18 | * Tracks the status of each email ('Pending', 'Approval Pending', 'Approved', 'Sending', 'Sent') in Airtable.
19 |
20 | ## Prerequisites
21 |
22 | 1. **Airtable Base:**
23 | * An Airtable base and table configured to store contact information.
24 | * Required fields (names may vary slightly based on your specific Airtable setup, check node configurations):
25 | * `status`: Single select field with options: `Pending`, `Approval Pending`, `Approved`, `Sending`, `Sent`.
26 | * `Email`: Email field for the recipient's address.
27 | * `email_subject`: Text field to store the generated subject line.
28 | * `email_copy`: Long text field to store the generated email body.
29 | * Fields used for personalization in the AI prompts (e.g., `company_cleaned`, `firstname_cleaned`, `lastname_cleaned`, `industry`, `location`, `job`, `company_website`, `company_industry`, `company_location`, `company_employee_count`).
30 | * `id`: The Airtable Record ID (used for matching during updates).
31 | * Airtable API Credentials configured in n8n.
32 | 2. **OpenRouter:**
33 | * An OpenRouter account and API key.
34 | * OpenRouter Credentials configured in n8n.
35 | 3. **SMTP Server:**
36 | * An SMTP service (e.g., Mailgun, SendGrid) configured for sending emails.
37 | * SMTP Credentials configured in n8n.
38 |
39 | ## Setup
40 |
41 | 1. **Import Workflow:** Import the `Cold_Mailing.json` file into your n8n instance.
42 | 2. **Configure Credentials:**
43 | * Navigate to the Credentials section in your n8n settings.
44 | * Add new credentials for:
45 | * **Airtable (API Token):** Use your Airtable Personal Access Token. Select this credential in all `Airtable` nodes (`Airtable1`, `Get Approved Message`, `Sending Status Change`, `Email Sent Status Change`, `Airtable2`).
46 | * **OpenRouter:** Use your OpenRouter API key. Select this credential in the `OpenRouter Chat Model` nodes (`OpenRouter Chat Model`, `OpenRouter Chat Model1`).
47 | * **SMTP:** Configure your SMTP provider details (host, port, user, password). Select this credential in the `Send Email` node.
48 | 3. **Prepare Airtable:** Ensure your Airtable base is set up according to the details mentioned in the **Prerequisites** section. Update the Base ID and Table ID in the `Airtable` nodes within the workflow to match your specific Airtable setup if they differ from the defaults.
49 | 4. **Review Node Settings:** Double-check the settings within each node, particularly the Airtable nodes (field mappings, filter formulas) and the `Send Email` node (From Email), to ensure they match your requirements.
50 | 5. **Activate Workflow:** Save and activate the workflow in n8n. The scheduled part will start running based on the "Schedule Trigger" settings, and the manual part can be triggered as needed.
51 |
52 | ## Usage
53 |
54 | 1. **Populate Airtable:** Add contact records to your Airtable table with their status initially set to `Pending`.
55 | 2. **Generate Emails:** Manually trigger the workflow (using the "When clicking 'Test workflow'" node or by running the workflow manually). This will process one 'Pending' record, generate the email/subject, and update its status to `Approval Pending`. Repeat as needed for other pending contacts.
56 | 3. **Approve Emails:** Review the `email_copy` and `email_subject` fields in Airtable for records with status `Approval Pending`. If satisfied, change the status to `Approved`.
57 | 4. **Activate Schedule:** Ensure the "Schedule Trigger" node is active and configured to run at your desired frequency (e.g., every 15 minutes, daily).
58 | 5. **Automatic Sending:** The scheduled workflow will automatically pick up `Approved` records, send the emails, and update their status to `Sent`.
59 |
60 | ## Workflow Structure
61 |
62 | * **Manual Trigger Path:** `Manual Trigger` -> `Airtable1 (Get Pending)` -> `AI Agent (Generate Body)` -> `Basic LLM Chain (Generate Subject)` -> `Airtable2 (Update to Approval Pending)`
63 | * **Scheduled Trigger Path:** `Schedule Trigger` -> `Get Approved Message` -> `Sending Status Change` -> `Send Email` -> `Email Sent Status Change`
64 | * **AI Models:** `OpenRouter Chat Model` and `OpenRouter Chat Model1` provide the language models for the AI Agent and LLM Chain respectively.
65 |
66 | ## Cost Considerations (Potentially Free)
67 |
68 | This workflow can be run essentially for free, depending on the usage volume and chosen services:
69 |
70 | * **n8n:** The workflow platform itself can be self-hosted (requiring your own infrastructure costs) or used via n8n's cloud offering, which has a free tier suitable for many use cases.
71 | * **Airtable:** Airtable provides a generous free tier with limits on records per base and API calls per month. This workflow is likely to operate within these limits for moderate usage.
72 | * **AI Model (OpenRouter):** The workflow is currently configured to use a free model (`deepseek/deepseek-r1:free`) via OpenRouter. OpenRouter offers access to various models, including several free options. As long as you stick to free models, there's no cost here.
73 | * **SMTP Service:** Many email providers (like Mailgun, SendGrid, Brevo/Sendinblue) offer free tiers that allow sending hundreds or thousands of emails per month, which is often sufficient for cold outreach campaigns.
74 |
75 | **Note:** Costs may be incurred if you exceed the free tier limits of Airtable or your SMTP provider, choose to use paid AI models via OpenRouter, or opt for a paid n8n cloud plan.
76 |
77 | ## Customization
78 |
79 | * **Changing Data Source (e.g., to Google Sheets):**
80 | * Replace the `Airtable` nodes (`Airtable1`, `Get Approved Message`, `Sending Status Change`, `Email Sent Status Change`, `Airtable2`) with the corresponding nodes for your desired data source (e.g., `Google Sheets`).
81 | * Update the data mapping and filtering logic within the new nodes to match the structure of your spreadsheet and the workflow's requirements (fetching pending/approved records, updating status, storing generated content).
82 | * Ensure the expressions referencing data from the previous Airtable nodes (like `{{ $('Airtable1').item.json.id }}` or `{{ $json.fields.Email }}`) are updated to use the correct data structure from the new nodes.
83 | * **Changing AI Models:**
84 | * Replace the `OpenRouter Chat Model` nodes (`OpenRouter Chat Model`, `OpenRouter Chat Model1`) with nodes for your preferred AI provider (e.g., `OpenAI Chat Model`, `Anthropic Chat Model`).
85 | * Configure the new AI model nodes with your credentials and desired model parameters.
86 | * Adjust the prompts in the `AI Agent` and `Basic LLM Chain` nodes if necessary to optimize for the new models.
87 |
--------------------------------------------------------------------------------
/ElevenLabs-Chatbot/Website_Chatbot_Elevenlabs.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Website Chatbot Elevenlabs",
3 | "nodes": [
4 | {
5 | "parameters": {
6 | "promptType": "define",
7 | "text": "={{ $json.body.message }}",
8 | "options": {
9 | "systemMessage": "=```xml\n\nYou are a website knowledge base assistant, you complete any user request by checking the website content if it matches the user request.\n\n\n\nwebsite base url - https://www.architjn.com\nwebsite sitemap url - https://www.architjn.com/sitemap.xml\n\n\n\n1. First step must be to get the sitemap of the website.\n2. MUST shorlist three best URL match according to the request.\n3. MUST check all those three shortlisted URLs for the content of the page and extract the relevant infromation.\n4. MUST revisit the relevant information extracted to find the best suited response for the user's original request.\n5. You MUST not include all the information fetched, only include whichever is actually matches the user's request.\n - You should score each information with a score out of hundred\n - You must only add information which is above 75 in relevance to the user's request.\n6. MUST provide the user a clear and clean answer. Should be crisp.\n7. MUST not include any process of finding the information.\n8. MUST add citations with each answer.\n9. MUST answer as if you're part of the website team. You need to talk as first person using \"we\" wherever necessary. Like \"we have this\", \"we think this is possible like this\", etc.\n10. Answers must be short and crisp, until asked to be long.\n\n\n\n1. MUST be in markdown format.\n2. MUST use citation as [1] or [2], depending on how many are there.\n3. MUST use clickable links for citations in format which markdown supports like [[1]](SITE_URL)\n\n\n\n \n What's the best n8n usecase?\n \n\n"
10 | }
11 | },
12 | "type": "@n8n/n8n-nodes-langchain.agent",
13 | "typeVersion": 2,
14 | "position": [
15 | 312,
16 | 0
17 | ],
18 | "id": "4f2dd72b-4d90-4485-a09f-1083126d39cf",
19 | "name": "Support Agent"
20 | },
21 | {
22 | "parameters": {
23 | "model": "openai/gpt-4.1-nano",
24 | "options": {}
25 | },
26 | "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
27 | "typeVersion": 1,
28 | "position": [
29 | 180,
30 | 220
31 | ],
32 | "id": "910b057e-9ff8-4e05-9fc5-1913802b173d",
33 | "name": "OpenRouter Chat Model",
34 | "credentials": {
35 | "openRouterApi": {
36 | "id": "CGW0UD2Uwkzjnlyv",
37 | "name": "OpenRouter account"
38 | }
39 | }
40 | },
41 | {
42 | "parameters": {
43 | "toolDescription": "Get's the content of a webpage from the specified URL.",
44 | "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `any url with the full URL including https\nit only takes absolute url.`, 'string') }}",
45 | "options": {}
46 | },
47 | "type": "n8n-nodes-base.httpRequestTool",
48 | "typeVersion": 4.2,
49 | "position": [
50 | 540,
51 | 220
52 | ],
53 | "id": "6554c89d-b347-4230-8a1a-3315f5348b90",
54 | "name": "Website Content"
55 | },
56 | {
57 | "parameters": {
58 | "toolDescription": "Use this tool to get the website's sitemap. This takes sitemap link as input for URL and returns the sitemap of the website in XML",
59 | "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `complete URL with https and full path to sitemap`, 'string') }}",
60 | "options": {}
61 | },
62 | "type": "n8n-nodes-base.httpRequestTool",
63 | "typeVersion": 4.2,
64 | "position": [
65 | 700,
66 | 220
67 | ],
68 | "id": "3bb5c20e-7bf1-4d75-83f1-8cb5f664c1e9",
69 | "name": "Website Sitemap"
70 | },
71 | {
72 | "parameters": {
73 | "sessionIdType": "customKey",
74 | "sessionKey": "={{ $('Webhook').item.json.body.uuid }}"
75 | },
76 | "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
77 | "typeVersion": 1.3,
78 | "position": [
79 | 360,
80 | 220
81 | ],
82 | "id": "4f9c9df5-6d75-475d-94ac-6d611410b5a8",
83 | "name": "Simple Memory"
84 | },
85 | {
86 | "parameters": {
87 | "httpMethod": "POST",
88 | "path": "26f20c01-d8a0-408c-9d24-df3a8076e784",
89 | "responseMode": "responseNode",
90 | "options": {}
91 | },
92 | "type": "n8n-nodes-base.webhook",
93 | "typeVersion": 2,
94 | "position": [
95 | 0,
96 | 0
97 | ],
98 | "id": "0819452e-3360-4a4b-8f09-ed1419c48ff7",
99 | "name": "Webhook",
100 | "webhookId": "26f20c01-d8a0-408c-9d24-df3a8076e784"
101 | },
102 | {
103 | "parameters": {
104 | "options": {}
105 | },
106 | "type": "n8n-nodes-base.respondToWebhook",
107 | "typeVersion": 1.3,
108 | "position": [
109 | 680,
110 | 0
111 | ],
112 | "id": "c9aefa5b-b70e-4444-93cf-61e5087eb125",
113 | "name": "Respond to Webhook"
114 | }
115 | ],
116 | "pinData": {
117 | "Webhook": [
118 | {
119 | "json": {
120 | "headers": {
121 | "connection": "upgrade",
122 | "host": "n8n.architjn.com",
123 | "x-real-ip": "34.59.11.47",
124 | "x-forwarded-for": "34.59.11.47",
125 | "x-forwarded-proto": "https",
126 | "content-length": "83",
127 | "accept": "*/*",
128 | "accept-encoding": "gzip, deflate",
129 | "user-agent": "Python/3.12 aiohttp/3.11.16",
130 | "content-type": "application/json"
131 | },
132 | "params": {},
133 | "query": {},
134 | "body": {
135 | "message": "How to set up Any10?",
136 | "uuid": "b46919cb-b949-4951-9499-59290c4e8253"
137 | },
138 | "webhookUrl": "https://n8n.architjn.com/webhook/26f20c01-d8a0-408c-9d24-df3a8076e784",
139 | "executionMode": "production"
140 | }
141 | }
142 | ]
143 | },
144 | "connections": {
145 | "OpenRouter Chat Model": {
146 | "ai_languageModel": [
147 | [
148 | {
149 | "node": "Support Agent",
150 | "type": "ai_languageModel",
151 | "index": 0
152 | }
153 | ]
154 | ]
155 | },
156 | "Website Content": {
157 | "ai_tool": [
158 | [
159 | {
160 | "node": "Support Agent",
161 | "type": "ai_tool",
162 | "index": 0
163 | }
164 | ]
165 | ]
166 | },
167 | "Website Sitemap": {
168 | "ai_tool": [
169 | [
170 | {
171 | "node": "Support Agent",
172 | "type": "ai_tool",
173 | "index": 0
174 | }
175 | ]
176 | ]
177 | },
178 | "Simple Memory": {
179 | "ai_memory": [
180 | [
181 | {
182 | "node": "Support Agent",
183 | "type": "ai_memory",
184 | "index": 0
185 | }
186 | ]
187 | ]
188 | },
189 | "Webhook": {
190 | "main": [
191 | [
192 | {
193 | "node": "Support Agent",
194 | "type": "main",
195 | "index": 0
196 | }
197 | ]
198 | ]
199 | },
200 | "Support Agent": {
201 | "main": [
202 | [
203 | {
204 | "node": "Respond to Webhook",
205 | "type": "main",
206 | "index": 0
207 | }
208 | ]
209 | ]
210 | }
211 | },
212 | "active": true,
213 | "settings": {
214 | "executionOrder": "v1"
215 | },
216 | "versionId": "f540aa02-c010-4f47-9c19-3bbac2a5f50a",
217 | "meta": {
218 | "templateCredsSetupCompleted": true,
219 | "instanceId": "933df83c84196d70ce3ffd0bf5d3e1aca31b7366f2f84e1f3482640096e4a3a9"
220 | },
221 | "id": "7TqokjUZkh435SCL",
222 | "tags": []
223 | }
--------------------------------------------------------------------------------
/Personal-Assistant-Video/Youtube Knowledge (architjn).json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Youtube Knowledge (architjn)",
3 | "nodes": [
4 | {
5 | "parameters": {
6 | "resource": "video",
7 | "filters": {
8 | "channelId": "={{ $json['channel id'] }}",
9 | "q": "={{ $json['video query'] }}"
10 | },
11 | "options": {
12 | "order": "relevance"
13 | }
14 | },
15 | "type": "n8n-nodes-base.youTube",
16 | "typeVersion": 1,
17 | "position": [
18 | 700,
19 | -120
20 | ],
21 | "id": "96b14fa7-3e06-4330-9d6c-ceafd9b26157",
22 | "name": "Find Video",
23 | "credentials": {
24 | "youTubeOAuth2Api": {
25 | "id": "5t2G133mYC1jE3ti",
26 | "name": "YouTube Architjn"
27 | }
28 | }
29 | },
30 | {
31 | "parameters": {
32 | "workflowInputs": {
33 | "values": [
34 | {
35 | "name": "type"
36 | },
37 | {
38 | "name": "video query"
39 | }
40 | ]
41 | }
42 | },
43 | "type": "n8n-nodes-base.executeWorkflowTrigger",
44 | "typeVersion": 1.1,
45 | "position": [
46 | 0,
47 | 0
48 | ],
49 | "id": "6afa60dc-ad82-460e-ab28-1da4d6e2e836",
50 | "name": "When Executed by Another Workflow"
51 | },
52 | {
53 | "parameters": {
54 | "assignments": {
55 | "assignments": [
56 | {
57 | "id": "0c4681ac-2393-4229-8b13-c882a5d99ef3",
58 | "name": "Title",
59 | "value": "={{ $json.snippet.title }}",
60 | "type": "string"
61 | },
62 | {
63 | "id": "6485c911-d244-43fb-a89f-29d6bb578622",
64 | "name": "description",
65 | "value": "={{ $json.snippet.description }}",
66 | "type": "string"
67 | },
68 | {
69 | "id": "2920a3db-d1f6-4c9a-9450-59f5bb390a78",
70 | "name": "publish-date",
71 | "value": "={{ $json.snippet.publishTime }}",
72 | "type": "string"
73 | },
74 | {
75 | "id": "0a80f67a-a352-4341-a505-3a9d1f245c99",
76 | "name": "video-link",
77 | "value": "=https://youtu.be/{{ $json.id.videoId }}",
78 | "type": "string"
79 | }
80 | ]
81 | },
82 | "options": {}
83 | },
84 | "type": "n8n-nodes-base.set",
85 | "typeVersion": 3.4,
86 | "position": [
87 | 940,
88 | -140
89 | ],
90 | "id": "d927f959-0adb-495a-8c44-bc24e9230a40",
91 | "name": "Video Details"
92 | },
93 | {
94 | "parameters": {
95 | "rules": {
96 | "values": [
97 | {
98 | "conditions": {
99 | "options": {
100 | "caseSensitive": true,
101 | "leftValue": "",
102 | "typeValidation": "strict",
103 | "version": 2
104 | },
105 | "conditions": [
106 | {
107 | "leftValue": "={{ $('When Executed by Another Workflow').item.json.type }}",
108 | "rightValue": "search channel",
109 | "operator": {
110 | "type": "string",
111 | "operation": "equals"
112 | },
113 | "id": "8f560a45-a454-4a41-9617-85c8bb3ebc5e"
114 | }
115 | ],
116 | "combinator": "and"
117 | },
118 | "renameOutput": true,
119 | "outputKey": "Search"
120 | },
121 | {
122 | "conditions": {
123 | "options": {
124 | "caseSensitive": true,
125 | "leftValue": "",
126 | "typeValidation": "strict",
127 | "version": 2
128 | },
129 | "conditions": [
130 | {
131 | "id": "340ae224-a226-448b-946f-7c615a20cb55",
132 | "leftValue": "={{ $('When Executed by Another Workflow').item.json.type }}",
133 | "rightValue": "channel info",
134 | "operator": {
135 | "type": "string",
136 | "operation": "equals",
137 | "name": "filter.operator.equals"
138 | }
139 | }
140 | ],
141 | "combinator": "and"
142 | },
143 | "renameOutput": true,
144 | "outputKey": "Info"
145 | }
146 | ]
147 | },
148 | "options": {}
149 | },
150 | "type": "n8n-nodes-base.switch",
151 | "typeVersion": 3.2,
152 | "position": [
153 | 440,
154 | 0
155 | ],
156 | "id": "2d87b2c8-0bbe-44b7-870c-38dfceef25fa",
157 | "name": "Switch"
158 | },
159 | {
160 | "parameters": {
161 | "operation": "get",
162 | "channelId": "={{ $json['channel id'] }}"
163 | },
164 | "type": "n8n-nodes-base.youTube",
165 | "typeVersion": 1,
166 | "position": [
167 | 900,
168 | 140
169 | ],
170 | "id": "d76b4853-101f-42f6-97fa-5ce11ec3a6a2",
171 | "name": "Get a channel",
172 | "credentials": {
173 | "youTubeOAuth2Api": {
174 | "id": "5t2G133mYC1jE3ti",
175 | "name": "YouTube Architjn"
176 | }
177 | }
178 | },
179 | {
180 | "parameters": {
181 | "assignments": {
182 | "assignments": [
183 | {
184 | "id": "601f5cc5-b802-4178-84b6-ffa610e0cbe7",
185 | "name": "channel id",
186 | "value": "UCQUiHn9RLG3ofJxIt4imnBw",
187 | "type": "string"
188 | }
189 | ]
190 | },
191 | "options": {}
192 | },
193 | "type": "n8n-nodes-base.set",
194 | "typeVersion": 3.4,
195 | "position": [
196 | 220,
197 | 0
198 | ],
199 | "id": "2d76b660-ac1f-4ff4-9ffe-440188018f3e",
200 | "name": "Channel Info"
201 | },
202 | {
203 | "parameters": {
204 | "assignments": {
205 | "assignments": [
206 | {
207 | "id": "4a5694a1-a3a0-47ed-8444-f64c1f6768ad",
208 | "name": "Channel Name",
209 | "value": "={{ $json.brandingSettings.channel.title }}",
210 | "type": "string"
211 | },
212 | {
213 | "id": "cf7836f8-2d96-4163-a018-08afe8641a4c",
214 | "name": "Channel Custom URL",
215 | "value": "={{ $json.snippet.customUrl }}",
216 | "type": "string"
217 | },
218 | {
219 | "id": "2921eb2b-7bc3-4232-b677-9bdfefa370a4",
220 | "name": "total video count",
221 | "value": "={{ $json.statistics.videoCount }}",
222 | "type": "string"
223 | },
224 | {
225 | "id": "0b65188c-28d5-4c81-a114-b469eb21cf18",
226 | "name": "subscribers count",
227 | "value": "={{ $json.statistics.subscriberCount }}",
228 | "type": "string"
229 | }
230 | ]
231 | },
232 | "options": {}
233 | },
234 | "type": "n8n-nodes-base.set",
235 | "typeVersion": 3.4,
236 | "position": [
237 | 1120,
238 | 140
239 | ],
240 | "id": "daa4c61c-e17a-493e-9939-605f0ec360ba",
241 | "name": "Channel Details"
242 | }
243 | ],
244 | "pinData": {
245 | "When Executed by Another Workflow": [
246 | {
247 | "json": {
248 | "type": "search channel",
249 | "video query": "self hosting"
250 | }
251 | }
252 | ]
253 | },
254 | "connections": {
255 | "When Executed by Another Workflow": {
256 | "main": [
257 | [
258 | {
259 | "node": "Channel Info",
260 | "type": "main",
261 | "index": 0
262 | }
263 | ]
264 | ]
265 | },
266 | "Find Video": {
267 | "main": [
268 | [
269 | {
270 | "node": "Video Details",
271 | "type": "main",
272 | "index": 0
273 | }
274 | ]
275 | ]
276 | },
277 | "Switch": {
278 | "main": [
279 | [
280 | {
281 | "node": "Find Video",
282 | "type": "main",
283 | "index": 0
284 | }
285 | ],
286 | [
287 | {
288 | "node": "Get a channel",
289 | "type": "main",
290 | "index": 0
291 | }
292 | ]
293 | ]
294 | },
295 | "Channel Info": {
296 | "main": [
297 | [
298 | {
299 | "node": "Switch",
300 | "type": "main",
301 | "index": 0
302 | }
303 | ]
304 | ]
305 | },
306 | "Get a channel": {
307 | "main": [
308 | [
309 | {
310 | "node": "Channel Details",
311 | "type": "main",
312 | "index": 0
313 | }
314 | ]
315 | ]
316 | }
317 | },
318 | "active": false,
319 | "settings": {
320 | "executionOrder": "v1"
321 | },
322 | "versionId": "3c73be68-3a1c-4c2e-a7a4-aa336e7d5acb",
323 | "meta": {
324 | "templateCredsSetupCompleted": true,
325 | "instanceId": "933df83c84196d70ce3ffd0bf5d3e1aca31b7366f2f84e1f3482640096e4a3a9"
326 | },
327 | "id": "TZ3tGTvdrzlDeafI",
328 | "tags": []
329 | }
--------------------------------------------------------------------------------
/Lead-Gen-Copy/Get Leads for Free.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "get leads for free",
3 | "nodes": [
4 | {
5 | "parameters": {},
6 | "type": "n8n-nodes-base.manualTrigger",
7 | "typeVersion": 1,
8 | "position": [
9 | -300,
10 | -260
11 | ],
12 | "id": "c1ec5b01-0801-46ab-bbc5-bc592eea1e84",
13 | "name": "When clicking ‘Test workflow’"
14 | },
15 | {
16 | "parameters": {
17 | "assignments": {
18 | "assignments": [
19 | {
20 | "id": "6471a106-2e18-4ca6-980e-a024c4d42be8",
21 | "name": "website",
22 | "value": "https://www.yellowpages.com/search?search_terms=Dentists&geo_location_terms=New%20York%2C%20NY",
23 | "type": "string"
24 | },
25 | {
26 | "id": "a8c416f2-5410-4493-a1ed-d51282566216",
27 | "name": "pages",
28 | "value": "3",
29 | "type": "string"
30 | }
31 | ]
32 | },
33 | "options": {}
34 | },
35 | "type": "n8n-nodes-base.set",
36 | "typeVersion": 3.4,
37 | "position": [
38 | -20,
39 | -260
40 | ],
41 | "id": "1f0e8557-0331-4fc7-bc14-b9d53b52fe96",
42 | "name": "Website"
43 | },
44 | {
45 | "parameters": {
46 | "text": "={{ $json.results[0].content }}",
47 | "schemaType": "manual",
48 | "inputSchema": "{\n\t\"type\": \"array\",\n\t\"items\": {\n\t\t\"type\": \"object\",\n\t\t\"properties\": {\n\t\t\t\"company_name\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t},\n\t\t\t\"phone_number\": {\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"pattern\": \"^\\\\+?[0-9]{7,15}$\"\n\t\t\t},\n \"website\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t},\n\t\t\t\"year_in_business\": {\n\t\t\t\t\"type\": \"number\",\n\t\t\t\t\"minimum\": 0,\n\t\t\t\t\"maximum\": 99\n\t\t\t}\n\t\t}\n\t}\n}\n",
49 | "options": {
50 | "systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value.\nAlways output the data in a json array called results. \nYour goal is to extract all the companies of the page. To do so, you will give: company name, phone number, website, number of years in business, for each result you can find."
51 | }
52 | },
53 | "type": "@n8n/n8n-nodes-langchain.informationExtractor",
54 | "typeVersion": 1,
55 | "position": [
56 | 1640,
57 | -400
58 | ],
59 | "id": "db2d2aea-394d-489b-bc89-ec6d4224e960",
60 | "name": "Information Extractor"
61 | },
62 | {
63 | "parameters": {
64 | "model": {
65 | "__rl": true,
66 | "value": "gpt-4o",
67 | "mode": "list",
68 | "cachedResultName": "gpt-4o"
69 | },
70 | "options": {}
71 | },
72 | "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
73 | "typeVersion": 1.2,
74 | "position": [
75 | 1740,
76 | -180
77 | ],
78 | "id": "67b67200-be4f-48ca-8b39-b12ef076c863",
79 | "name": "OpenAI Chat Model",
80 | "credentials": {
81 | "openAiApi": {
82 | "id": "*****",
83 | "name": "OpenAi"
84 | }
85 | }
86 | },
87 | {
88 | "parameters": {
89 | "fieldToSplitOut": "output",
90 | "options": {}
91 | },
92 | "type": "n8n-nodes-base.splitOut",
93 | "typeVersion": 1,
94 | "position": [
95 | 2000,
96 | -400
97 | ],
98 | "id": "ec348438-0935-48bd-8fc9-bf0ee8c1f325",
99 | "name": "Split Out"
100 | },
101 | {
102 | "parameters": {
103 | "operation": "append",
104 | "documentId": {
105 | "__rl": true,
106 | "value": "196EDvvDyybuOO6wX5PWmT2kcOW8xAdq7Vz2PjhT3nrs",
107 | "mode": "list",
108 | "cachedResultName": "Leads Dentist demo",
109 | "cachedResultUrl": ""
110 | },
111 | "sheetName": {
112 | "__rl": true,
113 | "value": "gid=0",
114 | "mode": "list",
115 | "cachedResultName": "leads",
116 | "cachedResultUrl": ""
117 | },
118 | "columns": {
119 | "mappingMode": "defineBelow",
120 | "value": {
121 | "Dentist": "={{ $json.company_name }}",
122 | "phone number": "={{ $json.phone_number }}",
123 | "years in business": "={{ $json.year_in_business }}",
124 | "website": "={{ $json.website }}",
125 | "doNotUse": "={{ $json.website \n ? `info@${$json.website.replace(/^https?:\\/\\//, '').replace(/^www\\./, '').split('/')[0]}` \n : `info@${$json.company_name.split(' ')[0].toLowerCase()}.com` }}"
126 | },
127 | "matchingColumns": [],
128 | "schema": [
129 | {
130 | "id": "Dentist",
131 | "displayName": "Dentist",
132 | "required": false,
133 | "defaultMatch": false,
134 | "display": true,
135 | "type": "string",
136 | "canBeUsedToMatch": true
137 | },
138 | {
139 | "id": "phone number",
140 | "displayName": "phone number",
141 | "required": false,
142 | "defaultMatch": false,
143 | "display": true,
144 | "type": "string",
145 | "canBeUsedToMatch": true
146 | },
147 | {
148 | "id": "website",
149 | "displayName": "website",
150 | "required": false,
151 | "defaultMatch": false,
152 | "display": true,
153 | "type": "string",
154 | "canBeUsedToMatch": true,
155 | "removed": false
156 | },
157 | {
158 | "id": "years in business",
159 | "displayName": "years in business",
160 | "required": false,
161 | "defaultMatch": false,
162 | "display": true,
163 | "type": "string",
164 | "canBeUsedToMatch": true
165 | },
166 | {
167 | "id": "doNotUse",
168 | "displayName": "doNotUse",
169 | "required": false,
170 | "defaultMatch": false,
171 | "display": true,
172 | "type": "string",
173 | "canBeUsedToMatch": true,
174 | "removed": false
175 | }
176 | ],
177 | "attemptToConvertTypes": false,
178 | "convertFieldsToString": false
179 | },
180 | "options": {}
181 | },
182 | "type": "n8n-nodes-base.googleSheets",
183 | "typeVersion": 4.5,
184 | "position": [
185 | 2340,
186 | -140
187 | ],
188 | "id": "2cc81861-8a73-46c5-89e6-6ff8cc13104d",
189 | "name": "Google Sheets",
190 | "credentials": {
191 | "googleSheetsOAuth2Api": {
192 | "id": "49HDdgBiLhALfiaO",
193 | "name": "Google Sheets account 8"
194 | }
195 | }
196 | },
197 | {
198 | "parameters": {
199 | "method": "POST",
200 | "url": "https://realtime.oxylabs.io/v1/queries",
201 | "authentication": "genericCredentialType",
202 | "genericAuthType": "httpBasicAuth",
203 | "sendHeaders": true,
204 | "headerParameters": {
205 | "parameters": [
206 | {
207 | "name": "Content-Type",
208 | "value": "application/json"
209 | }
210 | ]
211 | },
212 | "sendBody": true,
213 | "specifyBody": "json",
214 | "jsonBody": "={\n \"source\": \"universal\",\n \"url\": \"{{ $json.url }}\"\n}\n\n",
215 | "options": {}
216 | },
217 | "id": "30b43dd3-be9b-43ab-b39a-d52a28e9977b",
218 | "name": "ScrapeWebsite",
219 | "type": "n8n-nodes-base.httpRequest",
220 | "typeVersion": 4.2,
221 | "position": [
222 | 1400,
223 | -400
224 | ],
225 | "credentials": {
226 | "httpBasicAuth": {
227 | "id": "*****",
228 | "name": "scraper"
229 | }
230 | }
231 | },
232 | {
233 | "parameters": {
234 | "batchSize": "=1",
235 | "options": {
236 | "reset": false
237 | }
238 | },
239 | "type": "n8n-nodes-base.splitInBatches",
240 | "typeVersion": 3,
241 | "position": [
242 | 800,
243 | -260
244 | ],
245 | "id": "1ec34435-685a-4626-bdf5-1ddcaaf26b85",
246 | "name": "Loop Over Items"
247 | },
248 | {
249 | "parameters": {
250 | "assignments": {
251 | "assignments": [
252 | {
253 | "id": "920c0da2-b882-4504-bdf4-7e697785f028",
254 | "name": "counter",
255 | "value": 2,
256 | "type": "number"
257 | }
258 | ]
259 | },
260 | "options": {}
261 | },
262 | "type": "n8n-nodes-base.set",
263 | "typeVersion": 3.4,
264 | "position": [
265 | 200,
266 | -260
267 | ],
268 | "id": "809bfe3c-88d1-4cec-b717-8f08495df2c1",
269 | "name": "init"
270 | },
271 | {
272 | "parameters": {
273 | "resource": "lead",
274 | "campaignId": "=cam_YA575FbieMfvioKCp",
275 | "email": "={{ $json.doNotUse }}",
276 | "additionalFields": {
277 | "companyName": "={{ $json.Dentist }}",
278 | "companyDomain": "={{ $json.website }}",
279 | "phone": "={{ $json[\"phone number\"] }}"
280 | }
281 | },
282 | "type": "n8n-nodes-base.lemlist",
283 | "typeVersion": 2,
284 | "position": [
285 | 1380,
286 | -640
287 | ],
288 | "id": "ef6907e1-e5a5-4036-8ee2-db9a7b3a831a",
289 | "name": "Lemlist",
290 | "credentials": {
291 | "lemlistApi": {
292 | "id": "M1I0E5rU55R5GLGc",
293 | "name": "lemlist admin - growth"
294 | }
295 | }
296 | },
297 | {
298 | "parameters": {
299 | "content": "Fill here website and ",
300 | "height": 280
301 | },
302 | "type": "n8n-nodes-base.stickyNote",
303 | "typeVersion": 1,
304 | "position": [
305 | -80,
306 | -360
307 | ],
308 | "id": "8607d08e-764f-4d05-bf3f-0508226b009a",
309 | "name": "Sticky Note"
310 | },
311 | {
312 | "parameters": {
313 | "jsCode": "const websiteData = $(\"Website\").all()[0]?.json;\nconst pages = Array.from({ length: websiteData.pages }, (_, i) => i + 1);\nconst urls = pages.map((page) => ({ json: { url: `${websiteData.website}&page=${page}` } }));\n\nreturn urls;\n"
314 | },
315 | "type": "n8n-nodes-base.code",
316 | "typeVersion": 2,
317 | "position": [
318 | 420,
319 | -260
320 | ],
321 | "id": "13b1623f-218c-4c94-9d4a-a70f84af515c",
322 | "name": "generate_URL"
323 | }
324 | ],
325 | "pinData": {},
326 | "connections": {
327 | "When clicking ‘Test workflow’": {
328 | "main": [
329 | [
330 | {
331 | "node": "Website",
332 | "type": "main",
333 | "index": 0
334 | }
335 | ]
336 | ]
337 | },
338 | "Website": {
339 | "main": [
340 | [
341 | {
342 | "node": "init",
343 | "type": "main",
344 | "index": 0
345 | }
346 | ]
347 | ]
348 | },
349 | "OpenAI Chat Model": {
350 | "ai_languageModel": [
351 | [
352 | {
353 | "node": "Information Extractor",
354 | "type": "ai_languageModel",
355 | "index": 0
356 | }
357 | ]
358 | ]
359 | },
360 | "Information Extractor": {
361 | "main": [
362 | [
363 | {
364 | "node": "Split Out",
365 | "type": "main",
366 | "index": 0
367 | }
368 | ]
369 | ]
370 | },
371 | "Split Out": {
372 | "main": [
373 | [
374 | {
375 | "node": "Google Sheets",
376 | "type": "main",
377 | "index": 0
378 | }
379 | ]
380 | ]
381 | },
382 | "ScrapeWebsite": {
383 | "main": [
384 | [
385 | {
386 | "node": "Information Extractor",
387 | "type": "main",
388 | "index": 0
389 | }
390 | ]
391 | ]
392 | },
393 | "Loop Over Items": {
394 | "main": [
395 | [
396 | {
397 | "node": "Lemlist",
398 | "type": "main",
399 | "index": 0
400 | }
401 | ],
402 | [
403 | {
404 | "node": "ScrapeWebsite",
405 | "type": "main",
406 | "index": 0
407 | }
408 | ]
409 | ]
410 | },
411 | "Google Sheets": {
412 | "main": [
413 | [
414 | {
415 | "node": "Loop Over Items",
416 | "type": "main",
417 | "index": 0
418 | }
419 | ]
420 | ]
421 | },
422 | "init": {
423 | "main": [
424 | [
425 | {
426 | "node": "generate_URL",
427 | "type": "main",
428 | "index": 0
429 | }
430 | ]
431 | ]
432 | },
433 | "generate_URL": {
434 | "main": [
435 | [
436 | {
437 | "node": "Loop Over Items",
438 | "type": "main",
439 | "index": 0
440 | }
441 | ]
442 | ]
443 | }
444 | },
445 | "active": false,
446 | "settings": {
447 | "executionOrder": "v1"
448 | },
449 | "versionId": "4ad9f796-26e2-40a1-b5e6-bb7fd8f458b7",
450 | "meta": {
451 | "templateCredsSetupCompleted": true,
452 | "instanceId": "f0a68da631efd4ed052a324b63ff90f7a844426af0398a68338f44245d1dd9e5"
453 | },
454 | "id": "6WrQJHyt4vjBNj3v",
455 | "tags": []
456 | }
--------------------------------------------------------------------------------
/HackerNews Trending Product/HN_Top_Product.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "HN Top Product",
3 | "nodes": [
4 | {
5 | "parameters": {
6 | "promptType": "define",
7 | "text": "=```html\n{{ $json.results[0].cleaned_html }}\n```",
8 | "options": {
9 | "systemMessage": "User will provide an extracted HTML version of a crawled website inside \\`\\`\\`html.\n\nThe website is list of about top products post people do on different technology areas.\n\nYou need to find all the posts and return them as response\n\n- MUST consider the points and number of comments.\n- MUST remove \"Show HN\" from the title\n- Comment Link should be full URL with domain and https\n\nOutput guidelines\n- Must be in JSON\n- With each item there should be 'title', 'comments', 'points', 'mainLink' and 'time'. \n- Make sure to use exact key names as defined above\n- Must wrap JSON in \\`\\`\\`json\n\nOutput format (JSON)\n```json\n[{\"title\": \"Product one\", \"comments\": \"link to comments\", \"points\": \"22\", \"time\":\"2025-05-12T05:21:42 1747027302\", \"mainLink\":\"link to the project under titleline\"}]\n```\n"
10 | }
11 | },
12 | "type": "@n8n/n8n-nodes-langchain.agent",
13 | "typeVersion": 1.9,
14 | "position": [
15 | 700,
16 | -360
17 | ],
18 | "id": "7127be05-eb7c-4789-af11-e0f52a247399",
19 | "name": "Hacker News Analyser"
20 | },
21 | {
22 | "parameters": {
23 | "method": "POST",
24 | "url": "http://localhost:11235/crawl",
25 | "sendBody": true,
26 | "specifyBody": "json",
27 | "jsonBody": "{\n \"urls\": [\"https://news.ycombinator.com/show\"],\n \"priority\": 10\n}",
28 | "options": {}
29 | },
30 | "type": "n8n-nodes-base.httpRequest",
31 | "typeVersion": 4.2,
32 | "position": [
33 | 500,
34 | -360
35 | ],
36 | "id": "8ab1a10f-a785-48ef-b48b-0f984aad6a66",
37 | "name": "Hacker News Show"
38 | },
39 | {
40 | "parameters": {
41 | "jsCode": "/**\n * Extract top 3 posts that are 12‑24 h old.\n * @param {string} raw AI model response (includes ```json ... ```)\n * @returns {Array