매드업
경력근거: 상품 모니터링, 자동 입찰, 매체 대량 등록·예약, 리포트 생성 등 반복 업무와 판단을 자동화합니다.
매드업은 광고주를 대신해 Meta·Google·네이버·카카오·TikTok 같은 매체 광고를 운영하는 퍼포먼스 광고대행이 본업인 AI 마케팅 회사예요. 커머스·뷰티·금융 광고주를 중심으로 약 500명의 내부 마케터(AE)가 100여 개 고객사의 광고를 운영하고, 마케터 업무를 자동화하는 마케팅 AI 에이전트 LEVER Xpert 도 만들어 팔아요.
공고는 이 자리가 할 일로 '상품 모니터링, 자동 입찰, 매체 대량 등록·예약, 리포트 생성 등 반복 업무와 판단을 자동화합니다'를 꼽고, '광고·매출·상품 데이터 파이프라인을 구축합니다'라고 적었어요. 광고비는 매체마다 따로 쌓이고, 상품이 품절되거나 판매가가 바뀌는 일은 광고주의 쇼핑몰에서 일어나요. 그래서 두 기록을 맞춰 보지 않으면 광고를 보는 마케터는 이미 품절된 상품이나 값이 바뀐 상품에 광고비가 계속 나가는 걸 알아채기 어려워요.
공고는 합류하면 집중할 일로 상품 모니터링, 자동 입찰, 매체 대량 등록·예약, 리포트 생성 같은 반복 업무와 판단의 자동화를 꼽아요.
공고는 Meta·Google Ads·네이버·카카오모먼트·TikTok 같은 외부 매체 API를 연동하고, 광고·매출·상품 데이터 파이프라인을 구축하는 일을 이 자리에 맡겨요.
공고는 정해진 요구사항 구현에 그치지 않고 운영 현장에 들어가, 내부 마케터와 외부 고객사의 광고 운영 비효율을 직접 진단하고 기술로 해결할 사람을 찾는다고 적었어요.
내부 마케터(AE)가 맡은 광고주의 광고를 점검할 때 여는 관리자 페이지예요. 점검 시각에 광고비가 나가고 있는 광고마다 연결된 상품이 그 쇼핑몰에서 지금 품절인지, 소재에 적힌 가격이 지금 판매가와 맞는지 알려 주고, 품절된 상품이면 품절이 확인된 뒤 나간 광고비도 보여 줘요. 받은 데이터를 담을 DB 설계와 기술·구조, 그리고 소재 가격과 판매가가 얼마나 달라야 소재를 바꿀 광고로 볼지 기준은 지원자가 정해요.
광고주 여러 곳의 Meta·Google·네이버·카카오·TikTok 광고를 맡아 운영하는 매드업의 내부 마케터(AE)예요. 광고비는 매체마다, 상품의 판매 상태와 판매가는 광고주 쇼핑몰에 따로 기록되니, 광고마다 연결된 상품이 지금 팔리는지와 소재 가격이 맞는지 따로 확인해야 광고를 끌지 소재를 바꿀지 정할 수 있어요.
내부 마케터(AE)가 맡은 광고주의 광고를 점검하는 일정이에요. 한 행이 마케터 한 명이 광고주 한 곳을 점검하는 한 번이고 check_id 가 키예요. ae_id 는 그 광고주를 맡은 마케터 코드이고, 이 데이터에서 광고주 한 곳은 마케터 한 명이 맡고 마케터 한 명은 광고주 1~3곳을 맡아요. advertiser_id 는 products.advertiser_id 와 같은 광고주 코드예요. checked_at 은 점검 시각으로 매일 10시와 16시 정각(한국 시간)이고, 이 기능이 '지금'으로 삼는 시각이에요. 큰 데이터는 2026년 10월 8일부터 21일까지 14일 동안 광고주 80곳의 점검 2,240번 전부이고, 시작용은 마지막 날 10시에 마케터 AE-014 가 맡은 광고주 두 곳을 점검한 2번을 같은 ID·같은 값으로 잘라 낸 거예요.
전체 2행 가운데 앞 2행이에요.
| check_id | ae_id | advertiser_id | checked_at |
|---|---|---|---|
| CK-02103 | AE-014 | ADV-023 | 2026-10-21T10:00:00+09:00 |
| CK-02137 | AE-014 | ADV-057 | 2026-10-21T10:00:00+09:00 |
2행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 2,240행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "마케터가 광고주 한 곳의 광고를 점검하는 한 번. 키는 check_id.",
"additionalProperties": false,
"required": [
"check_id",
"ae_id",
"advertiser_id",
"checked_at"
],
"properties": {
"check_id": {
"type": "string",
"pattern": "^CK-[0-9]{5}$",
"description": "점검 번호. 이 표의 키예요."
},
"ae_id": {
"type": "string",
"pattern": "^AE-[0-9]{3}$",
"description": "점검하는 마케터(AE) 코드. 이 광고주를 맡은 마케터예요."
},
"advertiser_id": {
"type": "string",
"pattern": "^ADV-[0-9]{3}$",
"description": "점검하는 광고주 코드. products.advertiser_id 와 같은 코드예요."
},
"checked_at": {
"type": "string",
"format": "date-time",
"description": "점검 시각. 한국 시간(+09:00) ISO 8601, 매일 10시·16시 정각. 이 기능이 '지금'으로 삼는 시각이에요."
}
}
}광고에 연결된 상품이에요. 한 행이 광고주 쇼핑몰의 상품 페이지 하나이고 product_id 가 키예요. advertiser_id 는 그 쇼핑몰을 가진 광고주 코드로 ae_checks.advertiser_id 와 같은 코드이고, 한 상품은 한 광고주에만 속해요. product_name 은 쇼핑몰 페이지에 적힌 상품 이름이에요. 수분크림 50ml, 수분크림 50ml 2개 세트처럼 이름 앞부분이 같은 다른 상품도 들어 있어요. 큰 데이터는 광고주 80곳의 상품 601개이고, 시작용은 AE-014 가 맡은 광고주 두 곳의 상품 12개 전부예요.
전체 12행 가운데 앞 5행이에요.
| product_id | advertiser_id | product_name |
|---|---|---|
| PR-00163 | ADV-023 | 수분크림 50ml |
| PR-00164 | ADV-023 | 선크림 SPF50+ 1+1 |
| PR-00165 | ADV-023 | 비타민C 세럼 30ml |
| PR-00166 | ADV-023 | 클렌징폼 150ml |
| PR-00167 | ADV-023 | 수분크림 50ml 2개 세트 |
12행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 601행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "광고에 연결된 상품 하나(쇼핑몰 상품 페이지 하나). 키는 product_id.",
"additionalProperties": false,
"required": [
"product_id",
"advertiser_id",
"product_name"
],
"properties": {
"product_id": {
"type": "string",
"pattern": "^PR-[0-9]{5}$",
"description": "상품 번호. 이 표의 키예요."
},
"advertiser_id": {
"type": "string",
"pattern": "^ADV-[0-9]{3}$",
"description": "이 상품을 파는 쇼핑몰의 광고주 코드. ae_checks.advertiser_id 와 같은 코드이고, 한 상품은 한 광고주에만 속해요."
},
"product_name": {
"type": "string",
"description": "쇼핑몰 페이지에 적힌 상품 이름."
}
}
}매체에 올린 광고예요. 한 행이 광고 하나이고 ad_id 가 키예요. product_id 는 광고가 보내는 상품으로 products.product_id 를 가리키고, 한 상품에 여러 매체의 광고가 붙을 수 있어요. media 는 meta·google·naver·kakao·tiktok 가운데 하나예요. creative_price 는 소재(광고 이미지·문구)에 적힌 가격(원, 정수)으로 쇼핑몰 판매가와 같은 기준의 금액이고, 소재에 가격을 적지 않은 광고는 null 이에요. 한 상품에 소재 가격이 서로 다른 광고가 붙은 경우도 들어 있어요. 큰 데이터는 광고 993개이고, 시작용은 두 광고주의 광고 16개 전부예요.
전체 16행 가운데 앞 5행이에요.
| ad_id | product_id | media | creative_price |
|---|---|---|---|
| AD-00275 | PR-00163 | meta | 29,900 |
| AD-00276 | PR-00164 | meta | 22,900 |
| AD-00277 | PR-00164 | naver | 22,900 |
| AD-00278 | PR-00165 | 32,000 | |
| AD-00279 | PR-00165 | tiktok | 32,000 |
16행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 993행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "매체 광고 하나. 키는 ad_id.",
"additionalProperties": false,
"required": [
"ad_id",
"product_id",
"media",
"creative_price"
],
"properties": {
"ad_id": {
"type": "string",
"pattern": "^AD-[0-9]{5}$",
"description": "광고 번호. 이 표의 키예요."
},
"product_id": {
"type": "string",
"pattern": "^PR-[0-9]{5}$",
"description": "광고가 보내는 상품. products.product_id 를 가리켜요."
},
"media": {
"type": "string",
"enum": [
"meta",
"google",
"naver",
"kakao",
"tiktok"
],
"description": "광고를 올린 매체."
},
"creative_price": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "소재에 적힌 가격(원, 정수). 쇼핑몰 판매가와 같은 기준의 금액이에요. 소재에 가격을 적지 않은 광고는 null 이에요."
}
}
}상품 모니터가 광고주 쇼핑몰의 상품 페이지를 열어 본 기록이에요. 한 행이 상품 하나를 한 번 본 것이고 product_id 와 observed_at 묶음이 키예요. product_id 는 products.product_id 를 가리켜요. 이 데이터에서 모니터는 광고주마다 매시 정해진 분에 그 광고주의 상품 페이지를 차례로 열어요. observed_at 은 모니터가 페이지를 연 시각(모니터 서버 시계, 한국 시간)이에요. page_loaded 가 false 면 페이지를 열지 못한 기록이고 그때 sale_status 와 price 는 null 이에요. sale_status 는 on_sale(판매 중)과 sold_out(품절) 가운데 하나이고, price 는 그때 페이지에 보인 판매가(원, 정수)로 품절이어도 적혀 있어요. 품절됐다가 다시 판매되고 또 품절된 상품, 판매가를 올렸다가 되돌린 상품, 판매가가 소재 가격보다 조금 또는 많이 오르거나 내린 상품, 페이지를 한 번 열지 못한 상품, 광고주 한 곳의 상품을 한 시간 통째로 보지 못해 기록이 없는 시간, 점검 시각 바로 뒤 회차에 판매가가 바뀌거나 다시 판매된 상품이 들어 있어요. 큰 데이터는 14일 동안의 기록 201,147행 전부이고, 시작용은 마지막 날 7시부터 11시 전까지 두 광고주 상품의 기록 42행 전부예요.
전체 42행 가운데 앞 5행이에요.
| product_id | observed_at | page_loaded | sale_status | price |
|---|---|---|---|---|
| PR-00163 | 2026-10-21T07:12:03+09:00 | true | on_sale | 29,000 |
| PR-00164 | 2026-10-21T07:12:05+09:00 | true | on_sale | 22,900 |
| PR-00165 | 2026-10-21T07:12:07+09:00 | true | on_sale | 32,000 |
| PR-00166 | 2026-10-21T07:12:09+09:00 | true | on_sale | 12,900 |
| PR-00167 | 2026-10-21T07:12:11+09:00 | true | on_sale | 54,900 |
42행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 201,147행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "상품 페이지를 한 번 열어 본 기록. 키는 (product_id, observed_at) 묶음.",
"additionalProperties": false,
"required": [
"product_id",
"observed_at",
"page_loaded",
"sale_status",
"price"
],
"properties": {
"product_id": {
"type": "string",
"pattern": "^PR-[0-9]{5}$",
"description": "열어 본 상품. products.product_id 를 가리켜요."
},
"observed_at": {
"type": "string",
"format": "date-time",
"description": "모니터가 페이지를 연 시각. 모니터 서버 시계, 한국 시간(+09:00) ISO 8601, 초 단위."
},
"page_loaded": {
"type": "boolean",
"description": "페이지를 열었으면 true, 열지 못했으면 false."
},
"sale_status": {
"type": [
"string",
"null"
],
"enum": [
"on_sale",
"sold_out",
null
],
"description": "on_sale 은 판매 중, sold_out 은 품절. page_loaded 가 false 면 null 이에요."
},
"price": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "그때 페이지에 보인 판매가(원, 정수). 품절이어도 적혀 있고, page_loaded 가 false 면 null 이에요."
}
}
}매체가 보고한 광고별 시간대 광고비예요. 한 행이 광고 하나의 한 시간이고 ad_id 와 hour 묶음이 키예요. ad_id 는 ads.ad_id 를 가리켜요. hour 는 그 시간대가 시작한 정각(한국 시간)이고, spend 는 그 한 시간 동안 나간 광고비(원, 정수, 부가세 별도)예요. 광고비가 나간 시간대만 행이 있고, 행이 없는 시간대는 광고비가 나가지 않은 시간이에요. observed_at·checked_at·hour 는 모두 한국 시간이라 그대로 견줄 수 있어요. 상품이 품절된 뒤에도 광고비가 이어진 광고, 같은 상품의 다른 광고는 꺼진 경우, 점검 시각에 처음 켜진 광고, 며칠째 광고비가 없는 광고가 들어 있어요. 큰 데이터는 14일 동안의 283,007행 전부이고, 시작용은 마지막 날 7시부터 11시 전까지 두 광고주 광고의 55행 전부예요.
전체 55행 가운데 앞 5행이에요.
| ad_id | hour | spend |
|---|---|---|
| AD-00275 | 2026-10-21T07:00:00+09:00 | 7,399 |
| AD-00275 | 2026-10-21T08:00:00+09:00 | 11,169 |
| AD-00275 | 2026-10-21T09:00:00+09:00 | 10,486 |
| AD-00275 | 2026-10-21T10:00:00+09:00 | 18,828 |
| AD-00276 | 2026-10-21T07:00:00+09:00 | 2,524 |
55행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 283,007행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "광고 하나의 한 시간 광고비. 키는 (ad_id, hour) 묶음. 광고비가 나간 시간대만 행이 있어요.",
"additionalProperties": false,
"required": [
"ad_id",
"hour",
"spend"
],
"properties": {
"ad_id": {
"type": "string",
"pattern": "^AD-[0-9]{5}$",
"description": "광고. ads.ad_id 를 가리켜요."
},
"hour": {
"type": "string",
"format": "date-time",
"description": "시간대가 시작한 정각. 한국 시간(+09:00) ISO 8601. 이 행은 hour 부터 한 시간 동안의 광고비예요."
},
"spend": {
"type": "integer",
"minimum": 1,
"description": "그 한 시간 동안 나간 광고비(원, 정수, 부가세 별도). 매체가 보고한 값이에요."
}
}
}