🌐 This content is available in Japanese only
受注制作業務自動化PythonMeta広告

Meta Ads Creative Manager — Behind the Scenes

Meta広告のクリエイティブ回収からDrive整理・シート反映までを自動化(受注・納品済み)

Overview

What We Built

広告運用の現場では「この広告に使った画像・動画を見せてほしい」という確認が何度も発生します。ところが管理表に並んでいるのは広告名と数値だけで、実物のクリエイティブは広告マネージャの奥にあり、毎回手作業で探して落とす必要がありました。このツールは、Meta広告APIから画像・動画のクリエイティブを一括で取得し、広告アカウント別・広告別のフォルダに整理してGoogleドライブへ格納、さらに広告管理スプレッドシートの該当行へ保管先リンクを書き戻します。管理表の行から実物へ1クリックで辿れる状態を、毎回の手作業なしで維持するのが目的です。ココナラ経由で受注し、Windows環境で動く納品ツールとして手順書一式とあわせて納品しました。

How it runs

What happens between launch and completion

Diagram: the tool pulls creatives from Meta Ads, files them into Google Drive, and writes links back into one spreadsheet column

Preflight

Verifies auth, destination folder, and sheet columns up front; aborts in seconds on misconfiguration

List ads

Pulls ads per account with their ad set and campaign names attached

Resolve creatives

Walks single-image, carousel, and dynamic creatives to locate the real asset URLs

Name & dedupe

Derives names from each asset's own ID or hash; skips anything already on Drive

File to Drive

Auto-creates per-account and per-ad folders; generates fallback docs for unavailable videos

Write back to sheets

Matches rows by ad name and writes the link into one designated column only

Report

Outputs the run result, unmatched rows, and any failed assets

What it produces

How things end up organized (dummy data)

Google Drive structure

📁 広告クリエイティブ/
  📁 アカウントA/
    📁 20260701_夏キャンペーン_A/
      🖼 img_a1b2c3d4.jpg
      🖼 img_e5f6g7h8.jpg
      🎬 1234567890__メイン動画.mp4
    📁 20260701_夏キャンペーン_B/
      🖼 img_i9j0k1l2.jpg
      📄 動画の参照先まとめ.gdoc
  📁 アカウントB/
    📁 20260715_リタゲ_01/
      🖼 img_m3n4o5p6.jpg

Spreadsheet output

Ad nameSpendCPACreative
20260701_夏キャンペーン_A¥120,000¥3,200🔗 Driveで開く
20260701_夏キャンペーン_B¥86,000¥2,900🔗 Driveで開く
20260715_リタゲ_01¥54,000¥4,100🔗 Driveで開く

Note: all values shown are dummy data. The tool writes only the rightmost column and never touches existing columns or formulas.

Purpose

Why & For Whom

What was built

Meta広告のクリエイティブを一括取得し、Drive整理とスプレッドシート反映まで行う運用ツール

Target audience

複数の広告アカウント・複数の管理シートを回している広告運用チーム

Type

受注制作 / 納品済み

Effort

Time Investment

Total: 約4日(初回納品〜機能追加まで)

要件のすり合わせ・API検証

約1日

本体実装

約1日

実機テスト・レビュー修正

約1日

手順書作成・納品パッケージ化

約1日

Tools & Technologies

What We Used

PythonMeta Graph APIGoogle Drive APIGoogle Sheets APIOAuth 2.0pytestClaude CodeCodex

Implementation Steps

Build Order

1

「何が本当に面倒なのか」を先に特定する

最初の相談は「広告素材を一元管理したい」という広い要望でした。ヒアリングを重ねて、実際に時間を食っているのは『管理表の行から実物のクリエイティブに辿り着けないこと』だと切り分け、そこだけを解く構成に絞り込みました。範囲外にしたもの(成果数値の集計、他サービスに散っている資料の統合)も、その場で合意して書面に残しています。

2

権限の通し方をAPIで先に検証する

実装前に、クライアント本人名義のアプリ+読み取り専用の権限で必要なデータに届くかを実APIで確認しました。ここで通ることを確かめておくと、審査申請が不要になり着手が数週間早まります。逆にここを飛ばすと、作り終えてから「権限が下りない」で全部止まります。

3

取得ロジックの実装

広告一覧から、単体画像・カルーセル・動的クリエイティブそれぞれの構造をたどってアセットを解決します。動画はアカウントの動画ライブラリ経由でまとめて引く必要があり(個別に問い合わせると権限エラーになる)、ここは実際に叩いて分かった仕様に合わせています。

4

冪等に動く命名規則を設計する

再実行しても二重取得しないよう、Drive上の同名ファイルの有無で「取得済み」を判定しています。つまりファイル名の決め方がそのまま欠落の有無に直結するため、名前の決定ロジックだけを独立したモジュールに切り出し、アセット固有のID・ハッシュを必ず名前に含める方式に統一しました。

5

非エンジニアが自力で回せる状態にする

実行はバッチファイルのダブルクリック、エラーは日本語の指示文に変換。重い処理に入る前に認証・保存先・シート構造をまとめて確認し、設定ミスがあれば最初の数秒で止めます。手順書は初回セットアップ・Google認証・トークン更新・受け入れチェックなど7本に分けてPDFで納品しました。

6

納品後に見つかった運用要件へ追加対応

初回納品後、管理シートが1枚ではなく案件ごとに複数枚あることが判明。取得とDrive格納は1回のまま、リンクの書き込みだけをシートの枚数分繰り返す形に拡張しました。対象シートの指定はクライアント自身が設定ファイルを編集する運用にし、シートが増減するたびにこちらへ依頼が発生しない形にしています。

Challenges

Problems & Solutions

Problem

ファイル名を「取得できた順の連番」で付けていたため、広告の構成が変わると新しい素材が『取得済み』と誤判定され、静かに欠落する経路があった

Solution

名前を「アセット自身の情報(画像のハッシュ・動画のID)だけで決まる」方式に変更。同じ題名の動画に差し替えられても別ファイルとして扱われます。名前をその時の集合に依存させないことが冪等性の条件だと分かり、この原則を設計メモに明文化して以降の変更で崩さないようにしました。

Problem

アクセストークンをURLのクエリに載せていたため、通信エラー時のログにトークンが平文で残っていた。しかもそのログは「詰まったら送ってください」と案内しているファイルだった

Solution

トークンをAuthorizationヘッダー送信に変更し、加えてログ出力の直前でマスクする二重の防御にしました。別モデルによるクロスレビューで見つかった問題で、以降は出荷前のクロスレビューを工程に組み込んでいます。

Problem

APIの仕様上、どうしても本体を取得できない動画が全体の約半分あった。しかも先に「動画も全部ドライブに入ります」と伝えてしまっていた

Solution

取得できない条件を切り分けて、権限を足しても解決しないことを実測で確定させたうえで、正直に訂正しました。そのうえで代替として高解像度サムネイルと、動画ごとの直接リンクを並べた案内ドキュメントを自動生成する形に変更。できないことを早く言い切って代替案を出すほうが、曖昧なまま引っ張るより結果的に信用されると実感しました。

Problem

Windowsのパス長上限を超え、名前の長い広告のファイルだけが毎回失敗していた。再実行しても同じ場所で落ちるため、利用者から見ると原因不明のまま永久に取得できない

Solution

一時作業フォルダの階層を浅くして回避しました。開発環境(Linux)では絶対に踏まない不具合で、納品先の環境で実際に動かして初めて出る種類の問題です。以降、納品前の実機確認は工程から外さないことにしています。

Learnings & Reusable Insights

Takeaways for Next Time

  • 再実行の安全性(冪等性)は、ファイル名の決め方に集約される。名前をその時の集合に依存させると、静かに欠落する経路ができる
  • 認証・権限まわりは実装前に実APIで通しておく。ここを飛ばすと、完成後に全部止まる
  • エラーは「1件だけ失敗して続行してよいもの」と「続けても必ず失敗するもの(容量不足・権限なし)」を分けて扱う。後者で処理を続けると、空のフォルダへのリンクを書いて『完了』と報告してしまう
  • 非エンジニアに渡すツールは、機能より『詰まったときに自力で復帰できるか』が納品品質を決める。トークンの失効のように必ず来る事象は、専用のエラーとして手順書へ誘導しておく
  • 別モデルによるクロスレビューは、自分と同じ盲点を持たないぶん効く。セキュリティ上の見落としも命名バグも、そこで見つかった

Like what you see here?

I build similar work with AI — faster and at lower cost

Everything shown here is a real, orderable project. After a short chat about your industry and goals, I build it from scratch to fit your business. Feel free to reach out just for a rough estimate.

Price guide

¥20k–¥150k

Turnaround

1–2 weeks