プログラミング

GASでfreeeから請求書データをダウンロードする方法

前回、請求書データを活用して、顧客との関係構築に活かすことをお伝えしました。

請求書データの活用:私が最初に行う理由請求書データを活用することで、売上を向上させることができます。これから始める理由は、既にデータがあり、すぐに取り組むことができるからです。将来的には、適切なタイミングに適切な連絡を取ることで、顧客と関係強化できる仕組み・組織文化をつくっていきます。...

でも実際に請求書データをエクセル一覧にするのは、どうすれば良いのでしょうか?
この記事では、クラウド会計freeeで請求書を発行している場合の事例をご紹介します。

<スポンサードリンク>



請求書はまとめて管理できるように

この記事では例として、クラウド会計「freee」で請求書を発行している場合を想定します。

中小企業の場合、エクセルで1枚ずつ請求書を発行している場合も良く見かけます。
しかし、この方法はお勧めできません。

  • データを活用には、Excel VBAなどを使って、散らばったデータをまとめる必要がある
  • 状態管理(下書き・発行済み・送付済み、入金待ち・入金済み・催促中etc)が管理しにくい
  • 案件管理・販売管理などの他ツールとの連携がしにくい

特に2点目が経理の視点から見て致命的です。
また業務効率や事故防止の視点から見ると、3点目も厳しいです。
できる限り専用ツールを使って、他の業務と連携できるようにしておきましょう。

今回ご紹介する「freee」は請求書の状態管理も、業務ツールとの連携もできます

GAS x freee で請求書を一括ダウンロード

クラウド会計freeeにて、請求書を一括ダウンロードできれば良いのですが、残念ながら標準機能ではサポートされていません。
PDFでまとめて出力できるだけですから、データ活用には向いていません。

そこでGAS(Google Apps Script)を使って、freee APIにアクセスして、請求書を一括でダウンロードしてみます。

  • GASは既にV8ランタイムをサポートしています
  • この記事は、その前のRhinoランタイム時代の構文で書いています
  • GASの使い方など、基本的なことは、この記事では割愛しています

全体の流れ

コードをご紹介する前に全体の流れをお伝えしておきます。

  1. 会計freeeのAPIを利用できるようにする(認証)
  2. freee APIにて請求書データを取得
  3. そのデータから必要な項目(日付・取引先・金額)を抜き出す
  4. スプレッドシートに貼り付け

以下、具体的にご紹介していきます。

まずはfreeeの認証が必要

その前にGASでfreeeにアクセスできるようにしなければなりません。
会計ソフトですから、誰にでもデータにアクセスされたら困ります。
そのためにfreeeにログインするとき同様、認証しないといけないのです。

やり方はこちらのブログの手順通りにやれば大丈夫です。
私もこの記事を、まんま真似させていただきました。

https://tonari-it.com/gas-freee-api-auth/

APIって何?というような方も、目を通していただくと良いでしょう。

freee APIにて請求書データを取得

認証を終えたら、早速、freee APIにて請求書データを取得します。
freeeのリファレンスを見ると、こちらに情報があります。

請求書一覧を取得するには、最低限、「事業所ID(company_id)」が必要と書いてあります。
事前に調べておきました。

ではコードをご紹介していきましょう。
スプレッドシートのコンテナバインドスクリプトを使っています。

  1. function getInvoices(){
  2.   var accessToken = getService().getAccessToken();
  3.   var company_id = “XXXXXX”;
  4.   var startDate = ‘2019-01-01’;
  5.   var endDate = ‘2019-12-31’;
  6. //省略
  7. }

3行目で事業所ID(company_id)を定義しています。

実際にデータを活用するときには、期間を指定して利用します。
この例では、請求書の発行日(~売上計上日)の開始日を2019年1月1日、終了日を2019年12月31日としています。

  1.   var invoiceUrl = ‘https://api.freee.co.jp/api/1/invoices?’ +
  2.     ‘company_id=’ + company_id +
  3.     ‘&issue_date_start=’ + startDate +
  4.     ‘&issue_date_end=’ + endDate +
  5.     ‘&invoice_status=issued’ +
  6.     ‘&payment_status=settled’ +
  7.     ‘&limit=100’;
  8.   var headers = {“Authorization” : “Bearer “ + accessToken };
  9.   var options ={
  10.     “method” : “get”,
  11.     “headers” : headers,
  12.   };
  13.   var res = UrlFetchApp.fetch(invoiceUrl, options).getContentText();

1行目でfreee APIの請求書一覧を取得するためのURLを定義しています。
このURLの中に、2~7行目として、パラメータを付与しています。

  • 事業所ID
  • 開始日
  • 終了日
  • 請求書のステータス(発行済み)
  • 入金ステータス(入金済み)
  • 上限数(100 ※freee APIの仕様で上限が100になっています)

過去のお客様との取引を元にデータ活用したいので、請求書と入金のステータスも指定しておきます。

13行目でfreee APIにアクセスして、取得したデータ(HTTPレスポンス)を変数resに格納しています。ここまででAPIの出番は終わりです。

JSONからスプレッドシートに貼り付けまで

あとはGASだけで頑張ります。

  1.   var parsedRes = JSON.parse(res);
  2.   var data = parsedRes.invoices;
  3.   var issueDate = [];
  4.   var partnerName = [];
  5.   var subTotal = [];
  6.   for (var i = 0; i < data.length; i++) {
  7.     issueDate.push([data[i].issue_date]);
  8.     partnerName.push([data[i].partner_long_name]);
  9.     subTotal.push([data[i].sub_total]);
  10.   }

1行目で、HTTPレスポンス(文字列)をオブジェクトにします。【変数:parsedRes】
2行目で、オブジェクトのうち、請求書に該当するところだけを抜き出します。【変数:data】
(そのままだと、自社の情報などが含まれてしまうので、余計なところをなくす)

この時点でも、変数dataには、非常に様々なデータが含まれています。
請求書番号、明細、コメントとか、請求書に含まれる情報全てが含まれているからです。

この中からデータ活用に必要なところは

  • 日付(issue_date)
  • 取引先(partner_long_name)
  • 金額(sub_total)

だけです。
厳密には金額は今回は使いませんが、色んな用途に使えるので、ついでに抽出しておきます。

それぞれに該当する空っぽの配列を準備しておきます(4~6行目)。
その空の配列に、請求書の枚数分だけ繰り返し処理(for文)を行います。(8~12行目)
上記3つの要素だけを取り出して、pushメソッドを使い、空っぽの配列に追加していきます。(9~11行目)

  1.   var ss = SpreadsheetApp.getActiveSpreadsheet();
  2.   var sheet = ss.getSheetByName(‘invoices’);
  3.   sheet.getRange(2, 1, issueDate.length, 1).setValues(issueDate);
  4.   sheet.getRange(2, 2, partnerName.length, 1).setValues(partnerName);
  5.   sheet.getRange(2, 3, subTotal.length, 1).setValues(subTotal);

あとはスプレッドシートに貼り付けます。
「invoices」という名前のシートを事前につくり、

  • A1セル:売上計上日
  • B1セル:取引先
  • C1セル:金額

としておきます。

4~6行目で、スプレッドシートの2行目以降にデータを貼り付けているのは、1行目を使っているからです。(赤文字のところ)

このコードを実行してみると、スプレッドシートにデータが貼り付けされます。

この後は、スプレッドシート上で加工して、取引が途絶えている顧客を抽出します。
その具体的なやり方は、こちらの記事です。

顧客流出を防ぐためのデータ活用方法前回、集客の真の問題は「新規顧客獲得」ではなく、むしろ「既存顧客の流出」であることをお伝えしました。 https://100ath...

ここまでGAS上でやってしまうのもありですね。
(今後の課題・・汗)

また、CSVでダウンロードして、別の用途に活用することもできます。
(例:顧客別の売上を確認する)

このようにGASとfreee APIを組み合わせると、freeeの標準機能だけでは取得できないデータも取得できます。freeeのレポート機能だけで不足するときには、参考にしてみて下さい。

まとめ
  • GASでfreeeのデータを一括ダウンロードできる(例:請求書)
  • ダウンロードしてからのデータ加工はGASで行う
  • データ集計までは自動化して、手を打つ方に時間を使う



【編集後記】
最近、結構な時間をGASに使っています。
パズルを解くみたいで、少しずつハマっている気がします。


メルマガ『経営は100種競技!』を毎日配信しています。
マーケティングやITを身につけたい。
ビジネスを楽しみたい。
変化・成長したいというビジネスパーソンにお読みいただいています。

渋屋 隆一
プロフィール
マーケティングとIT、そしてデータを使った「売れ続ける仕組みづくり」「業務改善」が得意。コンサルティングや研修・セミナーで中小企業の経営支援をしています。元IT企業でエンジニア→マーケティング。中小企業診断士。
\ Follow me /