마케팅 데이터 분석

광고비·부가세·수수료·환율을 같은 기준으로 맞추기

매체 비용, 조정액, 수수료, 세액과 결제액을 구분하고 서로 다른 통화를 같은 기준으로 환산합니다. 비용 범위에 따라 비용 대비 매출 비율이 달라지는 합성 명세를 Python Decimal 예제로 재현합니다.

순매출은 330만 원으로 같은데 비용 대비 매출 비율이 197.0%, 181.8%, 170.4%로 달라집니다. 광고가 달라진 것이 아니라 비용에 무엇을 포함했는지가 달라진 결과입니다. 매체 비용만 썼는지, 수수료와 세액 정책을 반영했는지, 실제 결제액을 썼는지부터 구분해야 합니다.

아래는 2026년 8월을 분석하는 합성 정산 명세입니다. 환율·수수료·세액은 계산을 설명하기 위해 정한 가정입니다. 실제 광고주 정보와 실거래 환율을 사용하지 않았고, 특정 사업자의 세무 처리 결과를 제시하지 않습니다.

매체 비용과 청구액·결제액은 어떻게 구분하나

매체 비용은 광고 운영 데이터를 읽는 데 사용하고, 청구액은 조정과 청구 항목을 확인하는 데 사용합니다. 결제액은 실제로 얼마를 지급했는지 보는 값입니다. Google도 billed cost를 무효 활동 등의 조정을 반영한 지불 책임 금액으로 별도 정의합니다. Google Ads 청구 비용 정의

결제가 발생한 달과 광고를 집행한 달도 다를 수 있습니다. 이전 잔액을 갚거나 선불로 충전한 금액을 당월 광고비처럼 사용하면 같은 기간의 매출과 비용을 비교하지 못합니다. 예제에서는 두 명세와 결제액이 모두 분석 대상 명세에 대응한다고 가정합니다.

광고비라는 이름 아래 서로 다른 금액이 놓일 수 있습니다매체 비용 기준1,675,000원합성 표시 비용을 기준 환산분석 비용 기준1,815,500원조정·수수료·세액 정책 반영결제액 기준1,936,100원명세에 대응한 지급액 입력합성 데이터 · 동일한 비용이라고 가정하지 않고 각 기준을 별도 열로 보존합니다.
운영 효율, 분석상 비용과 현금 지출은 서로 다른 질문에 답합니다.

같은 기간의 명세를 구성 항목으로 나누기

합성 명세 A는 KRW, B는 USD입니다. 매체 비용에는 아래 미반영 조정액이 아직 반영되지 않았다는 입력 계약을 둡니다. 수수료와 세액도 명세에 기재된 별도 항목으로 받습니다.

항목명세 A · KRW명세 B · USD
매체 표시 비용1,000,000원500달러
아직 반영되지 않은 조정액0원-20달러
서비스 수수료100,000원50달러
청구 세액110,000원0달러
명세 합계1,210,000원530달러
공제 가능하다고 가정한 세액110,000원0달러
별도로 입력한 결제액1,210,000원726,100원

B의 명세 합계는 500 − 20 + 50 = 530달러입니다. 그렇다고 실제 API에서 가져온 모든 비용에 청구 조정액을 다시 빼야 한다는 뜻은 아닙니다. 원래 비용에 같은 조정이 이미 반영돼 있다면 이중 차감이 됩니다. 비용의 추출 시각과 반영 범위를 확인해 아직 반영되지 않은 금액만 연결해야 합니다.

수수료도 계약상 기준을 확인해야 합니다. 매체 비용에 포함된 값인지, 별도 청구인지, 정액인지 비율인지에 따라 계산이 달라집니다. 예제의 금액을 일반적인 대행 요율로 사용하지 않습니다.

cost_micros와 계정 통화를 함께 확인하기

Google Ads API의 비용은 micros에서 계정 통화 단위로 변환해야 합니다. Google은 metrics.cost_micros를 1,000,000으로 나누도록 안내합니다. Google Ads 비용 단위 변환 안내

500,000,000 micros ÷ 1,000,000 = 계정 통화 500단위

계정 통화가 USD라면 500달러이고, KRW라면 500원입니다. 숫자의 크기만 보고 통화를 추정해서는 안 됩니다. Google Ads의 customer.currency_code처럼 비용이 어느 통화로 제공되는지 설명하는 필드를 함께 보관할 수 있습니다. Google Ads 계정 통화 필드

예제의 media_cost_micros는 이 단위를 설명하는 합성 필드입니다. 실제 API에서 조회한 결과나 특정 플랫폼의 청구 계산기를 구현한 코드가 아닙니다.

환율은 기준일과 고시 단위까지 기록해야 한다

비교 환율은 2026년 8월 31일 기준이라는 가정으로 고정했습니다. USD 1당 KRW 1,350원, JPY 100당 KRW 900원을 계산용 값으로 사용합니다. 출처 식별자도 실제 금융기관명 대신 synthetic-example-v1로 남깁니다.

환율 숫자와 함께 어느 통화 몇 단위의 값인지 읽습니다USD 1 = KRW 1,350 · 가정530달러 × 1,350 ÷ 1 = 715,500원JPY 100 = KRW 900 · 단위 확인용 별도 예제10,000엔 × 900 ÷ 100 = 90,000원실거래 환율을 사용하지 않은 합성 예제 · 기준일·통화쌍·고시 단위·출처를 함께 저장
100엔당 환율을 1엔당 환율처럼 적용하면 환산액이 100배 달라집니다.

계산식은 원천 금액에 고시 환율을 곱하고, 그 환율이 기준으로 삼는 통화 수량으로 나누는 형태입니다. USD와 JPY의 숫자를 먼저 더한 뒤 하나의 환율을 곱하지 않습니다. 각 통화를 같은 기준 통화로 환산한 다음 합산해야 합니다.

환율을 고정하는 목적도 적어야 합니다. 이 예제는 매체 간 비교를 위해 같은 기준일을 사용합니다. 결제 내역이나 회계 원장이 다른 환율 기준을 사용한다면 별도 값을 보관해야 합니다. 코드가 법정 환율이나 실제 결제기관의 적용 환율을 정해 주지는 않습니다.

부가세와 공제 가능 세액을 별도 열로 보관하기

예제 A의 명세 합계 1,210,000원에서 청구 세액 110,000원을 빼면 1,100,000원이 남습니다. 여기에는 서비스 수수료 100,000원이 포함돼 있습니다. 세액을 제외한 공급가액과 매체 비용 1,000,000원은 같은 값이 아닙니다.

세액이 명세에 있다는 이유만으로 분석에서 전부 제외할 수도 없습니다. 국세청은 매입세액 신고에 정규증빙이 필요하며 공제받을 수 없는 경우도 있다고 안내합니다. 따라서 청구 세액과 검토를 거쳐 공제 가능하다고 확인한 세액을 구분해서 입력하는 편이 좋습니다. 국세청 부가가치세 세무 안내

이 예제는 A의 110,000원을 공제 가능한 세액으로 가정했습니다. 실제 적용에서는 사업자의 과세 유형과 거래·증빙에 맞는 검토가 선행돼야 합니다. 코드가 공제 자격을 판정하거나 세무 신고 금액을 확정하지는 않습니다. 공제 가능 세액과 현금 지출도 같은 시점의 같은 개념으로 합치지 않습니다.

비용을 원화로 환산하면 어떤 값이 남나

명세 B의 530달러를 가정한 비교 환율 1,350원으로 환산하면 715,500원입니다. A와 B를 구성 항목별로 환산해 합산한 결과는 다음과 같습니다.

구성 항목기준 환율로 환산한 KRW
매체 표시 비용1,675,000원
미반영 조정액-27,000원
조정 후 매체 비용1,648,000원
서비스 수수료167,500원
청구 세액110,000원
명세서 비교 환산액1,925,500원
공제 가능하다고 가정한 세액110,000원
예제의 분석 비용1,815,500원

표의 ‘조정 후 매체 비용’은 앞의 두 항목을 더한 중간 합계입니다. 모든 행을 그대로 다시 더하는 표가 아닙니다. 최종 명세서 환산액은 조정 후 매체 비용에 수수료와 청구 세액을 더한 값입니다.

명세서 환산액 = 1,648,000 + 167,500 + 110,000 = 1,925,500원
분석 비용     = 1,925,500 − 110,000 = 1,815,500원

원천의 청구 규칙에 반올림 차이가 있다면 그 차이도 별도 항목으로 보관합니다. 예제의 주 명세 A·B에는 반올림 차이가 없고, 별도 테스트에서 작은 소수 금액을 이용해 그 처리를 확인합니다.

환산액과 결제액이 다르면 환차손인가

B의 비교 환산액은 715,500원이고, 합성 명세에 대응한 결제액 입력은 726,100원입니다. 차이는 10,600원입니다. A에서는 차이가 없으므로 두 명세의 전체 비교 환산액 1,925,500원과 전체 결제액 1,936,100원의 차이도 10,600원입니다.

이 차이를 자동으로 환차손이나 해외 결제 수수료라고 이름 붙이지 않습니다. 환율 기준일, 결제일, 별도 수수료, 결제 범위와 잔액을 대조해야 원인을 설명할 수 있습니다. 예제 코드는 settlement_gap_krw라는 차액만 반환합니다.

Google의 결제 요약 안내도 비용, 결제와 잔액을 구분하며 세금·수수료와 이전 미납 잔액이 관련될 수 있음을 설명합니다. 광고를 집행한 기간의 비용과 특정 날짜의 납부액을 바로 같은 값으로 사용하지 않는 이유입니다. Google Ads 결제 요약 안내

같은 매출인데 비용 대비 매출 비율이 달라지는 이유

합성 순매출은 환불과 매출 세액의 기준을 맞춘 3,300,000원으로 고정했습니다. 여기에는 채널별 광고 귀속을 적용하지 않았으므로, 결과는 전체 매출을 선택한 비용으로 나눈 비율입니다. 특정 채널의 ROAS나 광고의 증분 효과를 측정한 값이 아닙니다.

매출을 고정해도 비용 범위가 바뀌면 비율이 달라집니다매체 비용 기준1,675,000원197.0%분석 비용 기준1,815,500원181.8%결제액 기준1,936,100원170.4%합성 순매출 330만 원 · 동일 기간 · 비용 정의의 차이이며 광고 성과 변화가 아닙니다.
분모를 바꾼 결과를 같은 지표의 전월 대비 증감처럼 연결하지 않습니다.

매출과 비용이 같은 외화이고 같은 양의 환율로 둘 다 환산한다면, 두 값의 비율은 변하지 않습니다. 비용이 0보다 클 때 다음과 같이 환율이 약분됩니다.

(외화 매출 × 같은 환율) ÷ (외화 비용 × 같은 환율)
  = 외화 매출 ÷ 외화 비용

매출과 비용에 다른 환율을 적용하거나 한쪽에만 수수료·세액을 반영하면 이 관계가 그대로 적용되지 않습니다. 비율의 변화가 집행 성과 때문인지 기준 변경 때문인지 구분하려면 분자와 분모의 금액 범위를 함께 기록해야 합니다.

Python에서 금액과 반올림을 다루는 방법

예제는 금액을 십진수 문자열이나 정수로 읽고 Decimal로 계산합니다. 이진 부동소수점 값을 그대로 금액 입력으로 받지 않습니다. Python의 Decimal 문서는 십진 표현과 계산 정밀도, 반올림 규칙을 제어하는 방법을 설명합니다. Python Decimal 안내

반올림은 원천의 문서 규칙을 따라야 합니다. 예제는 명세서의 구성 금액을 더한 뒤, 명시한 단위로 HALF_UP 반올림하는 계약을 사용합니다. 모든 결제기관이나 명세서가 같은 규칙을 쓴다는 뜻은 아닙니다.

raw_total = media + adjustment + fee + tax
rounded_total = (
    (raw_total / quantum).quantize(Decimal(1), rounding=ROUND_HALF_UP)
    * quantum
)

별도 테스트에서 0.004달러 비용과 0.004달러 수수료를 합치면 0.008달러입니다. 합계에 센트 단위 반올림을 적용하면 0.01달러가 됩니다. 두 항목을 먼저 각각 0.00달러로 반올림한 뒤 더하면 다른 결과가 나옵니다.

코드는 명세서 합계와 계산 결과가 맞지 않을 때 차이를 숨기지 않고 오류를 냅니다. 같은 명세를 중복 집계하거나, 환율이 없는데 1로 대신하거나, 통화쌍과 기준일이 다른 환율을 사용하는 경우도 확인합니다. 비용이 0이면 비율은 0%가 아니라 정의할 수 없는 값으로 반환합니다.

합성 정산 명세로 직접 계산하기

광고비·세액·수수료·환율 예제 ZIP을 풀고 폴더 안에서 실행합니다. Python 3.9 이상과 표준 라이브러리만 사용합니다.

python3 analysis.py
python3 -m unittest

출력은 문서별 구성 금액과 전체 합계를 함께 제공합니다. 금액의 정밀도를 보존하기 위해 JSON의 계산 금액은 문자열로 출력하고, 비율은 소수 첫째 자리까지 표시합니다. 기준 환산액 1,925,500원과 분석 비용 1,815,500원, 결제액 1,936,100원이 각각 다른 열에 남습니다.

실제 적용에서는 미반영 조정액, 공제 가능 세액, 문서별 반올림 규칙과 환율 정책을 확인한 입력이 필요합니다. 예제는 이월 잔액, 선수금 배분, 초과 크레딧과 실제 세무 신고를 구현하지 않습니다. 두 합성 명세의 비용 정의와 환산을 재현하는 데 범위를 둡니다.

비용 명세를 대조하는 매도비

광고비를 하나의 숫자로 합치기 전에 원래 통화와 금액, 아직 반영되지 않은 조정, 수수료, 세액, 환율 출처와 결제액을 남겨 보세요. 같은 기준으로 다시 계산할 수 있어야 매체별·기간별 성과를 비교할 수 있습니다.

공식 문서는 2026년 9월 6일 확인했습니다. 예제의 환율과 세액은 설명용 가정입니다.

마케팅 데이터 모델·품질·지표 정의 연재 5편입니다. 이전 글: 취소와 부분 환불을 반영한 순매출 계산

다음 글: 한 행이 무엇을 뜻하는지 정하는 데이터 모델

🐹

자주 묻는 질문

광고 관리자 비용과 청구액은 왜 다른가요?

미반영 조정액, 수수료, 세금과 문서의 집계 범위가 다를 수 있습니다. 결제액에는 환산 기준이나 과거 잔액도 영향을 줄 수 있으므로, 매체 비용·청구액·결제액을 각각 보관하고 같은 기간과 문서 기준으로 대조해야 합니다.

광고비의 부가세는 무조건 빼고 분석하나요?

비용을 어떤 목적으로 정의하는지와 세액의 처리 기준에 따라 달라집니다. 예제는 청구 세액과 공제 가능하다고 가정한 세액을 별도 입력으로 받아 분석 비용과 현금 결제액을 나눕니다. 코드가 실제 사업자의 공제 자격을 판정하지 않습니다.

Google Ads cost_micros는 원이나 달러와 같은 단위인가요?

Google Ads API의 micros 비용은 1,000,000으로 나눠 계정 통화 단위로 변환합니다. 변환한 숫자가 어느 통화인지도 함께 확인해야 합니다. 합성 예제의 500,000,000 micros는 계정 통화 500단위입니다.

환산액과 카드 결제액의 차이는 모두 환차손인가요?

그렇게 단정할 수 없습니다. 환율 기준일, 결제 시점, 별도 수수료, 잔액이나 납부 범위를 확인해야 합니다. 예제는 차액을 별도로 표시하고 원인을 자동 분류하지 않습니다.