작업자: 김서연 (퍼포먼스팀) / 2026-09-17
대표님 지적 그대로다. 단백질저당 85건이 한 덩어리라 단백질 광고와 저당 광고가
섞여 있고, 식품 134건 안에도 단백질 신호가 40건 더 있었다. 카테고리 필터를 눌러도
원하는 레퍼런스가 안 나오는 구조였다.
먼저 원본 데이터를 직접 세어봤다:
instagram.com, {{product.name}}, smartstore.naver.com 같은 도메인·템플릿 잔재뿐이다.
긁혀 들어온 무관 브랜드가 그대로 통과한다.
새 파일 dashboard/refs_classify.py — pull_refs.py와 pull_refs_new.py가 공유하는 분류기.
분류 로직을 두 스크립트에 복붙하면 나중에 반드시 어긋나서 분리했다.
판정 규칙:
1. 신호를 강/약으로 분리한다.
- 강신호 = 페이지명 + 본문 텍스트 (실제 그 광고가 말하는 내용)
- 약신호 = 수집 키워드 (검색어일 뿐, 그 제품이라는 보장 없음)
2. 강신호가 있으면 강신호로 판정. 없을 때만 키워드로 폴백.
한쪽만 강신호로 잡히고 다른 쪽이 키워드에 있으면 보강(예: 본문 "고단백" + 키워드 "저당" → 단백질+저당).
3. 결과: 단백질 / 저당 / 단백질+저당 / 식품 4분할.
뷰티·건강기능식품은 원본 유지 (재분류 대상 아님).
신뢰도 등급(conf)을 같이 붙였다.
키워드로만 판정했는데 본문에 확인 근거가 전혀 없으면 low.
"광고 라이브러리 키워드 검색에 걸렸다"는 사실만 있고 실제 그 제품인지 확인이 안 된 건이다.
대시보드는 low를 기본 목록에서 빼고 접이식 섹션으로 따로 보여준다 — 52건이 여기 들어갔다.
추측으로 카테고리를 확정하지 않으려고 만든 등급이다.
무관 브랜드 필터.
페이지명·본문에 패션/잡화 신호(가디건, fashion, jewel, 가구, 쇼핑몰 등)가 있고
식품·뷰티·건기식 신호가 하나도 없으면 excluded=True.
중요: 지우지 않았다. 지시대로 excluded 플래그만 붙이고 JSON에는 전부 남겼다.
대시보드 ①레퍼런스 탭 하단에 무관 브랜드로 제외 표시된 광고 8건 (오검출 검수용 — 지운 것 아님)
접이식 목록으로 전부 노출한다. 페이지명·제외 사유·본문 발췌·원본 링크가 다 들어있어
대표님이 오검출을 바로 확인하실 수 있다.
레퍼런스 513건 / 이미지 신규복사 0장 / 주차 18회
카테고리: {'건강기능식품': 125, '단백질': 88, '식품': 84,
'저당': 38, '뷰티': 168, '단백질+저당': 2}
제외표시(excluded): 8건
기존 단백질저당 85 / 식품 134 → 단백질 88 / 저당 38 / 단백질+저당 2 / 식품 84.
단백질 88건은 기존 85건 덩어리에서 나온 게 아니라 식품 안에 묻혀 있던 것까지 끌어올린 수치다.
제외 표시된 8건 전량 (직접 확인):
| 원카테고리 | 페이지 | 본문 | 사유 |
|---|---|---|---|
| 식품 | sso_urj | [24SS🤍][기획]클레버 베이직 라운드 가디건 (10 color) | 가디건 |
| 식품 | sso_urj | (동일, 변형) | 가디건 |
| 식품 | Jewelzz Fashion Market | Jewelzz Fashion Market | fashion, jewel |
| 식품 | My fashion blog Coyun | jewelzz.shop | fashion, jewel |
| 식품 | My fashion blog Coyun | My fashion blog Coyun | fashion |
| 식품 | My fashion blog Coyun | (동일, 변형) | fashion |
| 식품 | 나산가구 | 나산가구 | 가구 |
| 뷰티 | 쇼핑몰후기 | {{product.name}} | 쇼핑몰 |
대표님이 지목하신 Jewelzz Fashion Market, My fashion blog Coyun 둘 다 잡혔다.
전부 키워드 오트밀로 긁혀 들어온 건이었다.
오검출 후보 1건 지적해둔다: 쇼핑몰후기(뷰티)는 본문이 {{product.name}} 템플릿 잔재라
판정 근거가 없는데 페이지명의 "쇼핑몰"만 걸렸다. 실제 화장품 광고일 수 있다. 확인 필요.
pull_refs.py → build.py 전체 파이프라인 실행해서 확인했다. 정상 생성.
build.py는 cat == "단백질저당" 하드코딩으로 '우리 카테고리'를 세고 있어서
4분할 후 0이 되는 버그가 있었다. ("단백질","저당","단백질+저당","단백질저당")으로 고쳤다.
cats 필터 버튼도 excluded 건을 제외한 카테고리만 뽑도록 수정.
기존 수집기는 start_date < 오늘-90일을 통과한 광고만 남긴다. 구조상 신규 소재가 들어올 수 없다.
"오래 살아남음 = 검증됨"은 뼈대 레퍼런스로는 맞는 기준이지만,
"지금 뭐가 도는가"는 정의상 못 잡는다. 필터 조건이 정반대라 같은 스크립트로 못 한다.
dashboard/pull_refs_new.py — 30일 이내 시작 광고 전용 수집기.
data/ad_library_new/ads_new30_YYYYMMDD.json. 기존 data/ad_library/ 는 읽지도 쓰지도 않는다. 3개월+ 트랙 건드리지 않았다.
extract_start_date, extract_text 등)는 기존 scrape_meta_ads.py에서소스 파싱으로 함수부만 뽑아 재사용. Apify 필드명 추출 로직을 복붙하면 어긋나서 그렇게 했다.
(모듈 통째 import는 안 된다 — import 시점에 토큰 체크가 돌아 죽는다)
프로틴쿠키·단백질쉐이크·단백질빵·다이어트간식·식단관리·저칼로리.
뷰티·건기식은 이 트랙에서 뺐다. 목적이 '우리 카테고리 후킹 추적'이고 예산이 주 $5다.
--budget 옵션으로 상한. 누적 비용이 넘으면 남은 키워드를 건너뛴다.--dry-run: API 호출 없이 저장분만 재정리 (후킹 추출 로직 고칠 때 재수집 비용 0).수집 광고의 첫 문장을 뽑아 유형 분류한다. 여기서 한 번 실패하고 고쳤다:
1차 시도 — 후킹 209건 추출 성공으로 나왔는데, 실제로 열어보니
wishier.com, idea-nutrition.com, brand.naver.com 같은 도메인만 있는 게 대부분이었다.
숫자만 보고 성공했다고 보고했으면 거짓 보고가 될 뻔했다.
수정 — 도메인만 있는 줄, {{ }} 템플릿 잔재, 본문이 페이지명과 동일한 건,
한글이 하나도 없는 건을 전부 제외. 209건 → 106건 (고유 문구 59개).
숫자는 줄었지만 이게 실제 문구다.
유형 분류: 질문형 / 수치제시형 / 부정형 / 긴급·희소형 / 대화체·밈 / 단순선언형.
전체 수집 559건 → 30일 이내 263건 → 중복제거 244건 카테고리: 단백질 106 / 식품 70 / 저당 58 / 단백질+저당 10 후킹 추출: 106건 / 고유 문구 59개 비용: $0.79 (상한 $4 설정, 예산 주 $5 이내)
트랙 신설이 값을 하는지 확인: 신규 트랙 광고주 100개 중
86개는 3개월+ 트랙에 없던 브랜드다 (교집합 14개). 다른 모집단을 실제로 잡고 있다.
먼저 --quick(키워드당 5건, $0.0)으로 파이프라인부터 검증하고 본 수집을 돌렸다.
~/Hermes/소재기획/20260917/후킹_밈_리포트.md
문장 구조 6유형 분류 + 유형별 실제 사례 전량 + 브랜드별 집행 패턴 +
플로에 적용 가능/불가 구분 + 확인 불가 항목 명시.
가장 중요한 부분만 여기 옮긴다:
이번 수집 최다 빈도 문구는 차용 금지 대상이다.
【내과 원장도 경악】 식후 혈당 뚝! / 【식후 혈당이 뚝?!】 대한가정의학회 전문의 인증 천연 보약
계열이 21회로 압도적 1위인데, 이건 유행이 아니다.
집행 계정이 Clarizoclar04, Radiizoradi963 같은 무작위 영문+숫자 페이지명이다.
단기 운영 후 폐기하는 소각형 계정 패턴이고, 일반식품이 혈당·질병 효능을 말한 건
식품표시광고법 위반이다. 플로에는 절대 쓰면 안 된다.
빈도 순으로만 리포트했으면 이걸 1순위 추천으로 올릴 뻔했다.
적용 1순위: 고단백 22g 단백질 쉐이크 당류 ZERO (식단 천재) 식의 양면 수치 제시.
플로에 패키지 앞면에 단백질/당류 수치가 이미 인쇄돼 있어 그대로 헤드로 올릴 수 있고,
저당·고단백이라는 우리 카테고리 본질과 정확히 맞는다.
밈은 확인되지 않았다. 고유 문구 59개 중 대화체·밈 3개(5%)뿐이고 그나마 구어체에 가깝다.
영상·이미지 내부 자막은 이번 수집 범위 밖이라 거기 밈이 있을 수 있으나
이 방법으로는 확인 불가. "밈이 유행이다"라고 쓰지 않았다.
| 파일 | 상태 |
|---|---|
dashboard/refs_classify.py | 신규 — 공용 분류기 |
dashboard/pull_refs.py | 수정 — 분류기 연결, excluded/conf/tags 필드 추가 |
dashboard/pull_refs_new.py | 신규 — 30일 이내 수집기 |
dashboard/build.py | 수정 — 4분할 카테고리 대응, 제외·저신뢰 검수 섹션 2개 추가 |
dashboard/refs_new.json | 신규 산출물 |
data/ad_library_new/ads_new30_20260917.json | 신규 산출물 (기존 폴더와 분리) |
소재기획/20260917/후킹_밈_리포트.md | 신규 |
data/ad_library/ads_3mplus_*.json | 무변경 |
광고 계정은 읽기만 했다. 생성·수정·on/off 일절 없음.
주 1회 python3 pull_refs_new.py (약 $0.8) + pull_refs.py + build.py.
1회차라 비교 대상이 없다. 2주 뒤 생존 문구를 봐야 비로소 초기 검증 신호가 나온다.