
매달 AdSense 대시보드에서 CSV를 받아 엑셀에 붙여넣는 작업, 해보신 분이라면 압니다. 처음엔 그냥 하다가 어느 순간 '이걸 왜 사람이 하고 있지?'라는 생각이 들죠. 저도 똑같았습니다. 포스트가 50개를 넘어가던 시점부터 수작업이 너무 버거워져서 결국 Google AdSense API와 Sheets를 연결하는 자동화 파이프라인을 직접 만들었습니다. 그 과정에서 AI 분석 레이어까지 얹으면서 단순 리포팅 도구가 콘텐츠 전략 도구로 바뀐 경험을 공유하겠습니다.
OAuth 2.0 인증 설정, 생각보다 어렵지 않습니다
처음 API를 붙이려 할 때 가장 겁나는 부분이 인증 설정이 아닌가요? 저도 그랬습니다. 특히 AdSense API는 OAuth 2.0 인증 방식을 사용하는데, 처음 접하는 분이라면 용어부터 낯설 수 있습니다.
여기서 OAuth 2.0이란 사용자 아이디와 비밀번호를 직접 넘기지 않고, 구글이 발급한 액세스 토큰을 통해 API 접근 권한을 위임받는 인증 프로토콜입니다. 쉽게 말해 구글이 발급한 출입증을 들고 API 문에 들어가는 방식입니다.
실제 설정 순서는 이렇습니다.
- Google Cloud Console에서 프로젝트 생성 및 AdSense API 활성화
- OAuth 2.0 동의 화면 구성 (앱 이름, 범위 설정)
- 서비스 계정 생성 후 JSON 키 파일 다운로드
- AdSense 계정 관리 화면에서 해당 서비스 계정 이메일을 사용자로 추가
제가 직접 해보니 이 과정이 30분 정도 걸렸습니다. 처음엔 동의 화면 구성에서 스코프(scope) 설정을 놓쳐서 API 호출 시 권한 오류가 반복됐는데, 여기서 스코프란 이 앱이 구글 계정의 어떤 데이터에 접근할 수 있는지를 명시하는 허가 범위입니다. AdSense의 경우 읽기 전용 스코프인 https://www.googleapis.com/auth/adsense.readonly를 지정해야 합니다. 이걸 빠뜨리니까 계속 에러가 났던 겁니다.
Python에서 구현할 때는 gspread와 google-auth 라이브러리 조합이 가장 안정적이었습니다. 한 번 인증이 완료되면 액세스 토큰 갱신이 자동으로 처리되기 때문에, 이후 스크립트 실행 시 별도 개입 없이 돌아갑니다. Google의 공식 문서도 잘 정리되어 있어 참고할 만합니다(출처: Google AdSense API 공식 문서).
피벗 테이블 구조로 설계한 Sheets 대시보드
API 연결보다 더 오래 고민한 건 데이터 구조였습니다. 어떤 구조로 Sheets에 담아야 나중에 분석하기 편할까요?
저는 행이 날짜, 열이 각 포스트 URL이 되는 피벗 테이블 형태로 설계했습니다. 피벗 테이블이란 동일한 데이터를 다른 관점에서 요약해 보여주는 표 구조로, 이 경우 "특정 날짜에 어떤 포스트가 얼마를 벌었는지"를 한눈에 파악할 수 있는 매트릭스를 만든다는 뜻입니다.
이 구조에서 특정 포스트의 수익 흐름이 시각적으로 바로 보이고, 계절성 패턴도 확인됩니다. 예를 들어 11~12월에 특정 카테고리의 RPM이 급등하는 패턴이 눈에 띄었는데, 여기서 RPM이란 광고 1,000회 노출당 수익을 의미합니다. 광고 단가와 클릭률을 동시에 반영하기 때문에 포스트별 수익성을 비교하는 핵심 지표입니다.
Sheets의 SPARKLINE 함수를 활용해 각 포스트 행 옆에 미니 추이 차트를 붙이고 나서, 대시보드가 훨씬 직관적으로 변했습니다. 거기에 Sheets의 조건부 서식(Conditional Formatting) 기능으로 RPM이 평균 이상인 셀을 자동으로 초록색으로 강조하도록 설정했더니 어떤 포스트가 잘 나가는지 스크롤만 해도 파악됩니다.
데이터 갱신은 Apps Script의 시간 기반 트리거(Time-driven trigger)를 사용해 매주 월요일 오전 7시에 자동 실행되도록 설정했습니다. 여기서 시간 기반 트리거란 별도 실행 없이 지정된 시각에 스크립트를 자동으로 구동시켜 주는 Apps Script의 예약 실행 기능입니다. 다만 AdSense API의 쿼터(quota) 제한이 가끔 발목을 잡았는데, 쿼터란 일정 시간 내 API 호출 횟수 상한을 뜻합니다. 날짜 범위를 넓게 잡으면 쿼터를 한 번에 많이 소모하기 때문에, 마지막 업데이트 이후 날짜만 추가하는 증분 업데이트 방식으로 전환한 뒤로 초과 오류가 거의 사라졌습니다(출처: Google Apps Script 공식 문서).
AI 분석을 얹었더니 리포팅 도구가 전략 도구가 됐습니다
데이터를 자동으로 모으는 것까지는 편의의 문제였다면, Claude API를 붙이고 나서부터는 성격이 달라졌습니다. 이걸 처음 적용했을 때 솔직히 이건 예상 밖이었습니다.
지난 30일 수익 상위 10개 포스트의 데이터, 즉 포스트 제목, RPM, CPC, CTR, 핵심 키워드를 JSON 형태로 넘기고 "공통 패턴을 분석하고 다음 달 콘텐츠 추천 3개를 제시하라"는 프롬프트를 작성했습니다. 여기서 CPC란 Cost Per Click의 약자로 광고 클릭 한 번당 광고주가 지불하는 금액을 뜻하며, CTR은 Click-Through Rate로 광고 노출 대비 클릭 비율을 의미합니다. 이 두 수치가 높은 포스트가 RPM도 자연스럽게 높게 나오는 경향이 있습니다.
분석 결과가 실제로 쓸 만했습니다. "금융 계산기 툴이 포함된 포스트의 RPM이 전체 평균의 2.3배"라는 패턴을 AI가 짚어냈고, 이후 비슷한 계산기 포함 포스트를 집중적으로 발행했더니 월 수익이 눈에 띄게 개선됐습니다.
단, 여기서 중요한 주의사항이 있습니다. 이 결과를 그대로 믿는 건 위험합니다. 제 경험상 이건 좀 다릅니다. "계산기가 있는 포스트의 RPM이 높다"는 관찰이 "계산기를 추가하면 RPM이 오른다"는 인과관계를 의미하지 않습니다. RPM은 결국 광고주의 입찰 단가, 즉 키워드 자체의 경쟁도에 의해 주로 결정됩니다. 계산기 포스트가 높은 RPM을 보인 건 계산기 형식 때문이 아니라 금융이라는 고단가 키워드 주제 때문일 가능성이 큽니다.
AI 분석은 가설을 생성하는 도구로 활용하고, 실제 포스트 발행 후 일정 기간 데이터를 비교하는 방식으로 검증하는 과정이 반드시 필요합니다. 도구가 좋아질수록 해석하는 사람의 눈도 함께 날카로워져야 합니다.
이 자동화 루틴을 3개월 이상 운영해 보니 가장 큰 변화는 데이터를 보는 습관이 생겼다는 점입니다. 월요일 아침 Sheets가 자동으로 업데이트된 대시보드를 열어보는 것이 자연스러운 루틴이 됐고, 그 10분이 콘텐츠 방향을 결정하는 가장 중요한 시간이 됐습니다. AI 분석의 정확도보다 이 습관 자체가 블로그 성장에 더 큰 영향을 미쳤다고 생각합니다. 지금 CSV를 수동으로 내려받고 있다면, 자동화의 진짜 가치는 시간 절약이 아니라 이 '보는 습관'을 만들어 준다는 데 있습니다.
이 글은 개인적인 경험과 의견을 공유한 것이며, 블로그 수익화에 관한 전문적인 투자 또는 사업 조언이 아닙니다.
참고:
[1] Google AdSense API — Reporting v2 Reference https://developers.google.com/adsense/management/reporting/reference/rest/v2/accounts.reports/generate
[2] gspread Documentation — Python Google Sheets API Wrapper https://docs.gspread.org/
[3] Google Apps Script — Time-driven Triggers https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers
[4] Anthropic API Documentation — Tool Use & Data Analysis https://docs.anthropic.com/en/docs/build-with-claude/tool-use
[5] Mediavine — Understanding Your RPM: A Complete Guide https://www.mediavine.com/understanding-rpm/