「気になる収益物件は増えたのに、比較する前の転記作業で疲れてしまう」
収益物件を探していると、販売図面はPDF、仲介会社からの提案はメール、家賃相場は不動産ポータル、融資条件は別のメモに分散します。
そのたびにExcelへ価格や賃料を転記し、単位をそろえ、利回りを計算していると、肝心の物件調査に使う時間が残りません。
そこでこの記事では、収益物件の比較表を自動作成する仕組みを、初心者でも試せる7ステップに分けて解説します。
完成後に目指す状態は次のとおりです。
- メールやCSVから物件情報を取り込む
- 価格・賃料・築年などの表記を統一する
- 表面利回りや戸数ベースの空室割合を計算する
- 不明項目と危険信号を表示する
- 条件に合った物件だけ通知する
- 人間が修正した内容を次回の抽出ルールへ反映する
- 成功件数だけでなく、失敗理由も記録する
目的は、AIに物件購入を決めさせることではありません。
転記、整形、計算、一次選別を自動化し、人間の時間を原本確認、現地調査、融資相談へ振り向けることです。比較表を一度きりの資料ではなく、判断履歴を再利用できる運用資産へ育てます。
本記事は一般的な情報提供を目的としており、特定の物件、融資、購入または売却を推奨するものではありません。実際の投資判断は、原本や現地を確認したうえで、宅地建物取引士、金融機関、税理士、建築士、弁護士などへ相談してください。
Hiroの実行ログで確認した「止まる前提」の自動化
私は auto-ai-blog という自動生成環境を運用しています。
2026年7月22日22時16分時点のローカルログを集計したところ、同日の Saved to Notion successfully. は55回記録されていました。
ただし、同じ日には次のエラーも発生しています。
- AIの下書き処理が240秒でタイムアウト
- Gemini CLIでコマンド長エラー
- Gemini CLIで認証エラー
- 品質検査が最低合格スコアに届かず停止
- レビュー処理に失敗し、下書きをそのまま採用
実際のログには、次のような記録が残っています。
2026-07-22 19:49:05 [INFO] Saved to Notion successfully.
2026-07-22 19:51:41 [ERROR] AI slop validation failed:
score=7/8;
failed=他者が書けない独自情報, 反論・限界・注意点, 差別化
品質設定ファイルは2026年6月26日に取得されており、チェック項目は10個、最低合格スコアは8点です。
ここで注意したいのは、10項目中7項目を満たしていても、合格基準8点には届かないことです。また、上記の7点時に不足していた項目は「独自情報」「反論・限界・注意点」「差別化」の3つでした。
この実行ログから分かったのは、自動化では「一度も止まらないこと」より、次の情報を残す方が重要だということです。
- いつ実行したか
- 何件入力したか
- 何件成功したか
- どの工程で失敗したか
- 何を直せば再実行できるか
- 再実行によって重複登録されないか
収益物件の比較表も同じです。読み取りに失敗した物件を黙って除外せず、「どの資料の、どの項目を、なぜ取得できなかったか」を記録します。
収益物件の比較表を自動作成する全体像
自動化する処理は、次の8段階です。
物件メール・PDF・CSV
↓
必要項目の抽出
↓
単位と表記の正規化
↓
入力値の検証
↓
利回り・空室割合の計算
↓
比較表へ保存
↓
条件一致時だけ通知
↓
人間の修正を抽出ルールへ反映
ここでいう正規化とは、同じ意味のデータを同じ形式へ変換する処理です。
たとえば「3,360万円」「3360万」「33,600,000円」という価格を、比較表ではすべて 3360 万円として保存します。
ただし、変換後の数値だけを残してはいけません。誤変換を検証できるように、元の表記も保存します。
ステップ1:比較表の目的を「購入判定」ではなく「確認順」にする
最初に決めるのはツールではなく、比較表の役割です。
AIや計算式だけでは、接道、境界、建物状態、契約条件、融資可能性まで正確に判断できません。そのため、「買うべき物件を自動判定する」という設計は避けます。
比較表の役割は、次の確認順を決めるところまでにします。
| 分類 | 状態 | 次の行動 |
|---|---|---|
| A | 必須項目がそろい、情報源も明確 | 原本、周辺賃料、収支を確認 |
| B | 数字は条件内だが築古 | 修繕履歴と融資期間を確認 |
| C | 接道や法令情報が未確認 | 公的資料、専門家、現地で確認 |
| D | 現況賃料や戸数が不明 | 仲介会社へ資料請求 |
| E | 条件外 | 見送り理由を記録して保留 |
AIに出させるのは「購入・見送り」の結論ではありません。
「誰が、何を、どの資料で確認するか」という次アクションです。
ステップ2:収益物件比較表の列を固定する
初心者は、まず1枚の「初期比較表」から始めてください。
最低限必要な列は次のとおりです。
| 列名 | 入力例 | 必須にする理由 |
|---|---|---|
| 物件ID | 20260722-001 | 重複登録を防ぐ |
| 物件名 | Aハイツ | 原本との照合に使う |
| 所在地 | 横浜市港北区 | エリア比較に使う |
| 価格(万円) | 3360 | 単位を統一する |
| 満室想定年間賃料(万円) | 410.4 | 表面利回りの根拠にする |
| 現況年間賃料(万円) | 空欄 | 想定賃料と混同しない |
| 表面利回り(%) | 12.21 | 一次比較に使う |
| 築年月 | 1984年2月 | 築年数だけより検証しやすい |
| 構造 | 木造 | 修繕・税務・融資確認に使う |
| 総戸数 | 8 | 空室割合の分母にする |
| 空室戸数 | 2 | 現況を確認する |
| 情報源URL | 元ページURL | 出典へ戻れるようにする |
| 取得日時 | 2026-07-22 09:00 | 情報の鮮度を確認する |
| 抽出方法 | CSV/PDF/OCR | 誤読リスクを判断する |
| 原本確認 | 未確認 | AI抽出と人間確認を分ける |
| リスクフラグ | 現況賃料不明 | 調査漏れを表示する |
| 次アクション | レントロール請求 | 作業を具体化する |
| ステータス | 未確認 | 二重対応を防ぐ |
満室想定年間賃料と現況年間賃料は、必ず別の列にしてください。
初期比較で候補に残った物件だけ、別シートで次の項目を調べます。
- 土地・建物面積
- 用途地域
- 建ぺい率・容積率
- 接道
- 権利関係
- 修繕履歴
- 固定資産税
- 管理費
- 保険料
- レントロール確認日
- 融資相談結果
- 現地調査メモ
ステップ3:最初の入力元をCSVだけに絞る
初回からWeb、画像PDF、メール、CSVをすべて連携すると、エラーの原因を切り分けられません。
最初はCSVを使い、サンプル3件で動作確認します。
property_id,property_name,price_yen,full_occupancy_rent_yen,built_date,structure,units,source_url
20260722-001,Aハイツ,60000000,4800000,1998-04,RC,8,https://example.com/a
20260722-002,Bコーポ,42000000,3900000,1989-10,木造,6,https://example.com/b
20260722-003,Cマンション,85000000,6800000,2004-02,S造,10,https://example.com/c
次の順番で入力元を増やします。
- CSV
- 表形式のメール本文
- 文字を選択できるPDF
- 画像PDFのOCR
- 利用許可を確認できたAPIまたはWebデータ
OCRとは、画像内の文字をテキストへ変換する技術です。金額、面積、小数点、築年月は誤読の影響が大きいため、OCR結果を原本未確認のまま投資判断へ使わないでください。
ポータルサイトや公開データを自動取得する場合は、利用規約、API規約、アクセス制限、著作権、個人情報の扱いを事前に確認します。
たとえば国土交通省の不動産情報ライブラリには公開APIがありますが、申請とAPIキーが必要です。また、掲載情報は重要事項説明などへの使用を保証するものではなく、参考情報としての利用が想定されています。これは自動取得した公的データも原本調査を代替しないことを意味します。
参考:国土交通省「不動産情報ライブラリ API操作説明」/利用規約
ステップ4:AIの抽出結果をJSONで固定する
AIへ「物件情報を分かりやすく整理して」と依頼すると、比較表へ取り込みにくい文章が返ることがあります。
出力項目とデータ型を固定したJSONを使います。
{
"property_id": "20260629-001",
"property_name": "菊名駅7分 一棟アパート",
"price_million_yen": 3360,
"full_occupancy_annual_rent_million_yen": null,
"current_annual_rent_million_yen": null,
"published_gross_yield_percent": 12.21,
"calculated_gross_yield_percent": null,
"rent_basis": "不明",
"building_age_years": 42,
"structure": "木造",
"units": 8,
"source_date": "2026-06-29",
"source_url": "元データに保存されたURL",
"extraction_method": "Notion保存データ",
"needs_human_check": true,
"human_check_reasons": [
"現況年間賃料が不明",
"掲載利回りを再計算できない",
"融資期間が未確認"
]
}
この例の価格、掲載利回り、築年数、構造、戸数、調査日は、Hiro側の notion_search.json に保存されていた2026年6月29日の記録に基づきます。現在も販売中であることや、現在の条件が同じであることを示すデータではありません。
設計上のルールは次の4つです。
- 原本にない値は推測せず
nullにする - 掲載利回りと再計算した利回りを分ける
- 不明理由を配列で残す
- 物件IDまたは情報源URLで重複を検出する
もっともらしい推測値は、空欄より発見しにくいため危険です。
ステップ5:表記を正規化し、原文と変換履歴を残す
正規化するときは、次の4項目をセットで保存します。
| 保存項目 | 例 |
|---|---|
| 原文 | 3,360万円 |
| 正規化値 | 3360 |
| 単位 | 万円 |
| 変換メモ | カンマと「万円」を除去 |
築年月も同じです。
| 原文 | 正規化値 | 確認事項 |
|---|---|---|
| 昭和59年2月築 | 1984-02 | 元号変換を原本照合 |
| 築42年 | 取得日時点から逆算 | 築年月は確定できない |
| 築年不詳 | null | 仲介会社へ確認 |
「2/8戸空室」は、特定時点における戸数ベースの空室割合として25%です。
空室戸数 ÷ 総戸数 × 100
= 2 ÷ 8 × 100
= 25%
ただし、これは期間平均の空室率ではありません。取得日時点のスナップショットであり、賃料ベースの稼働率とも異なります。
変換できない「価格応相談」「賃料査定中」「築年不詳」は空欄にし、手動確認フラグを立てます。
ステップ6:計算式と警告条件を固定する
表面利回り
表面利回りは、次の式で計算します。
満室想定年間賃料 ÷ 物件価格 × 100
年間賃料480万円、物件価格6,000万円なら、表面利回りは8%です。
480 ÷ 6000 × 100 = 8
Googleスプレッドシートで、価格がD列、満室想定年間賃料がE列なら、次の式を使えます。
=IF(OR(D2="",E2="",D2<=0),"",ROUND(E2/D2*100,2))
掲載利回りがF列、再計算値がG列なら、差異警告は次のように設定できます。
=IF(OR(F2="",G2=""),"要確認",IF(ABS(F2-G2)>=0.1,"利回り差異","一致"))
0.1ポイントは動作確認用の例です。小数処理や入力精度に合わせて調整してください。
実質収支で確認する項目
表面利回りには、空室や運営費が反映されません。候補に残した物件は、少なくとも次の式でも確認します。
実効総収入
= 満室想定賃料
- 空室・滞納損失
+ その他収入
NOI(営業純利益)
= 実効総収入
- 管理費
- 修繕費
- 固定資産税など
- 保険料
- その他の運営費
ローン元利返済額はNOIの計算から分け、融資条件確定後にキャッシュフローを確認します。
自動表示する警告
次の条件に該当したら、比較順位を上げるのではなく「要確認」と表示します。
- 満室想定賃料と現況賃料の区別がない
- 掲載利回りを再計算できない
- 掲載利回りと再計算値が一致しない
- 情報源URLまたは取得日時がない
- 同じURLや物件IDがすでに登録されている
- OCR値なのに原本確認が済んでいない
- 戸数と空室戸数の整合が取れない
- 周辺募集賃料より想定賃料が高い
- 修繕履歴、接道、法令、融資条件が未確認
- 前回取得時から価格や利回りが変わった
ステップ7:保存・通知・修正ログを自動化する
比較表が自動更新されても、毎日人が開いて確認するなら作業は残ります。
次の条件をすべて満たした物件だけ通知します。
- 希望価格帯に入っている
- 情報源URLと取得日時がある
- 未検討ステータスである
- 自分で設定した一次選別条件を満たす
- 人間確認が必要な理由が明示されている
- 同じ物件を過去に通知していない、または条件が変わった
通知文には、判断に必要な情報をまとめます。
物件:Aハイツ
価格:6,000万円
掲載利回り:8.0%
再計算利回り:8.0%
未確認:現況賃料、修繕履歴、融資条件
次アクション:レントロールと修繕履歴を請求
情報源:URL
取得日時:2026-07-22 09:00
人間が修正した内容は、上書きだけで済ませず、履歴として残します。
物件ID:20260722-001
修正日時:2026-07-22 14:30
修正前:年間賃料500万円
修正後:満室想定年間賃料500万円、現況年間賃料は不明
理由:原本に「満室想定」と記載
次回ルール:「満室想定」を検出した値は現況年間賃料へ入れない
確認者:Hiro
自動処理には、同じ物件を二重登録しない仕組みも必要です。物件IDまたは「情報源URL+価格+取得日」などの組み合わせで重複を確認してください。
Google Apps Scriptを使う場合は、サービスごとの割当や実行時間制限があります。上限到達時は例外で処理が停止するため、途中再開位置と失敗通知を保存します。
参考:Google Apps Script「Quotas for Google Services」
Hiroの収益物件7件から分かった比較表の注意点
Hiro側の notion_search.json では、収益物件に該当する記録を7件確認できました。全件の調査日は2026年6月29日です。
たとえば、次の戸建記録があります。
| 項目 | 保存値 |
|---|---|
| 価格 | 480万円 |
| 表面利回り | 17.5% |
| 築年数 | 45年 |
| 戸数 | 1戸 |
| 管理データ上の残存年数 | 2年 |
| 調査日 | 2026年6月29日 |
この数字だけを見ると、17.5%という表面利回りが目立ちます。
しかし、年間賃料、現況、修繕費、固定資産税、保険料、融資条件、出口価格が未確認なら、手残りは判断できません。1戸物件は、退去すると戸数ベースの稼働率が100%から0%になる点にも注意が必要です。
また、「残存年数」はHiroの管理データに保存されたメモであり、金融機関の融資承認や税務上の耐用年数を証明するものではありません。
高利回り順に並べるだけではなく、隣に次の列を置く必要があります。
- 現況年間賃料
- 賃料確認日
- 空室戸数
- 修繕履歴
- 運営費
- 融資相談結果
- 原本確認状況
専門家目線で確認する5つのポイント
1. 税務、融資、建物状態を同じ「残存年数」で扱わない
法定耐用年数は、減価償却費を期間配分するための税務上の基準です。金融機関が認める融資期間や、建物が物理的に使用できる年数と同じではありません。
国税庁も、法定耐用年数を減価償却資産の取得費を各年へ配分する基準として説明しています。また、中古資産には使用可能期間の見積りや簡便法に関する別の取り扱いがあります。
参考:国税庁「減価償却のあらまし」/国税庁「中古資産の耐用年数」
比較表では次の列を分けます。
- 築年月
- 築年数
- 税務確認メモ
- 金融機関への確認結果
- 建物調査・修繕メモ
2. 掲載値と計算値を分ける
ポータルや販売図面に書かれた利回りを、そのまま計算結果として保存してはいけません。
次の3列に分けます。
- 掲載表面利回り
- 再計算表面利回り
- 差異
差異が出たら、価格変更、賃料変更、小数処理、共益費の扱いを原本で確認します。
3. 抽出信頼度を「入力元」と「項目」で管理する
| 信頼度 | 入力例 | 対応 |
|---|---|---|
| 高 | 列が固定されたCSV | 型・範囲を検証 |
| 中 | 文字を選択できるPDF | 金額、面積、築年月を照合 |
| 低 | 画像PDFのOCR | 判断前に全必須項目を確認 |
| 不明 | 原本に記載なし | 推測せず質問リストへ追加 |
同じPDFでも、物件名は正しく読めている一方、価格の小数点だけ誤読している可能性があります。そのため、信頼度は資料全体だけでなく、重要項目ごとに持つ方が安全です。
4. 自動判定から外す項目を決める
次の項目は、比較表で確認漏れを警告できますが、AIだけで確定させないでください。
- 再建築可否
- 接道条件
- 境界
- 違法建築・既存不適格
- 契約不適合責任
- 権利関係
- 税務上の取り扱い
- 融資可否
- 建物の安全性
5. 情報の鮮度を表示する
価格、募集状況、賃料、空室、融資条件は変わります。
最低でも次の3つの日付を分けます。
- 情報を取得した日時
- 掲載元の更新日
- 人間が原本確認した日時
更新日がないデータを「最新」と表示しないことも、自動化の品質管理です。
収益物件比較表のよくある失敗と対策
PDFごとに読み取り位置が変わる
原因: 販売会社ごとにレイアウトが異なる。
対策: A社PDF、B社PDF、メール本文のように入力元別の抽出処理を作り、最後に共通JSONへ変換する。
確認方法: 入力元ごとに正解データを5件程度用意し、価格、賃料、戸数、築年月の一致件数を記録する。
満室想定賃料と現況賃料を混同する
原因: 「年間賃料」という1列に両方を保存している。
対策: 満室想定、現況、賃料根拠、確認日の4列へ分ける。
停止条件: 賃料根拠が不明なら、実質収支の計算へ進めない。
高利回り物件ばかり通知される
原因: 通知条件が表面利回りだけになっている。
対策: URL、取得日時、現況賃料、築年月、修繕履歴、空室、融資確認状況を組み合わせる。
特定の利回り基準は、エリア、構造、資金、融資条件によって変わります。本記事では一律の基準値を推奨しません。
比較表が巨大化して見なくなる
原因: 初期選別、詳細調査、エラー履歴を同じ画面へ詰め込んでいる。
対策: 次の3シートに分ける。
- 初期比較表
- 詳細調査表
- 修正・実行エラーログ
自動化が止まっても気づかない
原因: 最終結果しか保存していない。
対策: 実行日時、入力件数、成功件数、失敗件数、通知件数、失敗工程、エラー理由を毎回記録する。
再実行で同じ物件が重複する
原因: 途中失敗後に最初から再実行している。
対策: 物件IDを固定し、「既存なら更新、未登録なら追加」という処理にする。
自動化の成果を測るKPI
| KPI | 計算方法 | 悪化したときの改善 |
|---|---|---|
| 物件抽出成功率 | 成功物件数 ÷ 入力物件数 | 入力元別テンプレートを修正 |
| 必須項目充足率 | 入力済み必須項目数 ÷ 全必須項目数 | 資料請求項目を見直す |
| 項目正解率 | 原本一致項目数 ÷ 確認項目数 | 誤読パターンをルール化 |
| 手動修正率 | 修正項目数 ÷ 抽出項目数 | 抽出指示と正規化を改善 |
| 重複登録率 | 重複件数 ÷ 登録件数 | 物件IDの生成方法を修正 |
| URL欠損率 | URLなし件数 ÷ 登録件数 | URLを保存必須にする |
| 賃料根拠不明率 | 根拠不明件数 ÷ 登録件数 | 想定と現況を分離する |
| 無人完了率 | 手動介入なし完了件数 ÷ 入力件数 | 例外処理を追加する |
| 初回確認時間 | 登録から人間確認までの時間 | 通知条件と通知先を見直す |
| 見送り理由再利用率 | ルール化した理由数 ÷ 全見送り理由数 | 理由の分類名を統一する |
最初の目標値は、現在の手作業を1週間測ってから設定します。
たとえば次の数値を記録してください。
- 1物件の転記にかかる時間
- 1週間の入力物件数
- 転記ミスの件数
- 原本確認に戻った回数
- 通知後に実際に詳細調査した件数
実測前に「90%自動化」のような目標を置いても、改善効果を正しく評価できません。
上の画像は比較表の構成を示すイメージであり、Hiroの実際の管理画面を撮影したスクリーンショットではありません。運用実績を公開する場合は、個人情報や物件固有情報を伏せたうえで、実際の比較表、実行ログ、修正履歴を提示する方が強い検証材料になります。
自動化しない方がよいケースと限界
月に1件程度しか比較せず、入力元も毎回同じなら、手入力の方が早い場合があります。
次の式で導入効果を確認してください。
月間削減時間
= 1件あたりの削減時間
× 月間物件数
- 月間保守時間
この値がほとんど増えないなら、大規模なAI連携は不要です。入力規則と計算式を設定したスプレッドシートだけで十分かもしれません。
比較表を自動作成できても、次の判断は残ります。
- 現地の騒音、臭気、傾き、管理状態
- 接道、境界、再建築、既存不適格
- 入居者状況、滞納、修繕履歴
- 融資の可否と返済条件
- 契約書、重要事項説明、税務
- 将来の賃貸需要と出口価格
完全自動化を目指せるのは、情報収集、整形、計算、一次選別、通知、履歴保存までです。
買付、融資、契約まで無人化すると、誤情報による損失や法的問題につながる可能性があります。また、自動化しても収益は保証されません。
一般的な比較表との違い
一般的な収益物件比較表は、列名と表面利回りの計算だけで終わることがあります。
この記事の設計では、その先まで扱っています。
- 掲載値と再計算値を分離
- 原文、正規化値、変換理由を保存
- 満室想定賃料と現況賃料を分離
- 入力元と重要項目ごとの信頼度を記録
- 成功件数だけでなく、失敗工程も保存
- 重複を防ぎ、安全に再実行
- 人間の修正を次回ルールへ反映
- 税務、融資、建物状態の年数を分離
- 投資判断まで自動化できない限界を明示
Hiroの実行ログ55件と失敗記録、収益物件7件の保存データを踏まえ、止まること、誤読すること、情報が古くなることを前提にしている点が差別化ポイントです。
今日30分で始めるチェックリスト
まず、Googleスプレッドシートを1枚作り、収益物件を3件だけ登録してください。
最初に作る列は次の12項目です。
物件ID
物件名
価格
満室想定年間賃料
現況年間賃料
掲載表面利回り
再計算表面利回り
築年月
構造
情報源URL
取得日時
次アクション
その後、次の順番で確認します。
- 同じ単位で価格を入力できた
- 満室想定と現況を分けた
- 表面利回りを再計算した
- 掲載値との差異を確認した
- URLと取得日時を保存した
- 不明値を推測せず空欄にした
- 次に確認する資料を1つ書いた
- 入力中に迷った項目を記録した
入力中に迷った項目が、次に自動化または入力規則化すべき処理です。
まとめ:比較表を使うほど精度が上がる仕組みにする
収益物件の比較表を自動作成するなら、最初から複雑なAIシステムを作る必要はありません。
まずCSV3件を使い、次の順番で進めます。
- 比較表の目的を「確認順」にする
- 必須列を固定する
- 入力元をCSVに絞る
- AI出力をJSONへ固定する
- 原文と正規化値を保存する
- 計算式と警告条件を決める
- 通知、修正履歴、エラーログを残す
比較表の価値は、物件数が増えることだけではありません。
「どの項目で間違えたか」「なぜ見送ったか」「何を確認したら判断が変わったか」が蓄積されるほど、次の調査が速くなります。
ただし、自動化する範囲は情報整理と一次選別までです。高額な投資、融資、契約、税務、法務は、原本、現地、専門家による確認を通してください。
時間を切り売りしない収益構造を作りたい方へ
毎日Excelを開き、同じ情報をコピーし、同じ計算を繰り返しているなら、まずは3件の比較表から始めてください。
その先で必要になるのが、情報収集、AI処理、保存、品質確認、通知、集客、販売を接続する運用設計です。
Hiroの実践マニュアルでは、AI、Notion、スプレッドシート、ブログ、商品販売、アフィリエイトを接続し、自動化した作業を継続的な資産へ変える手順を公開しています。