// Follow-up Due Today
// SYNCING...
[ NO SIGNAL ]
No session loaded.
Go to Import → paste Gemini JSON → hit Load. Takes 10 seconds.
1Run this in Gemini inside your Google Sheet
Copy the prompt → paste into Gemini sidebar in your daily leads sheet → run at end of every session, regardless of which sheet you used.
gemini_prompt.txt
Analyze the call data in this sheet and return ONLY a valid JSON object as your main response. No explanation, no markdown, no code fences around the JSON. Just raw JSON starting with { and ending with }. Use exactly this structure: { "date": "YYYY-MM-DD", "calls_made": number, "not_called": number, "showed_interest": number, "follow_up": number, "not_interested": number, "no_pickup": number, "left_vm": number, "disconnected": number, "closed": number, "interest_rate_pct": number, "pickup_rate_pct": number, "trades": [ { "name": "trade name", "called": number, "interested": number, "follow_up": number, "left_vm": number, "not_interested": number, "no_pickup": number } ], "objections": [ { "text": "short description of objection", "count": number, "example": "one real quote or paraphrase from notes" } ], "followups": [ { "business": "business name", "trade": "trade", "phone": "phone or empty string", "status": "Showed Intrest or Follow Up", "heat": "hot or warm or cold", "genuine_interest": true or false, "license_age_days": number or null, "timestamp": "value from column K for this row, exact string, or empty string if blank", "follow_up_date": "YYYY-MM-DD if a specific calendar date can be confidently determined from the notes, otherwise empty string", "follow_up_time": "HH:MM in 24hr format if a specific time can be confidently determined, otherwise empty string", "prep_brief": "1-2 sentence actionable insight for the next call with this lead, based on their notes — read their psychology and suggest the angle to close the sale while staying on-brand. Empty string if there isn't enough in the notes to base this on." } ], "priorities": ["Priority 1 as a plain sentence", "Priority 2 as a plain sentence", "Priority 3 as a plain sentence"], "session_notes": "2-3 sentence plain English summary of today" } Rules: - calls_made = rows where Call Status is NOT "Not Called" - not_called = rows where Call Status is "Not Called" - interest_rate_pct = showed_interest / calls_made * 100, rounded to 1 decimal - pickup_rate_pct = (showed_interest + follow_up + not_interested + left_vm + closed) / calls_made * 100, rounded to 1 decimal - followups must include ONLY rows with status "Showed Intrest" or "Follow Up" — do NOT include "Left VM" rows in this array - For rows with status "Follow Up": read the notes carefully and set "genuine_interest" to true if the person showed real curiosity, asked questions, or engaged meaningfully, even if they asked to be called back. Set it to false if it was a non-committal brush-off like "call me later", "not now", "too busy." Use your best judgment — this is a qualitative read. - license_age_days: Column H contains the license issue date. Calculate the number of days between the license issue date and today's date (the date at the top of this sheet or column K timestamps). Include this as an integer on each followup row. If Column H is blank or unparseable, use null. - timestamp field = copy the exact value from column K for that row with no reformatting. If column K is blank for that row, use an empty string. Do not guess or invent a timestamp. - follow_up_date and follow_up_time: read the Notes column for that row. If the contractor mentioned a specific day/time to call back, convert it to an exact calendar date using today's date as the reference point. If the note is vague or doesn't mention a follow-up time, leave both fields as empty strings. NEVER guess a date you are not confident about. - prep_brief: base this only on what's actually in the notes for that lead. Focus on their stated objections, hesitations, or interest signals, and suggest one concrete angle for the next conversation. Keep it short and practical, not generic sales advice. - heat: "hot" = Showed Intrest, "warm" = Follow Up with genuine_interest true, "cold" = Follow Up with genuine_interest false - Objections come ONLY from Notes of Not Interested rows — group similar reasons, and where the note explains WHY they dropped off, preserve that reasoning in the example field - Priorities must be specific and actionable, not generic - All numbers integers except the two _pct fields - Return the JSON object as described above. AFTER the JSON, on a new line, if any row had a follow-up mention that was too ambiguous to confidently convert to a date (e.g. "call back soon", "maybe next week"), add one line starting with "NOTE:" describing which leads had unclear follow-up timing so the user can manually check. If nothing was ambiguous, omit this line entirely.
2Paste JSON into the box above
Copy everything Gemini returns above the "NOTE:" line if present, including the outer braces. Paste into the box at the top of this page → Load Session.
3Check Home daily, Deep Dive weekly
Home gives you the daily read. Deep Dive is where patterns show up — check it once a week, not every day.
Upcoming follow-ups
Interest rate over time
// AWAITING DATA
All-time totals
// Session log
Pickup rate by hour of day
Pickup rate by day of week
Interest rate by license age at time of call
How many days after getting licensed did you call them, and did it matter?
Objections — all-time
Export for Claude
Pulls your aggregated history — totals, trends, time patterns, objections, and your starred session notes — into one clean text block. Copy it and paste straight into Claude for coaching.