SaaS

Notion × GAS:Notionのユーザーリストをスプレッドシートに出力する

※ゲスト一覧は出力できません。

はじめに

Notionユーザーの一覧を出力したいときってありますよね。

CSVとかでDLできれば良いんですけど、そういう機能は特にないのでAPIから出力するしかありません。

本記事ではGoogleAppsScript(GAS)を使ってスプレッドシートにNotionのユーザーリストを出力する手順を紹介します。

利用イメージ

スプレッドシートにユーザーリストを出力!

使い方

必要なもの

  • Notion管理者権限
    • WorkspaceAdmin or WorkspaceOwner が必要
  • Googleスプレッドシート

1. Notion APIキーの取得

  1. Notionにログインする。
  2. 左上の「Settings & Members」に移動し、「Integrations」タブを選択する。
  3. 「+ New integration」ボタンをクリックし、必要な情報を入力して新しい統合を作成する。
  4. 作成した統合を選択し、表示される「Secret」をコピーする。これがNotion APIキーとなる。

2. Notionのページへのアクセス許可

  1. 統合の詳細ページで「Notion pages this integration has access to」セクションに移動する。
  2. 「+ Share to a page」をクリックし、アクセス許可を付与したいページを選択する。

3. Google Apps Scriptのプロジェクト作成

  1. Google Apps Scriptにアクセスし、ログインする。
  2. 「+ New Project」をクリックして新しいプロジェクトを作成する。

4. スクリプトの追加

  1. 下記スクリプトをコピーする。
  2. Google Apps Scriptエディタにペーストする。
const notionToken = PropertiesService.getScriptProperties().getProperty('NOTION_TOKEN');

const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName("シート1"); // change to your sheet name

function getNotionUsers() {
  const baseUrl = 'https://api.notion.com/v1/users';
  const pageSize = 100; // maximum page size
  let hasNextPage = true;
  let startCursor = null;

  // Notion token from script properties

  // Add header row
  const headers = ["ID", "Type", "Name", "Avatar URL", "Email"];
  sheet.getRange(1, 1, 1, headers.length).setValues([headers]);

  let currentRow = 2; // starting from second row after headers

  while (hasNextPage) {
    let url = `${baseUrl}?page_size=${pageSize}`;
    if (startCursor) {
      url += `&start_cursor=${startCursor}`;
    }

    const options = {
      headers: {
        'Authorization': `Bearer ${notionToken}`,
        'Notion-Version': '2021-05-13' // API version
      },
      method: 'GET'
    };

    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    const users = data.results;
    hasNextPage = data.has_more;
    startCursor = data.next_cursor;

    users.forEach((user, i) => {
      const row = [user.id, user.type, user.name, user.avatar_url];

      // if user is a person, add email to row data
      if (user.type === "person" && user.person) {
        row.push(user.person.email);
      } else {
        row.push("");
      }

      sheet.getRange(currentRow + i, 1, 1, row.length).setValues([row]);
    });

    currentRow += users.length;
  }
}

5. スクリプトプロパティの設定

  1. Google Apps Scriptエディタで「ファイル」→「プロジェクトのプロパティ」を選択する。
  2. 「スクリプトのプロパティ」タブを選択する。
  3. 「+ 行を追加」ボタンをクリックし、NOTION_TOKENという名前でNotionのトークンを保存する。

6. Googleスプレッドシートの準備

  1. 新しいGoogleスプレッドシートを作成し、名前を設定する。
  2. (任意)スクリプトの中のシート1部分を、スプレッドシートのシート名に置き換える。

7. スクリプトの実行

  1. Google Apps Scriptエディタで、上部のプルダウンメニューから関数getNotionUsersを選択する。
  2. 左側の再生ボタン(▶️)をクリックして実行する。
  3. 必要に応じて、Google Apps Scriptに必要な権限を付与する。

8. 結果の確認

  1. Googleスプレッドシートを開いて、ユーザー情報が正しく書き込まれていることを確認する。

おわりに

以上でNotionのユーザーリスト出力ができます。

GASのトリガーを設定しておくことで定期的にユーザーリストを更新とかできます。

ゲストは一覧で出力ができない仕様なので、ゲスト出力の方法はまた別途検証してブログにてご紹介します。

まだ検証完了してないけど、これならいけるっしょって方法があるので気長にお待ちください。

ではでは。

ばるす

パチンコ屋→焼き肉屋→情シスを経てクラウドネイティブへ入社。
趣味はギター,キーボード,アウトプット,散歩,読書など。
苦手なものは朝と事務作業。得意分野は眠ること。