| Date | Time | CSR | Location | Outcome | Opportunity | Notes | Next Contact | Source |
|---|
🔀 Combine Call Log Files
Pick any two call log CSVs to merge into one deduplicated living log. Doesn't affect your current session.
☁ Cloud Sync Setup
Connect to Google Sheets so every logged call is automatically saved to the cloud — accessible by all CSRs, no file sharing needed.
Upload your reports below to get started. Each file unlocks a different section of the tool.
Dig into a specific location's history. Search by name, upload an invoice report for trend analysis, and see recurring issues pulled from tech notes.
Everything you need to know — how the list is built, what every section means, how to log calls, and how to use each tab. Read this once and the rest of the tool is self-explanatory.
Pull these three reports from ServiceTitan each morning and upload them. The tool works with just the Jobs report, but the LTV and Invoice reports unlock most of the useful features.
| 1. Open the tool | Call history from the last 90 days loads automatically in the background. Prior call outcomes will appear on rows once loaded — no action needed. |
| 2. Pull ServiceTitan reports | Run all three reports above and export as CSV. The Jobs report is required. LTV and Invoice reports are optional but unlock most of the value. |
| 3. Upload the files | Click the upload buttons in the toolbar — Jobs, then LTV, then Invoice. Each file unlocks additional sections and data. |
| 4. Set the date & run | Confirm the Work Done On date (defaults to yesterday) and click Generate Call List. The list builds instantly. |
| 5. Work the list | Start at Tier 1 and work down. Click 📞 Log Call on each row after you dial. Entries sync to the shared Google Sheet automatically — nothing to save. |
The more reports you upload, the more the tool knows. A Jobs-only run gives you a basic call list. Adding LTV adds value badges, at-risk accounts, and overdue recurring. Adding Invoice adds Best Angle, callback history, and the Research tab. All three together is the full picture.
The tool processes your Jobs report in six steps to build the final list:
| 1 | Filter to target date | All jobs completed on the selected Work Done On date are pulled from the full 90-day report. |
| 2 | Remove excluded job types | Job types like "Estimate," "Sales Call," and "Internal" are excluded by default — those are handled separately. You can customize which types appear using the Job Type Filter. |
| 3 | One job per location | If a location had multiple jobs on the same day, only the highest-revenue job is kept. This prevents the same customer from appearing twice. |
| 4 | Cooldown check | If the same location had a prior job within the cooldown window (default: 3 days), it is moved to Skipped. You still get a Log Call button there in case you need to reach out anyway. |
| 5 | Assign tier | Based on the location's history, each job is sorted into Tier 1 (no prior activity in 90 days), Tier 2 (prior job 7+ days ago), or Tier 3 (prior job 3–6 days ago). $0 jobs land in their own section. |
| 6 | Enrich with LTV & Invoice data | If LTV and Invoice files are loaded, each row is enriched with lifetime revenue badges, recurring plan status, callback flags, Best Angle, and open estimates. The list is sorted: tier ascending, revenue descending. |
No prior job at this location in the 90-day window — either a new customer or one who hasn't called in a long time. These are your highest-leverage calls because the relationship habit hasn't formed yet. Confirm satisfaction, then follow your Best Angle. Tone: professional and warm.
Returning customer with a meaningful gap since their last visit (7+ days). They already trust us — the goal is to deepen that and build a consistent relationship. Follow your Best Angle. Tone: familiar but professional.
Active, high-frequency account — we've been out recently (3–6 days ago). These calls are short and warm: more check-in than pitch. Best Angle still applies — cross-sell and property walk opportunities exist even here. Tone: casual and direct.
Jobs with a $0 invoice and no open estimate attached. These are typically warranty returns, callbacks on prior work, or no-charge visits. Even $0 jobs are a customer touchpoint — a quick call confirms the issue was resolved and keeps the relationship warm. If Hide $0 with Estimates is on, $0 jobs that do have an estimate move into the main list instead.
Locations on a recurring service plan whose next scheduled visit is within 30 days or already past due. These customers are already committed — reaching out before they forget prevents lost visits and surfaces upsell opportunities during the scheduling call. A Log Call button is available on each row.
Locations that appeared in the job report but were filtered out. Reasons include: within cooldown window (visited too recently), below the minimum job total, excluded job type, or customer type mismatch. The section is collapsed by default. A Log Call button is still available on each row if you need to reach out despite the filter.
Scans every job in the full 90-day report (including estimate and sales-call job types normally excluded from the main list) and surfaces any job where the invoice was $0 and no estimate document was created in ServiceTitan. This could mean a tech assessed a leak, an HVAC issue, or any other problem — and left without sending an estimate. Sorted by most recent first. This section is for ops review and is separate from the day's call list.
The Best Angle column reads all three uploaded reports and assigns every row a single call objective. Instead of interpreting badges yourself, it tells you exactly what the call is for before you dial. Hover the badge to see the specific reason it triggered and a suggested opener line.
| 🏢 Property Walk | 75+ unit property with no agreement, $15k+ lifetime with no plan, or invoice history spanning both plumbing and HVAC. Book the estimator visit — the walk closes at a far higher rate than a phone pitch. |
| 📋 Pitch Agreement | Repeat customer with no recurring plan, or the same issue type appearing 2+ times in invoice history. The pitch is data-driven — use the specific reason in the badge tooltip. |
| 🔄 Cross-sell | Already on a plan for one trade. The maintenance objection is already handled — just ask about the other side. Hover for the specific trade and opener. Easiest close on the list. |
| ⚠️ Satisfaction First | Prior callbacks on record. Lead with genuine care. Do not pitch until satisfaction is fully confirmed — if there's still an open issue, that's the only objective today. |
| 🤝 Check In | No strong signal yet. New or limited history — listen, plant the seed, leave a great impression. More data will exist by the next call. |
When LTV and Invoice files are loaded, each location row shows contextual badges. Here's what each one means:
| 💰 $50k+ lifetime | Highest-value account. Prioritize, take notes, loop in an Account Manager if present. |
| 💵 $5k+ lifetime | Established customer worth nurturing. Lifetime revenue $5k–$50k. |
| 📅 Recurring | Recurring services on account. Only Active if a future Next RS Date exists. If no future date, the agreement may have lapsed — check the Research tab. |
| 🔁 Cross-sell [Trade] | On a plan for one trade but not the other. Hover for the specific trade to pitch and a suggested opener. They already believe in maintenance — this is a warm ask. |
| 📋 Open estimates | One or more unaccepted estimates on file. Recent estimates warrant follow-up; older ones are handled by the estimates team. Use the filter to hide these for a cleaner list. |
| 👤 Acct Manager | An Account Manager is assigned. Loop them in on any opportunity — don't send an estimator without a heads-up to the AM first. |
| ✨ New Customer | Fewer than 2 completed jobs in LTV. First impression is still being formed — prioritize satisfaction and relationship-building over pitching. |
The Research tab lets you look up any location by name before or during a call. Type a location name in the search box and it pulls everything on file: total spend, job history, issue trends, callback flags, recurring plan status, and a breakdown of every invoice.
When to use it: Before you dial a high-value account, when a customer mentions a prior issue, or any time you want more context than the call list row provides. The 🔍 button on every row in the call list opens the Research tab pre-loaded with that location.
What you'll see:
A separate call list that runs independently of the daily jobs report. Where the Call List tab is reactive — built from yesterday's completed jobs — the Proactive tab is calendar-driven. It pulls from the LTV report and ranks customers by how ready they are for a second-money conversation.
Who appears here: Locations from the LTV file that haven't had a job in the last 30 days and aren't already on today's reactive list. The goal is service agreements and property walks — not following up on service calls.
| Score | Angle | Triggers |
|---|---|---|
| 🏢 5 | Property Walk | 75+ unit property with no agreement, both trades in invoice history with 3+ jobs and no plan, or $15k+ lifetime with no plan. |
| 📋 4 | Pitch Agreement | Same issue 2+ times in invoice history, 3+ completed jobs, or $5k+ lifetime revenue — all with no current plan. |
| 🔄 3 | Cross-sell | On a plan for one trade but invoice history shows only plumbing or only HVAC. Ask about the other side. |
| 🤝 2 | Warm Check-in | Last service 30–365 days ago, no stronger signal. Good relationship touch — listen for openings. |
| 💤 1 | Reactivate | More than 12 months since last service. Low-pressure "just checking in" call. |
Filters: Use the angle dropdown to focus on one type — e.g. Property Walk only for the estimator pipeline. Use the time gap filter to target a specific window.
Every call is logged to a shared Google Sheet in real time. All CSRs write to the same sheet — no files to merge, no end-of-day exports required.
Logging a call: Click 📞 Log Call on any row — available on every section including Skipped, Overdue, and the Research tab. The modal captures outcome, opportunity, notes, and an optional next contact date. The button updates color immediately after saving:
Follow-up dates: Setting a Next Contact date on a log entry makes that account reappear at the top of the Call List tab on that date as a Follow-Up reminder.
View Log: Click 👁 View Log in the toolbar to browse all logged calls — filterable by today, this week, or all time, and searchable by location, CSR, or notes.
Manager view: The linked Google Sheet shows all calls from all CSRs in real time, sortable by date, outcome, CSR, or location.
| Work Done On | Which day's completed jobs to pull. Defaults to yesterday. Change this to run a report for any prior date. |
| Cooldown (days) | How recently a prior job must have been completed to skip a location. Default 3 days. Increase to cast a wider net; decrease for high-volume operations that track every touchpoint. |
| Min Job Total ($) | Filters out jobs below this dollar amount. Use to focus on meaningful revenue jobs and skip small calls that don't warrant follow-up. |
| Hide $0 with Estimates | When on, $0 jobs with an open estimate move into the main call list — the estimate is the opportunity. When off, they stay in the $0 section. |
| Hide Open Estimates | When on, locations with pending open estimates in the LTV file are moved to Skipped — the estimates team handles those. |
| Customer Type | Filter to Residential or Commercial only. Leave blank to show all. |
| Job Type Filter | Expand to check or uncheck specific job types. "Reset to Defaults" re-applies standard auto-exclusions (estimate, sales call, internal, warranty, etc.). |
Use these as a starting point — the best calls are conversations, not recitations. Pull up the customer in ServiceTitan before you dial so you know their history and can make it personal.
Customers not on today's call list — ranked by second money potential. Requires LTV report.
📞 Log This Call
—