Meta ads setup
Meta 광고 세팅 가이드 — Ads Manager에서 캠페인부터 Threads 배치까지 처음부터 수동 설정하고, Pencil App으로 광고 에셋 초안도 만든다. Meta 광고 세팅, Threads 광고 세팅 시 사용.From its SKILL.md
npx -y skills add october-academy/agnt --skill meta-ads-setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
34.7 KB, as published. Nobody here has run it
Meta 광고 세팅 가이드. Ads Manager에서 캠페인 -> 광고 세트 -> 광고 순서로 직접 설정하게 안내합니다.
데이터 경로 결정
AGNT_DIR
.claude/agnt/state.json을 Read 시도 → 성공하면 AGNT_DIR =.claude/agnt- 실패 시
~/.claude/agnt/state.jsonRead 시도 → 성공하면 AGNT_DIR =~/.claude/agnt - 실패 시
.codex/agnt/state.jsonRead 시도 → 성공하면 AGNT_DIR =.codex/agnt - 실패 시
~/.codex/agnt/state.jsonRead 시도 → 성공하면 AGNT_DIR =~/.codex/agnt - 모두 없으면 → "먼저
/agnt:start로 시작하세요." 출력 후 종료
REFS_DIR
{AGNT_DIR}/references/shared/navigator-engine.md 존재 여부로 탐색.
ICP_DOC_PATH
아래 우선순위로 ICP 문서 경로를 결정한다:
- 현재 작업 디렉토리의
docs/ICP.md - 없으면
{AGNT_DIR}/docs/ICP.md
DESIGN_SYSTEM_DOC_PATH
아래 우선순위로 디자인 시스템 문서 경로를 결정한다:
- 현재 작업 디렉토리의
docs/design-system.md - 없으면
{AGNT_DIR}/docs/design-system.md
TARGET_ICP_SOURCE
광고 타겟의 source of truth는 아래 우선순위로 결정한다:
state.json의project.icp{AGNT_DIR}/journey-brief.md의 현재 프로젝트 설명/시장 섹션ICP_DOC_PATH의 현재 프로젝트용 ICP 문서- 전부 불명확하면 사용자에게 한 줄로 보정 질문
중요:
- 저장소의
docs/ICP.md가 이 스킬/프레임워크 자체 또는 Agentic30 자체의 ICP를 설명하면, 그 문서는 참고 자료일 뿐 광고 타겟 기본값으로 쓰지 않는다 - 즉, 현재 repo에
docs/ICP.md가 있어도 자동으로 채택하지 않는다
CREATIVE_STYLE_SOURCE
광고 에셋 비주얼 스타일의 source of truth는 아래 우선순위로 결정한다:
- 현재 사용자의
docs/design-system.md문서 - 현재 사용자의 제품에 이미 있는 OG 이미지 / 랜딩 히어로 / 브랜드 가이드
- 현재 작업 디렉토리의 대표 랜딩 스크린샷 또는 로고
- 위가 없으면 이 스킬 번들의 샘플 에셋과 repo의 OG 이미지를 스타일 레퍼런스 예시로만 사용
중요:
- Agentic30의 OG 이미지는
스타일 fallback일 뿐, 사용자의 제품 메시지나 ICP를 대신하지 않는다 - 비슷한 사용자(솔로프리너, 초기 제품 빌더)를 위한 스킬이므로, 톤은 참고하되 카피와 시각 요소는 현재 사용자 제품 기준으로 다시 만든다
출력 규칙
내부 로직 무음 처리.
실행 절차
1. 사전 조건 확인
{AGNT_DIR}/state.json Read.
meta.schema_version != 3→/agnt:start로 안내 후 종료project.icp == null이고ICP_DOC_PATH도 없으면 → "먼저/agnt:icp로 타겟을 고정해." (비강제 — 진행 가능)
기본값 보증:
artifacts.meta_ads_setup_defined가 undefined면false로 처리
2. 컨텍스트 로드
가능하면 아래를 Read:
state.json의project.icp,project.problem,project.namestate.json의tools.analyticsICP_DOC_PATHDESIGN_SYSTEM_DOC_PATH{AGNT_DIR}/journey-brief.md{AGNT_DIR}/ad-creatives.md- 현재 프로젝트의 대표 URL, 랜딩 스크린샷, OG 이미지 경로
없어도 진행 가능하다. 없으면 아래 기본값을 사용한다:
- 국가:
대한민국 - 연령:
24-39 - 언어:
한국어 - 채널:
Threads feed - 목표:
트래픽
2-bis. ICP source 검증
ICP_DOC_PATH를 읽었다면 아래를 먼저 점검한다.
문서를 현재 광고 대상의 ICP로 쓰면 안 되는 신호:
- 문서가
Agentic30,agnt, 이 스킬, 이 커리큘럼 자체를 설명함 - 문서가 "우리 ICP", "웹 페이지 버전", 내부 handbook 같은 제품 운영 문서 톤임
- 문서의 고객과 현재
project.name/project.problem이 전혀 다름 - 문서가 사용자의 제품이 아니라 예시 프레임워크/샘플처럼 보임
위 신호가 있으면:
docs/ICP.md를 기본 타겟 source에서 제외project.icp또는journey-brief를 우선 사용- 둘 다 불명확하면 질문으로 보정
DESIGN_SYSTEM_DOC_PATH가 있으면 아래를 먼저 우선 적용한다:
- accent/background/foreground 색상
- 타이포 톤과 headline weight
- 테두리/섀도우/라운드 규칙
Asset Rules섹션의 광고/OG 규칙
문서가 현재 제품용이 아니거나 예시 문서처럼 보이면:
- 색상/타이포 결정의 참고만 하고 강제 적용하지 않는다
질문은 선택지 우선:
AskUserQuestion: "광고하려는 제품의 ICP source는 뭐야?"
- A) 현재 프로젝트 state의 ICP
- B) 현재 작업 디렉토리의
docs/ICP.md - C) 둘 다 아니고, 지금 광고할 제품 ICP를 한 줄로 말할게
C를 선택한 경우에만:
AskUserQuestion: "누구에게 파는 제품인지 한 줄로 적어줘. 직업/상황/문제를 포함해."
3. Ads Manager 진입 상태 분기
먼저 현재 사용자가 어디에 있는지 짧게 판별한다.
AskUserQuestion: "지금 어디 화면이야?"
- A) Ads Manager 메인
- B) 타겟(Audiences) 화면
- C) 캠페인 만들기 도중
- D) 모르겠어
출력 규칙:
- B면: "그 화면은 타겟 자산 라이브러리야. 뒤로 가서 Ads Manager 메인으로 돌아가."를 먼저 말한다
- C면: 현재 단계를 기준으로 필요한 다음 단계만 안내한다
- A/D면: 처음부터 전체 절차를 안내한다
3-bis-pixel. Meta Pixel 설치 확인
광고 전환 추적을 위해 Meta Pixel이 필요하다. 아래 순서로 안내한다.
Pixel 설치 여부 확인
AskUserQuestion: "Meta Pixel이 이미 설치되어 있어?"
- A) 네, 설치됨
- B) 아니요 / 모르겠어요
B일 경우 아래 안내:
- Meta Events Manager 접속 (business.facebook.com/events_manager)
- Connect data → Web → Set up manually → Conversions API
- Data sources → Settings에서 Pixel ID (Dataset ID) 복사
- 코드에 Pixel 스니펫 삽입 또는 환경변수
NEXT_PUBLIC_META_PIXEL_ID에 Pixel ID 설정 - 전환 이벤트 매핑:
| 페이지 | Meta 표준 이벤트 | 시점 |
|---|---|---|
| 랜딩 | ViewContent | 페이지 로드 |
| 로그인/가입 클릭 | Lead | OAuth 버튼 클릭 |
| 가입 완료 | CompleteRegistration | 온보딩 폼 제출 |
| 결제 CTA | InitiateCheckout | 구독 버튼 클릭 |
| 결제 성공 | Purchase | 결제 완료 (금액 + 통화 포함) |
- 배포 후 Events Manager → Test Events 탭에서 이벤트 수신 확인
PostHog ↔ Meta Conversions API 서버사이드 연동
브라우저 Pixel만으로는 광고 차단기에 의해 전환이 누락될 수 있다. PostHog에서 서버사이드로도 전환을 보내면 이중 추적이 된다.
- PostHog → Data pipeline → Destinations → "Meta Ads Conversions" 검색 → + Create
- Access Token: Events Manager → Settings → Generate Access Token
- Pixel ID: 위에서 복사한 동일 ID
- 이벤트 필터: 전환 이벤트만 전송 (모든 pageview를 보내지 않는다)
- Create & Enable → Test Event Code로 검증
3-ter. PostHog 연동 상태 분기
광고 성과를 보려면 URL 파라미터와 PostHog가 먼저 맞아야 한다.
판단 원칙:
tools.analytics == "posthog"또는 analytics setup이 완료돼 있으면 PostHog 기준으로 진행- 아니면
/agnt:analytics-setup을 먼저 안내
ToolSearch로 +agentic30 검색.
도구 발견 시:
connect_posthog_project를 사용할 수 있으면 PostHog 프로젝트 연결을 우선 안내- Meta 광고는 단축 링크보다 직접 랜딩 URL + URL parameters 조합을 기본으로 권장
도구가 없으면:
/agnt:analytics-setup으로 PostHog 이벤트와 UTM 저장 흐름부터 맞추라고 안내
3-bis. 광고 에셋 생성 분기
광고 세팅 전에 크리에이티브가 없거나 약하면, 먼저 에셋 초안 생성을 제안한다.
AskUserQuestion: "광고 에셋도 같이 만들까?"
- A) 응, Pencil App으로 초안까지 만들어줘
- B) 아니, 세팅만 안내해줘
A를 선택하면 아래 Pencil App 광고 에셋 초안 절차를 실행한다.
4. 타겟 해석
해석 원칙:
- 직접 타겟팅 가능: 국가, 연령, 언어, 관심사/행동, 맞춤 타겟
- 직접 타겟팅 불가:
전업,수익 0원,Codex 사용자,N번째 실패 - 따라서 ICP의
직업/상황/현재 대안에서 관심사 후보를 만들고, 직접 타겟팅 안 되는 부분은 카피로 필터링한다
기본 추천 타겟 구성:
- 위치:
대한민국 - 연령:
24-39 - 성별:
전체 - 언어:
한국어
상세 타게팅 후보는 ICP 유형별로 고른다.
A. 개발자 / AI 빌더 / 인디해커 ICP
Software developerProgrammingWeb developmentSoftware engineeringArtificial intelligenceOpenAIChatGPTGitHubStartup companyEntrepreneurship
B. 창업자 / 마케터 / 운영자 ICP
EntrepreneurshipStartup companySmall business ownersDigital marketingOnline advertisingProduct developmentSaaSE-commerceBusiness plan
C. 일반 B2C 소비자 ICP
- 문제와 직접 연결된 broad interest 3-5개만 고른다
- 예: 생산성 제품이면
Productivity,Time management,Notion - 예: 피트니스 제품이면
Fitness and wellness,Home exercise,Healthy diet - 예: 커리어 제품이면
Job hunting,Career development,Online learning - 너무 좁거나 추정이 강한 interest는 피하고, 연령/지역/카피로 필터링한다
D. 로컬 서비스 / 니치 B2C ICP
- 처음엔 관심사를 과하게 쌓지 말고 위치 + 연령 + 강한 카피로 시작
- 로컬 비즈니스면 반경/도시 타겟을 먼저 잡고 관심사는 최소화
선택 규칙:
project.icp나 선택된 ICP source를 보고 가장 가까운 archetype 1개를 먼저 고른다- archetype이 섞이면 1차 테스트는 광고세트 2개로 나눠서 비교
- 상세 타게팅은 세트당 3-5개로 시작
- 실제 계정에 보이는 항목만 선택
- 모호하면 개발자 interest를 기본값으로 쓰지 말고 broad 타겟 + 카피 필터로 후퇴
5. Meta 광고 세팅 절차 안내
아래 순서로, 클릭할 UI 라벨을 한국어/영문 같이 적어 단계별로 안내한다.
5-1. 캠페인
+ 만들기(+ Create) 클릭- 목표
트래픽(Traffic) 선택 - 캠페인 이름 입력
- 예시:
KR_Threads_ICP_Test_Traffic
- 예시:
Advantage campaign budget는 처음엔끔다음(Next)
5-2. 광고 세트
- 광고 세트 이름 입력
전환 위치(Conversion location) =웹사이트성과 목표(Performance goal)는 가능하면랜딩 페이지 조회수일일 예산입력- 예시:
10,000원
- 예시:
- 타겟 입력
- 위치 = ICP의 시장에 맞는 국가/도시
- 연령 = ICP의 현실적인 구매 연령대
- 성별 = 특별한 이유가 없으면
전체 - 언어 = ICP가 실제로 쓰는 광고 언어
- 상세 타게팅 = 위 archetype별 추천에서 3-5개
배치(Placements)에서수동 배치(Manual placements) 선택Threads플랫폼의Threads feed체크- 첫 테스트면 나머지 배치는 모두 해제
5-3. 광고
다음으로광고(Ad) 단계 진입- 광고 이름 입력
- Facebook Page / Instagram 계정 연결
광고 설정(Ad setup)에서단일 이미지또는 가장 단순한 피드형 광고 선택크리에이티브 미디어(Creative media)에 비율별 이미지를 업로드한다- 최소 권장 세트:
1200x628또는1080x566(1.91:1, 가로)1080x1080(1:1, 정사각형)1080x1350(4:5, 세로 피드)1080x1920(9:16, 스토리/릴스)
- 정사각형, 세로, 가로 placement를 모두 만족시키려면 한 장으로 해결하려 하지 말고 비율별 자산을 따로 올린다
- 최소 권장 세트:
기본 텍스트(Primary text)는 가능하면3-5개를 넣는다- Meta가 가장 효과가 좋을 것으로 예상되는 문구를 자동으로 노출할 수 있게 한다
헤드라인(Headline) 입력설명(Description) 입력 가능하면 짧게- 랜딩 URL 입력
- CTA는 기본값으로
자세히 알아보기를 추천
- 랜딩이 설명/검증 페이지면
자세히 알아보기 - 랜딩 첫 화면에서 바로 신청/결제면
가입하기
- 우측 미리보기에서
Threads feed,Instagram 탐색 홈,Stories/Reels미리보기를 확인 게시(Publish)
기본 문구(Primary text) 작성 규칙:
- 1개만 넣지 말고
3-5개넣어 테스트 여지를 만든다 - 제품 설명보다 대상 필터 + 문제 정의 + 결과 약속 순서가 낫다
- 이미지 헤드라인과 같은 말을 길게 반복하지 않는다
- 첫 문장에서 Anti-ICP를 걸러낸다
Agentic30 기준 예시:
만들 줄은 아는데 왜 안 팔릴까? Agentic30은 전업 1인 개발자를 위한 30일 PMF 검증 시스템입니다. AI 코파운더와 함께 첫 유저 반응과 첫 결제 신호까지 확인해보세요.혼자 만들다 멈추는 개발자를 위해 만들었습니다. 문제 정의, 랜딩 검증, 유입 확인, 첫 매출 신호까지 30일 안에 숫자로 점검하세요.코드는 되는데 유저가 없다면, 지금 필요한 건 기능 추가가 아니라 검증입니다. Agentic30에서 AI 코파운더와 함께 팔리는 문제부터 찾으세요.전업 1인 개발자에게 30일은 저축 잔고입니다. 감으로 만들지 말고, 유저 100명과 첫 매출 신호를 목표로 실제 반응을 확인해보세요.온라인 강의가 아니라 실행 시스템입니다. AI 코파운더, 멘토, 커뮤니티와 함께 혼자 삽질하지 않고 30일 안에 PMF를 검증하세요.
5-4. 추적 (Tracking)
광고 단계 하단의 추적 (Tracking) 섹션에서 아래를 설정한다.
웹사이트 이벤트는 현재 광고 계정의 기본 전환 데이터 세트 또는 픽셀을 유지URL 매개변수(URL parameters)를 연다- 아래
canonical UTM템플릿을 넣는다
권장 템플릿:
utm_source=meta&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{site_source_name}}__{{placement}}__{{ad.name}}&meta_campaign_id={{campaign.id}}&meta_adset_id={{adset.id}}&meta_ad_id={{ad.id}}
권장 이유:
utm_source:meta로 고정- PostHog 채널 분류가 안정적이다
facebook,instagram,threads로 source를 쪼개면 리포트가 흩어진다
utm_medium:paid-social로 고정- 오가닉
social과 분리된다
- 오가닉
utm_campaign: 사람이 읽을 수 있는 캠페인 이름- raw ID보다 분석이 쉽다
utm_content: site source + placement + 광고 변형을 담는다- ad-level 비교가 가능하다
- Threads는 보통
th__threads_stream__pain-v1같은 값이 된다
meta_*_id: 이름 변경이나 운영 중 꼬임이 생겼을 때 디버깅용 anchor가 된다
추가 권장:
- 캠페인 이름은 Ads Manager에서 미리 slug 친화적으로 만든다
- 예:
kr-threads-pmf-sprint-apr25
- 예:
- 광고 이름도 사람이 읽을 수 있게 만든다
- 예:
pain-v1,outcome-v1,transformation-v1
- 예:
가능하면 피해야 할 것:
utm_campaign=23849...같은 숫자 ID만 사용utm_source=facebook/instagram/threads를 뒤섞어서 source 분절- 너무 긴
utm_content
자동 추가 관련 주의:
- Meta 문서 기준으로 2024-01-01부터 일부 광고 트래픽에는 아래가 자동으로 추가될 수 있다
- 캠페인 소스 = Facebook 또는 Instagram
- 캠페인 매체 = 유료 광고
- 광고 ID / 캠페인 ID / 광고 세트 ID / 캠페인 추적 그룹 ID
- 하지만 이 자동값만 믿지 말고, 우리 쪽 canonical UTM 4개는 직접 넣는 걸 기본값으로 한다
- 이유:
- 자동 추가는 광고 유형/표면에 따라 달라질 수 있다
- PostHog와 내부 리포트는 현재
utm_source / utm_medium / utm_campaign / utm_content에 가장 안정적으로 맞춰져 있다
5-5. Dynamic parameters 가이드
Meta UI에서 dynamic parameter가 지원되면 아래 원칙으로 쓴다.
우선순위
- 사람이 읽을 수 있는 이름을
utm_campaign,utm_content에 넣는다 - ID는 꼭 필요할 때만 보조 파라미터로 추가한다
지원되는 핵심 dynamic parameters:
{{campaign.id}}{{adset.id}}{{ad.id}}{{campaign.name}}{{adset.name}}{{ad.name}}{{placement}}{{site_source_name}}
권장 매핑:
- 캠페인 소스 (
campaign source) →meta - 캠페인 매체 (
campaign medium) →paid-social - 캠페인 이름 (
campaign name) →{{campaign.name}} - 캠페인 콘텐츠 (
campaign content) →{{site_source_name}}__{{placement}}__{{ad.name}}
Threads에서 특히 useful:
{{placement}}→ 보통threads_stream{{site_source_name}}→th
즉 Threads 광고의 utm_content 예시는:
th__threads_stream__pain-v1
보조 파라미터가 필요하면 아래를 추가할 수 있다:
&meta_campaign_id={{campaign.id}}&meta_adset_id={{adset.id}}&meta_ad_id={{ad.id}}&meta_site={{site_source_name}}&meta_placement={{placement}}
하지만 현재 agnt + PostHog 기본 스택에서는:
utm_sourceutm_mediumutm_campaignutm_content
이 4개가 가장 안정적으로 저장/분석된다.
즉, 다이나믹 값은 우선 utm_campaign과 utm_content 안에 녹이고, ID는 보조 파라미터로 함께 붙여라.
이름 기반 매개변수 주의:
{{campaign.name}},{{adset.name}},{{ad.name}}는 광고가 처음 게재될 때의 이름을 참조한다- 게시 후 이름을 바꿔도 URL 파라미터 값은 원래 이름을 계속 참조할 수 있다
- 그래서 Ads Manager에서 게시 전에 slug 친화적인 이름을 먼저 정하고 시작하는 편이 낫다
5-6. PostHog 기준 추천 규칙
현재 코드베이스 기준:
- landing 이벤트는
utm_source,utm_medium,utm_campaign,utm_content를 PostHog에 실어 보낸다 - middleware는
utm_source,utm_medium,utm_campaign를 쿠키로 저장한다 - localStorage에는
utm_content까지 저장한다
그래서 Meta 광고용 기본값은 아래가 가장 안전하다:
utm_source=meta
utm_medium=paid-social
utm_campaign={{campaign.name}}
utm_content={{site_source_name}}__{{placement}}__{{ad.name}}
Threads placement만 테스트할 때:
utm_source=meta&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content=th__threads_stream__{{ad.name}}
Meta 전체 placement를 같이 돌릴 때:
utm_source=meta&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{site_source_name}}__{{placement}}__{{ad.name}}
광고 관리자에 그대로 넣는 완성형 권장안:
utm_source=meta&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{site_source_name}}__{{placement}}__{{ad.name}}&meta_campaign_id={{campaign.id}}&meta_adset_id={{adset.id}}&meta_ad_id={{ad.id}}
5-7. agentic30 MCP / PostHog MCP 연동
identity.mode == "synced"면:
ToolSearch로+agentic30검색- PostHog가 아직 미연결이면
connect_posthog_project를 먼저 안내 - Meta 광고는
create_utm_link보다 Ads Manager의URL parameters필드를 우선 사용- 이유: Meta dynamic parameter가 ad/campaign 단위 값을 직접 채울 수 있음
- 짧은 링크는 오가닉 채널에 더 적합함
추가 안내:
- PostHog 대시보드에서는
utm_campaign,utm_content기준으로 Meta 광고를 비교 - 채널 수준은
utm_source=meta, 매체 수준은utm_medium=paid-social로 묶는다
6. 카피 필터 규칙
광고 문구 첫 줄로 Anti-ICP를 걸러야 한다고 안내한다.
예시 첫 줄:
퇴사 후 전업인데 아직 첫 매출이 없나요?1인 샵을 운영하는데 광고 효율이 계속 안 맞는다면매일 운동 계획은 세우는데 3일 이상 못 가는 사람용
경고:
- Anti-ICP를 카피 첫 줄에서 배제
- 좁은 타겟보다 선명한 카피가 더 중요
- 추상 슬로건보다
문제 / 결과 / 증거가 먼저 보여야 한다 - 브랜드 문장보다 클릭 이유가 더 중요하다
- 이미지 안 카피는 가능한 한 짧게 유지한다
전환형 카피 원칙:
만들다,성장,기회같은 추상어보다첫 유저,첫 예약,첫 결제,검증같은 결과어를 우선한다이제는 판다처럼 발화 주체가 모호한 표현보다이제는 팔린다처럼 결과가 바로 읽히는 표현을 우선한다SPEC,UTM,배포,검증같은 내부 작업 단어를 이미지 헤드라인에 그대로 올리지 않는다- 숫자를 쓸 때는 의미가 큰 숫자만 쓴다
- 예:
30일,100명 - 비권장:
첫 매출 5,000원처럼 제품 가치를 싸 보이게 할 수 있는 작은 금액
- 예:
- 한 장당 메시지는 하나만 남긴다
- pain는 문제 직격
- outcome은 결과 약속
- transformation은 정체성 변화 또는 증거
이미지 카피 기본 구조:
- 헤드라인 1개
- 보조 설명 1개
- 짧은 배지/증거 1개
기본 필드별 역할:
Primary text: 배경 설명 + 대상 필터Headline: 클릭 이유를 한 줄로 압축- 이미지 헤드라인: 스크롤을 멈추게 하는 핵심 문장만 유지
Description: 선택 사항이며, 반복 설명이면 생략 가능
7. 문제 해결 분기
사용자가 막힐 때는 아래 분기로 답한다.
A. Threads가 안 보일 때
- 목표가
트래픽인지 확인 - 자동화된 캠페인 유형이 아닌지 확인
- 광고 형식을
단일 이미지처럼 단순하게 변경 수동 배치로 다시 진입
B. 타겟 화면만 보일 때
- "그건
Audiences라이브러리야. 뒤로 가서 캠페인 생성 흐름으로 돌아가."라고 말한다 - 저장된 타겟은 선택 사항이지 필수 절차가 아님을 분명히 한다
C. 관심사가 안 보일 때
- 유사한 항목으로 대체
- 3-5개만 선택
- 나머지는 카피와 랜딩으로 필터
D. Instagram 탐색 홈에 지원되지 않는 화면 비율이 뜰 때
- 이 에러는 보통 현재 업로드한 미디어가
Instagram 탐색 홈placement 비율 조건을 만족하지 않는다는 뜻이다 - 기본 대응:
1080x1350(4:5) 또는1080x1920(9:16) 이미지를 추가 업로드- 또는 해당 placement를 해제
1:1이나1.91:1만으로는 일부 Instagram placement가 빠질 수 있다- 따라서 Explore/피드/스토리까지 넓게 커버하려면
1.91:1 + 1:1 + 4:5 + 9:16세트를 권장한다
8. 출력 포맷
최종 출력은 아래 순서를 유지한다.
- 지금 눌러야 할 버튼
- 현재 화면에서 입력할 값
- Threads에 필요한 설정
- 안 보이거나 막힐 때 대처
사용자가 지금 이 화면에서 뭘 눌러?라고 물으면 긴 설명 대신 바로 다음 클릭 1-3개만 말한다.
9. Pencil App 광고 에셋 초안
이 단계는 Pencil MCP가 사용 가능할 때 실행한다.
Pencil MCP가 없거나 Pencil.app이 설치/실행되지 않은 것 같으면:
- Pencil 기반 에셋 생성을 강행하지 않는다
- 먼저
Pencil.app이 없으면 https://www.pencil.dev/ 에서 설치/실행해.라고 안내한다 - 그 뒤 Meta 세팅 안내만 계속하거나, 사용자가 Pencil 준비 후 다시 실행하게 한다
목표:
- 사용자의 현재 ICP와 문제에 맞는 Meta 광고 이미지 초안 3종 생성
- 기본 형식은
1200x630(1.91:1) 3장 - 같은 메시지로
1080x1080(1:1),1080x1350(4:5),1080x1920(9:16) 파생본까지 만든다 - 즉, 가능하면 총 12개를 만든다
pain / outcome / transformation- 각 4비율:
1.91:1 / 1:1 / 4:5 / 9:16
9-1. 에셋 생성 전 입력값
아래를 먼저 정리한다:
- 제품 이름 1개
- 문제 한 줄 1개
- ICP 한 줄 1개
- 랜딩 CTA 또는 약속 한 줄 1개
- 스타일 source 1개
스타일 source 결정:
docs/design-system.md가 있으면 그 문서의Color System,Typography,Asset Rules를 먼저 사용- 사용자 제품의 OG/브랜드가 있으면 그걸 우선
- 둘 다 없으면
apps/web/public/images/og-image.png와assets/meta-ad-*.png를 레퍼런스 예시로 사용
9-2. 카피 각도
광고 초안은 항상 3개 각도로 만든다:
pain- 문제 직격
- "코드는 됐는데, 유저가 없다?" 같은 구조
outcome- 결과 약속
- "이번엔 끝까지", "첫 예약/첫 구매/첫 리드" 같은 구조
transformation- 정체성 변화
- "만드는 사람에서 파는 사람으로" 같은 구조
각도 선택 규칙:
- 개발자/빌더 ICP면 기술 언어를 조금 허용
- 일반 B2C면 더 쉬운 말로 바꿔
- 로컬 서비스면 도시/반경/업종 단서를 더 앞에 둬
카피 선택 우선순위:
- 대상이
내 얘기다라고 느끼는 문제 문장 - 무엇이 달라지는지 보이는 결과 문장
- 그 결과를 믿게 만드는 짧은 증거
권장 예시:
- pain:
만들 줄은 아는데, 왜 안 팔릴까? - outcome:
30일 안에 첫 유저 반응까지 - transformation:
혼자 빌드하던 개발자, 이제는 팔린다
비권장 예시:
이번엔 끝까지성장의 시작SPEC → 배포 → 검증
이유:
- 위 문구들은 제품 내부 맥락이 없으면 의미가 약하거나 너무 내부자 언어처럼 보인다
- 광고 이미지는 랜딩보다 더 빠르게 이해돼야 한다
9-3. 비주얼 규칙
기본 톤:
- 화이트/크림 배경
- 블랙 두꺼운 타이포
- 강한 오렌지 포인트
- 두꺼운 외곽선과 단순 기하학 도형
- 네오브루탈리즘 계열
하지만 다음은 제품별로 조정한다:
- 로고가 있으면 우하단 또는 헤더에 배치
- 제품 고유 색이 있으면 오렌지 포인트 대신 제품 대표색 사용 가능
- 일반 소비자 제품이면 텍스트 밀도를 조금 낮추고 여백을 늘려
docs/design-system.md가 있으면 그 문서의 금지 규칙을 우선 적용
9-4. Pencil 절차
get_editor_state(include_schema: true)로 현재 문서 확인- 광고용 프레임이 이미 있으면 새로 만들기 전에 수정 가능 여부를 먼저 확인한다
- 기존
pain / outcome / transformation프레임이 있으면 그 문서를 source of truth로 사용 - 카피만 약하면 새 프레임 생성보다 기존 프레임 수정이 우선이다
- 기존
- 작업 문서가 없으면 새
.pen문서를 열거나 현재 문서를 사용 get_screenshot또는 로컬 레퍼런스 이미지 확인batch_design으로 1200x630 프레임 3개 생성 또는 기존 3개 수정- 각 프레임에 다음을 넣는다:
- 강한 헤드라인 1개
- 강조 바/도형 1개 이상
- 짧은 서브카피 1개
- 짧은 배지 또는 CTA 라벨 1개
get_screenshot으로 프레임별 검수- 필요하면 좌표/크기/텍스트 길이 수정
- 1200x630 시안이 통과하면 같은 메시지로
1080x1080,1080x1350,1080x1920파생본을 만든다 - 정사각형/세로형은 단순 resize가 아니라 다음을 다시 조정한다:
- 헤드라인 폭
- 폰트 크기
- 줄바꿈
- 장식 도형 위치
- 하단 배지 위치
- 정사각형은 하단 밀도가 약하면 장식 면을 추가해 균형을 맞춘다
- 세로형은 빈 공간을 줄이는 대신 큰 장식 면과 더 큰 정보 블록으로 화면 점유를 높인다
get_screenshot으로1:1 / 4:5 / 9:16까지 다시 검수export_nodes로 비율별 PNG 추출
비율별 기본 원칙:
1200x630: Threads feed, 링크 공유형 기준의 기본 마스터1080x1080: 정사각형 placement 및 보조 피드 자산1080x1350: 모바일 피드에서 우선순위가 높다1080x1920: Story/Reels 계열 placement 대응- 실제 업로드 세트는 가능하면
1.91:1 + 1:1 + 4:5 + 9:16모두 준비한다
세로 비율 주의:
- 가로형 카피를 그대로 늘리지 않는다
- 헤드라인이 3줄 이상으로 찢기면 문장을 줄이거나 폰트 크기를 내린다
- transformation 카피는 세로형에서 특히 줄바꿈이 쉽게 망가지므로 별도 검수한다
정사각형 비율 주의:
- 중앙만 비워 두지 말고 하단 장식이나 배지로 균형을 만든다
pain과outcome은 정사각형에서 하단 밀도가 약해지기 쉬우니 장식 면을 한 번 더 점검한다
9-5. 파일 저장
기본 출력:
{AGNT_DIR}/ads/meta-ad-pain.png{AGNT_DIR}/ads/meta-ad-outcome.png{AGNT_DIR}/ads/meta-ad-transformation.png{AGNT_DIR}/ads/1x1/meta-ad-pain.png{AGNT_DIR}/ads/1x1/meta-ad-outcome.png{AGNT_DIR}/ads/1x1/meta-ad-transformation.png{AGNT_DIR}/ads/4x5/meta-ad-pain.png{AGNT_DIR}/ads/4x5/meta-ad-outcome.png{AGNT_DIR}/ads/4x5/meta-ad-transformation.png{AGNT_DIR}/ads/9x16/meta-ad-pain.png{AGNT_DIR}/ads/9x16/meta-ad-outcome.png{AGNT_DIR}/ads/9x16/meta-ad-transformation.png
프로젝트 구조상 다른 위치가 더 자연스러우면 다음도 허용:
- 현재 작업 디렉토리의
tmp/또는artifacts/ - 스킬 번들의
assets/는 샘플 보관용이지 사용자 산출물 기본 경로는 아님
9-6. 검수 규칙
- 1200x630 안에 모든 요소가 잘려 있지 않아야 함
- 헤드라인은 한눈에 읽혀야 함
- 텍스트는 3계층 이하로 제한
- 랜딩 첫 화면 메시지와 모순되면 안 됨
- 제품 ICP가 Agentic30 ICP와 다르면, 개발자 전용 문구를 넣지 않는다
- 한 장에 메시지 2개 이상을 억지로 넣지 않는다
- 모바일에서 가장 먼저 읽히는 건 헤드라인이어야 한다
- 이미지 안 텍스트는 내부자 용어보다 사용자 언어를 우선한다
1:1,4:5,9:16은 각각 별도 스크린샷 검수를 거친다- 세로형에서 어색한 줄바꿈이 나오면 export 전에 반드시 수정한다
- 같은 카피라도 비율에 따라 line break가 달라질 수 있음을 전제로 작업한다
- 정사각형과 세로형은 하단 밀도까지 본다. 텍스트만 위에 몰리고 아래가 비면 재수정한다
- 가능한 경우
문제형 / 결과형 / 증거형중 무엇이 가장 강한지 비교 가능한 상태로 남긴다
9-7. 실패/보정 분기
Pencil MCP가 없거나 Pencil editor가 연결되지 않으면:Pencil.app이 없으면 https://www.pencil.dev/ 에서 설치/실행해.라고 먼저 안내- 광고 카피와 shot list만 텍스트로 먼저 정리
- 제품 비주얼 레퍼런스가 없으면:
- 중립 네오브루탈 템플릿으로 시작
- 카피가 길면:
- 헤드라인을 8-18자 수준으로 줄여
- ICP가 너무 넓으면:
- 가장 절박한 세그먼트 1개만 잡아 3안 생성
- 첫 시안이 밋밋하면:
- 숫자, 기간, 결과를 더 앞에 둬
10. 저장
{AGNT_DIR}/meta-ads-setup.md Write.
# Meta Ads Setup
생성일: {날짜}
채널: Threads
목표: 트래픽
## 추천 타겟
{ICP source / archetype / 위치 / 연령 / 언어 / 상세 타게팅}
## Ads Manager 세팅 순서
{캠페인 -> 광고 세트 -> 광고 절차}
## Tracking
{utm_source / utm_medium / utm_campaign / utm_content 권장값}
## Pencil 에셋 초안
{pain / outcome / transformation 카피와 출력 파일 경로}
## 문제 해결
{Threads 미노출 / Audiences 화면 / 관심사 부족 대응}
11. state 업데이트 + MCP 제출
state.json 업데이트:
artifacts.meta_ads_setup_defined = trueartifacts.meta_ads_assets_drafted = true(Pencil 초안 생성 시)meta.last_action = "meta-ads-setup"meta.total_actions++
ToolSearch로 +agentic30 검색.
도구 발견 시:
submit_practice호출: quest_id ="wf-meta-ads-setup"
도구 없으면 (identity.mode != "synced" 또는 ToolSearch 실패):
sync.pending_events에 추가 (50건 초과 시 가장 오래된 이벤트 제거):{ "type": "submit_practice", "args": { "quest_id": "wf-meta-ads-setup" }, "created_at": "<now()>" }
규칙
- Meta 광고는
Audiences화면이 아니라광고 세트단계에서 바로 세팅하는 흐름을 기본으로 안내 - Threads 광고는 별도 플랫폼이 아니라
placement라는 점을 분명히 해 - repo의
docs/ICP.md가 있어도 그 문서가 현재 사용자의 제품 ICP인지 먼저 검증해 docs/design-system.md가 있으면 Meta 광고 에셋은 그 문서의Asset Rules를 우선 따라- repo의 OG 이미지가 있어도 그 이미지는 fallback 스타일 레퍼런스일 뿐, 사용자의 제품 크리에이티브 source를 대체하지 않는다
- PostHog 기준 canonical attribution은
utm_source,utm_medium,utm_campaign,utm_content4개를 우선 사용한다 - Meta dynamic parameter는 가능하면
utm_campaign,utm_content안에 녹이고, 숫자 ID는 보조 파라미터로만 사용한다 - Meta paid traffic은
utm_source=meta,utm_medium=paid-social를 기본값으로 권장한다 - 직접 타겟팅 불가한 속성은 관심사로 억지 매핑하지 말고 카피 필터로 처리
- 처음 세팅은
트래픽 + Threads feed only + 단일 이미지 + 소액 일예산으로 단순화 - 개발자 ICP 예시는 예시일 뿐 기본값이 아니다. 현재 사용자 제품의 ICP archetype에 맞게 interest를 다시 고른다
- Pencil 에셋은 항상
pain / outcome / transformation3안으로 시작해 비교 가능하게 만든다 - Pencil 에셋은 가능하면
1.91:1 + 1:1 + 4:5 + 9:16까지 함께 만들어 placement 대응 범위를 넓힌다 - 이미지 카피는 슬로건보다 전환형 문장을 우선한다
- 내부 용어 (
SPEC,UTM,배포)는 광고 이미지 안 헤드라인 기본값으로 쓰지 않는다 - 기존 광고 프레임이 이미 있으면 새로 만들기보다 수정 우선으로 접근한다
Primary text는 1개만 넣지 말고 가능하면 3-5개 넣어 Meta가 자동 최적화할 여지를 남긴다- URL 매개변수는 이름 기반 dynamic value를 쓰되, 게시 전에 이름을 확정하고 ID 보조 파라미터를 함께 붙인다
- Pencil이 준비되지 않았으면
https://www.pencil.dev/로 먼저 안내하고, 그 전에는 텍스트 초안까지만 진행한다 - 샘플 에셋이 이미 있더라도 그대로 재사용하지 말고, 현재 사용자 제품 이름/문제/ICP 기준으로 새 초안을 만든다
- 내부 추론은 보여주지 말고, 사용자가 지금 눌러야 하는 UI를 먼저 말해