발행일: 2026-10-06(화) 11:44
← 목차로 돌아가기|하루 30분 n8n 시리즈 ② 실무 자동화 레시피 100
RECIPE 059

Google Analytics → 주간 트래픽 리포트 자동 발송

  • ▸Google Analytics 4 데이터를 주간 단위로 자동 수집
  • ▸핵심 지표(방문자, 전환율, 이탈률) 자동 계산
  • ▸경영진/팀에게 주간 리포트 이메일 자동 발송

✅사전 준비

  • □Google Analytics 4 속성 ID 확인 (형식: 123456789)
  • □Google Cloud 서비스 계정 생성 및 GA4 속성에 '뷰어' 권한 부여
  • □서비스 계정 JSON 키 파일 다운로드
  • □Gmail 발송 계정 OAuth2 설정

GA4 Data API 호출

Node: HTTP Request
Method: POST
URL: https://analyticsdata.googleapis.com/v1beta/properties/YOUR_PROPERTY_ID:runReport
Authentication: Service Account (JSON 키 파일)

Body:
{
  "dateRanges": [{ "startDate": "7daysAgo", "endDate": "today" }],
  "dimensions": [{ "name": "date" }, { "name": "sessionSource" }],
  "metrics": [
    { "name": "activeUsers" },
    { "name": "sessions" },
    { "name": "bounceRate" },
    { "name": "conversions" }
  ]
}

리포트 데이터 가공 (Code 노드)

const rows = $json.rows || [];
const totalUsers = rows.reduce((sum, r) => sum + parseInt(r.metricValues[0].value), 0);
const totalSessions = rows.reduce((sum, r) => sum + parseInt(r.metricValues[1].value), 0);
const avgBounceRate = (rows.reduce((sum, r) => sum + parseFloat(r.metricValues[2].value), 0) / rows.length * 100).toFixed(1);

return [{ json: { totalUsers, totalSessions, avgBounceRate } }];
💡 TIPCron 표현식 `0 9 * * 1`을 사용하면 매주 월요일 오전 9시에 지난 주 데이터를 자동으로 발송할 수 있습니다.
⚡

워크플로우 JSON

아래 JSON을 복사해 n8n에 바로 임포트하세요

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe059",
  "title": "채용 공고 다채널 동시 등록 자동화",
  "chapter": 5,
  "category": "HR & 조직 운영 자동화",
  "difficulty": "⭐⭐⭐",
  "estimatedTime": "60분",
  "usedApps": [
    "Google Sheets",
    "잡코리아 API",
    "사람인 API",
    "LinkedIn API",
    "Slack"
  ],
  "description": "Google Sheets에 채용 공고 정보를 한 번 입력하면 잡코리아·사람인·LinkedIn에 병렬로 동시 등록하고, 등록 완료 후 Slack에 결과 알림을 발송합니다.",
  "nodes": [
    {
      "id": "trigger_new_job",
      "type": "trigger",
      "service": "Google Sheets",
      "name": "신규 공고 등록 감지",
      "config": {
        "event": "rowAdded",
        "spreadsheetId": "{{$env.RECRUIT_SHEET_ID}}",
        "sheetName": "채용공고"
      }
    },
    {
      "id": "post_jobkorea",
      "type": "action",
      "service": "HTTP Request",
      "name": "잡코리아 공고 등록",
      "config": {
        "method": "POST",
        "url": "https://api.jobkorea.co.kr/v1/jobs",
        "headers": {
          "Authorization": "Bearer {{$env.JOBKOREA_API_KEY}}",
          "Content-Type": "application/json"
        },
        "body": {
          "title": "{{$json['공고제목']}}",
          "position": "{{$json['포지션']}}",
          "description": "{{$json['직무설명']}}",
          "requirements": "{{$json['자격요건']}}",
          "preferred": "{{$json['우대사항']}}",
          "deadline": "{{$json['마감일']}}",
          "location": "{{$json['근무지']}}"
        }
      }
    },
    {
      "id": "post_saramin",
      "type": "action",
      "service": "HTTP Request",
      "name": "사람인 공고 등록",
      "config": {
        "method": "POST",
        "url": "https://oapi.saramin.co.kr/jobs",
        "headers": {
          "Authorization": "Bearer {{$env.SARAMIN_API_KEY}}",
          "Content-Type": "application/json"
        },
        "body": {
          "job_title": "{{$json['공고제목']}}",
          "job_type": "{{$json['고용형태']}}",
          "job_description": "{{$json['직무설명']}}",
          "required_skills": "{{$json['자격요건']}}",
          "close_date": "{{$json['마감일']}}",
          "work_place": "{{$json['근무지']}}"
        }
      }
    },
    {
      "id": "post_linkedin",
      "type": "action",
      "service": "HTTP Request",
      "name": "LinkedIn 공고 등록",
      "config": {
        "method": "POST",
        "url": "https://api.linkedin.com/v2/simpleJobPostings",
        "headers": {
          "Authorization": "Bearer {{$env.LINKEDIN_ACCESS_TOKEN}}",
          "Content-Type": "application/json"
        },
        "body": {
          "companyApplyUrl": "{{$env.COMPANY_APPLY_URL}}",
          "description": "{{$json['직무설명']}}",
          "employmentStatus": "FULL_TIME",
          "externalJobPostingId": "{{$json['공고ID']}}",
          "listedAt": "{{$now.toUnixInteger() * 1000}}",
          "location": "{{$json['근무지']}}",
          "title": "{{$json['공고제목']}}",
          "workplaceTypes": [
            "{{$json['근무형태']}}"
          ]
        }
      }
    },
    {
      "id": "merge_results",
      "type": "action",
      "service": "Merge",
      "name": "등록 결과 취합",
      "config": {
        "mode": "mergeByIndex"
      }
    },
    {
      "id": "notify_result",
      "type": "action",
      "service": "Slack",
      "name": "등록 완료 알림",
      "config": {
        "operation": "sendMessage",
        "channel": "{{$env.RECRUIT_SLACK_CHANNEL}}",
        "message": "📢 채용 공고 등록 완료!\n\n💼 포지션: {{$json['포지션']}}\n📝 공고 제목: {{$json['공고제목']}}\n📅 마감일: {{$json['마감일']}}\n\n✅ 등록 결과:\n- 잡코리아: {{$node['post_jobkorea'].json['status'] === 200 ? '성공' : '실패'}}\n- 사람인: {{$node['post_saramin'].json['status'] === 200 ? '성공' : '실패'}}\n- LinkedIn: {{$node['post_linkedin'].json['status'] === 201 ? '성공' : '실패'}}"
      }
    },
    {
      "id": "update_post_status",
      "type": "action",
      "service": "Google Sheets",
      "name": "공고 등록 상태 기록",
      "config": {
        "operation": "updateRow",
        "spreadsheetId": "{{$env.RECRUIT_SHEET_ID}}",
        "sheetName": "채용공고",
        "rowNumber": "{{$json['rowIndex']}}",
        "columns": {
          "등록상태": "등록완료",
          "등록일시": "{{$now.format('YYYY-MM-DD HH:mm')}}"
        }
      }
    }
  ],
  "edges": [
    {
      "from": "trigger_new_job",
      "to": "post_jobkorea"
    },
    {
      "from": "trigger_new_job",
      "to": "post_saramin"
    },
    {
      "from": "trigger_new_job",
      "to": "post_linkedin"
    },
    {
      "from": "post_jobkorea",
      "to": "merge_results"
    },
    {
      "from": "post_saramin",
      "to": "merge_results"
    },
    {
      "from": "post_linkedin",
      "to": "merge_results"
    },
    {
      "from": "merge_results",
      "to": "notify_result"
    },
    {
      "from": "notify_result",
      "to": "update_post_status"
    }
  ],
  "tips": [
    "잡코리아·사람인 API는 기업 회원 가입 후 별도 API 사용 신청이 필요해요. 승인까지 1~3 영업일 소요될 수 있어요.",
    "각 플랫폼마다 공고 양식이 다르므로 Function 노드를 활용해 플랫폼별 필드 매핑을 사전에 정의해두면 관리가 편해요.",
    "자사 홈페이지 채용 페이지에도 동시 등록하려면 WordPress 노드 또는 자사 API를 병렬로 추가 연결하세요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe059"
}
← 이전 레시피☰ 목차다음 레시피 →