Amazonの購入履歴をGmailから集めるGAS。2022年1月からの電子帳簿保存法改正対応。

Amazonを使った場合の経理を2022年1月から変えなければいけません。
その対策として、GASを使う方法をまとめました。
(貼り付けるだけで使えます)

※Amazonからのメールと、GASでまとめたデータ by Panasonic S1+SIGMA35mmF1.2

 

2022年1月からのAmazonを使ったときの経理を変えなければいけない

2022年1月から、電子帳簿保存法という法律が変わります。
・会計ソフトのデータをデータのまま保存できる
・レシートをスキャンして保存できる
というのは、楽になるようで、手間やデメリットがある上、「できる」という法律なので、やらなくてもかまいません。
(私もやりません)

さらに
・データはデータのまま保存しなければいけない。プリントアウトでの保存はNG
という、楽になるようで、そうではなく、むしろ手間が増えるようになるのです。
こちらは、「できる」ではなく、「しなければいけない」。
法律上この違いは大きいのです。
(実際の影響、考え方は別記事で書きます)

現状の私の考えは、以前記事にしました。
メールで請求書PDFを受け取るとめんどくさくなる?すべてのフリーランス・ひとり社長に関係する2022年1月電子帳簿保存法(電子取引)改正。
(この記事は、ときどき更新しています)

ざっくりまとめると、フリーランス、ひとり社長も含めて独立しているすべての方が、データ・ネット上の取引について、次の3つのことをやらなければいけません。

1 パソコン、ディスプレイ、プリンタを揃える(ノートパソコンならパソコン・ディスプレイはOK。それなりにすぐプリントアウトできればいいので別の手段も)
2 ルールを決めておく(規程というものをつくる。前述の記事を参照していただければ)
3 日付、取引先、金額をExcel(スプレッドシート)に入れ、検索できるようにしておく

3については、ファイル名に日付・取引先・金額を入れるという方法でもいいとされていますが、そのほうが手間はかかりますし、その場合、検索の要件(2項目以上での検索、日付や金額の範囲で検索)を満たすのが難しくなります。
Excelなら要件を満たせるのです。
2022電子帳簿保存法改正対策Excel。オートフィルターによる検索の基本。

税務調査のときに対象のデータをすべて渡すなら、その要件(2項目以上での検索、日付や金額の範囲で検索)を満たさなくてもいいとことですが、実際にはどう運用されるかなんともいえません。

なお、2年前(2事業年度前)の売上が1000万円未満なら、検索できなくてもいいというルールもあります。

・メールで受け取った請求書PDF
・メール本文の請求内容
・ネット上の明細、履歴、領収書、請求書等
などが対象です。

近日中にオンラインセミナーを開催しますので、ご興味ある方は、こちらのLINE公式アカウントにご登録いただければ。
(税理士向けについては、別途開催し、開催については、メルマガ「税理士進化論」 にて告知します)

友だち追加

とはいえ、あわてて何かをやる必要はなく、不安になる必要もありません。
『今のうちに軽くおさえておくか」くらいで十分です。
2022年1月以降、データをちゃんと保存しないと、税務署から注意されるということはありませんし、首輪をはめられてプリントアウトしたら電流が流れるということもありません。
幸い、AI搭載のロボットが見回りにくることも、ドローンが監視することもまだはじまっていないので。
「青色申告が取り消される!」とも言われていますし、実際そういうお達しが出ていますが、「総合的に勘案する」とあり、すぐ取り消し!となることは考えられません。

ただ、
・人を雇わずひとりで仕事をしていても対象になる
・オフィスを借りずに自宅で仕事をしていても対象になる
・なにかしらデータ、ネットでのやり取りはやっているので知っておく必要はある
ということは抑えておきましょう。

データ、ネットでのやりとり、ネット上の明細、履歴といえば、代表的なのはAmazon。
なにかしら使っている方も多いでしょう。
このAmazonも今回の話の対象です。
楽天もメリカリも。

このAmazonについて、現状のわたしの考えをまとめてみました。

Amazon購入履歴を検索するには

なぜ今回のような改正がしれっとされるのか。
経理効率化をサポートするためということもあるかもしれませんが、
・税務署(国税庁)としては、データのほうが把握しやすい、不正を見つけやすい
ということもあります。
(膨大な紙の負担が大きい大企業の要望もあるのでしょうけど)

ただ、データだと不正がしやすくなるものです。
「不正なんかしない」と思われるでしょうし、実際しないでしょうが、基本的に性悪説ですので。
数億円規模の脱税もあるわけですし。
ただ、「売上1億円以下」「資本金1億円以下」というような基準があってもよかったのでは?と思っています。

不正といえば、こういったものを、

 

こう加工するかどうか。
仮に加工しても、会計データ上目立ちますし、わからないように小さい金額でやっていては、この手間が膨大にかかります。
こういうのでも、4箇所修正の必要がありますので。

前述した3つの要件、
1 パソコン、ディスプレイ、プリンタを揃える
2 ルールを決めておく
3 日付、取引先、金額をExcel(スプレッドシート)に入れ、検索できるようにしておく

のうち、1と2は不正防止、3は不正発見のためです。
決まってしまったものはしかたないので、これらの要件を満たすようにしましょう。
極力手間をかけずに。

1と2の不正防止は、さくっと整えるとして、あとは、不正しないだけ。
3の不正発見  効率化のための検索を現状でなんとかしなければいけません。

まず、Amazonの注文履歴。

これを改ざんするのはさすがに厳しいので、不正防止の要件は満たします。
ただ、検索の要件は満たしません。
金額では検索できませんので。

他の方法が必要です。

考えられるのは次のようなもの。

Amazonに期待

天下のAmazon、1月までにCSVデータでダウンロードできるようになるかもしれません。
ただ、経理・税金面については考えないのが世の常。
どれだけこれまで泣いてきたことか。
期待はできません。

1月までじゃなくても、2022年中でもいいくらいですが。

ただ、Amazonのビジネスアカウント(Amazonビジネス)だと、CSVダウンロードできます。
フリーランスでも利用できるので、こっちに切り替えるのもありでしょう。

Chrome拡張機能を使う

Google Chromeの拡張機能を使えば、

アマゾン注文履歴フィルタ – Chrome ウェブストア

このように、CSVデータでダウンロードできます。
これを使うのも手です。
いつまで使えるか不安定ではありますが。

 

会計ソフトを使う

会計ソフトでAmazonと連動しておけば、会計ソフト内で検索ができますし、CSVデータでダウンロードすることもできます。
該当データだけで検索できるよう、工夫は必要でしょうが。

 

そして、今回ご紹介する方法は、Amazonの購入履歴をGmailから集めるものです。
この方法だと応用もききますので。

なお、メールにあればいいんじゃないかと思われるかもしれません。
私もそれでいいんじゃないかと思いますが、国税庁のQ&Aでは、NGとされています。
Q&Aなので、なんともいえませんが。
さらには、「メールで検索する」という今の常識まで想定していないようにも思えます。
パソコンを変えればメールはなくなる、パソコンが壊れればメールデータも消えるという認識もあるような。

なら、メールから集めてこういうデータにすればいいというのが今回の趣旨です。

 

 

 

 

対電子帳簿保存法Amazon購入履歴収集GAS

 

Gmailからデータを集めるには、GAS(Google Apps Script)を使います。

このへんで使っているものです。
スタバ Mobile Order & PayのデータをGmailから集めるGAS

GASで、お気に入りのメルマガを1つのシートにまとめる方法

メルカリの購入履歴をExcelへ。GASでGmailからデータを抽出して経理。

方法としては、Python、RPAでAmazonのサイトから集めるというものもありますが、このメールから集める方法のほうが安定しています。

前提として次のような点に注意しましょう。
・プライベートのものも集めてしまう(何らかの方法でわけるか、そのままにしておくか)
・プライムビデオ、ギフト券には現状未対応(そこでプログラムが止まります。今後対応するかもですけど)
・メールを削除してしまうと収集不可能になる
・Amazonからのメールの形式が変われば、プログラムを変える必要がある

これら以外は、対処したつもりです。
なお、ポイント、ギフト券使用前の金額を集めています。

できあがるデータはこういったもの。
おまけで、メールへのリンクをつけているので、Amazonのサイトの注文履歴に紐付いています。

Amazonへの通常の注文(Kindle以外)はこういったメールです。
「注文合計」という言葉を探して、そこにある金額を読み取っています。

Kindleだとこういったメール。
「商品の小計」という文字で検索して、金額を読みとっています。
Kindleかどうかは、メール本文に「コンテンツ」があるかどうかで処理を分けました。

 

メールの件名は、「Amazon.co.jpでのご注文」(通常)、「Amazon.co.jp ご注文の確認」(予約)というものを集めます。

 

予約の場合は、件名が変わり、通常だと「注文合計:」なのが、「注文合計:」となっています。
この辺の処理もプログラミングで変えなければいけません。
(統一してほしい……)

問題なのは、このようにまとめて注文した場合。
そのままだと、最初の商品しか読み取りませんので、複数の商品があればそのすべてを読み取れるようにしています。

 

プログラムを貼り付けておきます。
★印の抽出し始める位置(0だと最新のメールから)、抽出するメールの数を変えていただければ。
集めたあとは、別のシートやExcelシートに移していただく形です。

使い方は、こちらのYouTube動画も参考にしていただければ。

Googleスプレッドシートを開き、メニューの[拡張機能]→[Apps Script]で、

開いたスクリプトエディタに貼り付けて、設定すれば使えます。

ちょっと力技のところもありますが、参考にしていただければ。
GASの使い方は、こちらにまとめてあります。
GAS(Google Apps Script)をコピペして使う方法

 

function Amazon_data() {
//1 スプレッドシートを読み込む
  const sp =SpreadsheetApp.getActiveSheet(); 

//2スプレッドシートをクリア
  sp.clear();

//3 GmailからAmazonの購入メールを抽出 

  // ★抽出しはじめる位置(0=最新)
  const from = 0
  // ★抽出するメール数の指定
  const number =20

  const search_mail = GmailApp.search('subject:Amazon.co.jp{でのご注文 ご注文の確認})',from,number);
  const mail_message = GmailApp.getMessagesForThreads(search_mail);

//4 抽出したメールから日付、金額、リンクを抽出   

  // 見出し
  sp.getRange('a1').setValue('取引日付');          
  sp.getRange('b1').setValue('取引先'); 
  sp.getRange('c1').setValue('金額'); 
  sp.getRange('d1').setValue('内容');
  sp.getRange('e1').setValue('リンク');

  // スプレッドシートの貼り付け位置
  let r =2

  //指定したメールの件数で繰り返し処理
  for(let i= 0;i<mail_message.length;i++){

    //メールの日付
    const date = mail_message[i][0].getDate();
 
    //メール本文
    const body = mail_message[i][0].getPlainBody();

    //スプレッドシートの貼り付け位置の指定
    r=sp.getLastRow()+1;

    //Kindleの場合
    if(body.match(/コンテンツ/)){

      
      sp.getRange('a'+r).setValue(date);   //日付入力       
      sp.getRange('b'+r).setValue('Amazon'); //Amazonと入力

      //金額を検索
      let amount = body.match(/商品の小計:.*/g)[0].replace('商品の小計:','');
      sp.getRange('c'+r).setValue(amount); //金額入力
      sp.getRange('d'+r).setValue('領収書');//内容入力
    
      //メールへのリンク
      let link = mail_message[i][0].getThread().getPermalink(); 
      sp.getRange('e'+r).setValue(link); //リンク入力

    }
    
    //Kindle以外の場合
    else{
      
      //金額を検索し、まとめる      
      const amount_lists = body.match(/注文合計.*/g);

      //同時に注文したもので繰り返し処理
      for(let j=0;j<amount_lists.length;j++){
        
        //スプレッドシートの貼り付け位置
        r=sp.getLastRow()+1;

        sp.getRange('a'+r).setValue(date); //日付入力
        sp.getRange('b'+r).setValue('Amazon');//Amazonと入力 

        //金額を検索
        let amount = amount_lists[j].replace('注文合計:','').replace('注文合計:','');
        sp.getRange('c'+r).setValue(amount); //金額入力

        sp.getRange('d'+r).setValue('領収書');//内容入力

        //メールへのリンク
        let link = mail_message[i][0].getThread().getPermalink();
        sp.getRange('e'+r).setValue(link);  //リンク
     
      };
    };
  };
    
};

以下、解説していきます。

まず、スプレッドシートを読み込み、いったんクリア。

Gmailからの抽出は、GmailApp.search(件名、抽出を始める位置、メール数)です。

さらに、Gmailはスレッドというまとまりになるので、それを、
GmailApp.getMessagesForThreads(抽出したメール)
で読み込んでいます。

Amazonの場合、その日に複数の注文をしても、すべて個別のメールになるのでスレッドとしてまとまりにならないのですが、今後の変更されることも考えてこうしました。

次に、スプレッドシートに見出しをつくり、抽出したデータの初期の貼り付け位置(2行目)を指定。

抽出したメールで繰り返しの処理をし、その中で日付と本文をまず抜き出し、スプレッドシートの最終行を読み取り貼り付け位置を決めます。

ここは条件分岐。
Kindleの場合は、「コンテンツ」がそのメール本文に入っているかどうかで判断します。
スプレッドシートへ日付、取引先(Amazon)を入力。
メール本文からは、「商品の小計」で検索し、その行を取り出した後(例 「商品の小計: ¥990」)、「商品の小計:」を空欄に置換(replace)し、結果、「¥990」だけ入力。

内容を「領収書」として入力し、メールのリンクを読み取ってスプレッドシートに入力。

Kindle以外の場合、複数の商品がメール1つにまとまっている可能性があるので、まず「注文合計」で検索し、すべてを抽出。
例として、[注文合計:¥990,注文合計:¥1980,注文合計:¥1280]と抽出し、1つずつ処理します。

その後、その抽出した「注文合計」で繰り返し、「注文合計」の行を読み取り(例 「注文合計:¥990」)、「注文合計:」を置換し、入力。
その他は、Kindleの場合と同様です。

 



■編集後記
昨日は、書籍執筆、タスク実行デー、映画2本。
昨日から公開でしたので、いたしかたなく。
両方、楽しめました。
そういえば、大昔は、2本組が普通でした。
宮崎だけかもしれませんが。

1日1新Kindle『1日1新』Instagram『1日1新』
フラットシート
『蒼穹のファフナー The Beyond 10、11,12』
『エターナルズ』

■娘(4歳7ヶ月)日記→Kindle『娘日記』
何か新情報(サンリオやプリキュア)があると、見せています。
昨日は、パン。
「これ、ほしいー、じゃ、よろしくー」とまた部屋に戻っていきましたけど。