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 클릭
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"
}