8
n8n 한국어amn8n.com

Apify를 사용하여 LinkedIn 직장을 크롤링하고 Google Sheets에 저장하여 Gmail로 전송

중급

이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 12개의 노드를 포함합니다.주로 Code, Gmail, Aggregate, GoogleSheets, Apify 등의 노드를 사용하며. Apify 크롤러를 사용한 매일 LinkedIn 직장 알림, Google Sheets와 Gmail

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • Google Sheets API 인증 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "FXH3iheVDhMKnGyN",
  "meta": {
    "instanceId": "b597f3db206729fea79938d01afc341ae2811ad29d941b24c1597c0110c58f12",
    "templateCredsSetupCompleted": true
  },
  "name": "Scrape LinkedIn Jobs with Apify, save to Google Sheets & email via Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "02a34e91-d6e6-4c2b-a5d9-cc93caa39d59",
      "name": "메시지 전송",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1056,
        384
      ],
      "webhookId": "4de148fa-48c8-4c70-aa05-a067458423f1",
      "parameters": {
        "message": "=<h2> Job summary for {{ $now.format('dd MMMM yyyy') }}</h2>\n\n\n{{ $json.data.map(item => item.html).join('<br/>') }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Job summary for {{ $now.format('dd MMMM yyyy')}}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "r36hIUr5SXLnTlQK",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "bf2ff9e4-cc09-47ef-97e5-ef5d949c3825",
      "name": "LinkedIn 채용 정보 가져오기",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        192,
        384
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "KE649tixwpoRnZtJJ",
          "cachedResultUrl": "https://console.apify.com/actors/KE649tixwpoRnZtJJ/input",
          "cachedResultName": "LinkedIn Jobs Scraper - No Cookies (apimaestro/linkedin-jobs-scraper-api)"
        },
        "operation": "Run actor and get dataset",
        "customBody": "{\n    \"date_posted\": \"day\",\n    \"keywords\": \"SEO manager\",\n    \"limit\": 10,\n    \"location\": \"United States\",\n    \"sort\": \"recent\"\n}"
      },
      "credentials": {
        "apifyApi": {
          "id": "403foWlMo3867t1Y",
          "name": "Apify - RGWeb"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b1d89bb8-2fe9-4cbf-94f6-4a9c989be91f",
      "name": "채용 데이터 및 HTML 설정",
      "type": "n8n-nodes-base.code",
      "position": [
        480,
        384
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const company = $input.item.json.company;\nconst job_title = $input.item.json.job_title;\nconst job_url = $input.item.json.job_url;\nconst location = $input.item.json.location;\nconst work_type = $input.item.json.work_type ? $input.item.json.work_type : 'Not specified';\nconst salary = $input.item.json.salary ? $input.item.json.salary : \"Not specified\";\n\nconst html_item = `<b><a href=\"${job_url}\">${job_title} - ${company}</a></b><br />Salary: ${salary} <br />Location: ${location} <br />Remote or on-site: ${work_type} <br />`;\n\nreturn {\n  json: {\n    html: html_item,\n  },\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "16e9e8d9-9b4c-40ad-b005-a13dd0536d3d",
      "name": "항목을 하나의 목록으로 결합",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        768,
        384
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "664e0abe-6144-414c-af24-ead89d6461ba",
      "name": "스티커 메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 784,
        "content": "## Get LinkedIn jobs\nUse Apify to scrape LinkedIn jobs. This workflow uses the [`LinkedIn Jobs Scraper - No Cookies`](https://apify.com/apimaestro/linkedin-jobs-scraper-api`) actor on Apify.\n\nNote that you can use a HTTP node instead of the Apify community node."
      },
      "typeVersion": 1
    },
    {
      "id": "2be1eebd-c624-47b5-b1b6-4882331165ae",
      "name": "스티커 메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 784,
        "content": "## Set job data and HTML and add to Google Sheets\nAdd the jobs to a Google Sheet so we can reference them at a later date\n\nAt the same time, we use a code node to set the data we want to use in the email. We format the data using HTML so it looks nice in our email."
      },
      "typeVersion": 1
    },
    {
      "id": "1e219262-b334-4a0e-abac-54cb03ff2740",
      "name": "스티커 메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 784,
        "content": "## Combine items into one list\nWe combine all the different items into one big list"
      },
      "typeVersion": 1
    },
    {
      "id": "8f2413c7-0d59-4b9b-be72-e061a5966861",
      "name": "스티커 메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 784,
        "content": "## Send email\nWe send an email with a list of all the jobs titles, salaries, and more"
      },
      "typeVersion": 1
    },
    {
      "id": "ba3571ef-7865-4e05-a246-622ce08e0e5d",
      "name": "스티커 메모4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 784,
        "content": "## Scheduled trigger\nRun this workflow every day at noon"
      },
      "typeVersion": 1
    },
    {
      "id": "05d9eab8-5ddf-4bbe-af11-65ec78418f25",
      "name": "스티커 메모5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 1200,
        "content": "## Overview\nEvery day, this workflow scrapes LinkedIn jobs based on your keywords, saves them in a Google Sheet, and sends them by email.\n\n## How it works\n- The workflow runs every day at noon.\n- The Apify node sends a request to a LinkedIn scraper actor on Apify, which scrapes and returns the data.\n- The code node formats the data we want and builds the HTML needed to make the emails look good. We use inline if statements for cases where the salary isn't listed or the job doesn’t say if it’s on-site, remote, or hybrid.\n- At the same time, we add the LinkedIn jobs we scraped to a Google Sheet so we can check them later.\n- We combine everything into one list.\n- The Gmail node uses the `map()` function to list all the items we scraped and formatted. It customizes the subject line and heading of the email to include the current date.\n\n## Setup steps\n1. Create a new Google Sheet and add the headers you want. Adjust the Google Sheets node to use your newly created Sheet.\n2. Customize the JSON in the `Get LinkedIn jobs` node. Note that this workflow currently uses the [`LinkedIn Jobs Scraper - No Cookies`](https://apify.com/apimaestro/linkedin-jobs-scraper-api) actor on Apify.  \n   - Leave `date_posted` as is.  \n   - Adjust `keywords` to change the job you want to scrape. You can use Boolean operators like AND or NOT in your search.  \n   - Adjust `limit` to the number of jobs you want to scrape.  \n   - Adjust `location` to match your location.  \n   - Leave `sort` as is to get the most recent jobs first.  \n3. *(Optional)* Edit the HTML in the code node to change how the listings will look in the email.  \n4. Add your email to the Gmail node.\n\n## Requirements\n- [Apify account](https://apify.com/)  \n- Apify community node installed. If you don’t want to install the community node, you can use a regular HTTP node and call the HTTP directly. Check [their API docs](https://docs.apify.com/api/v2) to see what endpoint to call.  \n- Google Sheets API enabled in Google Cloud Console and credentials added to n8n\n- Gmail API enabled in Google Cloud Console credentials added to n8n\n\n## Possible customizations\n- Add full job descriptions to the Google Sheet and email  \n- Continue the flow to create a tailored CV for each job  \n- Use AI to read the job descriptions and pull out the key skills the job posting is asking for  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "27e07561-4655-40bd-aa34-655bfdd3f7f3",
      "name": "매일 정오에 실행...",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -96,
        384
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "15b0b714-b0e8-4545-b069-076b35566605",
      "name": "Google 시트에 채용 정보 추가",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        480,
        208
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.posted_at.toDateTime().format('dd MMM yyyy') }}",
            "salary": "={{ $json.salary ? $json.salary : \"Not specified\" }}",
            "company": "={{ $json.company }}",
            "job url": "={{ $json.job_url }}",
            "location": "={{ $json.location ? $json.location : \"Not specified\" }}",
            "job title": "={{ $json.job_title }}",
            "remote or on-site": "={{ $json.work_type ? $json.work_type : \"Not specified\" }}"
          },
          "schema": [
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "job title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "job title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "job url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "job url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "salary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "salary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "remote or on-site",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "remote or on-site",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "useAppend": true
        },
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IYZk-wt5AUgdJmRcnoA04X23flLyTeyG3AeTsAfWs1U/edit#gid=0",
          "cachedResultName": "Jobs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1IYZk-wt5AUgdJmRcnoA04X23flLyTeyG3AeTsAfWs1U",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IYZk-wt5AUgdJmRcnoA04X23flLyTeyG3AeTsAfWs1U/edit?usp=drivesdk",
          "cachedResultName": "Linkedin jobs - n8n demo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "oXAMCvV3d7R6Oelr",
          "name": "Google Sheets account - Personal"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7f4b0a6a-a5b1-4ceb-b438-7fea120b0d53",
  "connections": {
    "bf2ff9e4-cc09-47ef-97e5-ef5d949c3825": {
      "main": [
        [
          {
            "node": "b1d89bb8-2fe9-4cbf-94f6-4a9c989be91f",
            "type": "main",
            "index": 0
          },
          {
            "node": "15b0b714-b0e8-4545-b069-076b35566605",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b1d89bb8-2fe9-4cbf-94f6-4a9c989be91f": {
      "main": [
        [
          {
            "node": "16e9e8d9-9b4c-40ad-b005-a13dd0536d3d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "27e07561-4655-40bd-aa34-655bfdd3f7f3": {
      "main": [
        [
          {
            "node": "bf2ff9e4-cc09-47ef-97e5-ef5d949c3825",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "16e9e8d9-9b4c-40ad-b005-a13dd0536d3d": {
      "main": [
        [
          {
            "node": "02a34e91-d6e6-4c2b-a5d9-cc93caa39d59",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 콘텐츠 제작, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수12
카테고리2
노드 유형7
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
Robin Geuens

Robin Geuens

@robingeuens

Hi, I'm Robin. I'm a veteran marketer of 7 years and love automation. If you have any questions about automation feel free to reach out to me on LinkedIn: https://www.linkedin.com/in/rgeuens/

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34