Threadsをスプレッドシートから自動投稿する|Threads APIとGASで作った手順と、いいね数の自動取得

こんにちは!アントロンのNaokoです。
Threadsの投稿を、毎日決まった時間に手で出すのが負担になっていませんか?
私は別に運用しているThreadsアカウントで、Googleスプレッドシートに書いた投稿を、決めた時間に自動で投稿しています。使っているのは、Threads APIとGoogle Apps Script(GAS)です。
2026年8月18日〜19日には4本が自動で投稿され、予定時刻とのずれは2〜17分でした。この記事では、実際に動かしている構成と手順を紹介します。
1. Meta for Developersでアプリを作る
Meta for Developersでアプリを作り、ユースケースに「Threads APIにアクセス」を選びます。

- 投稿するThreadsアカウントをテスターに追加し、Threads側で招待を承認する
- 権限は threads_basic・threads_content_publish・threads_manage_insights(いいね数の取得用)の3つだけにする

threads_basic・threads_content_publish・threads_manage_insightsの3つが「テスト準備完了」になっています。
アクセストークンは、ユースケースの「設定」にある「ユーザートークン生成ツール」で出せます。ボタンを押すと、最初から長期アクセストークンが出ます。Threadsアカウントが公開になっていることが条件です。
アプリを作り始めてからトークンを取るまで、約1時間20分でした。うち約15分は、テスターの追加でエラーが出て止まっていた時間です。
2. スプレッドシートに投稿の台帳を作る
1行が1投稿です。列は次の11個にしています。
- ID/カテゴリ/投稿ネタ/フック案/投稿本文
- 投稿予定日時/ステータス
- 投稿日時(実績)/投稿URL/ThreadsポストID/いいね数
ステータスは「下書き」「承認済み」「投稿済み」「エラー」の4つです。GASが投稿するのは「承認済み」で、予定日時を過ぎた行だけにしました。自分で読んでから投稿するためです。
最初は予定時刻になっても投稿されず、原因はスプレッドシートのタイムゾーンでした。画面では「12:00」と見えていても、GASは翌日の4:00と読んでいました。[ファイル]→[設定]でタイムゾーンを東京にして直りました。
3. GASで投稿する
スプレッドシートの[拡張機能]→[Apps Script]を開きます。すぐ下に「AppSheet」という別のサービスが並んでいるので、間違えないようにしてください。
![スプレッドシートの[拡張機能]メニュー。Apps Scriptのすぐ下にAppSheetがある](/_emdash/api/media/file/01M5GTFV595MTF4QBP12645TCB.png)
台帳のシートで[拡張機能]を開いた画面です。投稿ネタの列はぼかしています。
アクセストークンは、シートにもコードにも書かず、スクリプトプロパティに保存します。Threads APIの投稿は2段階です。1回目でメディアコンテナを作り、2回目でそれを公開します。
// 1. メディアコンテナを作る
var container = callApi_('POST', '/' + userId + '/threads', {
media_type: 'TEXT',
text: text
});
// 2. 待ってから、メディアコンテナを公開する
Utilities.sleep(5000);
var published = callApi_('POST', '/' + userId + '/threads_publish', {
creation_id: container.id
});callApi_ は、スクリプトプロパティからトークンを読んで付ける関数です。私の仕組みは5秒待っていますが、Meta公式の投稿の説明では平均30秒待つことが推奨されています。

プロパティ名は THREADS_ACCESS_TOKEN です。値は伏せています。
ほかに入れているのは次の3つです。
- 本文は1本500字まで(公式の上限)なので、送る前に数える
- 1回の実行で投稿するのは3件まで
- LockServiceで、同時に2つ動かないようにする
4. 1件試してから、トリガーを設定する
初回の実行では「このアプリは Google で確認されていません」と出ます。自分で書いたスクリプトなので、[詳細]から進みます。プロジェクト名が「無題のプロジェクト」のままだと画面にもそう出るので、先に名前を付けておくと安心です。

プロジェクト名が「無題のプロジェクト」のまま表示されています。メールアドレスは伏せています。
1件投稿できたら、GASの時間主導型トリガーを設定します。

- 投稿用:15分おき
- トークン更新用:月1回。失敗したらメールで知らせる
長期アクセストークンの有効期間は60日で、更新できるのは発行から24時間以上たってから期限までの間です(Meta公式)。期限を過ぎると取り直しになるので、月1回更新しています。
5. 投稿IDは文字列で書き戻す
投稿できたら、投稿日時・投稿URL・ThreadsポストIDを書き戻し、ステータスを「投稿済み」にします。
ここで一度、エラーが出ないまま値が壊れました。私の仕組みでは、本文を「---」だけの行で区切ると、2本目以降を直前の投稿につないで連投します。その連投のIDをカンマでつないで1つのセルに書き込んだところ、スプレッドシートが桁区切りの数字と読んで変換し、17桁のIDが元に戻せなくなったのです。書き込む前にセルを文字列の書式にして直しました。
6. いいね数を24時間後に1回だけ取る
投稿どうしを同じ条件で比べるため、いいね数は投稿から24時間後に1回だけ取ります。
- 対象は「投稿済み」で、24時間たっていて、いいね欄が空の行
- Threads APIの
/{投稿ID}/insights?metric=likesを呼ぶ - 連投した投稿は、全部のいいねを足す
- 専用のトリガーは作らず、投稿用の処理の最後で呼ぶ
最初に取れたのは11行ぶんで、いいねが付いていたのは3行(6・1・1)でした。
仕様確認:Meta公式 Threads Insights、Google公式GASトリガー
まずは、投稿したい文章を3本、スプレッドシートに書き出すところから始めてみてください。仕組みづくりを相談したい方は、お問い合わせフォームからどうぞ。
最後まで読んでくださりありがとうございました!




コメント