요약: '링크가 있는 모든 사용자에게 보기'로 공유된 시트의 경우, https://docs.google.com/spreadsheets/d/SHEET_ID/gviz/tq?tqx=out:json&headers=1을 호출하면 됩니다. 로그인이나 키 없이 응답합니다. 응답은 JavaScript 호출 안에 JSON으로 감싸져 있으므로, 먼저 이 래퍼(wrapper)를 제거해야 합니다. 아래에 작동하는 코드, 2026년 11월 8일에 측정된 네 가지 함정, 그리고 직접 처리하기 싫다면 바로 사용할 수 있는 Actor가 있습니다.
Real output: a public Google Sheet returned as typed rows
이 게시물의 행들은 Google 자체의 Sheets API 샘플 시트에서 가져온 것입니다. 이름은 가상의 것입니다.
직접 구현하기 (10줄 이내)
const id = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms';
const url = `https://docs.google.com/spreadsheets/d/${id}/gviz/tq?tqx=out:json&headers=1`;
...
이것은 Google의 Visualization API의 쿼리 엔드포인트를 사용합니다. 전체 Sheets API도 비공개 시트를 읽고 쓸 수 있지만, Google Cloud 프로젝트와 자격 증명(credentials)이 필요합니다. 둘 중 하나가 필요한 경우 그것을 사용하십시오.
우리가 측정한 네 가지 함정 (2026년 11월 8일)
| 함정 | 전송 내용 | 반환된 내용 |
|---|
| 헤더가 데이터로 처리됨 | headers 매개변수 없음 | 모든 열 레이블이 비어 있고, 31행이며 |
날짜도 Date(2024,0,15)와 같은 문자열로 도착하며, 월은 0부터 계산되므로 저장하기 전에 변환해야 합니다.
쿼리 언어를 사용한 URL 필터링
URL 인코딩된 쿼리와 함께 &tq=를 추가합니다. 열은 헤더 이름이 아닌 문자로 참조됩니다.
| 쿼리 | 행 | 결과 |
|---|
select A, D, E where D = 'CA' | 4 | 캘리포니아 출신 학생만 포함 |
select E, count(A) group by E | 4 | 미술 7개, 영어 8개, 수학 8개, 물리학 7개 |
이 수치는 샘플 시트에 대한 실제 실행 결과입니다. Google이 쿼리를 평가하므로 요청한 행만 다운로드합니다.
또는 단일 API로 호출하기
Public Google Sheet to JSON은 이 엔드포인트를 감싸는 Apify Actor입니다. 저희가 구축했으므로 그 점을 고려해 주십시오. 이 액터는 위에서 언급된 문제점들을 처리합니다: 헤더를 정리하고, 빈 열을 제거하며, 날짜를 ISO 형식으로 변환하고, 시트 이름이 잘못되었을 경우 경고하며, AI 에이전트가 담을 수 있도록 각 행을 4 KB 미만으로 유지합니다. 비용은 반환되는 행당 $0.003입니다.
curl -X POST "https://api.apify.com/v2/acts/appdata-labs~public-google-sheet-reader/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
...
이것은 위의 이미지 뒤에 숨겨진 정확한 호출입니다. Apify의 run-sync-get-dataset-items 엔드포인트를 사용하며, Apify MCP 서버의 에이전트들은 이를 도구(tool)로 호출할 수 있습니다.
| 2026년 11월 8일 Apify 측정 기준 | 결과 |
|---|
| 전체 시트 | 3.9초 만에 30개 행 |
| ... | |
시트에 코드가 10줄만 필요하다면, 그것을 사용하십시오.
FAQ
비공개 시트에서도 작동하나요?
아니요, 그리고 그렇게 해서도 안 됩니다. 시트 소유자가 '링크를 가진 모든 사용자에게 보기' 권한을 선택해야 합니다. 위 코드나 Actor는 어떤 로그인 정보도 전송하지 않습니다. Actor가 Google에서 로그인 페이지로 리디렉션되면 작동이 멈춥니다. 저희는 실제 비공개 시트를 테스트한 것이 아니라, 시뮬레이션 응답으로 이 처리를 테스트했습니다. 데이터가 없으면 소유자에게 시트 공유를 요청하세요.
시트에 쓸 수 있나요?
아니요. 이 엔드포인트는 읽기 전용입니다. 쓰기를 하려면 OAuth와 함께 Sheets API를 사용해야 합니다.
'웹에 게시(Publish to web)' 링크는 어떤가요?
해당 링크들은 /d/e/2PACX-...처럼 생겼으며, 저희가 테스트했을 때 이 엔드포인트에서는 응답하지 않았습니다. 일반 공유 링크를 사용하세요.
이 엔드포인트를 프로덕션 환경에서 신뢰할 수 있나요?
Google은 쿼리 언어와 데이터 소스 프로토콜에 대해 문서화하고 있지만, sheet 및 headers 매개변수는 저희가 읽은 페이지에는 나타나지 않았습니다. 저희는 테스트를 통해 이를 확인했으므로, 의존하기 전에 다시 테스트해 보시기 바랍니다.
모든 공개 시트를 읽어도 안전한가요?
기술적으로는 그렇지만, 공개된 시트에도 여전히 사람들의 개인 데이터가 포함될 수 있습니다. 그 데이터를 어떻게 사용하느냐는 사용자 본인의 책임입니다.