증상: 30일 동안 ₩490,559를 쓰고 계약은 0건
2026년 7월 29일, 두 광고 채널의 30일 실적을 처음으로 같은 표에 놓았습니다. 그전까지는 채널별로 노출·클릭·비용을 따로 봤고, “쓴 돈 대비 무엇이 돌아왔나”를 한 축으로 맞춰 본 적이 없었습니다.
숫자는 이렇습니다. 네이버 검색광고에 ₩354,265를 써서 246클릭, 구글 애즈에 ₩136,294를 써서 19클릭. 합계 ₩490,559에 클릭 265회였습니다. 이 돈이 만든 상담 신청(GA4 generate_lead)은 2건이었고, 둘 다 네이버 유료 클릭(naver/cpc)에서 7월 13일과 7월 22일에 들어왔습니다. 계약은 0건이었습니다.

더 나쁜 쪽은 최근 7일이었습니다. 이 기간에만 ₩357,060를 썼는데 유료 리드는 0건이었습니다. 30일 소진액의 대부분이 마지막 한 주에 몰렸고, 그 한 주는 아무것도 남기지 않았습니다. 양 채널은 이 시점에 잔액이 바닥나 이미 멈춰 있었습니다. 다시 충전할지를 정해야 하는 순간이었고, 충전하면 같은 키워드가 같은 입찰가로 그대로 다시 켜지는 구조였습니다.
처음 의심한 것: 광고가 경매에 제대로 나가고 있었나?
리드가 안 나올 때 가장 먼저 떠오른 가설은 “광고가 의도대로 집행되지 않고 있다”였습니다. 우리 구조는 기준 파일이 키워드별 켜기·끄기와 입찰가를 계산하고, 스크립트가 그 값을 채널에 밀어 넣는 방식입니다. 계산이 맞아도 밀어 넣는 배선이 새면 엉뚱한 키워드에 돈이 나가거나, 맞는 키워드가 경매에 못 나갑니다.
이 의심에는 근거가 있었습니다. 같은 주에 실제로 배선 결함 두 개를 찾아 고쳤기 때문입니다.
- 7월 24일: 기준 파일이 “사람이 정한 키워드 설정은 보존한다”는 규칙을 지나치게 넓게 적용해, 이미 폐기한 서비스나 판매 서비스에 연결되지 않은 키워드까지 꺼지지 않고 있었습니다. 수리 후 109개 키워드가 강제 OFF로 바뀌었고, 실제로 켜져 있던 24개 키워드가 꺼졌습니다.
- 7월 26일: 구글 캠페인 입찰 전략이 TARGET_SPEND(클릭수 최대화)라서, 스크립트가 계산해 넣은 키워드 입찰가(6,660~14,399원)를 구글 경매가 한 번도 쓰지 않고 있었습니다. 계정을 연 7월 5일 이후 누적 노출은 3회였습니다. MANUAL_CPC로 바꾸고 나서야 계산한 입찰가가 경매에 반영됐습니다.
두 결함 모두 “계산한 값과 실제 집행이 다르다”는 같은 모양이었습니다. 그래서 리드 0도 같은 종류의 문제라고 보기 쉬웠습니다. 배선을 고쳤으니 이제 숫자가 따라올 것이라는 기대였습니다.
무엇으로 확인했나: 집행 상태 조회와 소진 대비 성과 대조
배선 가설은 두 단계로 확인했습니다. 첫째는 채널 쪽 상태 조회입니다. 구글 무노출 건에서는 계정·캠페인·광고그룹·소재·키워드 상태를 전부 조회했고 전부 ELIGIBLE, 정책 위반 0건, 결제 잔액 ₩50,000, 랜딩 페이지 3종이 구글 광고 크롤러(AdsBot)에 200 OK를 돌려준다는 것을 확인했습니다. 계정 차단이라는 첫 의심은 여기서 지워졌습니다. 이어서 change_event와 keyword_view의 search_rank_lost_impression_share를 교차 조회해, 데이터가 남은 3일 모두 순위 때문에 놓친 노출이 90% 이상이라는 것을 찾았고, 그 끝에 입찰 전략 문제가 있었습니다.
둘째는 기준 파일과 라이브 상태의 차이를 세는 감사 명령(audit)과 검증(verify)입니다. 두 수리 뒤 차이는 0건이었습니다. 즉 7월 말 시점에는 “계산한 대로 집행되고 있다”까지는 확인된 상태였습니다.
그다음에 한 일이 이 글의 출발점인 소진 대비 성과 대조입니다. 채널 리포트의 비용·클릭과 GA4의 generate_lead를 같은 30일 창에 놓고, 클릭 265회에서 리드가 몇 건 나왔는지를 셌습니다. 관측 수단은 새로 만든 것이 아니었습니다. 이미 쌓이던 두 숫자를 한 번도 나눠 보지 않았을 뿐입니다.
알리바이: 배선을 고친 뒤에도 리드는 0이었다
배선 가설은 리드 0을 설명하지 못했습니다. 두 결함을 고친 7월 24일·26일을 포함한 최근 7일 동안 ₩357,060를 썼고, 유료 리드는 0건이었습니다. 수리 직후 기준 파일과 라이브의 차이도 0이었습니다. 집행이 계산대로 정확히 이뤄졌다면 문제는 집행이 아니라 계산 쪽에 있어야 합니다. 배선은 실제로 고장 나 있었지만, 그건 “돈이 엉뚱하게 나간 이유”였지 “돈이 리드를 못 만든 이유”가 아니었습니다.
두 번째로 검토한 설명은 표본입니다. 리드 2건은 작은 숫자이고, 2건이 3건만 됐어도 전환율은 크게 달라집니다. 그러니 판단을 미루고 더 모으자는 선택지가 있었습니다. 이 설명도 버렸습니다. 이유는 둘입니다. 하나, 최근 7일 ₩357,060·리드 0이라는 구간이 따로 존재해서 우연 한 번으로 보기 어려웠습니다. 둘, 이 상황에서 판단 보류는 곧 재충전하고 같은 키워드에 계속 쓰자는 뜻이었습니다. 표본을 모으는 비용을 계속 광고비로 내는 셈입니다.
배선은 실제로 고장 나 있었다. 그러나 그것은 돈이 엉뚱하게 나간 이유였지, 돈이 리드를 못 만든 이유가 아니었다.
진짜 원인: 클릭 가치 천장의 9.8%는 어디서 왔나?
계산 쪽을 거슬러 올라가자 입력값 하나가 나왔습니다. 판매 서비스 설정 파일(offers.json)의 홈페이지제작 항목에 click_to_lead_rate가 9.8%로 적혀 있었습니다. 출처는 WordStream의 업계 벤치마크였습니다. 자사 데이터가 하나도 없던 시절에 대용치로 넣은 값이 그대로 남아 있었습니다.
이 값은 그냥 참고 숫자가 아니었습니다. 스크립트는 전환율·계약률·안전계수를 곱해 키워드별 클릭 가치 천장을 계산하는데, 9.8%가 만든 천장이 ₩27,562였습니다. 최소입찰가가 ₩12,540~29,740인 홈페이지 키워드 9종이 이 천장 아래로 들어와 “집행해도 남는다”는 판정을 받고 있었습니다. 시스템은 정확하게 작동했고, 정확하게 틀린 숫자를 따랐습니다.
실측과 비교하면 차이가 분명합니다. 클릭 265회에 리드 2건, 2/265 = 0.75%입니다. 벤치마크의 1/13입니다. 표본이 작다는 반론을 감안해 95% 신뢰구간 상한을 잡아도 2.6%로, 벤치마크에 한참 못 미칩니다. “운이 나빠서 낮게 나왔다”를 최대한 너그럽게 봐도 9.8%는 나올 수 없는 숫자였습니다.

고친 방법: 전환율을 실측으로 바꾸고 기준 파일을 다시 만들었다
수리는 입력값 한 곳에서 했습니다. click_to_lead_rate를 실측 0.75%로 바꾸고, 같은 항목에 rate_source 필드를 두어 표본 수(n)·기간·데이터 출처를 적었습니다. 숫자만 바꾸면 다음에 누가 이 값을 봐도 근거를 알 수 없기 때문입니다.
천장은 전환율에 비례합니다. 9.8을 0.75로 나누면 약 13이고, 천장도 ₩27,562에서 ₩2,109로 같은 비율만큼 내려갔습니다(안전계수 0.5 반영). 이 상태로 기준 파일을 다시 계산하자 홈페이지제작 계열 키워드 13종이 “경제성 미달(economic_fail)” 판정을 받아 자동으로 꺼졌고, 활성 키워드는 16종에서 8종으로 줄었습니다.

채널에는 아무것도 밀어 넣지 않았습니다. 두 채널이 잔액 소진으로 이미 멈춰 있었으므로 지금 바꿀 라이브 상태가 없었습니다. 대신 중요한 것은 다음 충전 순간입니다. 이전 구조였다면 충전하는 즉시 9.8% 기준으로 같은 키워드가 다시 켜졌을 것이고, 이제는 기준 파일이 그 키워드들을 꺼진 채로 둡니다.
왜 입찰가만 내리지 않았나?
수리 방향을 정하면서 버린 대안이 세 개 있습니다. 결론보다 이 기각 이유가 다른 광고주에게 더 쓸모 있을 것 같아 그대로 남깁니다.
- 벤치마크는 두고 입찰가만 낮추기: 기각. 홈페이지 키워드는 최소노출가가 ₩12,540 이상이라 그 아래로 내리면 노출 자체가 0이 됩니다. 돈은 안 나가지만 데이터도 안 쌓이고, 틀린 가정은 파일에 그대로 남습니다.
- 95% 상한 2.6%를 채택: 기각. 상한을 점추정처럼 쓰면 같은 낙관 편향을 한 단계 작게 반복할 뿐입니다. 다만 상한으로 계산해도 홈페이지 키워드 9종은 전부 탈락해, 어느 쪽을 택해도 결론은 같았습니다.
- 표본 n=2가 작으니 판단 보류: 기각. 앞에서 적은 대로 최근 7일 ₩357,060·리드 0 구간이 따로 있고, 보류는 재충전 후 계속 쓰기와 같은 뜻이었습니다.
세 대안 모두 “틀린 숫자는 그대로 두고 증상만 다룬다”는 공통점이 있었습니다. 입력값을 고치면 증상 쪽 조정은 따로 할 필요가 없어집니다.
같은 실수를 막는 장치는 무엇인가?
이번 실수의 모양은 “데이터가 없을 때 넣은 대용치가, 데이터가 생긴 뒤에도 계속 판정을 내린다”입니다. 그래서 장치도 값 하나를 고치는 데서 멈추지 않고 세 곳에 걸었습니다.
- 값마다 출처를 붙인다. rate_source에 n·기간·데이터 출처를 적습니다. 벤치마크인지 실측인지, 실측이면 몇 건에서 나왔는지가 값 옆에 보입니다. 이후 다른 분석에서도 이 값을 “0.0075(n=265)”로 출처와 함께 가져다 썼습니다.
- 판정은 기준 파일이 자동으로 한다. 천장이 시장 입찰가보다 낮으면 사람 손을 거치지 않고 economic_fail로 꺼집니다. 전환율을 바꾸자마자 13종이 꺼진 것도 이 장치 덕분입니다.
- 재충전이 손실 구조를 되살리지 못한다. 채널 잔액을 채우는 일과 키워드를 켜는 일이 분리돼 있어서, 충전해도 기준 파일이 끈 키워드는 꺼진 채로 남습니다.

한 달 뒤인 8월 24일 갱신된 키워드 데이터로 다시 보니, 홈페이지제작업체 키워드의 시장 입찰가는 19,486원, 우리 천장은 2,095원으로 9.3배 차이가 났습니다. 0.75%로 바꾼 판정이 일시적인 숫자가 아니었다는 확인입니다. 같은 퍼널을 구조 단위로 다시 감사한 기록은 광고 전환 퍼널 감사에 따로 정리했습니다.
아직 풀지 못한 것
이 수리로 천장이 정직해졌다고 말하기는 아직 이릅니다. 공식의 다른 입력값인 계약률(close_rate) 0.15도 계약 0건 상태라 검증된 적이 없습니다. 실측이 들어오면 천장은 더 내려갈 수도 있습니다. 지금 천장은 여전히 낙관 쪽입니다.
예외도 하나 남았습니다. 병원홈페이지제작 키워드는 사람이 직접 켜 두도록 고정한 설정(manual_override)으로 양 채널 집행을 유지하고 있었는데, 그 승인 근거가 “클릭 가치 천장 27,562 이내라 수익성이 성립한다”였습니다. 천장이 2,109로 내려간 지금은 그 전제가 사라졌으므로 다시 확인해야 할 항목으로 표시했습니다. 자동 판정이 사람의 명시적 결정을 덮어쓰지 않게 만든 장치가, 이번에는 틀린 숫자를 보존하는 쪽으로 작동할 수 있다는 뜻입니다.
마지막으로 사업상 대가가 있습니다. 홈페이지제작 축의 유료검색 유입은 사실상 0이 됐습니다. 이 축의 손님은 이제 검색 콘텐츠와 직접 연락으로 와야 하고, 그 대체 경로가 실제로 도는지가 다음 판정 대상입니다. 광고비 구조나 키워드 천장 계산을 함께 점검하고 싶다면 상담으로 문의해 주세요.