API를 통해 캐나다 자선 단체 데이터를 가져오는 방법 (2026)
요약
캐나다 국세청(CRA)의 오픈 데이터를 활용하여 약 85,000개의 자선 단체 정보를 프로그래밍 방식으로 추출하는 방법을 설명합니다. CKAN datastore API를 통한 직접 쿼리 방식과 Pandas를 이용한 CSV 데이터 결합 방식을 다룹니다.
핵심 포인트
- CRA 오픈 데이터를 활용한 자선 단체 식별 및 임원 정보 추출 가능
- CKAN datastore API를 사용하여 전체 다운로드 없이 특정 데이터 쿼리 가능
- Business Number(BN)를 키로 사용하여 여러 CSV 파일 간 데이터 결합
- Python의 requests와 pandas 라이브러리를 활용한 데이터 처리 가이드
캐나다에는 약 **85,000개의 등록된 자선 단체 (registered charities)**가 있으며, 캐나다 국세청 (CRA)은 법적 명칭, 우편 주소, 지정 사항 (designations), 카테고리, 웹사이트, 그리고 각 단체의 이사/임원 정보를 포함한 전체 목록을 오픈 데이터 (open data)로 공개합니다. 이는 잠재 고객 발굴 (prospecting), 섹터 연구 (sector research), 또는 특정 자선 단체에 대한 실사 (due diligence)를 수행하기에 완벽한 방대하고 깔끔한 국가적 데이터셋입니다.
유일한 불편함은 이 데이터가 비즈니스 번호 (Business Number, BN)를 키 (key)로 하여 직접 결합해야 하는 별도의 CSV 파일 세트로 제공된다는 점입니다. 이 포스트에서는 2026년에 프로그래밍 방식으로 이를 추출하는 방법 — 파일, 결합 (join), 쿼리 API (query API), 그리고 코드나 AI 에이전트에서 호출할 수 있는 호스팅 옵션 — 을 보여줍니다.
데이터에 포함된 내용
CRA의 "자선 단체 목록 (List of charities)" 오픈 데이터는 오픈 정부 라이선스 (Open Government Licence) 하에 캐나다의 Open Government Portal에 존재합니다. 이 데이터는 각 자선 단체의 연례 T3010 신고서로부터 컴파일되며 매년 갱신됩니다. 약 20개의 CSV 파일로 구성되어 있으며, 연락처 디렉토리로서 중요한 것은 다음 세 가지입니다:
- Identification (식별) — BN, 법적 명칭, 운영 명칭, 전체 우편 주소, 도시, 주, 우편번호, 지정 사항 (designation), 카테고리 (~84,000개 행).
- Charity Contact Web Addresses (자선 단체 연락처 웹 주소) — BN별 웹사이트 URL (~34,000개 행).
- Directors/Officers (이사/임원) — BN별 모든 이사/임원 정보, 직책 및 시작/종료일 포함 (~570,000개 행).
해독이 필요한 두 가지 작은 코드 목록은 다음과 같습니다:
- Designation (지정 사항):
A= 공공 재단 (Public foundation),B= 사설 재단 (Private foundation),C= 자선 단체 (Charitable organization). - Category (카테고리):
0210(재단, Foundations),0100(핵심 의료, Core health care),0180(동물 복지, Animal welfare)와 같은 4자리 코드 — 전체 매핑 정보는 동일 페이지의 CRA "Codes lists" PDF에 있습니다.
옵션 1: 다운로드 없이 쿼리하기 (CKAN datastore API)
포털은 CKAN을 실행하므로, 각 리소스는 HTTP를 통해 쿼리할 수 있습니다. 이는 전체 파일을 가져오지 않고도 빠른 조회를 할 수 있어 유용합니다. 모든 리소스에는 ID가 있습니다 (데이터셋 페이지에서 확인 가능):
import requests
IDENT = "694fdc72-eae4-4ee0-83eb-832ab7b230e3" # 2024 Identification 리소스
...
특정 항목을 조회할 때 유용합니다. 전체 데이터셋을 구축하려면 대신 CSV 파일을 다운로드하세요.
옵션 2: BN(Business Number)을 기준으로 다운로드 및 결합
세 개의 CSV 파일을 가져와 BN을 기준으로 결합합니다. Identification(식별) 파일이 중추 역할을 하며, 나머지 두 파일은 데이터를 보완합니다.
import pandas as pd
BASE = "https://open.canada.ca/data/dataset/80c00cdb-1358-415c-bb8b-0de7f12675b8/resource"
...
동일한 방식으로 directors(이사) 파일을 추가합니다 (BN별로 그룹화하여 리스트로 만들고, 현재 재임 중인 임원을 확인하기 위해 End Date가 비어 있는 행만 유지합니다). 주의할 점은 다음과 같습니다:
- 웹사이트 파일의 키 컬럼은
BN이 아니라BN/NE입니다. - directors 파일은 크기가 매우 큽(약 57만 행). 우편물 발송 리스트만 필요한 경우 이 파일은 건너뛰어도 됩니다.
- 데이터는 매년 (annually) 갱신되므로, 실시간 피드(live feed)가 아닌 포괄적인 스냅샷(snapshot)으로 취급해야 합니다.
- Designation(지정) 및 category(범주)는 코드 형태입니다. 읽기 쉬운 출력을 위해 CRA 코드 목록을 사용하여 이를 디코딩(decode)하세요.
옵션 3: 이미 결합된 단일 호출
다운로드 및 결합 파이프라인(및 매년 변경되는 URL)을 직접 유지 관리하고 싶지 않다면, 최신 릴리스를 확인하고, 파일을 결합하며, 코드를 디코딩하여 자선 단체당 하나의 깨끗한 레코드를 반환하는 Apify Actor를 제작했습니다:
{
"provinces": ["ON"],
"keywords": ["foundation"],
...
출력 — 자선 단체당 하나의 레코드:
{
"businessNumber": "119033702RR0001",
"charityName": "MARMORA HISTORICAL FOUNDATION INC.",
...
우편물 발송 리스트만 빠르게 실행하려면 includeDirectors를 끄고, 주(province), 카테고리 코드 또는 지정(designation)별로 필터링하세요. 가격은 레코드당 부과됩니다 ($1,000개당 $6).
AI 에이전트(MCP)에서 호출하기
이 Actor는 Model Context Protocol (MCP)을 통해 노출되므로, LLM 에이전트가 도구(tool)로서 자선 단체 데이터를 가져올 수 있습니다:
Claude / MCP 클라이언트에 연결한 후 _"BC주에 등록된 웹사이트를 보유한 동물 복지 자선 단체"_라고 요청하면, 에이전트가 Actor를 실행하고 필터링을 수행합니다.
FAQ
이것은 합법인가요? CRA는 이 데이터를 Open Government Licence – Canada 하에 출처를 밝히고 재사용할 수 있도록 공개하고 있습니다.
데이터의 최신성은 어느 정도인가요? 이 데이터는 T3010 신고서를 바탕으로 매년 업데이트되며, 실시간 피드(live feed)가 아닌 국가 전체의 스냅샷(snapshot) 형태입니다.
재무 정보가 포함되어 있나요? 오픈 데이터에는 비즈니스 번호(BN)를 키(key)로 하는 별도의 T3010 재무 파일(수익, 지출, 자산)이 있습니다. 해당 컬럼들은 데이터 사전(data dictionary)을 통해 해독해야 하는 숫자형 라인 코드(numeric line codes)로 구성되어 있습니다. v2에서 추가된 훌륭한 기능입니다.
연락처 정보는요? 사실상 거의 모든 자선 단체의 전체 우편 주소가 포함되어 있으며, 많은 단체의 웹사이트가 포함되어 있습니다. 개인 이메일이나 전화번호는 공개되지 않습니다.
캐나다 공공 데이터(자선 단체, 허가, 입찰, 라이선스 등)를 활용해 서비스를 구축하고 계신가요? 저는 오픈 레지스트리(open registries)를 제품으로 전환하는 방법에 대해 글을 씁니다. 궁금한 점은 댓글로 남겨주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기