4
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-18

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

これを実行してみるとこんなレスポンスが返ってきます。
image.png
上記キャプチャの赤枠部分が各プログラムのIDとなり、

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

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

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

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

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

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

CData Marketo Driver について

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

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

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

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

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

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

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

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

実行結果です。
image.png

このように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に格納することができ、好きな時に好きなようにデータを活用することもできます。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0