Search Engine Optimization

Our SEO solutions help businesses rank higher, increase website traffic, and achieve long-term online success efficiently.

SEO That Delivers Results

Struggling to get noticed online? Our expert SEO strategies boost your website’s visibility, drive targeted traffic, and improve conversions. Businesses partnering with us experience up to 35% higher search rankings and 40% more organic traffic. We turn casual visitors into loyal customers, strengthen your digital presence, and deliver measurable, long-term growth, ensuring your brand stays ahead in the competitive online landscape.

SEO Success Roadmap

Struggling to get noticed online? Our SEO Success Roadmap transforms your website step by step into a traffic and conversion powerhouse, reaching the right audience, boosting engagement, improving rankings, and delivering measurable, long-lasting business growth.

Discovery & Analysis

We dig deep into goals, competitors, and current SEO performance, uncovering hidden opportunities blocking growth and success.

Implementation & Execution

Optimize website structure, content, and backlinks efficiently, turning your site into a high-performing, traffic-driving conversion machine.

Strategy Development

Create a powerful SEO plan with on-page, off-page, and technical strategies that boost rankings and attract buyers.

Monitoring & Optimization

Continuously track, refine, and improve strategies to stay ahead of competitors, boost performance, and ensure lasting digital growth.

Take Your Business To The Top

Transform your online presence with Serve Vision’s expert SEO. Boost rankings, attract the right audience, increase traffic, and achieve measurable, long-lasting digital growth starting today.

Get a Quote Today

Request a quote to kickstart your business growth today.

    Let’s Connect

    Reach out to discuss how we can help grow your business.

    Contact Number

    +91-8307878581

    Our SEO Achievements In Action

    Local SEO & Content Optimization

    CAP Karnal

    Enhanced local visibility through optimized content, structured web design, and targeted strategies for regional search presence.

    SEO & Local Marketing

    SME Help LLC

    Improved keyword targeting, optimized service pages, and boosted local credibility for stronger client acquisition across U.S. regions.

    SEO & Local Marketing

    Wise Energy Solutions

    Optimized renewable energy keywords, refined service content, and built structured pages to increase leads and regional visibility.

    Keyword Optimization & Content Optimization

    Ryujinx

    Optimized emulator-related keywords and refined on-page content to achieve higher organic rankings and stronger search visibility.

    Keyword Optimization & Content Optimization

    Undertale OST

    Improved gaming soundtrack keyword focus, optimized page structure, and enhanced content readability for better search performance.

    Keyword Optimization & Content Optimization

    Universal Pokémon Randomizer

    Enhanced gaming niche keyword targeting, optimized content layouts, and improved visibility for increased organic user engagement.

    Questions? Get All the Answers

     Low traffic reduces leads and sales. We optimize keywords, content, and technical SEO to boost search rankings, attract targeted visitors, and drive measurable traffic growth, ensuring your website reaches the right audience consistently.

    No SEO provider can guarantee first-page rankings due to constantly changing algorithms. However, effective strategies significantly improve visibility, increase organic traffic, and strengthen your online presence by optimizing technical, on-page, and off-page elements consistently over time.

    Yes, our SEO solutions include specialized local SEO strategies. We optimize Google My Business, local listings, and location-specific keywords to attract nearby customers, increase footfall, and improve search visibility for small and medium-sized businesses.

    We track key metrics like organic traffic, keyword rankings, conversion rates, and backlinks. Using analytics tools, we provide detailed performance reports, enabling clients to see tangible results and evaluate the effectiveness of their SEO investment over time.

    Absolutely. We follow ethical, white-hat SEO practices that comply with search engine guidelines. This approach ensures sustainable growth, protects your website from penalties, and maintains long-term visibility while gradually improving authority, rankings, and user engagement.

    Many agencies promise results but underdeliver. We combine expertise, continuous optimization, and tailored strategies to solve visibility issues, drive high-quality traffic, improve rankings, and ensure measurable growth for your business online.

    { "name": "Custom Chatbot Designed for Your Business Needs", "nodes": [ { "parameters": { "formTitle": "Upload your data to test RAG", "formFields": { "values": [ { "fieldLabel": "Upload your file(s)", "fieldType": "file", "acceptFileTypes": ".pdf, .csv", "requiredField": true } ] }, "options": {} }, "type": "n8n-nodes-base.formTrigger", "typeVersion": 2.2, "position": [ -128, 0 ], "id": "f7a656ec-83fc-4ed2-a089-57a9def662b7", "name": "Upload your file here", "webhookId": "82848bc4-5ea2-4e5a-8bb6-3c09b94a8c5d" }, { "parameters": { "dataType": "binary", "options": {} }, "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", "typeVersion": 1.1, "position": [ 320, 160 ], "id": "94aecac0-03f9-4915-932b-d14a2576607b", "name": "Default Data Loader" }, { "parameters": { "content": "### Readme\nLoad your data into a vector database with the 📚 **Load Data** flow, and then use your data as chat context with the 🐕 **Retriever** flow.\n\n**Quick start**\n1. Click on the `Execute Workflow` button to run the 📚 **Load Data** flow.\n2. Click on `Open Chat` button to run the 🐕 **Retriever** flow. Then ask a question about content from your document(s)\n\n\nFor more info, check [our docs on RAG in n8n](https://docs.n8n.io/advanced-ai/rag-in-n8n/).", "height": 300, "width": 440, "color": 4 }, "type": "n8n-nodes-base.stickyNote", "position": [ -656, -64 ], "typeVersion": 1, "id": "0d07742b-0b36-4c2e-990c-266cbe6e2d4d", "name": "Sticky Note" }, { "parameters": { "content": "### 📚 Load Data Flow", "height": 460, "width": 700, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "position": [ -176, -64 ], "typeVersion": 1, "id": "d19d04f3-5231-4e47-bed7-9f24a4a8f582", "name": "Sticky Note1" }, { "parameters": { "mode": "insert", "memoryKey": { "__rl": true, "value": "vector_store_key", "mode": "list", "cachedResultName": "vector_store_key" } }, "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", "typeVersion": 1.2, "position": [ 64, -16 ], "id": "bf50a11f-ca6a-4e04-a6d2-42fee272b260", "name": "Insert Data to Store" }, { "parameters": { "mode": "retrieve-as-tool", "toolName": "knowledge_base", "toolDescription": "Use this knowledge base to answer questions from the user", "memoryKey": { "__rl": true, "mode": "list", "value": "vector_store_key" } }, "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", "typeVersion": 1.2, "position": [ 1008, 224 ], "id": "09c0db62-5413-440e-8c13-fb6bb66d9b6a", "name": "Query Data Tool" }, { "parameters": { "options": { "systemMessage": "=You are an intelligent assistant that helps users manage and query their daily expenses through two primary tools:\n\n**AVAILABLE TOOLS:**\n1. **RAG System** - For general knowledge questions and expense-related advice\n2. **Daily Expense Google Sheet** - For specific expense data queries\n\n**GOOGLE SHEET STRUCTURE:**\n- **Timestamp**: Date and time of expense entry\n- **Email address**: User's email identifier\n- **Amount**: Expense amount\n- **Description**: What the expense was for\n- **Month**: Month of the expense\n\n**QUERY PROCESSING LOGIC:**\n\n**USE RAG SYSTEM WHEN:**\n- User asks general financial advice\n- Questions about budgeting tips\n- Expense categorization best practices\n- General knowledge questions unrelated to specific expense data\n- \"How to\" questions about expense management\n\n**USE GOOGLE SHEET WHEN:**\n- User queries about specific expense records\n- Requests for spending totals or summaries\n- Filtering expenses by time period, amount, or description\n- Analysis of spending patterns\n- Specific data retrieval requests\n\n**EXPENSE QUERY EXAMPLES AND RESPONSES:**\n\n**For Total Calculations:**\n- \"What were my total expenses in January?\" → Sum Amount where Month = \"January\"\n- \"How much did I spend on food last month?\" → Sum Amount where Description contains \"food\" and Month = [previous month]\n\n**For Specific Records:**\n- \"Show me all expenses over $100\" → Filter records where Amount > 100\n- \"What did I spend on December 15th?\" → Filter by Timestamp date\n\n**For Monthly Analysis:**\n- \"Compare my spending between January and February\" → Group by Month, sum Amount\n- \"Which month had the highest expenses?\" → Group by Month, find max total\n\n**RESPONSE GUIDELINES:**\n1. **Be specific** about the time period and criteria used\n2. **Format numbers** clearly (e.g., $150.50)\n3. **Provide context** - if showing partial data, mention the scope\n4. **Suggest insights** - point out patterns or trends when relevant\n5. **Offer next steps** - suggest related queries the user might find useful\n\n**ERROR HANDLING:**\n- If data isn't found, suggest alternative timeframes or criteria\n- If query is ambiguous, ask clarifying questions\n- If technical issues occur, explain simply and suggest retrying\n\n**TONE AND STYLE:**\n- Professional but friendly\n- Data-driven and accurate\n- Helpful and proactive in offering additional insights\n\nAlways determine which tool is appropriate based on whether the user needs specific data from their expense records or general knowledge/advice.\n\n\nNow Date and Time: {{ $now.setZone(\"Asia/Kolkata\").toFormat(\"dd-MMM-yyyy HH:mm:ss\") }}" } }, "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 2, "position": [ 944, -16 ], "id": "579aed76-9644-42d1-ac13-7369059ff1c2", "name": "AI Agent" }, { "parameters": { "options": {} }, "type": "@n8n/n8n-nodes-langchain.chatTrigger", "typeVersion": 1.1, "position": [ 720, -16 ], "id": "9c30de61-935a-471f-ae88-ec5f67beeefc", "name": "When chat message received", "webhookId": "4091fa09-fb9a-4039-9411-7104d213f601" }, { "parameters": { "content": "### 🐕 2. Retriever Flow", "height": 460, "width": 680, "color": 7 }, "type": "n8n-nodes-base.stickyNote", "position": [ 608, -64 ], "typeVersion": 1, "id": "28bc73a1-e64a-47bf-ac1c-ffe644894ea5", "name": "Sticky Note2" }, { "parameters": { "content": "### Embeddings\n\nThe Insert and Retrieve operation use the same embedding node.\n\nThis is to ensure that they are using the **exact same embeddings and settings**.\n\nDifferent embeddings might not work at all, or have unintended consequences.\n", "height": 240, "width": 320, "color": 4 }, "type": "n8n-nodes-base.stickyNote", "position": [ 672, 448 ], "typeVersion": 1, "id": "0cf8c647-418c-4d1a-8952-766145afca72", "name": "Sticky Note3" }, { "parameters": {}, "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini", "typeVersion": 1, "position": [ 528, 448 ], "id": "48c33670-e565-452c-9fd5-802966e37e72", "name": "Embeddings Google Gemini", "credentials": { "googlePalmApi": { "id": "wSEQ0R08soazpR6k", "name": "Joydeep Gemeni APi" } } }, { "parameters": { "options": {} }, "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "typeVersion": 1, "position": [ 768, 192 ], "id": "fd44f4b5-d046-414c-ab82-afd100632859", "name": "Google Gemini Chat Model", "credentials": { "googlePalmApi": { "id": "wSEQ0R08soazpR6k", "name": "Joydeep Gemeni APi" } } }, { "parameters": { "authentication": "serviceAccount", "documentId": { "__rl": true, "value": "1vWze14yL2qD8yvj7cHV1n9FxifcEhoQiGQ1mm3sZeQ0", "mode": "list", "cachedResultName": "SV cash Expense", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vWze14yL2qD8yvj7cHV1n9FxifcEhoQiGQ1mm3sZeQ0/edit?usp=drivesdk" }, "sheetName": { "__rl": true, "value": 1296457484, "mode": "list", "cachedResultName": "Expense Form", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vWze14yL2qD8yvj7cHV1n9FxifcEhoQiGQ1mm3sZeQ0/edit#gid=1296457484" }, "combineFilters": "OR", "options": {} }, "type": "n8n-nodes-base.googleSheetsTool", "typeVersion": 4.7, "position": [ 1344, 224 ], "id": "dd684fa0-0777-4ca6-a97e-952dd60d4c28", "name": "Daily Expense", "credentials": { "googleApi": { "id": "gLgJ7G0Yvh27paYT", "name": "Data-analyst Google Service Account account" } } } ], "pinData": {}, "connections": { "Upload your file here": { "main": [ [ { "node": "Insert Data to Store", "type": "main", "index": 0 } ] ] }, "Default Data Loader": { "ai_document": [ [ { "node": "Insert Data to Store", "type": "ai_document", "index": 0 } ] ] }, "Query Data Tool": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "When chat message received": { "main": [ [ { "node": "AI Agent", "type": "main", "index": 0 } ] ] }, "Embeddings Google Gemini": { "ai_embedding": [ [ { "node": "Query Data Tool", "type": "ai_embedding", "index": 0 }, { "node": "Insert Data to Store", "type": "ai_embedding", "index": 0 } ] ] }, "Google Gemini Chat Model": { "ai_languageModel": [ [ { "node": "AI Agent", "type": "ai_languageModel", "index": 0 } ] ] }, "Daily Expense": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "versionId": "8fe6a330-c2fe-44bd-8dc3-5c0f08445f54", "meta": { "templateId": "rag-starter-template", "templateCredsSetupCompleted": true, "instanceId": "1f1785d995b3fa32ab6b8219168659331dbe1459fee9ca0c94987e0285ae2676" }, "id": "XMzrW1DpKCxRdodE", "tags": [] }
    { "name": "Keyword-Based Article Generation via Google Sheets", "nodes": [ { "parameters": { "options": {} }, "type": "n8n-nodes-base.splitInBatches", "typeVersion": 3, "position": [ -736, 384 ], "id": "019cddd8-29dd-46d1-9269-696ec3cef37a", "name": "Loop Over Items" }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "loose", "version": 2 }, "conditions": [ { "id": "3f3244e8-d845-48b1-8355-07295725cb85", "leftValue": "={{ $json.data }}", "rightValue": "", "operator": { "type": "string", "operation": "exists", "singleValue": true } } ], "combinator": "and" }, "looseTypeValidation": true, "options": {} }, "type": "n8n-nodes-base.if", "typeVersion": 2.2, "position": [ -64, 144 ], "id": "8ba87150-8d5d-4684-b91d-161e7e7d730a", "name": "If", "alwaysOutputData": false }, { "parameters": { "documentId": { "__rl": true, "value": "1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw", "mode": "list", "cachedResultName": "n8n Newspress Article Workflow", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit?usp=drivesdk" }, "sheetName": { "__rl": true, "value": 2027275420, "mode": "list", "cachedResultName": "Cheapnail", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit#gid=2027275420" }, "filtersUI": { "values": [ { "lookupColumn": "Flow Status", "lookupValue": "New" } ] }, "options": {} }, "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.6, "position": [ -960, 384 ], "id": "7650e708-bb75-4472-88b2-5bf6384f2369", "name": "Get New Articles", "credentials": { "googleSheetsOAuth2Api": { "id": "Br9lRn5gAnnRLFmy", "name": "Google Sheets account 2" } } }, { "parameters": { "operation": "update", "documentId": { "__rl": true, "value": "1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw", "mode": "list", "cachedResultName": "n8n Newspress Article Workflow", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit?usp=drivesdk" }, "sheetName": { "__rl": true, "value": 2027275420, "mode": "list", "cachedResultName": "Cheapnail", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit#gid=2027275420" }, "columns": { "mappingMode": "defineBelow", "value": { "Topic": "={{ $json.Topic }}", "Source": "={{ $json.Source }}", "Publish Status": "Processing", "Flow Timing": "={{ $now.setZone(\"Asia/Kolkata\").toFormat(\"dd-MMM-yyyy HH:mm:ss\") }}", "row_number": "={{ $json.row_number }}" }, "matchingColumns": [ "row_number" ], "schema": [ { "id": "Topic", "displayName": "Topic", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Source", "displayName": "Source", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Publish Status", "displayName": "Publish Status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Publish Link", "displayName": "Publish Link", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Flow Status", "displayName": "Flow Status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Flow Timing", "displayName": "Flow Timing", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Run Flow", "displayName": "Run Flow", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "row_number", "displayName": "row_number", "required": false, "defaultMatch": false, "display": true, "type": "number", "canBeUsedToMatch": true, "readOnly": true, "removed": false } ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {} }, "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.6, "position": [ -512, 144 ], "id": "dfa0ca22-4b60-4215-9f82-5fc0bc0d125d", "name": "Update Processing", "credentials": { "googleSheetsOAuth2Api": { "id": "Br9lRn5gAnnRLFmy", "name": "Google Sheets account 2" } } }, { "parameters": { "url": "={{ $json.Source }}", "options": { "timeout": 10000 } }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ -288, 144 ], "id": "ba43343e-ac56-4cdb-9877-c3f23458df0f", "name": "Fetch HTML", "onError": "continueRegularOutput" }, { "parameters": { "operation": "update", "documentId": { "__rl": true, "value": "1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw", "mode": "list", "cachedResultName": "n8n Newspress Article Workflow", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit?usp=drivesdk" }, "sheetName": { "__rl": true, "value": 2027275420, "mode": "list", "cachedResultName": "Cheapnail", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit#gid=2027275420" }, "columns": { "mappingMode": "defineBelow", "value": { "Flow Status": "Error", "Publish Status": "Not Processed Because of an Error", "Publish Link": "={{ $('Fetch HTML').item.json.error.status }}", "row_number": "={{ $('Update Processing').item.json.row_number }}" }, "matchingColumns": [ "row_number" ], "schema": [ { "id": "Topic", "displayName": "Topic", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Source", "displayName": "Source", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Publish Status", "displayName": "Publish Status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Publish Link", "displayName": "Publish Link", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Flow Status", "displayName": "Flow Status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Flow Timing", "displayName": "Flow Timing", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Run Flow", "displayName": "Run Flow", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "row_number", "displayName": "row_number", "required": false, "defaultMatch": false, "display": true, "type": "number", "canBeUsedToMatch": true, "readOnly": true, "removed": false } ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {} }, "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.6, "position": [ 224, 240 ], "id": "d4d5aceb-8065-415a-8bfe-7a9cb5df8bcd", "name": "Update Error", "credentials": { "googleSheetsOAuth2Api": { "id": "Br9lRn5gAnnRLFmy", "name": "Google Sheets account 2" } } }, { "parameters": { "content": "## 🤖 These Two AI Brother is creating the Article ✌\n- Article Summarizer\n- Article Creator", "height": 224, "width": 640, "color": 6 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 128, -64 ], "id": "69aff7d4-a5d8-4bc7-93a6-a66ca684528b", "name": "Sticky Note" }, { "parameters": { "modelId": { "__rl": true, "value": "gpt-4.1-mini", "mode": "list", "cachedResultName": "GPT-4.1-MINI" }, "messages": { "values": [ { "content": "=Generate a news article about the given Source Data\nThe article should follow this format and structure:\n- **Headline:** Create an SEO-optimized headline that includes the keywords from the topic title.\n- **Location Line:** Immediately after the headline, include a **location line** (e.g., **\"San Francisco, CA –\"**) and **bold the location**.\n- **Introduction:** Write a strong, engaging introduction summarizing the key point of the article in one to two paragraphs. Make sure it captures the reader's attention.\n- **Main Headings Based on Content:**\n - Instead of predefined subheadings, **generate the main headings** based on the **content of the article**. For example:\n 1. If the article is about a **discovery**, the main heading might be something like: **\"The Unexpected Discovery\"** or **\"How the Discovery Was Made\"**.\n 2. If the article focuses on **reactions**, the main heading could be: **\"Community Reactions and Expert Opinions\"** or **\"Public and Expert Responses\"**.\n 3. For articles related to **future implications** or **next steps**, the heading could be: **\"What Happens Next?\"** or **\"Implications for the Future\"**.\n - The key here is that the main headings should be **created based on the content** in the body, rather than following a rigid structure.\n- **Body Content:**\n - The body of the article should flow logically, based on the content collected from the source. Each section should expand on the corresponding headings.\n - Ensure each section is fact-based, concise, well-researched, and provides relevant information. Use the extracted expert quotes where appropriate.\n- **Bold Key Points:** Make sure to bold any important names, figures, dates, or key terms that require emphasis. Additionally, bold around 15% of the most important words in the article to highlight the key information and ensure clarity.\n- **Bullet Points:** Use bullet points to highlight key facts, data, trends, or recommendations within the article. Bullet points should break down complex information into digestible chunks.\n- **Blockquotes:** Include blockquotes for any expert opinions, quotes, or statements that should be emphasized.\n- **Source Integration:** Integrate the provided **source link** **only once** within the article body. It should be referenced naturally, in a relevant section like background information, expert quotes, or statistics.\n- **Customized Call-to-Action (CTA):** At the end of the article, include a **customized CTA** based on the article's content. For example, if the article is about a discovery, the CTA could be:\n - **\"What do you think about this discovery? Have you ever visited Crater of Diamonds State Park? Share your thoughts in the comments below!\"**\n- **SEO Optimization:** Ensure the article includes relevant keywords naturally throughout the text, in headings and body content, to avoid keyword stuffing while making sure the text flows naturally.", "role": "system" }, { "content": "**Output Format:**\n\n```json\n{\n \"title\": \"the original title here\",\n \"content\": \"the fully written HTML article here\"\n}\n```", "role": "system" }, { "content": "=Source Data :{{ $json.message.content }}\nsource link: {{ $('Loop Over Items').item.json.Source }}" } ] }, "jsonOutput": true, "options": {} }, "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 1.8, "position": [ 512, 48 ], "id": "175955b0-d9ba-4c52-96ae-9c02763a6cd5", "name": "Article Creator", "credentials": { "openAiApi": { "id": "jNGTDQUn7rhCJPBy", "name": "OpenAi account 2" } } }, { "parameters": { "modelId": { "__rl": true, "value": "gpt-4.1-mini", "mode": "list", "cachedResultName": "GPT-4.1-MINI" }, "messages": { "values": [ { "content": "=You are a data extraction AI tasked with processing HTML content. Your goal is to identify and extract the title and the main text content from the provided HTML document. Follow these specific instructions:\n\n1. **Input Format:** You will receive a well-formed HTML document as input.\n2. **Output Format:** Your output should be in Markdown format.\n3. **Content Extraction:**\n - Extract the title of the article from the `` tag or the main heading tag (e.g., `<h1>`).\n - Extract the main body of the article excluding any images, external links, or other media. Focus solely on the text content.\n4. **Markdown Guidelines:**\n - The title should be formatted as a top-level heading (using `#`).\n - The main body text should follow the title in plain Markdown format, preserving paragraphs, lists, and any other textual formatting present in the HTML.\n5. **Restrictions:**\n - Do not include any images, external links, or HTML tags in your output.\n - Ensure that the extracted text is coherent and maintains the context of the original content.\n\nExample Input:\n```html\n<html>\n<head>\n<title>Sample Article Title\n\n\n

    Sample Article Title

    \n

    This is the first paragraph of the article.

    \n

    This is the second paragraph with an external link.

    \n\"Sample\n\n\n```\n\nExpected Output:\n```\n# Sample Article Title\n\nThis is the first paragraph of the article with information.\n\nThis is the second paragraph of the article with information.\n```\n\nProcess the provided HTML input according to these instructions and generate the desired Markdown output.", "role": "system" }, { "content": "=The HTML is provided as follows:\n{{ $('Fetch HTML').item.json.data }}\n\n\nPlease process the HTML and return the Markdown formatted output." } ] }, "options": {} }, "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 1.8, "position": [ 160, 48 ], "id": "e7b6c39b-1b55-41c6-9626-6c18da2253fb", "name": "Article Summarizer", "credentials": { "openAiApi": { "id": "jNGTDQUn7rhCJPBy", "name": "OpenAi account 2" } } }, { "parameters": { "content": "## 🕸 Fetch the article information from web", "height": 240, "width": 640 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -560, 64 ], "id": "411f871c-ce66-4c8f-81eb-b81a816a7445", "name": "Sticky Note1" }, { "parameters": { "content": "## 📑 Get 'New' Articles data from G Sheet\n", "height": 240, "width": 576, "color": 5 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -1184, 304 ], "id": "e7a86256-c59c-4f71-9035-39e93192fc6e", "name": "Sticky Note2" }, { "parameters": { "title": "={{ $json.title }}", "additionalFields": { "authorId": 12, "content": "={{ $json.content }}", "status": "draft" } }, "type": "n8n-nodes-base.wordpress", "typeVersion": 1, "position": [ 1088, 48 ], "id": "fb65aa96-048d-4145-a7e7-499ecb81715f", "name": "Create a Draft", "credentials": { "wordpressApi": { "id": "a7Cx6j0h8rI7LX2v", "name": "WP Cheapnail" } } }, { "parameters": { "jsCode": "// Pull the incoming payload\nconst msg = $input.first().json.message || {};\nconst rawContent = msg.content;\n\n// Normalise inputs: html body + a separately provided title (if any)\nlet html = \"\";\nlet providedTitle = \"\";\n\nif (typeof rawContent === \"string\") {\n // Sometimes the HTML is directly in message.content\n html = rawContent;\n} else if (rawContent && typeof rawContent === \"object\") {\n // Common shape: message.content = { title, content }\n html = (rawContent.content || \"\").toString();\n providedTitle = (rawContent.title || \"\").toString().trim();\n}\n\n// Helper: strip tags for the final title value\nconst stripTags = (s) => s.replace(/<[^>]*>/g, \"\").trim();\n\n// Try to extract

    from the HTML body (allow attributes, any casing)\nconst h1Match = html.match(/]*>([\\s\\S]*?)<\\/h1>/i);\n\n// Title preference:

    from content first, else fall back to provided title field\nlet title = h1Match ? stripTags(h1Match[1]) : providedTitle;\n\n// Build the content: remove the first

    if present; otherwise keep HTML as-is\nlet content = html;\nif (h1Match) {\n content = html.replace(/]*>[\\s\\S]*?<\\/h1>\\s*/i, \"\").trim();\n} else {\n content = (html || \"\").trim();\n}\n\n// Output\nreturn [\n {\n json: {\n title,\n content\n }\n }\n];\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 864, 48 ], "id": "6d4b278b-39e4-431e-aeca-e9192b813faa", "name": "Format Article" }, { "parameters": { "operation": "update", "documentId": { "__rl": true, "value": "1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw", "mode": "list", "cachedResultName": "n8n Newspress Article Workflow", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit?usp=drivesdk" }, "sheetName": { "__rl": true, "value": 2027275420, "mode": "list", "cachedResultName": "Cheapnail", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CnYbGz4Xq0D0eI6T4jelZkL1c3ZY5hKB2wjhWtmjAOw/edit#gid=2027275420" }, "columns": { "mappingMode": "defineBelow", "value": { "Publish Link": "={{ $json.link }}", "Publish Status": "={{ $json.status }}", "Flow Status": "Flow Complete", "row_number": "={{ $('Update Processing').item.json.row_number }}" }, "matchingColumns": [ "row_number" ], "schema": [ { "id": "Topic", "displayName": "Topic", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Source", "displayName": "Source", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Publish Status", "displayName": "Publish Status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Publish Link", "displayName": "Publish Link", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Flow Status", "displayName": "Flow Status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": false }, { "id": "Flow Timing", "displayName": "Flow Timing", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "Run Flow", "displayName": "Run Flow", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true, "removed": true }, { "id": "row_number", "displayName": "row_number", "required": false, "defaultMatch": false, "display": true, "type": "number", "canBeUsedToMatch": true, "readOnly": true, "removed": false } ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {} }, "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.6, "position": [ 1312, 224 ], "id": "18d6447a-cb7a-49c6-9baa-4339c5601f8a", "name": "Update Draft Details", "credentials": { "googleSheetsOAuth2Api": { "id": "Br9lRn5gAnnRLFmy", "name": "Google Sheets account 2" } } }, { "parameters": { "content": "## 📂 Make Draft Article and Update the Google Sheet", "height": 416, "width": 624, "color": 2 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 832, -32 ], "id": "021f2b33-1f7a-4cba-90de-e56e6acc105a", "name": "Sticky Note3" }, { "parameters": { "path": "a1889360-e1bf-4b53-a96b-5eafa4b165a1", "options": {} }, "type": "n8n-nodes-base.webhook", "typeVersion": 2.1, "position": [ -1168, 384 ], "id": "2aaa0031-8189-47c1-8946-62068490e79e", "name": "Webhook", "webhookId": "a1889360-e1bf-4b53-a96b-5eafa4b165a1" } ], "pinData": {}, "connections": { "Loop Over Items": { "main": [ [], [ { "node": "Update Processing", "type": "main", "index": 0 } ] ] }, "If": { "main": [ [ { "node": "Article Summarizer", "type": "main", "index": 0 } ], [ { "node": "Update Error", "type": "main", "index": 0 } ] ] }, "Get New Articles": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] }, "Update Processing": { "main": [ [ { "node": "Fetch HTML", "type": "main", "index": 0 } ] ] }, "Fetch HTML": { "main": [ [ { "node": "If", "type": "main", "index": 0 } ] ] }, "Update Error": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] }, "Article Creator": { "main": [ [ { "node": "Format Article", "type": "main", "index": 0 } ] ] }, "Article Summarizer": { "main": [ [ { "node": "Article Creator", "type": "main", "index": 0 } ] ] }, "Create a Draft": { "main": [ [ { "node": "Update Draft Details", "type": "main", "index": 0 } ] ] }, "Format Article": { "main": [ [ { "node": "Create a Draft", "type": "main", "index": 0 } ] ] }, "Update Draft Details": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] }, "Webhook": { "main": [ [ { "node": "Get New Articles", "type": "main", "index": 0 } ] ] } }, "active": true, "settings": { "executionOrder": "v1", "timezone": "Asia/Kolkata", "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": "ipTcrzGbKoHF6UKi" }, "versionId": "dcb3a423-5356-4732-855f-419db73e8c89", "meta": { "templateCredsSetupCompleted": true, "instanceId": "1f1785d995b3fa32ab6b8219168659331dbe1459fee9ca0c94987e0285ae2676" }, "id": "9LKLgEkXV10DszQ1", "tags": [ { "createdAt": "2025-07-23T09:03:28.998Z", "updatedAt": "2025-07-23T09:03:28.998Z", "id": "0TIhg6ju9FxO2Lcp", "name": "Wordpress" }, { "createdAt": "2025-09-01T09:43:28.145Z", "updatedAt": "2025-09-01T09:43:28.145Z", "id": "KNKC6Mt3juYzghT4", "name": "Newsbreak" }, { "createdAt": "2025-09-03T07:38:33.128Z", "updatedAt": "2025-09-03T07:38:33.128Z", "id": "j70AoEIxmOT3oVGW", "name": "🟢 Active" } ] }

    { "name": "Article Generation and Publishing Automation", "nodes": [ { "parameters": { "jsCode": "const results = [];\n\n// Get the image list from the cleaned HTML node\nconst imageList = $('Clean HTML').first().json.images;\n\n// Log the image list to check its full content\nconsole.log(\"Image List Length:\", imageList.length); // How many items are in the array?\nconsole.log(\"Image List Data:\", imageList); // Log full array content\n\n// Check if imageList is an array\nif (Array.isArray(imageList)) {\n // Loop through all the images and extract title and URL\n for (const raw of imageList) {\n console.log(\"Processing image data:\", raw); // Log each image data for debugging\n\n // Extract title: first text before any \"[\" or just the beginning\n const titleMatch = raw.match(/^([^\\[]+)/);\n const title = titleMatch ? titleMatch[1].trim() : null;\n\n // Extract .jpg or .webp URLs starting with \"https://www.whats-on-netflix.com/wp-content/uploads\"\n const urlMatch = raw.match(/\\[(https:\\/\\/www\\.whats-on-netflix\\.com\\/wp-content\\/uploads[^\\]]+\\.(jpg|png|jpeg|webp))\\]/);\n const imageUrl = urlMatch ? urlMatch[1] : null;\n\n // If both title and image URL are found, add it to the result\n if (title && imageUrl) {\n console.log(\"Found Image:\", title, imageUrl); // Log the image title and URL\n results.push({\n json: {\n title,\n imageUrl\n }\n });\n } else {\n console.log('Missing image title or URL:', raw); // Log missing data\n }\n }\n} else {\n console.log('No image data found or imgData is not an array');\n}\n\n// Return the results\nreturn results;\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -416, 640 ], "id": "c781d8ad-8a38-41f6-8e00-96c271e0f809", "name": "Images" }, { "parameters": { "jsCode": "const titles = items[0].json.youtube_vid_title || [];\nconst urls = items[0].json.youtube_vid_url || [];\n\nconst output = [];\n\nfor (let i = 0; i < titles.length; i++) {\n if (titles[i] && urls[i]) {\n output.push({\n json: {\n vidTitle: titles[i],\n vidUrl: urls[i]\n }\n });\n }\n}\n\nreturn output;\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -416, 448 ], "id": "5df81021-cf31-468c-bd25-bf11d40df0ea", "name": "Videos" }, { "parameters": { "url": "={{ $json.imageUrl }}", "options": { "response": { "response": { "responseFormat": "file" } } } }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ -208, 640 ], "id": "a6d40956-a3f3-46a0-be2f-8e8c4ee7a548", "name": "GET All Images" }, { "parameters": { "options": { "reset": false } }, "type": "n8n-nodes-base.splitInBatches", "typeVersion": 3, "position": [ 80, 640 ], "id": "0bd85188-dab5-4fd9-a751-cc325e08ce63", "name": "Loop Over Items", "alwaysOutputData": false }, { "parameters": { "aggregate": "aggregateAllItemData", "destinationFieldName": "imgData", "include": "specifiedFields", "fieldsToInclude": "title, guid", "options": {} }, "type": "n8n-nodes-base.aggregate", "typeVersion": 1, "position": [ 448, 640 ], "id": "6524f176-bd5d-49f9-b8ec-3e1f3face261", "name": "Aggregate" }, { "parameters": { "numberInputs": 4 }, "type": "n8n-nodes-base.merge", "typeVersion": 3.2, "position": [ 720, 416 ], "id": "9fa12718-b378-49b5-99b8-22f8c6fc4135", "name": "Merge" }, { "parameters": { "aggregate": "aggregateAllItemData", "options": {} }, "type": "n8n-nodes-base.aggregate", "typeVersion": 1, "position": [ 448, 448 ], "id": "15431bf2-7836-4f12-aa2a-902d06593a73", "name": "Aggregate2" }, { "parameters": { "rule": { "interval": [ { "field": "hours", "hoursInterval": 6 } ] } }, "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [ -2336, 448 ], "id": "80a434c8-37d5-4c67-a4fc-f39232ce617d", "name": "Schedule Trigger1" }, { "parameters": { "documentId": { "__rl": true, "value": "1YZM59IZjDFPMszFE9Dk3opa7qrPN90HDPqg1QGk1nDE", "mode": "id" }, "sheetName": { "__rl": true, "value": 94180956, "mode": "list", "cachedResultName": "Article", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1YZM59IZjDFPMszFE9Dk3opa7qrPN90HDPqg1QGk1nDE/edit#gid=94180956" }, "filtersUI": { "values": [ { "lookupColumn": "Source URL", "lookupValue": "={{ $json.link }}" } ] }, "options": {} }, "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.6, "position": [ -1568, 448 ], "id": "55e9b7b5-fa51-4ed0-845c-1eab0c5c3965", "name": "Filter by URL", "alwaysOutputData": true, "executeOnce": true, "credentials": { "googleSheetsOAuth2Api": { "id": "4zobG6lG0OtqxOPJ", "name": "Google Sheets account" } } }, { "parameters": { "jsCode": "const count = items.length;\n\n// Check if 'SourceURL' has a valid value in the last item\nconst sourceURL = $input.last().json['Source URL'];\nconst isSourceURLValid = sourceURL && sourceURL.trim() !== ''; // true if SourceURL has value, false if empty or not found\n\nreturn [{\n json: {\n row_number: $input.last().json.row_number,\n pubDate: $input.last().json.Date,\n Title: $input.last().json.Title,\n SourceURL: sourceURL,\n isSourceURLValid: isSourceURLValid ? false : true // Will return true if SourceURL has value, false if empty or not found\n }\n}];" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -1360, 448 ], "id": "04cfcc6e-95f3-42c6-a47b-409a637acbc9", "name": "Duplicate ArticleCheck", "alwaysOutputData": true }, { "parameters": { "url": "https://www.whats-on-netflix.com/feed/", "options": { "ignoreSSL": false } }, "type": "n8n-nodes-base.rssFeedRead", "typeVersion": 1.1, "position": [ -2160, 448 ], "id": "50371625-755a-4c9e-9f74-0007b826508c", "name": "RSS Read" }, { "parameters": { "jsCode": "const inputUrl = $input.first().json.link || ''; // Replace 'url' with your actual field\n\n// Remove protocol (http:// or https://)\nconst noProtocol = inputUrl.replace(/^https?:\\/\\//, '').replace(/^www\\./, '');\n\n// Get domain only\nconst domain = noProtocol.split('/')[0]; // e.g., \"beebom.com\"\n\n// Optional: Get domain without TLD\nconst sourceWebsiteName = domain.split('.')[0]; // e.g., \"beebom\"\n\nreturn {\n json: {\n ...$json,\n domain,\n sourceWebsiteName\n }\n};\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -1760, 448 ], "id": "459aef92-2c4d-48ef-9ce5-7c1d107e8256", "name": "Get Website Name" }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "43eeeab9-82a6-4400-8fc7-a803272faa61", "leftValue": "={{ $json.isSourceURLValid }}", "rightValue": "\"true\"", "operator": { "type": "boolean", "operation": "true", "singleValue": true } } ], "combinator": "and" }, "options": {} }, "type": "n8n-nodes-base.if", "typeVersion": 2.2, "position": [ -1168, 448 ], "id": "dbb58262-bc05-4c49-b73c-c5f68983d5f4", "name": "If" }, { "parameters": { "url": "=https://www.keeperfacts.com/wp-json/wp/v2/categories?search={{ $('Structure the data').item.json.articleCategorie }}", "authentication": "predefinedCredentialType", "nodeCredentialType": "wordpressApi", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1888, 448 ], "id": "c0fdc749-f2f5-46dd-90a4-2083a34fb2bd", "name": "Get Category ID", "credentials": { "wordpressApi": { "id": "8qCR4kNx0Vvnkq0y", "name": "Keeperfacts wp acc" } } }, { "parameters": { "method": "POST", "url": "=https://keeperfacts.com/wp-json/wp/v2/posts/{{ $('Publish Article').item.json.id }}", "authentication": "predefinedCredentialType", "nodeCredentialType": "wordpressApi", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "featured_media", "value": "={{ $json.id }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 2880, 448 ], "id": "20a4806b-e12c-45a9-9f45-b6347a9ba351", "name": "Update Feature Img", "credentials": { "wordpressApi": { "id": "8qCR4kNx0Vvnkq0y", "name": "Keeperfacts wp acc" } } }, { "parameters": { "operation": "append", "documentId": { "__rl": true, "value": "1YZM59IZjDFPMszFE9Dk3opa7qrPN90HDPqg1QGk1nDE", "mode": "id" }, "sheetName": { "__rl": true, "value": 94180956, "mode": "list", "cachedResultName": "Article", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1YZM59IZjDFPMszFE9Dk3opa7qrPN90HDPqg1QGk1nDE/edit#gid=94180956" }, "columns": { "mappingMode": "defineBelow", "value": { "Our URL": "={{ $json.link }}", "Our Title": "={{ $json.title.raw }}", "Our Website Name": "Keeperfact", "Pub date": "={{ $json.date }}", "Source Website Name": "=whats-on-netflix", "Title": "={{ $('Structure the data').item.json.articleTitle }}", "Source URL": "={{ $('Structure the data').item.json.articleURL }}", "Date": "={{ $('Structure the data').item.json.articlePubdate }}" }, "matchingColumns": [], "schema": [ { "id": "Date", "displayName": "Date", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Source Website Name", "displayName": "Source Website Name", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Title", "displayName": "Title", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Source URL", "displayName": "Source URL", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Pub date", "displayName": "Pub date", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Our Website Name", "displayName": "Our Website Name", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Our Title", "displayName": "Our Title", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }, { "id": "Our URL", "displayName": "Our URL", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true } ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {} }, "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.6, "position": [ 2288, 448 ], "id": "4501fb84-bb17-4ed9-9c9b-0be92b96d408", "name": "Update New Data", "alwaysOutputData": true, "credentials": { "googleSheetsOAuth2Api": { "id": "4zobG6lG0OtqxOPJ", "name": "Google Sheets account" } }, "onError": "continueRegularOutput" }, { "parameters": { "title": "={{ $('Ready Article').item.json.message.content.title }}", "additionalFields": { "authorId": 123, "content": "={{ $('Ready Article').item.json.message.content.content }}", "status": "publish", "categories": "={{ $json.id }}" } }, "type": "n8n-nodes-base.wordpress", "typeVersion": 1, "position": [ 2080, 448 ], "id": "74106d51-5aeb-405b-bafb-188c7dfef77d", "name": "Publish Article", "credentials": { "wordpressApi": { "id": "8qCR4kNx0Vvnkq0y", "name": "Keeperfacts wp acc" } } }, { "parameters": { "method": "POST", "url": "https://www.keeperfacts.com/wp-json/wp/v2/categories", "authentication": "predefinedCredentialType", "nodeCredentialType": "wordpressApi", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "name", "value": "={{ $('Structure the data').item.json.articleCategorie }}" } ] }, "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 1680, 448 ], "id": "fb4ce853-1931-40be-8382-cd13c5a3cb34", "name": "Set New Category", "alwaysOutputData": true, "credentials": { "wordpressApi": { "id": "8qCR4kNx0Vvnkq0y", "name": "Keeperfacts wp acc" } }, "onError": "continueRegularOutput" }, { "parameters": { "jsCode": "// Get the item\nconst item = $input.first().json;\n\n// Extract content safely as a string\nconst content = item?.message?.content;\nif (typeof content !== 'string') {\n return [{ json: { ...item, error: 'Content is not a string' } }];\n}\n\n// Find YouTube embed URL\nconst match = content.match(/https:\\/\\/www\\.youtube\\.com\\/embed\\/[a-zA-Z0-9_-]+/);\n\nif (match) {\n const embedUrl = match[0];\n const iframe = ``;\n\n // Replace the YouTube URL with the iframe\n const newContent = content.replace(embedUrl, iframe);\n\n return [{ json: { ...item, article: newContent } }];\n} else {\n // No match\n return [{ json: { ...item, article: content, note: 'No YouTube embed URL found' } }];\n}\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 1488, 448 ], "id": "dddb1a40-87e2-496c-bc34-4e0a06cc7161", "name": "Update Embedding" }, { "parameters": {}, "type": "n8n-nodes-base.limit", "typeVersion": 1, "position": [ -1968, 448 ], "id": "1a6c4849-e36a-4c77-a19d-4468f3acf9ee", "name": "Limit Article" }, { "parameters": { "url": "={{ $('Get Website Name').item.json.link }}", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ -896, 448 ], "id": "54f16c3d-6798-44ec-91c4-b96ee1c6339c", "name": "fetch Article HTML" }, { "parameters": { "operation": "extractHtmlContent", "extractionValues": { "values": [ { "key": "Title", "cssSelector": "h1.post-title" }, { "key": "content", "cssSelector": "div#article-body.entry" }, { "key": "feature_img", "cssSelector": "img.size-full", "returnValue": "attribute", "attribute": "data-lazy-src" }, { "key": "youtube_vid_title", "cssSelector": ".rll-youtube-player", "returnValue": "attribute", "attribute": "data-alt", "returnArray": true }, { "key": "youtube_vid_url", "cssSelector": ".rll-youtube-player", "returnValue": "attribute", "attribute": "data-src", "returnArray": true }, { "key": "images", "cssSelector": "div#article-body.entry div.entry-inner picture", "skipSelectors": "src", "returnArray": true } ] }, "options": { "cleanUpText": true } }, "type": "n8n-nodes-base.html", "typeVersion": 1.2, "position": [ -704, 448 ], "id": "ec33b62b-fa9d-421e-baf8-760fef41d9c0", "name": "Clean HTML" }, { "parameters": { "assignments": { "assignments": [ { "id": "5652d57e-5034-4112-8925-09abf403093d", "name": "articlePubdate", "value": "={{ $('Get Website Name').item.json.pubDate }}", "type": "string" }, { "id": "f29eeeb4-9e81-4e48-91f4-cb8c92e9512d", "name": "articleTitle", "value": "={{ $('Get Website Name').item.json.title }}", "type": "string" }, { "id": "8cf984c6-ccd7-4d22-8232-ca1ced4d1e9f", "name": "feature_img", "value": "={{ $json.feature_img }}", "type": "string" }, { "id": "6d66b50c-2652-4bec-a5c0-2b0607c3ca9e", "name": "articleURL", "value": "={{ $('Get Website Name').item.json.link }}", "type": "string" }, { "id": "c8d5f29f-e48c-45ea-9738-c3fc242c332f", "name": "articleCategorie", "value": "={{ $('Get Website Name').item.json.categories[0] }}", "type": "string" }, { "id": "8df7bd30-3f08-4b3f-a574-a9a329d76713", "name": "sourceWebsiteName", "value": "={{ $('Get Website Name').item.json.sourceWebsiteName }}", "type": "string" } ] }, "options": {} }, "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ 0, 0 ], "id": "e2efb81c-ff38-46c7-acce-3d5b35c30c64", "name": "Take Websites data" }, { "parameters": { "method": "POST", "url": "https://keeperfacts.com//wp-json/wp/v2/media", "authentication": "predefinedCredentialType", "nodeCredentialType": "wordpressApi", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "content-disposition", "value": "=attachment;filename= {{ $binary.data.fileName.replace(/\\.[^/.]+$/, \"\") }}.jpg" }, { "name": "content-type", "value": "={{ $binary.data.mimeType }}" } ] }, "sendBody": true, "contentType": "binaryData", "inputDataFieldName": "data", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 2688, 448 ], "id": "1af03886-aea6-4a19-89b1-1fd5c2536c77", "name": "Upload F img to WP", "executeOnce": true, "credentials": { "wordpressApi": { "id": "8qCR4kNx0Vvnkq0y", "name": "Keeperfacts wp acc" } } }, { "parameters": { "url": "={{ $('Structure the data').item.json.featureImage }}", "options": { "response": { "response": { "responseFormat": "file" } } } }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 2480, 448 ], "id": "c7bcdc2a-fcd5-4693-96c8-dcb17fe420dd", "name": "GET F Image" }, { "parameters": { "jsCode": "// Initialize variables for video, image data, and article outline\nlet videoData = '';\nlet imageData = '';\nlet articleOutline = '';\n\n// Initialize the variables for the article's metadata\nlet articlePubdate = '';\nlet articleTitle = '';\nlet articleURL = '';\nlet articleCategorie = '';\n\n// Debugging: Log the entire input data to inspect its structure\nconsole.log(\"Input data:\", items);\n\n// **Extract Video Data Dynamically**\nfor (let i = 0; i < items.length; i++) {\n const videos = items[i]?.json?.data;\n if (Array.isArray(videos)) {\n console.log(`Video Data Found at items[${i}]:`, videos); // Log video data to check structure\n videos.forEach((video, index) => {\n if (video.vidTitle && video.vidUrl) {\n videoData += `${index + 1}. \"${video.vidTitle}\": \"${video.vidUrl}\",\\n`; // Add index and construct the string for video data\n } else {\n console.log(`Missing video title or URL in items[${i}]`, video);\n }\n });\n } else {\n console.log(`No video data found or data is not an array at items[${i}]`);\n }\n}\n\n// **Extract Image Data Dynamically**\nlet featureImage = ''; // First image URL\nlet isFirstImageCaptured = false;\n\nfor (let i = 0; i < items.length; i++) {\n const images = items[i]?.json?.imgData;\n if (Array.isArray(images)) {\n console.log(`Image Data Found at items[${i}]:`, images); // Log image data to check structure\n images.forEach((image) => {\n if (image.title && image.guid && image.guid.rendered) {\n if (!isFirstImageCaptured) {\n featureImage = image.guid.rendered; // Capture only the first image URL\n isFirstImageCaptured = true;\n } else {\n imageData += `\"${image.title.rendered}\": \"${image.guid.rendered}\",\\n`; // Add to imageData\n }\n } else {\n console.log(`Missing image title or URL in items[${i}]`, image);\n }\n });\n } else {\n console.log(`No image data found or imgData is not an array at items[${i}]`);\n }\n}\n\n\n// **Extract Article Outline and Metadata**\narticleOutline = items[1]?.json?.message?.content || 'No content available';\nconsole.log('Article Outline:', articleOutline);\n\n// Extract article metadata (assuming they are in the first item)\narticlePubdate = items[0]?.json?.articlePubdate || 'No publication date available';\narticleTitle = items[0]?.json?.articleTitle || 'No title available';\narticleURL = items[0]?.json?.articleURL || 'No URL available';\narticleCategorie = items[0]?.json?.articleCategorie || 'No category available';\nsourceWebsiteName = items[0]?.json?.sourceWebsiteName || 'No source available';\n\n// Prepare the structured output with indexed data\nconst output = {\n articleOutline: articleOutline.trim(),\n videoData: videoData.trim(),\n imageData: imageData.trim(),\n featureImage: featureImage.trim(),\n articlePubdate: articlePubdate.trim(),\n articleTitle: articleTitle.trim(),\n articleURL: articleURL.trim(),\n articleCategorie: articleCategorie.trim(),\n};\n\n// Return the structured output\nreturn [{\n json: output\n}];\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 928, 448 ], "id": "9b5bd3c6-56ec-458e-a2ae-9dde42ca662a", "name": "Structure the data" }, { "parameters": { "modelId": { "__rl": true, "value": "gpt-4.1-mini", "mode": "list", "cachedResultName": "GPT-4.1-MINI" }, "messages": { "values": [ { "content": "=You are an expert content strategist specializing in entertainment and streaming platforms, especially Netflix. I will provide you with a Netflix-related article. Your task is to carefully analyze the content and generate a clear and organized **article outline** that captures its core structure, key sections, and important discussion points.\n\n**Guidelines:**\n\n* The outline should maintain the **original intent and theme** of the article.\n* Identify and list the **main headings and subheadings** that can be used to rewrite or expand the article.\n* Keep the outline **SEO-friendly**, focusing on relevant topics, release titles, dates, and viewer interest points.\n* Avoid rewriting the article itself—just give a **detailed and usable outline** for content creation.\n* The article should be in markdown format.\n* **No need of adding numbering in headings**.\n* **Don't start the article with an H2 tag—begin with a catchy line without any heading or title.**\n\n\nStart the response with a short identification of the **article category** (e.g., \"Upcoming Releases,\" \"Weekly Roundup,\" \"Original Series Reviews,\" etc.).", "role": "system" }, { "content": "=The Title of article : \"{{ $json.title }}\"\n\nThe Content of article: \n\"{{ $json.cleanedContent }}\"" } ] }, "options": { "temperature": 0.7 } }, "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 1.8, "position": [ 288, 240 ], "id": "47684886-b45a-4374-9eed-a073b51f7d43", "name": "Outline of article", "credentials": { "openAiApi": { "id": "jtLWrEq6HGCqOhD7", "name": "OpenAi account" } } }, { "parameters": { "modelId": { "__rl": true, "value": "gpt-4.1-mini", "mode": "list", "cachedResultName": "GPT-4.1-MINI" }, "messages": { "values": [ { "content": "=You are a professional SEO content strategist and entertainment writer for **Keeperfact**, a leading site in streaming, web series, and pop culture.\n\nYou will receive three specific data inputs:\n\n1. **Article Outline** (use this as the sole structure for the article):\n\n2. **YouTube Trailer/Teaser URLs**:\n\n3. **Image URLs**:\n\n\n---\n\n**Instructions:**\n\n1. **Article Construction**\n\n * Rely entirely on the provided **article outline** for structure and flow.\n * Use **only** the YouTube trailer/teaser URLs and image URLs provided—do not add anything extra.\n * For each section and subheading, integrate relevant YouTube trailer links and image URLs by **matching them with section titles/subtitles** where possible.\n\n2. **Multimedia Embedding**\n\n * **Images:** Insert every image URL once using `\"RELEVANT_TITLE\"` directly after or within the corresponding outline section, ensuring the alt text is descriptive and matches the heading or subheading.\n\n3. **Formatting & Output**\n\n * Deliver the final article as **clean, WordPress-ready HTML**.\n * Use: `

    `, `

    `, `
      `, `
    • `, ``, ``, and `

      `.\n * No external links unless explicitly provided.\n * Do **not** conduct any extra research or include any commentary/explanation—just the finished article HTML. \n * **YouTube URLs:** Don't embedd the youtube link only palce the you link in different line don't embedd it.\n\n4. **Tone, Style & Audience**\n\n * Determine if the outline’s intent is **informational**, **editorial**, or **entertainment news**; write in a matching, fan-friendly, and engaging style.\n * Value for Netflix, web series, or pop culture fans should be clear throughout.\n * Avoid keyword stuffing—keep it natural and flowing.\n\n5. **Conclusion**\n\n * End with a strong **Call to Action** for \"Keeperfact\" readers (stream, comment, or explore more).\n\n---\n\n**Output:**\n\n* Return **only** the completed HTML article with all sections, images, and YouTube URLs properly placed and formatted.\n* Ensure the article is ready to be pasted directly into WordPress.\n* Do not include any extra commentary or formatting explanation.\n\n**Output Structure**\n\n```json\n{\n \"title\": \"the original title here\",\n \"content\": \"the rephrased HTML content here\"\n}\n```\n\n\n", "role": "system" }, { "content": "=1. The Outline of article: \n{{ $json.articleOutline }}\n\n2. YouTube trailer/teaser URLs:\n{{ $json.videoData }}\n\n3. Image URLs:\n{{ $json.imageData }}" } ] }, "jsonOutput": true, "options": {} }, "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 1.8, "position": [ 1120, 448 ], "id": "4f7361dc-eddf-46be-babc-67a3825dba29", "name": "Ready Article", "credentials": { "openAiApi": { "id": "jtLWrEq6HGCqOhD7", "name": "OpenAi account" } } }, { "parameters": { "jsCode": "const title = $json[\"Title\"];\nconst content = $json[\"content\"];\n\n// Extract the first URL inside square brackets []\nconst urlMatch = content.match(/\\[(https?:\\/\\/[^\\]]+)\\]/);\n\nlet featureImage = null;\nlet cleanedContent = content;\n\nif (urlMatch) {\n featureImage = urlMatch[1];\n // Remove the first occurrence of the URL including brackets\n cleanedContent = content.replace(urlMatch[0], \"\");\n}\n\nreturn [\n {\n json: {\n title,\n featureImage,\n cleanedContent\n }\n }\n];\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -416, 240 ], "id": "6253a062-a05d-4c96-9ac0-35092ede503e", "name": "Content & Title" }, { "parameters": { "method": "POST", "url": "https://keeperfacts.com//wp-json/wp/v2/media", "authentication": "predefinedCredentialType", "nodeCredentialType": "wordpressApi", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "content-disposition", "value": "=attachment;filename= {{ $binary.data.fileName.replace(/\\.[^/.]+$/, \"\") }}.jpg" }, { "name": "content-type", "value": "={{ $binary.data.mimeType }}" } ] }, "sendBody": true, "contentType": "binaryData", "inputDataFieldName": "data", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 224, 752 ], "id": "e79ef2d3-feac-49fc-bc35-6c6376d77eb2", "name": "Upload Img to WP", "executeOnce": true, "credentials": { "wordpressApi": { "id": "8qCR4kNx0Vvnkq0y", "name": "Keeperfacts wp acc" } } }, { "parameters": { "content": "**Title:** RSS Article Filtering & Deduplication\n\n**Process Flow:**\n1. **Trigger & Fetch:** A scheduled trigger automatically runs this workflow to fetch the latest articles from an RSS feed.\n2. **Limit & Enrich:** The flow limits the number of articles processed to avoid overload, then extracts the website name from each article's URL for better organization.\n3. **Filter & Deduplicate:** Articles are first filtered by URL rules to remove unwanted sources. Then, each article is checked against a Google Sheet database to identify duplicates.\n4. **Decision Point:** If an article is new (not in the sheet), the workflow continues for further processing (e.g., posting, notification). If it's a duplicate, the branch stops, doing nothing.\n\n**Key Purpose:** To automatically collect, clean, and check new articles from an RSS feed, ensuring only unique content is processed further, preventing redundant actions.", "height": 416, "width": 1360 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2368, 192 ], "id": "10839cba-9eb7-472f-b482-375f1dde79c8", "name": "Sticky Note" }, { "parameters": { "content": "**Purpose:** Processes unique articles by extracting content, images, and metadata, then formats and publishes to WordPress.\n\n**Key Steps:**\n1. **Content Extraction:** Pulls full article title, HTML content, and all images from the source URL.\n2. **Structuring:** Analyzes the article to create an outline/message structure.\n3. **Aggregation:** Combines all extracted data into a final, formatted payload.\n4. **Publication:** Automatically uploads the complete article as a new post to the WordPress site.\n\n**Final Result:** A fully formatted blog post published automatically from the RSS feed.", "height": 256, "width": 944 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -384, -240 ], "id": "a43bcc3a-3ebb-46bb-8148-e05eea6b7c6d", "name": "Sticky Note1" }, { "parameters": { "content": "### Final Step - Structuring & Logging\n\n**Purpose:** Formats the final data and publishes it, then logs the action for record-keeping.\n\n**Actions:**\n1. **Structure Data:** Prepares and organizes all extracted content (title, HTML, images) into the correct format for WordPress.\n2. **Publish to WordPress:** Sends a POST request to create a new post on the specified WordPress site.\n3. **Log to Sheets & DB:** Appends a record of the published post to a Google Sheet creating a complete audit trail.\n\n**Result:** The article is now live on the website and its details are saved for tracking and analysis.", "height": 304, "width": 800 }, "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 1744, 80 ], "id": "af8f95a7-c711-42ef-870e-923ad7227261", "name": "Sticky Note2" } ], "pinData": {}, "connections": { "Images": { "main": [ [ { "node": "GET All Images", "type": "main", "index": 0 } ] ] }, "Videos": { "main": [ [ { "node": "Aggregate2", "type": "main", "index": 0 } ] ] }, "GET All Images": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] }, "Loop Over Items": { "main": [ [ { "node": "Aggregate", "type": "main", "index": 0 } ], [ { "node": "Upload Img to WP", "type": "main", "index": 0 } ] ] }, "Aggregate": { "main": [ [ { "node": "Merge", "type": "main", "index": 3 } ] ] }, "Merge": { "main": [ [ { "node": "Structure the data", "type": "main", "index": 0 } ] ] }, "Aggregate2": { "main": [ [ { "node": "Merge", "type": "main", "index": 2 } ] ] }, "Schedule Trigger1": { "main": [ [ { "node": "RSS Read", "type": "main", "index": 0 } ] ] }, "Filter by URL": { "main": [ [ { "node": "Duplicate ArticleCheck", "type": "main", "index": 0 } ] ] }, "Duplicate ArticleCheck": { "main": [ [ { "node": "If", "type": "main", "index": 0 } ] ] }, "RSS Read": { "main": [ [ { "node": "Limit Article", "type": "main", "index": 0 } ] ] }, "Get Website Name": { "main": [ [ { "node": "Filter by URL", "type": "main", "index": 0 } ] ] }, "If": { "main": [ [ { "node": "fetch Article HTML", "type": "main", "index": 0 } ] ] }, "Get Category ID": { "main": [ [ { "node": "Publish Article", "type": "main", "index": 0 } ] ] }, "Update New Data": { "main": [ [ { "node": "GET F Image", "type": "main", "index": 0 } ] ] }, "Publish Article": { "main": [ [ { "node": "Update New Data", "type": "main", "index": 0 } ] ] }, "Set New Category": { "main": [ [ { "node": "Get Category ID", "type": "main", "index": 0 } ] ] }, "Update Embedding": { "main": [ [ { "node": "Set New Category", "type": "main", "index": 0 } ] ] }, "Limit Article": { "main": [ [ { "node": "Get Website Name", "type": "main", "index": 0 } ] ] }, "fetch Article HTML": { "main": [ [ { "node": "Clean HTML", "type": "main", "index": 0 } ] ] }, "Clean HTML": { "main": [ [ { "node": "Take Websites data", "type": "main", "index": 0 }, { "node": "Images", "type": "main", "index": 0 }, { "node": "Content & Title", "type": "main", "index": 0 }, { "node": "Videos", "type": "main", "index": 0 } ] ] }, "Take Websites data": { "main": [ [ { "node": "Merge", "type": "main", "index": 0 } ] ] }, "Upload F img to WP": { "main": [ [ { "node": "Update Feature Img", "type": "main", "index": 0 } ] ] }, "GET F Image": { "main": [ [ { "node": "Upload F img to WP", "type": "main", "index": 0 } ] ] }, "Structure the data": { "main": [ [ { "node": "Ready Article", "type": "main", "index": 0 } ] ] }, "Outline of article": { "main": [ [ { "node": "Merge", "type": "main", "index": 1 } ] ] }, "Ready Article": { "main": [ [ { "node": "Update Embedding", "type": "main", "index": 0 } ] ] }, "Content & Title": { "main": [ [ { "node": "Outline of article", "type": "main", "index": 0 } ] ] }, "Upload Img to WP": { "main": [ [ { "node": "Loop Over Items", "type": "main", "index": 0 } ] ] } }, "active": true, "settings": { "executionOrder": "v1" }, "versionId": "aba5a79e-80c7-4ba4-b6a5-27de6d4de79d", "meta": { "templateCredsSetupCompleted": true, "instanceId": "1f1785d995b3fa32ab6b8219168659331dbe1459fee9ca0c94987e0285ae2676" }, "id": "Sx9MOcD0HnAk7o7E", "tags": [ { "createdAt": "2025-07-23T09:03:28.998Z", "updatedAt": "2025-07-23T09:03:28.998Z", "id": "0TIhg6ju9FxO2Lcp", "name": "Wordpress" }, { "createdAt": "2025-07-23T09:03:28.999Z", "updatedAt": "2025-07-23T09:03:28.999Z", "id": "EytiJJPwSOxyW6Jx", "name": "Article Post" } ] }

    Let's Talk Growth!