Marketo の複数プログラムを対象にリード情報を一気に取得する方法


Web API Advent Calendar 2020 19日目の記事です。

Marketo のプログラムメンバーシップ

世界中で使われてるMAツールのMarketo、日本でもたくさんの企業で使われていると思います。
Marketoを使用したマーケティングの取り組みとして、さまざまなプログラム(キャンペーンとかイベント、メールなど)に紐づけてリードを管理していくと思いますが、外部からMarketoにアクセスしてそのリードやプログラムなどのデータを取得するにはどうするかというとWEB APIですよね。

プログラムメンバーシップを取得する方法

Marketoではちゃんと対象プログラムのリードを取得するエンドポイントが用意されています。

GET /rest/v1/leads/programs/{programId}.json

はい、プログラムIdを直に指定する形でプログラムに紐づいているリードを取得できます。
けどプログラムが大量にあったらちょっと扱いずらいという感じですね・・・

というかプログラムIdはどこで確認できるんでしょうか。

ProgramIdはどうやって取得する?

これもちゃんとエンドポイントがあります。
https://developers.marketo.com/rest-api/assets/programs/

GET /rest/asset/v1/programs.json

これを実行してみるとこんなレスポンスが返ってきます。

上記キャプチャの赤枠部分が各プログラムのIDとなり、

GET /rest/v1/leads/programs/{programId}.json

に指定するprogramIdとなります。

ではプログラムIdをセットして実際にリクエストしてみます。 
先ほどのレスポンスにあったProgramId:1119に属しているメンバーを取得してみます。

まぁこのように取得できますよね。

ただプログラムIDを指定する形なので、複数プログラムに紐づくリードを一気に取得して活用したいとき、結構面倒ですよね。いちいちプログラム一覧を取得して、それをセットしてプログラムに紐づいているリードを取得してと、まぁ片手間では終わらなそうです。

エンジニアを抱えていないようなチームではもしかしたら諦めてしまうかもですよね。

ということで、CData Marketo Driverではそういった部分を解消できるよう1個のSQLで複数のプログラムとそれに紐づくリードを検索しにいくことができるようになっています。

CData Marketo Driver について


Marketoに対してJDBCでの接続をはじめ、ODBCやADO、Excel などからSQLでアクセスできるドライバーです。
例えば、Lead情報を取得したいときはこんなSQLだけで取得できます。

select Id,Company,ProgramId,UpdatedAt,MembershipProgressionStatus from Leads

こんなふうにテーブル構造にモデリングされて返ってきます。完全にRDBですね。

で、複数プログラムでリードを検索する方法についても、同じようにSQLを使って取得することができます。

複数プログラムを対象にリード情報を一気に取得する方法

SQLがかけるのでサブクエリももちろん書けます。
なので、このようなSQLでそれぞれのプログラムを検索しにいってくれます。

select Id,Company,ProgramId,UpdatedAt,MembershipProgressionStatus 
from Leads 
Where ProgramId in (select Id from Programs)

※SELECT句はアスタリスクで全項目もってこれますが、今回は絞ってます

実行結果です。

このようにMarketo側ではプログラムIDを指定してリクエストしてねと決められているので、それならばツールやサービス側で対応するしかないですよね。

では実際にどのようにしてMarketoにアクセスしてデータを取得しているのかみていきます。

CData Driverの動き

まずはプログラム一覧を取得しにいきます。
SQLのサブクエリ部分ですね。

GET https://XXXXXXXXX.mktorest.com/rest/asset/v1/programs.json?

次に取得したプログラムID分、プログラムメンバーシップを取得するエンドポイントを呼びます。
なので100個プログラムがあるなら、1001.json の部分を変更して100回エンドポイントを呼びます。
(こればかりはしょうがないところ・・・)

POST https://XXXXXXXXX.mktorest.com/rest/v1/leads/programs/1001.json

とはいえ、1個のSQLを実行することでこのようにデータを取得することができます。

おわりに

マーケティングデータは色んな確度でデータが欲しいところですし、これこそデータを取得する部分に時間を割くべきではないですよね。
ちなみにCData Driverを使用したデータ連携ツールのCData Syncというものもあります。これはSaaSデータをDBに定期連携できるELTツールなのですが、こういったものを使用することで、MarketoデータをRDBに格納することができ、好きな時に好きなようにデータを活用することもできます。