Threads API로 내 글 지표를 기간별로 한 번에 뽑는 방법 (유튜브 Analytics 포함)
Threads 앱에서 글을 하나씩 눌러 보던 조회수·좋아요·댓글·리포스트·공유를 API로 기간을 정해 한 번에 표로 받는 순서입니다. 토큰 발급과 60일 갱신, 답글 계정 조회, 유튜브 검색어·추천 영상 조회와 API로 안 나오는 지표까지 적었습니다.
매주 월요일에 지난주 Threads 글 지표를 정리합니다. 처음에는 앱 인사이트에서 글을 하나씩 눌러 숫자를 옮겨 적었는데, 지금은 명령 한 줄로 그 주에 올린 글 전부의 조회수·좋아요·댓글·리포스트·인용·공유가 표 하나로 나옵니다. 답글을 단 계정 아이디도 같이 뽑힙니다.
이 글에는 Threads API로 기간을 정해 내 글 지표를 받는 순서와, 같은 방식으로 유튜브 Analytics API에서 검색어·추천 영상을 받는 방법을 적었습니다. 두 API 모두 무료입니다.

앱 인사이트 대신 API로 뽑는 이유
Threads 앱 인사이트에서도 글마다 조회수·좋아요·댓글·리포스트·인용이 나오지만, 글을 하나씩 열어야 하고 여러 글을 나란히 놓고 비교하려면 숫자를 따로 옮겨 적어야 합니다.
API로 받으면 세 가지가 달라집니다.
- 기간을 정해 한 번에 받습니다. 지난주 월요일부터 일요일까지 올린 글 전부가 한 번에 옵니다.
- 글마다 공유 수까지 같은 표에 들어갑니다.
- 답글을 단 계정 아이디를 글별로 모을 수 있습니다. 어떤 글에 누가 반응했는지 주 단위로 남길 수 있습니다.
실제로 지난주(10/12~10/18) 6편을 뽑았을 때 합계는 조회 13,837 · 좋아요 42 · 댓글 13 · 리포스트 10 · 인용 0 · 공유 8이었습니다. 공유 8회가 전부 한 글에서 나왔다는 것도 표로 놓고 보니 바로 보였습니다.
1. Meta 개발자 앱과 액세스 토큰 준비
Meta for Developers에서 앱을 하나 만들고 사용 사례로 Threads API를 고릅니다. 권한은 다음을 추가합니다.
| 권한 | 쓰는 곳 |
|---|---|
threads_basic | 모든 Threads API 호출에 필요 |
threads_manage_insights | 지표(insights) 조회 |
threads_read_replies | 답글 조회 |
앱에서 처음 받는 토큰은 짧은 토큰이라 곧 만료되므로, 서버 쪽에서 앱 시크릿과 함께 긴 토큰으로 바꿉니다(공식 문서: Long-Lived Access Tokens).
curl -s "https://graph.threads.net/access_token?grant_type=th_exchange_token&client_secret=$APP_SECRET&access_token=$SHORT_TOKEN"
긴 토큰은 60일 동안 유효하고, 만료 전에 아래처럼 갱신하면 갱신한 날부터 다시 60일이 됩니다. 발급 후 24시간이 지나야 갱신할 수 있고 60일 안에 갱신하지 않으면 만료되어 처음부터 다시 받아야 합니다.
curl -s "https://graph.threads.net/refresh_access_token?grant_type=th_refresh_token&access_token=$LONG_TOKEN"
토큰은 코드에 쓰지 않고 .env 파일에 두고, .gitignore에 넣어 저장소에 올라가지 않게 합니다. Threads API는 토큰을 주소에 붙여 보내는 방식이라 터미널에 토큰 값을 직접 붙여 넣으면 셸 기록에도 남습니다. 그래서 위 예시처럼 변수로만 넣습니다.
2. 기간 안에 올린 글 목록 받기
글 목록은 GET /{user-id}/threads로 받습니다. since와 until에 유닉스 시간을 넣으면 그 사이에 올린 글만 옵니다. 내 계정이면 {user-id} 자리에 me를 써도 됩니다.
SINCE=$(date -j -f "%Y-%m-%d %H:%M" "2026-10-12 00:00" +%s) # macOS
UNTIL=$(date -j -f "%Y-%m-%d %H:%M" "2026-10-19 00:00" +%s)
curl -s "https://graph.threads.net/v1.0/me/threads?fields=id,permalink,timestamp,text&since=$SINCE&until=$UNTIL&limit=100&access_token=$TOKEN"
글이 100개를 넘으면 응답의 paging.next 주소로 다음 쪽을 이어서 받습니다. 저는 파이썬 스크립트에서 paging.next가 없을 때까지 반복합니다.
3. 글마다 지표 받기
글 하나의 지표는 GET /{media-id}/insights로 받고, 받을 지표를 쉼표로 이어 metric에 넣습니다.
curl -s "https://graph.threads.net/v1.0/$MEDIA_ID/insights?metric=views,likes,replies,reposts,quotes,shares&access_token=$TOKEN"
응답은 지표마다 name과 값이 들어 있는 배열입니다. 2번에서 받은 글 id마다 이 호출을 한 번씩 하고 결과를 한 줄씩 모으면 표가 됩니다.
MEDIA_METRICS = ["views", "likes", "replies", "reposts", "quotes", "shares"]
def fetch_insights(media_id, token):
data = api_get(f"{media_id}/insights",
{"metric": ",".join(MEDIA_METRICS), "access_token": token})
result = {}
for item in data.get("data", []):
tv = item.get("total_value", {})
result[item["name"]] = tv.get("value", item.get("values", [{}])[0].get("value"))
return result
공식 문서에는 views와 shares가 아직 개발 중인 지표로 표시되어 있습니다(Threads Insights API). 값이 비어 오는 글이 있어도 스크립트가 멈추지 않도록 지표 호출이 실패하면 빈 값으로 넘기게 해 두었습니다.
4. 답글 단 계정 모으기
글에 달린 답글은 GET /{media-id}/replies로 받습니다. username을 같이 요청하면 누가 답글을 달았는지 나옵니다.
curl -s "https://graph.threads.net/v1.0/$MEDIA_ID/replies?fields=id,username,text&access_token=$TOKEN"
이 호출은 글에 바로 달린 답글만 돌려주고, 답글에 다시 달린 답글은 포함되지 않습니다. 다른 사람의 반응만 세려면 집계할 때 내 아이디는 뺍니다.
5. 팔로워 수는 계정 지표로
팔로워 수는 글이 아니라 계정 지표입니다. GET /{user-id}/threads_insights?metric=followers_count로 받고, 값은 total_value.value에 있습니다. 이 지표는 since·until을 받지 않아서 부르는 시점의 숫자만 나오므로, 주별로 비교하려면 회고할 때마다 숫자를 기록해 두어야 합니다.
유튜브는 Analytics API로 검색어와 추천 영상까지
유튜브는 YouTube Data API와 YouTube Analytics API를 같이 씁니다. 둘 다 Google Cloud 프로젝트에서 켜고, OAuth 클라이언트(데스크톱 앱)를 만들어 처음 한 번 브라우저에서 승인합니다. 읽기만 할 거라면 범위는 yt-analytics.readonly와 youtube.readonly면 됩니다.
채널을 브랜드 계정으로 운영하면 승인 화면에서 계정을 고르게 되는데, 여기서 다른 채널을 고르면 그 채널의 숫자가 나옵니다. 승인 뒤에는 channels?mine=true로 채널 이름부터 확인합니다.
채널 전체의 유입 경로는 insightTrafficSourceType으로 나눕니다.
GET https://youtubeanalytics.googleapis.com/v2/reports
?ids=channel==MINE
&startDate=2026-10-12&endDate=2026-10-18
&metrics=views
&dimensions=insightTrafficSourceType
&sort=-views
검색으로 들어온 사람이 무슨 검색어를 쳤는지는 insightTrafficSourceDetail로 받습니다. 유입 경로를 YT_SEARCH로 거르면 검색어가, RELATED_VIDEO로 거르면 내 영상을 추천한 영상의 id가 나옵니다(YouTube Analytics 측정기준).
&dimensions=insightTrafficSourceDetail
&filters=insightTrafficSourceType==YT_SEARCH
&sort=-views&maxResults=25
API로 안 나오는 것
| 지표 | 어디서 보나 |
|---|---|
| 유튜브 노출수·노출 클릭률 | YouTube Studio 화면에서만 |
| Threads 팔로워 수의 과거 값 | API는 현재 값만. 직접 기록 |
| 답글의 답글 | /replies에 없음 |
유튜브 노출수와 노출 클릭률은 Analytics API에 넣으면 지표 이름을 모른다는 오류가 납니다(2026년 10월 확인). 이 둘만 Studio에서 따로 봅니다.
수집기를 직접 만들면 지표가 없는 것과 0인 것을 구분하지 못하는 문제가 자주 생깁니다. 이 경험은 대시보드에 없는 지표는 0이 아니라 안 잰 것입니다에 따로 적었습니다.