마케팅팀은 피드에서 경쟁사의 게시물을 볼 수 있지만, 수동으로 살펴보는 것만으로는 어떤 형식과 주제가 꾸준히 반응을 얻는지, 어떤 콘텐츠가 단 한 번만 눈에 띄었는지 구체적으로 파악하기 어렵습니다. 해결책은 공개 게시물 데이터를 매일 저장하고 시간, 형식, 제공되는 카운터를 기준으로 비교하는 것입니다.

아래에서는 Python과 IG Scraper API를 이용한 기본 파이프라인을 소개합니다. 선택한 계정의 게시물을 가져와 응답을 JSONL로 저장하고, 새 게시물에 관한 요약을 작성합니다. 이 보고서의 반응 지표는 수집 시점에 API가 반환한 값이며, 서로 다른 날짜의 스냅샷을 통해 값의 변화를 별도로 분석할 수 있습니다.
먼저 무엇을 비교할지 정하세요
소규모 경쟁사 표본이라면 공개 계정 목록을 관리하고 일정에 따라 게시물을 수집하는 것으로 충분합니다. 데이터로 답할 수 있는 질문부터 시작하세요. 콘텐츠가 얼마나 자주 게시되는지, 어떤 게시물이 Reels 또는 다른 형식인지, 어떤 주제가 반복되는지, 제공되는 좋아요와 댓글 카운터가 어떻게 변하는지 살펴보면 됩니다.
저장소에서 게시물과 게시물 스냅샷을 구분하세요. 응답에 안정적인 ID가 있다면 이를 사용해 게시물을 식별하고, 수집 시각과 함께 각 실행 결과를 별도 레코드로 저장합니다. 이렇게 하면 어제의 값을 오늘의 값으로 덮어쓰지 않고 제공되는 카운터의 변화를 확인할 수 있습니다.
문서에 기재된 엔드포인트를 연결하세요
jsonscraper 문서에는 기본 요청 주소 https://ig.jsonscraper.com와 엔드포인트 GET /v1/user/by/username가 기재되어 있습니다. 게시물을 가져오는 엔드포인트로는 API 맵에 GET /v1/user/medias/chunk도 나와 있습니다. 정확한 매개변수와 응답 필드는 제품과 연동된 Postman 컬렉션에서 확인하세요. 실제 요청의 응답을 살펴보기 전에는 예상한 구조에 맞춰 처리기를 작성하지 마세요.
초기 확인에는 문서에 나온 프로필 요청 예시를 사용하세요. 키는 소스 코드에 기록하지 말고 환경 변수로 전달합니다.
curl -G "https://ig.jsonscraper.com/v1/user/by/username" \
--data-urlencode "username=apple" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "cache_timeout=60"
제품 페이지의 예시에는 프로필 엔드포인트의 username, license_key, cache_timeout이 나와 있습니다. 다른 엔드포인트에도 적용하려면 해당 엔드포인트 문서에 매개변수가 명시되어 있는지 확인하세요. 게시물 요청에 사용할 최신 매개변수 이름은 해당 엔드포인트의 사양에서 확인하세요.
응답을 시간별 스냅샷으로 저장하세요
다음 스크립트는 실제 운영을 위한 기본 틀입니다. 게시물 엔드포인트 URL과 매개변수는 Postman 문서에 따라 입력할 수 있도록 설정값으로 남겨 두었습니다. 처리기는 원본 JSON과 수집 시각을 저장합니다. 실제 응답을 확인한 뒤 필드 정규화를 추가하세요.
import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
BASE_URL = "https://ig.jsonscraper.com"
USERNAME = os.environ["IG_USERNAME"]
LICENSE_KEY = os.environ["JSONSCRAPER_LICENSE_KEY"]
OUTPUT = Path("instagram_snapshots.jsonl")
# Postman 컬렉션의 엔드포인트 문서에 따라
# GET /v1/user/medias/chunk의 경로와 매개변수를 입력하세요.
MEDIA_PATH = os.environ["IG_MEDIA_PATH"]
MEDIA_PARAMS = json.loads(os.environ["IG_MEDIA_PARAMS_JSON"])
params = {
**MEDIA_PARAMS,
"username": USERNAME,
"license_key": LICENSE_KEY,
}
response = requests.get(
f"{BASE_URL}{MEDIA_PATH}", params=params, timeout=30
)
response.raise_for_status()
payload = response.json()
record = {
"collected_at": datetime.now(timezone.utc).isoformat(),
"username": USERNAME,
"response": payload,
}
with OUTPUT.open("a", encoding="utf-8") as file:
file.write(json.dumps(record, ensure_ascii=False) + "\n")
여기에는 페이지네이션 매개변수나 필드 이름을 임의로 넣지 않았습니다. 구체적인 사양에서 값을 복사하고 API 응답으로 확인해야 합니다. 타임아웃과 raise_for_status()를 사용하면 네트워크 오류를 일반 데이터처럼 저장하기 전에 감지할 수 있습니다. 자동 실행 환경에는 JSON 검증과 오류 로그 기록을 추가하세요.
일정과 지표를 추가하세요
cron이나 사용하는 자동화 스케줄러를 통해 하루에 한 번 수집을 실행하세요. 여러 계정이 있다면 설정 목록을 순회하며 각 계정의 스냅샷을 따로 저장하고, 일시적인 오류가 발생한 뒤 재시도할 수 있도록 하세요. 키는 환경 변수나 비밀 정보 저장소에 보관하세요. API 페이지에서도 키를 클라이언트 코드에 포함하지 말 것을 별도로 권장합니다.
응답을 확인한 뒤 username, media_id, collected_at, 콘텐츠 유형, 제공되는 카운터 등의 필드로 레코드를 정규화해 테이블에 저장하세요. 응답 형식이 바뀌거나 계산을 검증해야 할 때 유용하므로 원본 JSON도 보관하세요.
분석 계층에서는 기간별 신규 게시물 수, 형식별 제공 반응의 중앙값, 동일 게시물의 스냅샷 간 카운터 변화를 계산하세요. 중앙값은 단 한 건의 바이럴 게시물이 요약 결과에 미치는 영향을 줄여줍니다. 계정을 비교할 때는 같은 기간을 사용하고 집계값과 함께 표본 크기도 표시하세요.
결과물
팀은 재현 가능한 게시물 표와 일일 요약을 받게 됩니다. 여기에는 콘텐츠 게시 빈도, 형식별 분포, 제공되는 반응 지표의 변화가 포함됩니다. 이러한 정보는 피드의 스크린샷을 모으는 데 그치지 않고 자체 편집 콘텐츠 계획에 관한 가설을 세우는 데 도움이 됩니다.
다음 단계에서는 정규화된 레코드를 Google Sheets, 데이터베이스 또는 시각화 시스템으로 보내고, 별도 단계에서 텍스트 요약을 작성할 수 있습니다. AI를 연결하는 경우 집계 데이터를 전달하고, 기간과 게시물 수를 명시해 관찰된 패턴을 설명하도록 요청하세요. 전략 결정은 편집자가 맡아야 합니다.
계정 하나와 엔드포인트 하나부터 시작하세요. IG Scraper API 설명에서 매개변수와 응답 구조를 확인한 다음, 해당 설정을 정기 실행에 적용하세요. 이렇게 하면 경쟁사 모니터링을 일회성 수동 확인에서 기록을 보존하는 명확한 데이터 파이프라인으로 바꿀 수 있습니다.