課題
ある地域の不動産団体が、MLS加入者向けにロックボックス貸出プログラムを開始し、エージェントが確保したいリスティングのためにロックボックスを借りられるようにしました。課題は技術的なものではなく、運用面にありました。すべての申請はスプレッドシートで管理されており、管理者がリスティングとエージェントのデータを手作業でコピーして入力していました。
そのため、ロックボックスを借りたままの物件がいつ非公開(off-market)になったのかを確実に把握する方法がなく、どのエージェントがプログラムを利用したかを簡単に確認することもできず、どのサテライト拠点にロックボックスがどれだけあるかも把握できていませんでした。既製のソリューションを検討するよう依頼されましたが、プログラムの実際の運用に合うものがなかったため、自分から提案してこのツールを構築しました。
アプローチ
DjangoとPostgreSQLでツールを構築し、Requests(申請)、Listings(物件情報)、Agents(エージェント)、Lockboxes(ロックボックス)、Satellite Locations(サテライト拠点)という5つの主要モデルを中心に設計しています。
- ・バックエンドの処理は10分おきに実行され、PythonとPandasを使ってMLSのRETSフィードから新規・更新分のリスティングデータとエージェントデータを取得し、SQLAlchemy経由でPostgreSQLにupsert(挿入・更新)しています。
- ・ロックボックスプログラムに登録されたリスティングは、自動的に申請として登録され、エージェント情報とリスティング情報が紐づけられます。手入力は一切必要ありません。
- ・リスティングのRETSステータスが非公開(off-market)に変わると、該当のロックボックスがまだ返却済みとしてマークされていない場合、ツールは対応する申請を返却期限超過(overdue)としてフラグを立てます。これにより、管理者はどの案件を追いかけるべきかが一目でわかります。
- ・新規申請の確認、返却の記録、返却期限超過リストの確認といった日常業務はフロントエンドで行います。ロックボックスの在庫調整やサテライト拠点の管理など、より構造的な変更はDjango管理画面から行います。利用する管理者は2名のみで、管理画面の操作にも慣れているためです。
ダッシュボードには、返却期限超過の申請、プログラムを利用したエージェントの一覧、サテライト拠点ごとのロックボックス数、基本的な利用状況の統計が表示されます。
改善したい点
最初に取り組みたいことが2つあります。まず、コードベース自体の整理です。急を要する運用上の課題を解決するために急いで作った経緯があり、構造よりもリリースを優先していました。また、フロントエンド側にセルフサービス機能をもっと充実させ、Django管理画面を開かなければならないケースを減らしたいと考えています。
成果
公開以来、このツールは1,200名以上のエージェントからのロックボックス申請を処理し、これまでに6,000件を超えるロックボックスが貸し出されてきました。常時550〜600件ほどの申請がアクティブな状態にあります。以前のスプレッドシート運用から明らかに進化しており、このプログラムを運営する2名の管理者は日常的にこのツールを利用しています。