レストラン向けに販売している場合(デリバリーテック、マーケティングサービス、POSシステム、ロイヤリティアプリなど)——すでにイライラする最初のステップを知っているはずです:レストランを見つける。どんなレストランでもいいわけではなく、特定の料理、特定の都市、UberEatsに出店している店舗など、ICPに合致する店舗が必要です。

通常のワークフローは次のようになります:UberEatsを開き、都市内で「ピザ」を検索し、スクロールして名前とURLをスプレッドシートにコピーし、都市を切り替えて繰り返す。20都市のエリアだと、1件のメールを送る前に午後が終わってしまいます。

手作業に疲れたので、ApifyのUberEats Stores Search by Location and Keywordアクターを使って自動化し、約10分で本物のリードリストパイプラインに仕上げました。

アイデア

このアクターは2つのシンプルな入力(デリバリー先住所のリストと検索キーワード)を受け取り、一致する店舗の構造化データ(名前、UberEats URL、評価、評価数、推定配達時間、都市、画像)を返します。ブラウザ不要、手動スクロール不要、パースするHTMLも不要です。

リード獲得にとってこれは、ターゲット都市を選び、キーワード(料理名、または競合ブランド名で「まだその技術を導入していない」レストランを探す)を選んで、CRMに直接フィルタリング・エクスポートできるクリーンなデータセットを得られることを意味します。

ウォークスルー:Python + Apifyクライアント

クライアントをインストール:

pip install apify-client

ターゲット都市のバッチに対してアクターを呼び出す:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "locations": [
        "85 Marsh St, Newark, NJ 07114, USA",
        "95th Ave, Ozone Park, NY 11416, USA",
        "1600 Pennsylvania Ave NW, Washington, DC 20500, USA",
    ],
    "search_keyword": "pizza",
    "max_search_results": 50,
}

run = client.actor("datacach/ubereats-stores-search-by-location-and-keyword").call(run_input=run_input)

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())

各アイテムは次のようになります:

{
  "store_uuid": "35e7a890-3f2a-5948-815e-7a2a3cb77d1f",
  "name": "Pizza Near Me",
  "url": "https://www.ubereats.com/store/pizza-near-me/NeeokD8qWUiBXnoqPLd9Hw",
  "estimated_time_to_delivery": "20 min",
  "rating": 4.53,
  "rating_count": "14",
  "city": "Newark",
  "country_code": "US",
  "input": { "search_location": "85 Marsh St, Newark, NJ 07114, USA" }
}

リードリストへの変換

DataFrameに読み込んで、営業チームが実際に使える形に整形します:

import pandas as pd

df = pd.DataFrame(items)
df["rating_count"] = pd.to_numeric(df["rating_count"], errors="coerce")

# 過小評価だが人気:高評価、低レビュー数。
# 有機的にうまくいっているが、マーケティング/技術投資がほとんどないレストラン——最適なアプローチ対象。
leads = df[(df["rating"] >= 4.3) & (df["rating_count"] < 50)]

leads = leads[["name", "city", "url", "rating", "rating_count", "estimated_time_to_delivery"]]
leads.to_csv("restaurant_leads.csv", index=False)

このフィルターは出発点に過ぎません。ピッチに合ったシグナルに置き換えてください。実際に効果的なものをいくつか:

  • 配達時間の遅さestimated_time_to_delivery > 40 min)→ 物流/運用ツールの提案
  • 大都市での低評価数 → マーケティング/認知度向上サービスの提案
  • 競合ブランド名で検索(料理名ではなく)→ 特定のPOSやデリバリー専用コンセプトを導入している店舗をすべて特定し、すでにコンバージョン済みと未導入の店舗を正確に把握

いずれにせよ、名前・URL・位置情報付きの見込み客CSVが得られ、使っているアウトリーチツールにインポートする準備が整います。

自分でスクレイピングするより優れている理由

UberEatsに対して独自のスクレイパーを書くこともできますが、レストラン名のリストを得るためだけに、アンチボット処理、ページネーション、マークアップ変更のメンテナンスを永遠に続けることになります。このアクターはすでにその部分を処理済み——都市とキーワードを入力するだけでJSONが返ってきます。また、 trivially repeatableです:地域ごとに毎月再実行すれば、一度きりの陳腐化するリストではなく、自己更新型のリードパイプラインが手に入ります。

ワークフローを自分の都市で試してから全地域に拡大したい場合、無料プラン(1ロケーション、1回あたり10件の結果)があります。

試してみる

この方法でリードパイプラインを構築した場合、どのようなフィルター/シグナルを使ったか、ぜひコメントで教えてください。