This workflow corresponds to n8n.io template #15443 — we link there as the canonical source.
This workflow follows the Chat → Chat Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "NUa98k47BO1lo5iLgz-J7",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Extract URLs From Sitemaps",
"tags": [
{
"id": "cl7hSwyoDY6BEYfE",
"name": "Sitemap",
"createdAt": "2026-04-18T16:38:36.214Z",
"updatedAt": "2026-04-18T16:38:36.214Z"
}
],
"nodes": [
{
"id": "557f84b3-8502-417a-898d-76c41bd7175b",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
160
],
"parameters": {
"color": 3,
"width": 1382,
"height": 736,
"content": "## \ud83d\udce5 1. Input & Validation\nListens for user chat input, fetches the sitemap URL, and validates if the domain is correctly formatted and accessible."
},
"typeVersion": 1
},
{
"id": "3651fac9-ba8e-409c-a57f-9eb17f1cd772",
"name": "Sticky Note 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
-320
],
"parameters": {
"color": 2,
"width": 1360,
"height": 786,
"content": "## \u2699\ufe0f 2. XML Parsing & Transformation\nConverts the raw XML to JSON, checks if it is a sitemap index, splits the relevant URLs, and maps the fields for data export."
},
"typeVersion": 1
},
{
"id": "097888c1-2e15-4b5c-880f-0097688d8a6b",
"name": "Sticky Note 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2560,
32
],
"parameters": {
"color": 6,
"width": 2300,
"height": 1106,
"content": "## \ud83d\udce6 3. File Packaging & Upload\nConverts the extracted data into a sanitized binary file, uploads it to the temporary API host, and returns the final download link to the user."
},
"typeVersion": 1
},
{
"id": "028e0f33-b6e9-4ff5-9440-67a1a1f3ed70",
"name": "Sticky Note README",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1232,
128
],
"parameters": {
"color": 7,
"width": 800,
"height": 300,
"content": "## \ud83d\udcd6 README: Sitemap URL Extractor\n\n**What this tool does:**\nThis automated chat assistant fetches, parses, and extracts all nested URLs from any website's XML sitemap. It converts the raw XML data into a clean, structured file and generates a temporary, one-click download link.\n\n**How to use it:**\n1. **Input:** The user opens the chat window and pastes a valid sitemap URL (e.g., `https://seobatter.com/page-sitemap.xml`).\n2. **Process:** The workflow automatically validates the domain, fetches the XML, flattens the hierarchy, and extracts the target URLs.\n3. **Output:** The data is compiled into a downloadable file and uploaded to a temporary host. The user receives the secure download link directly in the chat."
},
"typeVersion": 1
},
{
"id": "65838709-c4e6-4c84-b678-4eaccbe762dc",
"name": "Sticky Note Limitations",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
496
],
"parameters": {
"color": 6,
"width": 550,
"height": 364,
"content": "## \u26a0\ufe0f Dependencies & Limitations\n\n**1. Direct Sitemaps Only:**\nThis workflow is designed to parse standard XML sitemaps containing direct page links (`<url>`). **It does not recursively crawl Sitemap Index files** (`<sitemapindex>`). If a user inputs an index URL, they must manually provide the underlying child sitemap URLs instead.\n\n**2. Third-Party File Hosting:**\nThis workflow relies on an external, public API (e.g., Uguu, Catbox.moe, Tmpfiles) to host the final file. If that third-party service experiences downtime or changes its CORS/filetype policies, the final upload node will fail.\n\n**3. Memory Constraints:**\nExtremely large sitemaps (e.g., 50,000+ URLs) may exceed n8n's default memory limits during the XML-to-JSON conversion step. This tool is best suited for standard-sized sitemaps."
},
"typeVersion": 1
},
{
"id": "c19716a6-7397-4fe3-b627-e50e254a382a",
"name": "Listen for Sitemap URL",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"notes": "example url: https://seobatter.com/page-sitemap.xml",
"position": [
-304,
304
],
"parameters": {
"options": {
"responseMode": "responseNodes"
}
},
"notesInFlow": true,
"typeVersion": 1.4
},
{
"id": "be408a08-e781-489a-b59a-23adcc552f4b",
"name": "Fetch Sitemap XML",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"maxTries": 5,
"position": [
32,
304
],
"parameters": {
"url": "={{ $json.chatInput }}",
"options": {
"response": {
"response": {
"fullResponse": true
}
}
}
},
"retryOnFail": true,
"typeVersion": 4.3,
"waitBetweenTries": 3000
},
{
"id": "3b6b8e80-59f3-4894-b99a-8510fadc8850",
"name": "Check if URL is Accessible",
"type": "n8n-nodes-base.if",
"position": [
400,
288
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1125f0dc-f7f6-4c92-bb8b-73ee8ec4c01a",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.statusCode }}",
"rightValue": 200
}
]
}
},
"executeOnce": true,
"typeVersion": 2.3
},
{
"id": "bd576d6a-8cf1-4d0d-a41b-d2a7791c7b12",
"name": "Alert User: Invalid URL",
"type": "@n8n/n8n-nodes-langchain.chat",
"position": [
800,
416
],
"parameters": {
"message": "Please enter a valid sitemap or sitemap index URL. Example: \"https://seobatter.com/post-sitemap.xml\"",
"options": {},
"waitUserReply": false
},
"typeVersion": 1
},
{
"id": "c6150cc9-2834-4df3-8271-1d4ac397baba",
"name": "Parse XML to JSON Object",
"type": "n8n-nodes-base.xml",
"position": [
1232,
272
],
"parameters": {
"options": {},
"dataPropertyName": "=data"
},
"typeVersion": 1
},
{
"id": "19c890d0-f476-44bf-9bdc-87f971e8d6e2",
"name": "Check for Sitemap Index",
"type": "n8n-nodes-base.if",
"position": [
1552,
272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "98129e08-b536-492d-8cc6-e13bda990c00",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.sitemapindex }}",
"rightValue": "sitemapindex"
},
{
"id": "a3bd9947-a125-4271-b2b1-7df86e6a5b06",
"operator": {
"type": "object",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{$json.urlset}}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "1e01292f-c322-410d-8194-bf23d23628ad",
"name": "Alert User: Index Not Supported",
"type": "@n8n/n8n-nodes-langchain.chat",
"position": [
1888,
192
],
"parameters": {
"message": "The URL that you've entered is a sitemap index. Please start the process again and entry a sitemap.xml URL.",
"options": {},
"waitUserReply": false
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "fb3d8c43-77b7-4350-9aea-55187d0694de",
"name": "Extract URLs Array",
"type": "n8n-nodes-base.splitOut",
"position": [
2240,
288
],
"parameters": {
"options": {},
"fieldToSplitOut": "urlset.url"
},
"typeVersion": 1
},
{
"id": "273eb943-80d5-42e1-b76e-f60345d3c7f9",
"name": "Format URL Data",
"type": "n8n-nodes-base.set",
"position": [
2672,
288
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "227739b0-b655-4d6b-a7e8-cd86c5452dc3",
"name": "loc",
"type": "string",
"value": "={{ $json.loc }}"
},
{
"id": "074578ef-ecd0-434c-a2f5-4ba75aeaadc9",
"name": "lastmod",
"type": "string",
"value": "={{ $json.lastmod }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "2382f0ee-13df-4f57-8922-70b6215f77b5",
"name": "Convert Data to CSV",
"type": "n8n-nodes-base.convertToFile",
"position": [
3184,
544
],
"parameters": {
"options": {
"headerRow": true
}
},
"typeVersion": 1.1
},
{
"id": "3926bd43-c5e5-4aff-bff1-9552ad20e135",
"name": "Upload File to Host",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
3568,
544
],
"parameters": {
"url": "https://uguu.se/upload",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"name": "output",
"value": "csv"
},
{
"name": "files[]",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
}
},
"typeVersion": 4.3,
"alwaysOutputData": false
},
{
"id": "b7e236de-bb2e-43b7-8cbc-6f0b8b715986",
"name": "Format Final Output",
"type": "n8n-nodes-base.code",
"position": [
4288,
528
],
"parameters": {
"jsCode": "const url = $json.files?.[0]?.url;\n\nreturn [\n {\n json: {\n message: `<${url}>`\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "fb2c1b08-5c1c-4955-b0d4-00f3575ecf4c",
"name": "Send Download Link",
"type": "@n8n/n8n-nodes-langchain.chat",
"onError": "continueRegularOutput",
"position": [
4624,
528
],
"parameters": {
"message": "=Download your file here:\n{{ $json.message }}\n\n",
"options": {},
"waitUserReply": false
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "08c50262-1a52-4e25-8eb0-44843d105dc4",
"name": "Summarize Extraction Stats",
"type": "n8n-nodes-base.summarize",
"position": [
3056,
384
],
"parameters": {
"options": {},
"fieldsToSummarize": {
"values": [
{
"field": "=loc"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "3802bf90-7349-4037-977c-b4c9b53c2403",
"name": "Send Summary",
"type": "@n8n/n8n-nodes-langchain.chat",
"onError": "continueRegularOutput",
"position": [
3488,
384
],
"parameters": {
"message": "=Total number of URLs: {{ $json.count_loc }}\n\n",
"options": {},
"waitUserReply": false
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "d64f5296-60d8-422c-b956-40e79415cdd5",
"name": "Alert User: Upload Failed",
"type": "@n8n/n8n-nodes-langchain.chat",
"position": [
3952,
656
],
"parameters": {
"message": "The output resulted in an error. Please try again or ask the administrator to update the workflow.",
"options": {}
},
"typeVersion": 1
},
{
"id": "15596616-cfdd-4129-8c93-c3b7995c7e94",
"name": "Sticky Note - Node 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
448
],
"parameters": {
"color": 7,
"width": 320,
"height": 340,
"content": "### \ud83d\udcac Listen for Sitemap URL\n\n**What it does:**\nActs as the workflow's entry point. It opens the built-in n8n chat interface and listens for the user to submit a text message (the sitemap URL).\n\n**Configuration:**\nStandard Chat Trigger node configured to capture the `chatInput` string.\n\n**Limitation:**\n* It accepts any text string; URL format validation has to be handled by downstream nodes."
},
"typeVersion": 1
},
{
"id": "2836f0f6-5012-452f-a6df-a92785d8b44b",
"name": "Sticky Note - Node 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
448
],
"parameters": {
"color": 7,
"width": 320,
"height": 290,
"content": "### \ud83c\udf10 Fetch Sitemap XML\n\nMakes an HTTP GET request to download the raw XML sitemap data from the user-provided URL.\n\n**Configuration:**\n* **Method:** `GET`\n* **URL:** Mapped to chat input\n* **Response Format:** `String` *(Crucial: Prevents n8n from prematurely parsing the XML so it can be cleaned).*"
},
"typeVersion": 1
},
{
"id": "adeb3748-1678-488b-9fbb-2e27e64823a3",
"name": "Sticky Note - Node 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
448
],
"parameters": {
"color": 7,
"width": 320,
"height": 278,
"content": "### \ud83d\udea6 Check if URL is Accessible\n\nVerifies the HTTP Request was successful by checking the server's exact response code. Routes to 'True' for a successful fetch, and 'False' for any errors to halt the workflow.\n\n**Configuration:**\n* **Node Type:** IF\n* **Setup:** Checks if the returned HTTP Status Code equals `200`."
},
"typeVersion": 1
},
{
"id": "f2a6f86b-eba9-4c13-9560-d211872897aa",
"name": "Sticky Note - Node 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
560
],
"parameters": {
"color": 7,
"width": 320,
"height": 280,
"content": "### \ud83d\uded1 Alert User: Invalid URL\n\nSends an error message to the chat when the website returns an HTTP status code other than `200` (e.g., 404 Not Found, 500 Server Error), effectively stopping the workflow.\n\n**Configuration:**\n* **Node Type:** Chat Response\n* **Setup:** Contains a friendly, hardcoded error message explaining the failure."
},
"typeVersion": 1
},
{
"id": "30e137e8-a21a-41df-99e6-5c9e015117db",
"name": "Sticky Note - Node 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1104,
-16
],
"parameters": {
"color": 7,
"width": 320,
"height": 256,
"content": "### \ud83d\udd23 Parse XML to JSON Object\n\nConverts the successfully downloaded raw XML text string into a structured JSON object. This translates the payload so the workflow can easily check for index files and extract the nested URLs.\n\n**Configuration:**\n* **Node Type:** XML\n* **Mode:** XML to JSON"
},
"typeVersion": 1
},
{
"id": "a25157e8-a6cd-4a44-b5f3-5cc1f19638a7",
"name": "Sticky Note - Node 7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1776,
-128
],
"parameters": {
"color": 7,
"width": 320,
"height": 300,
"content": "### \ud83d\uded1 Alert User: Index Not Supported\n\nSends an error message to the chat when the parsed XML is identified as a Sitemap Index (`<sitemapindex>`) rather than a standard URL list, stopping the workflow since recursive crawling is not supported.\n\n**Configuration:**\n* **Node Type:** Chat Response\n* **Setup:** Hardcoded error message instructing the user to provide direct child sitemap URLs instead."
},
"typeVersion": 1
},
{
"id": "d872ece0-176e-4377-b9e6-3b81bd0fec83",
"name": "Sticky Note - Node 6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1440,
-96
],
"parameters": {
"color": 7,
"width": 320,
"height": 352,
"content": "### \ud83d\udd00 Check for Sitemap Index\n\nExamines the parsed JSON data to determine if the root element is a `<sitemapindex>` instead of a standard `<urlset>`. This ensures the workflow only attempts to extract URLs from standard sitemaps and catches nested indices before they break the workflow.\n\n**Configuration:**\n* **Node Type:** IF\n* **Setup:** Checks if the JSON key `sitemapindex` exists. Routes to 'True' (error path) if found, and 'False' (continue path) if not."
},
"typeVersion": 1
},
{
"id": "661543e6-9335-49d3-9b99-27707233cc74",
"name": "Sticky Note - Node 8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2112,
-48
],
"parameters": {
"color": 7,
"width": 320,
"height": 300,
"content": "### \ud83d\udccb Extract URLs Array\n\nIsolates the list of URLs from the parsed JSON and splits them into individual n8n items. This converts the single block of XML data into a list of separate, processable links that the workflow can format and export.\n\n**Configuration:**\n* **Node Type:** Item Lists\n* **Setup:** Configured to target and split out the specific JSON array containing the page URLs (usually `urlset.url`)."
},
"typeVersion": 1
},
{
"id": "0c204d2a-7490-4ea2-ab9a-3c182d02a03e",
"name": "Sticky Note - Node 9",
"type": "n8n-nodes-base.stickyNote",
"position": [
2576,
448
],
"parameters": {
"color": 7,
"width": 320,
"height": 300,
"content": "### \ud83e\uddf9 Format URL Data\n\nProcesses the extracted array of URLs, cleaning and mapping the raw data into a standardized structure. This ensures the data is perfectly formatted before being converted into the final export file.\n\n**Configuration:**\n* **Node Type:** Edit Fields / Code\n* **Setup:** Maps and isolates the specific URL properties (like the `<loc>` tag) needed for the final output."
},
"typeVersion": 1
},
{
"id": "d72d3aa3-a9e5-4f09-8c0b-3ebc48fcd25f",
"name": "Sticky Note - Node 10",
"type": "n8n-nodes-base.stickyNote",
"position": [
2928,
144
],
"parameters": {
"color": 7,
"width": 400,
"height": 232,
"content": "### \ud83d\udcca Summarize Extraction Stats\n\nAggregates the processed data to calculate the total number of extracted URLs. This provides the user with a quick success metric.\n\n**Configuration:**\n* **Node Type:** Summarize\n* **Setup:** Counts the total number of items passed from the formatting step."
},
"typeVersion": 1
},
{
"id": "c453a30b-5df6-4c19-b7a1-ed67dc1cfd81",
"name": "Sticky Note - Node 11",
"type": "n8n-nodes-base.stickyNote",
"position": [
3344,
144
],
"parameters": {
"color": 7,
"width": 352,
"height": 228,
"content": "### \ud83d\udcac Send Summary\n\nSends a chat message to the user displaying the total number of URLs successfully extracted.\n\n**Configuration:**\n* **Node Type:** Chat Response\n* **Setup:** Outputs the aggregated count from the Summarize node."
},
"typeVersion": 1
},
{
"id": "5847a128-7846-46e6-a606-f20b737160ad",
"name": "Sticky Note - Node 12",
"type": "n8n-nodes-base.stickyNote",
"position": [
3104,
704
],
"parameters": {
"color": 7,
"width": 320,
"height": 260,
"content": "### \ud83d\udcc4 Convert Data to CSV\n\nConverts the structured JSON data into a clean CSV file format, preparing it for the final file upload.\n\n**Configuration:**\n* **Node Type:** Convert to CSV / Spreadsheet File\n* **Setup:** Transforms the extracted items into a binary CSV payload."
},
"typeVersion": 1
},
{
"id": "47b4408b-b6c8-410b-928e-d2666705ff2d",
"name": "Sticky Note - Node 13",
"type": "n8n-nodes-base.stickyNote",
"position": [
3472,
704
],
"parameters": {
"color": 7,
"width": 320,
"height": 304,
"content": "### \ud83c\udf10 Upload File to Host\n\nTakes the generated CSV file and uploads it to a temporary third-party file hosting service via an API request. This step generates the publicly accessible URL that the user will use to download their data.\n\n**Configuration:**\n* **Node Type:** HTTP Request\n* **Setup:** Sends a `POST` request containing the binary CSV file to the hosting service (e.g., Uguu) using a multipart/form-data payload."
},
"typeVersion": 1
},
{
"id": "b246f3eb-a7a9-4848-84fe-f3ef51432d00",
"name": "Sticky Note - Node 14",
"type": "n8n-nodes-base.stickyNote",
"position": [
4192,
672
],
"parameters": {
"color": 7,
"width": 320,
"height": 296,
"content": "### \ud83d\udd24 Format Final Output\n\nExtracts the public file URL from the hosting provider's API response and formats it into a clean string. This translates the raw upload data from the previous step into a perfect, clickable download link so the final chat node can easily present it to the user.\n\n**Configuration:**\n* **Node Type:** Set / Edit Fields\n* **Setup:** Isolates the newly generated file URL from the HTTP upload response."
},
"typeVersion": 1
},
{
"id": "b641d9dd-ace0-4844-bff5-f266fc08748b",
"name": "Sticky Note - Node 15",
"type": "n8n-nodes-base.stickyNote",
"position": [
4528,
672
],
"parameters": {
"color": 7,
"width": 320,
"height": 280,
"content": "### \ud83d\udcac Send Download Link\n\nSends the final chat message to the user containing the clickable public URL generated in the previous step, allowing them to easily download their extracted sitemap data.\n\n**Configuration:**\n* **Node Type:** Chat Response\n* **Setup:** Outputs a message embedding the formatted download URL."
},
"typeVersion": 1
},
{
"id": "4809d4b8-d912-4d58-9e3a-2448697798ef",
"name": "Sticky Note - Node 16",
"type": "n8n-nodes-base.stickyNote",
"position": [
3872,
800
],
"parameters": {
"color": 7,
"width": 320,
"height": 316,
"content": "### \ud83d\uded1 Alert User: Upload Failed\n\nSends a chat message informing the user that the final file upload failed, effectively halting the workflow. This triggers if the third-party hosting service is down or rejects the CSV payload, letting the user know why they won't receive a download link.\n\n**Configuration:**\n* **Node Type:** Chat Response\n* **Setup:** Contains a friendly, hardcoded error message explaining the upload failure."
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "49d60cdd-6dd9-4a32-a158-0cdd44c2eb21",
"connections": {
"Format URL Data": {
"main": [
[
{
"node": "Summarize Extraction Stats",
"type": "main",
"index": 0
},
{
"node": "Convert Data to CSV",
"type": "main",
"index": 0
}
]
]
},
"Fetch Sitemap XML": {
"main": [
[
{
"node": "Check if URL is Accessible",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert User: Invalid URL",
"type": "main",
"index": 0
}
]
]
},
"Extract URLs Array": {
"main": [
[
{
"node": "Format URL Data",
"type": "main",
"index": 0
}
]
]
},
"Send Download Link": {
"main": [
[]
]
},
"Convert Data to CSV": {
"main": [
[
{
"node": "Upload File to Host",
"type": "main",
"index": 0
}
]
]
},
"Format Final Output": {
"main": [
[
{
"node": "Send Download Link",
"type": "main",
"index": 0
}
]
]
},
"Upload File to Host": {
"main": [
[
{
"node": "Format Final Output",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert User: Upload Failed",
"type": "main",
"index": 0
}
]
]
},
"Listen for Sitemap URL": {
"main": [
[
{
"node": "Fetch Sitemap XML",
"type": "main",
"index": 0
}
]
]
},
"Alert User: Invalid URL": {
"main": [
[]
]
},
"Check for Sitemap Index": {
"main": [
[
{
"node": "Alert User: Index Not Supported",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract URLs Array",
"type": "main",
"index": 0
}
]
]
},
"Parse XML to JSON Object": {
"main": [
[
{
"node": "Check for Sitemap Index",
"type": "main",
"index": 0
}
]
]
},
"Check if URL is Accessible": {
"main": [
[
{
"node": "Parse XML to JSON Object",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert User: Invalid URL",
"type": "main",
"index": 0
}
]
]
},
"Summarize Extraction Stats": {
"main": [
[
{
"node": "Send Summary",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow provides a streamlined, no-code solution to extract all nested URLs from any standard XML sitemap and instantly convert them into a structured CSV file. Built entirely within n8n's native chat interface, it eliminates the need for manual data formatting or custom…
Source: https://n8n.io/workflows/15443/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Extracting URLs from multiple XML sitemaps manually is tedious, and combining them into a single usable file is time-consuming. This workflow solves this by acting as an automated bulk extractor. You
This workflow accepts up to 10 URLs via chat input, executes the Google PageSpeed Insights API, and outputs a CSV file containing page performance metrics for SEO audits.
Aggregate Stickynote. Uses openAiAssistant, toolCalculator, memoryManager, limit. Chat trigger; 14 nodes.
Airtable. Uses chatTrigger, lmChatGoogleGemini, outputParserAutofixing, outputParserStructured. Chat trigger; 11 nodes.
Aggregate Http. Uses lmChatOpenAi, agent, stickyNote, memoryBufferWindow. Chat trigger; 41 nodes.