AutomationFlowsWeb Scraping › Automate Medium Publishing via HTTP

Automate Medium Publishing via HTTP

Original n8n title: Http (http Request)

Http. Uses html, httpRequest, itemLists, medium. Event-driven trigger; 10 nodes.

Event trigger★★★★☆ complexity10 nodesHTTP RequestItem ListsMedium
Web Scraping Trigger: Event Nodes: 10 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #2062 — we link there as the canonical source.

This workflow follows the HTTP Request → Itemlists 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 →

Download .json
{
  "meta": {
    "templateId": "2062"
  },
  "nodes": [
    {
      "id": "aac9c0d2-a278-4ea3-acf1-1aca547e30da",
      "name": "HTML",
      "type": "n8n-nodes-base.html",
      "position": [
        1520,
        480
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "Title",
              "cssSelector": "h2.single-post-title"
            },
            {
              "key": "Introduction",
              "cssSelector": ".kiwi-highlighter-content-area > p:nth-child(1)"
            },
            {
              "key": "Header",
              "cssSelector": "div.kiwi-highlighter-content-area",
              "returnValue": "html"
            },
            {
              "key": "={{ $json.data }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b0eb2240-ffa3-4e80-af7a-2aff470c02ee",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        660,
        640
      ],
      "parameters": {
        "url": "https://mailsafi.com/blog/",
        "options": {}
      },
      "typeVersion": 4.1,
      "alwaysOutputData": true
    },
    {
      "id": "e8dd3215-2cec-48ba-9a0b-7b3c01a4a637",
      "name": "HTML1",
      "type": "n8n-nodes-base.html",
      "position": [
        840,
        640
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "post",
              "cssSelector": ".entry-title > a",
              "returnArray": true
            },
            {
              "key": "Link",
              "attribute": "href",
              "cssSelector": " .lae-read-more > a",
              "returnArray": true,
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5e408e44-7424-419f-9e24-1b619a96a1e0",
      "name": "Item Lists",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        1000,
        640
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "post , Link"
      },
      "typeVersion": 3.1
    },
    {
      "id": "d7c6088e-efa3-4fbb-a53f-a7fc7bebdb84",
      "name": "Medium",
      "type": "n8n-nodes-base.medium",
      "position": [
        1580,
        700
      ],
      "parameters": {
        "title": "={{ $json.Title }}",
        "content": "={{ $json.Header }}",
        "contentFormat": "html",
        "additionalFields": {
          "tags": "Email Hosting, Email, Email Marketing",
          "publishStatus": "public",
          "notifyFollowers": false
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "5004a96e-16df-4100-84ae-df0b3be3a008",
      "name": "HTTP Request1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1360,
        480
      ],
      "parameters": {
        "url": "={{ $json.Link }}",
        "options": {}
      },
      "typeVersion": 4.1,
      "alwaysOutputData": true
    },
    {
      "id": "a34c5b31-c6ba-4e87-9177-a078aa100157",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1300,
        640
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "ee3e4f81-fa05-4ad0-a46e-6452d2f3c521",
      "name": "Item Lists1",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        1140,
        640
      ],
      "parameters": {
        "maxItems": 5,
        "operation": "limit"
      },
      "typeVersion": 3.1
    },
    {
      "id": "f472a15d-aa5a-4c40-b283-78d69a2a9b57",
      "name": "When clicking \"Execute Workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        460,
        640
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f89e199d-72e5-4426-8e9d-82f6ce39ac42",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        200
      ],
      "parameters": {
        "width": 688.6526946107781,
        "height": 522.559880239521,
        "content": "## Usage \n**How to use me** This workflow gets all the posts from your WordPress site and sorts them into a clear format before publishing them to medium.\n\nStep 1. Set up the HTTP node and set the URL of the source destination. This will be the URL of the blog you want to use. We shall be using https://mailsafi.com/blog for this.\n\nStep 2. Extract the URLs of all the blogs on the page\nThis gets all the blog titles and their URLs. Its an easy way to sort ou which blogs to share and which not to share.\n\nStep 3. Split the entries for easy sorting or a cleaner view.\n\nStep 4. Set a new https node with all the blog URLs that we got from the previous steps. \n\nStep 5. Extract the contents of the blog\n\nStep 6. Add the medium node and then set the contents that you want to be shared out.\n\nExecute your work flow and you are good to go\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "HTML": {
      "main": [
        [
          {
            "node": "Medium",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML1": {
      "main": [
        [
          {
            "node": "Item Lists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Medium": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Item Lists": {
      "main": [
        [
          {
            "node": "Item Lists1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Item Lists1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "HTML1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        null,
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \"Execute Workflow\"": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

How this works

This workflow automates the extraction and publishing of web content to Medium, saving you hours of manual copying and formatting. It fetches articles from specified URLs, parses their HTML to pull out key elements like titles and bodies, then formats and posts them directly to your Medium account using the official integration. Ideal for content curators, bloggers, or marketers who need to aggregate and share insights efficiently, the core step involves the HTTP Request node retrieving the source page, followed by HTML processing to clean the data before submission.

Use this workflow when you want to streamline regular content syndication from websites to Medium without coding, such as daily news roundups or research sharing. Avoid it for highly dynamic sites requiring JavaScript rendering, as it relies on static HTML fetches; instead, opt for tools with browser automation. Common variations include adding filters in the Item Lists node to select specific articles or looping to handle multiple URLs in batches for larger-scale publishing.

About this workflow

Http. Uses html, httpRequest, itemLists, medium. Event-driven trigger; 10 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

Workflow 2062. Uses httpRequest, itemLists, medium. Event-driven trigger; 10 nodes.

HTTP Request, Item Lists, Medium
Web Scraping

Pulling Data From Services That N8N Doesnt Have A Pre Built Integration For. Uses manualTrigger, stickyNote, itemLists, htmlExtract. Event-driven trigger; 14 nodes.

Item Lists, Html Extract, HTTP Request
Web Scraping

Workflow 1748. Uses itemLists, htmlExtract, httpRequest. Event-driven trigger; 14 nodes.

Item Lists, Html Extract, HTTP Request
Web Scraping

Create An Rss Feed Based On A Website S Content. Uses manualTrigger, itemLists, htmlExtract, httpRequest. Event-driven trigger; 12 nodes.

Item Lists, Html Extract, HTTP Request +1
Web Scraping

Rss Feed For Ard Audiothek Podcasts. Uses manualTrigger, httpRequest, htmlExtract, itemLists. Event-driven trigger; 11 nodes.

HTTP Request, Html Extract, Item Lists