Python 기반 구글 애드센스 수익 분석 도구 제작기 (코드 공유 포함)

애드센스 수익, 매일 직접 확인하고 계십니까?

Python 구글 애드센스 수익 분석 도구를 직접 만들어 쓰는 블로거와 콘텐츠 창작자가 늘고 있습니다. 구글 애드센스 대시보드는 기본적인 수익 정보는 제공하지만, 포스팅별 수익 추이 비교, 요일별 RPM 패턴 분석, 월간 수익 예측 같은 심화 분석은 직접 해야 합니다. 스프레드시트에 수동으로 데이터를 복붙하며 분석하던 시간을 Python 스크립트 하나로 완전히 자동화할 수 있습니다.

이 글에서는 구글 애드센스 API를 활용해 수익 데이터를 자동 수집하고, 시각화까지 처리하는 Python 분석 도구 제작 과정을 실제 코드와 함께 공유합니다. Python 초보자도 따라할 수 있도록 단계별로 설명합니다.

왜 애드센스 자체 대시보드로는 부족한가

구글 애드센스 기본 대시보드는 전체 수익, 페이지뷰, RPM 정도를 보여줍니다. 하지만 블로그 수익을 체계적으로 성장시키려면 훨씬 더 깊은 분석이 필요합니다. 어떤 카테고리의 글이 RPM이 높은지, 특정 요일에 수익이 집중되는지, 계절별 수익 패턴이 어떻게 변하는지를 파악해야 콘텐츠 전략을 데이터 기반으로 수립할 수 있습니다.

애드센스 기본 대시보드 vs Python 분석 도구 기능 비교

분석 기능 애드센스 대시보드 Python 분석 도구
일별 수익 조회 가능 가능 + 자동 저장
요일별 수익 패턴 불가 자동 분석 및 시각화
월간 수익 예측 불가 선형 회귀 예측 가능
RPM 추이 그래프 제한적 커스텀 그래프 생성
수익 데이터 내보내기 CSV 수동 다운로드 자동 수집 및 저장
알림 기능 없음 목표 달성 시 이메일 알림
커스텀 리포트 제한적 완전 자유 설계

개발 환경 준비 및 필요 라이브러리 설치

본격적인 도구 제작 전에 개발 환경을 준비합니다. Python 3.8 이상 버전과 아래 라이브러리가 필요합니다. 터미널 또는 명령 프롬프트에서 아래 명령어로 한 번에 설치할 수 있습니다.

필수 라이브러리 설치

  • google-auth — 구글 API 인증 처리
  • google-api-python-client — 애드센스 API 호출
  • pandas — 데이터 수집 및 가공
  • matplotlib — 수익 데이터 시각화
  • seaborn — 고급 차트 스타일링
  • schedule — 자동 실행 스케줄링
pip install google-auth google-auth-oauthlib google-api-python-client pandas matplotlib seaborn schedule

구글 애드센스 API 인증 설정

애드센스 API를 사용하려면 구글 클라우드 콘솔에서 프로젝트를 생성하고 OAuth 2.0 인증을 설정해야 합니다. 처음 한 번만 설정하면 이후에는 자동으로 인증이 처리됩니다.

API 인증 설정 단계

  • ① 구글 클라우드 콘솔(console.cloud.google.com) 접속 및 새 프로젝트 생성
  • ② API 및 서비스 → 라이브러리에서 'AdSense Management API' 검색 후 활성화
  • ③ 사용자 인증 정보 → OAuth 2.0 클라이언트 ID 생성 (데스크톱 앱 선택)
  • ④ 클라이언트 보안 비밀 JSON 파일 다운로드 후 프로젝트 폴더에 저장
  • ⑤ OAuth 동의 화면 설정 (테스트 사용자에 본인 구글 계정 추가)

이건 꼭 확인하세요: 다운로드한 클라이언트 보안 비밀 JSON 파일은 절대 깃허브 등 공개 저장소에 업로드하면 안 됩니다. .gitignore 파일에 반드시 추가해서 외부 노출을 차단해야 합니다.

핵심 코드: 애드센스 수익 데이터 자동 수집

아래는 애드센스 API를 통해 최근 30일 수익 데이터를 자동으로 수집하고 CSV 파일로 저장하는 핵심 코드입니다. 실제 운용 환경에 맞게 계정 ID와 파일 경로를 수정해서 사용하세요.

import os

import pandas as pd

from datetime import datetime, timedelta

from google.oauth2.credentials import Credentials

from google_auth_oauthlib.flow import InstalledAppFlow

from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/adsense.readonly']

CLIENT_SECRET_FILE = 'client_secret.json'

TOKEN_FILE = 'token.json'

def get_adsense_service():

    creds = None

    if os.path.exists(TOKEN_FILE):

        creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES)

    if not creds or not creds.valid:

        flow = InstalledAppFlow.from_client_secrets_file(

            CLIENT_SECRET_FILE, SCOPES)

        creds = flow.run_local_server(port=0)

        with open(TOKEN_FILE, 'w') as token:

            token.write(creds.to_json())

    return build('adsense', 'v2', credentials=creds)

def fetch_revenue_data(service, account_id, days=30):

    end_date = datetime.today().strftime('%Y-%m-%d')

    start_date = (datetime.today() - timedelta(days=days)).strftime('%Y-%m-%d')

    report = service.accounts().reports().generate(

        account=account_id,

        dateRange='CUSTOM',

        startDate_year=start_date[:4],

        startDate_month=start_date[5:7],

        startDate_day=start_date[8:10],

        endDate_year=end_date[:4],

        endDate_month=end_date[5:7],

        endDate_day=end_date[8:10],

        dimensions=['DATE'],

        metrics=['ESTIMATED_EARNINGS', 'PAGE_VIEWS', 'PAGE_VIEWS_RPM',

                 'IMPRESSIONS', 'CLICKS', 'COST_PER_CLICK']

    ).execute()

    rows = report.get('rows', [])

    data = []

    for row in rows:

        cells = row.get('cells', [])

        data.append({

            'date': cells[0]['value'],

            'earnings': float(cells[1]['value']),

            'pageviews': int(cells[2]['value']),

            'rpm': float(cells[3]['value']),

            'impressions': int(cells[4]['value']),

            'clicks': int(cells[5]['value']),

            'cpc': float(cells[6]['value'])

        })

    df = pd.DataFrame(data)

    df['date'] = pd.to_datetime(df['date'])

    df['weekday'] = df['date'].dt.day_name()

    return df

if __name__ == '__main__':

    service = get_adsense_service()

    ACCOUNT_ID = 'accounts/pub-XXXXXXXXXXXXXXXX'  # 본인 계정 ID 입력

    df = fetch_revenue_data(service, ACCOUNT_ID, days=30)

    df.to_csv('adsense_revenue.csv', index=False, encoding='utf-8-sig')

    print(f"데이터 수집 완료: {len(df)}일치 데이터 저장")

    print(df.tail())

수익 데이터 시각화 코드

수집한 데이터를 보기 좋은 차트로 시각화합니다. 일별 수익 추이, 요일별 수익 패턴, RPM 변화 흐름을 한 화면에 볼 수 있는 대시보드형 차트를 생성합니다.

import matplotlib.pyplot as plt

import matplotlib.font_manager as fm

import seaborn as sns

import pandas as pd

# 한글 폰트 설정 (윈도우 기준)

plt.rcParams['font.family'] = 'Malgun Gothic'

plt.rcParams['axes.unicode_minus'] = False

def visualize_adsense_data(df):

    fig, axes = plt.subplots(2, 2, figsize=(16, 10))

    fig.suptitle('구글 애드센스 수익 분석 대시보드', fontsize=16, fontweight='bold')

    # 1. 일별 수익 추이

    axes[0, 0].plot(df['date'], df['earnings'],

                    color='#4285F4', linewidth=2, marker='o', markersize=4)

    axes[0, 0].fill_between(df['date'], df['earnings'], alpha=0.3, color='#4285F4')

    axes[0, 0].set_title('일별 수익 추이 (USD)')

    axes[0, 0].set_xlabel('날짜')

    axes[0, 0].set_ylabel('수익 (USD)')

    axes[0, 0].tick_params(axis='x', rotation=45)

    # 2. 요일별 평균 수익

    weekday_order = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

    weekday_avg = df.groupby('weekday')['earnings'].mean().reindex(weekday_order)

    colors = ['#EA4335' if v == weekday_avg.max() else '#4285F4' for v in weekday_avg]

    axes[0, 1].bar(weekday_avg.index, weekday_avg.values, color=colors)

    axes[0, 1].set_title('요일별 평균 수익')

    axes[0, 1].set_xlabel('요일')

    axes[0, 1].set_ylabel('평균 수익 (USD)')

    axes[0, 1].tick_params(axis='x', rotation=30)

    # 3. RPM 추이

    axes[1, 0].plot(df['date'], df['rpm'],

                    color='#34A853', linewidth=2, marker='s', markersize=4)

    axes[1, 0].set_title('페이지 RPM 추이')

    axes[1, 0].set_xlabel('날짜')

    axes[1, 0].set_ylabel('RPM (USD)')

    axes[1, 0].tick_params(axis='x', rotation=45)

    # 4. 페이지뷰 vs 수익 산점도

    axes[1, 1].scatter(df['pageviews'], df['earnings'],

                       alpha=0.6, color='#FBBC04', edgecolors='gray', s=60)

    axes[1, 1].set_title('페이지뷰 vs 수익 상관관계')

    axes[1, 1].set_xlabel('페이지뷰')

    axes[1, 1].set_ylabel('수익 (USD)')

    plt.tight_layout()

    plt.savefig('adsense_dashboard.png', dpi=150, bbox_inches='tight')

    plt.show()

    print("대시보드 이미지 저장 완료: adsense_dashboard.png")

df = pd.read_csv('adsense_revenue.csv', encoding='utf-8-sig')

df['date'] = pd.to_datetime(df['date'])

df['weekday'] = df['date'].dt.day_name()

visualize_adsense_data(df)

월간 수익 예측 기능 추가

수집한 데이터를 바탕으로 이번 달 최종 예상 수익을 자동으로 계산하는 기능입니다. 현재까지의 일평균 수익을 기준으로 남은 날짜에 곱하는 단순 예측과, 최근 7일 트렌드를 반영한 가중 예측 두 가지 방식을 함께 제공합니다.

from datetime import datetime

import pandas as pd

def predict_monthly_revenue(df):

    today = datetime.today()

    days_in_month = 30

    days_elapsed = today.day

    # 이번 달 데이터만 필터링

    current_month_df = df[df['date'].dt.month == today.month]

    if len(current_month_df) == 0:

        print("이번 달 데이터가 없습니다.")

        return

    total_so_far = current_month_df['earnings'].sum()

    daily_avg = current_month_df['earnings'].mean()

    # 최근 7일 가중 평균

    recent_7 = df.tail(7)['earnings'].mean()

    # 단순 예측

    simple_prediction = total_so_far + (daily_avg * (days_in_month - days_elapsed))

    # 가중 예측 (최근 트렌드 반영)

    weighted_prediction = total_so_far + (recent_7 * (days_in_month - days_elapsed))

    print("=" * 40)

    print(f"현재까지 수익: ${total_so_far:.2f}")

    print(f"일 평균 수익: ${daily_avg:.2f}")

    print(f"최근 7일 평균: ${recent_7:.2f}")

    print(f"단순 예측 월수익: ${simple_prediction:.2f}")

    print(f"트렌드 반영 예측: ${weighted_prediction:.2f}")

    print("=" * 40)

df = pd.read_csv('adsense_revenue.csv', encoding='utf-8-sig')

df['date'] = pd.to_datetime(df['date'])

predict_monthly_revenue(df)

자동 실행 스케줄 설정

매일 오전 9시에 자동으로 데이터를 수집하고 대시보드를 업데이트하는 스케줄을 설정합니다. 한 번 실행해두면 컴퓨터가 켜져 있는 동안 자동으로 동작합니다.

import schedule

import time

def daily_job():

    print(f"[{datetime.now()}] 애드센스 데이터 자동 수집 시작")

    service = get_adsense_service()

    ACCOUNT_ID = 'accounts/pub-XXXXXXXXXXXXXXXX'

    df = fetch_revenue_data(service, ACCOUNT_ID, days=30)

    df.to_csv('adsense_revenue.csv', index=False, encoding='utf-8-sig')

    visualize_adsense_data(df)

    predict_monthly_revenue(df)

    print(f"[{datetime.now()}] 자동 수집 완료")

schedule.every().day.at("09:00").do(daily_job)

print("자동 수집 스케줄 시작. 종료하려면 Ctrl+C를 누르세요.")

while True:

    schedule.run_pending()

    time.sleep(60)

이 부분은 주의가 필요합니다: 구글 애드센스 API는 하루 요청 한도가 있습니다. 너무 자주 API를 호출하면 할당량 초과 오류가 발생할 수 있으므로, 하루 1~2회 수집으로 제한하는 것이 안전합니다. 구글 클라우드 콘솔에서 API 사용량을 주기적으로 확인하세요.

전체 도구 파일 구조

파일명 역할
client_secret.json 구글 OAuth 인증 파일 (비공개)
token.json 인증 토큰 자동 저장 (자동 생성)
adsense_collector.py 데이터 수집 메인 스크립트
adsense_visualizer.py 시각화 스크립트
adsense_predictor.py 월간 수익 예측 스크립트
scheduler.py 자동 실행 스케줄러
adsense_revenue.csv 수집 데이터 저장 파일
adsense_dashboard.png 생성된 대시보드 이미지

추가 개선 아이디어

기본 도구가 완성되면 아래 기능을 추가해 더욱 강력한 분석 도구로 발전시킬 수 있습니다.

  • 텔레그램 봇 연동 — 매일 수익 요약을 스마트폰으로 자동 수신
  • 구글 서치 콘솔 데이터 연동 — 유입 키워드별 수익 분석
  • 이상 수익 감지 — 전일 대비 30% 이상 급변 시 알림 발송
  • 연간 수익 목표 트래킹 — 목표 달성률 자동 계산 및 시각화
  • 구글 시트 자동 업데이트 — 팀 공유용 실시간 수익 대시보드

구글 애드센스 API 공식 문서는 구글 개발자 사이트(developers.google.com/adsense/management)에서 확인할 수 있습니다. API 파라미터와 응답 형식에 대한 상세한 레퍼런스가 제공됩니다.

마무리: 데이터로 블로그 수익을 관리하는 시대입니다

Python 구글 애드센스 수익 분석 도구는 단순히 수익을 확인하는 것을 넘어, 어떤 콘텐츠 전략이 수익을 높이는지를 데이터로 증명해주는 도구입니다. 요일별 수익 패턴을 알면 발행 스케줄을 최적화할 수 있고, RPM 추이를 보면 광고 단가가 높은 키워드를 찾는 방향을 잡을 수 있습니다. 오늘 소개한 코드를 그대로 복사해서 본인 환경에 맞게 수정해보세요. 첫 실행에 성공하는 순간, 블로그 운영의 차원이 달라지는 것을 느끼게 됩니다.

댓글 쓰기

0 댓글

신고하기

이 블로그 검색

태그

이미지alt태그 입력