/* ============================================================
KOI SDR Talk Path Companion — page JavaScript
v1.2 — 2026-08-21
Install via WPCode: Code Snippets → + Add Snippet →
"Add Your Custom Code (New Snippet)" → Code Type: JavaScript
→ paste this WHOLE file → Insertion: Auto Insert, Location:
Site Wide Footer → Save & Activate.
Safe site-wide: it exits instantly on any page without the
companion's #tabs element.
============================================================ */
(function(){
"use strict";
function initSDR(){
/* Run-once + DOM-present guard: survives optimizers that move, defer,
or duplicate this script, and Elementor rendering the widget twice. */
var __root = document.getElementById('tabs');
if(!__root || __root.getAttribute('data-sdr-init')) return;
__root.setAttribute('data-sdr-init','1');
/* ------------------------------------------------------------------ DATA */
const TABS = [
{key:"paths", label:"Talk Paths", view:"v-paths"},
{key:"obj", label:"Objections", view:"v-obj"},
{key:"filler", label:"Filler Bank", view:"v-filler"},
{key:"transfer", label:"Transfer Desk",view:"v-transfer"},
{key:"vm", label:"Voicemail", view:"v-vm"},
{key:"plan", label:"Game Plan", view:"v-plan"},
{key:"rules", label:"Ground Rules", view:"v-rules"},
];
const ROUTECOLOR = {Homie:"var(--c-homie)", Hunter:"var(--c-hunter)", Either:"var(--c-either)", Commercial:"var(--c-comm)"};
const PATHS = [
{
code:"P1", spine:"A", route:"Homie", name:"Auto client, no property",
trigger:"Household has vehicles with us and no home, condo, or renters policy on file.",
quick:"The largest recoverable premium pool in the book. Auto households closed without a property cross is where the money leaks.",
beats:[
{n:"Identify", say:"Hi [Name], this is [You] over at Kasey Osman Insurance — we handle your auto. Quick call, nothing's wrong."},
{n:"Mini-review", say:"I've got you with us since [year] — thank you for that, we appreciate it. Let me make sure what we have on file is still current. I show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — still where you're at? ... Is (321) 725-8022 the best number, and is KaseyOsman1@allstate.com still good? ... And anything change on the work side?"},
{n:"Assumptive cross", say:"You know, while I was looking over everything, I noticed we don't have your home with us. Let's go ahead and take a look at that and see if we can help — are you owning or renting right now?", branch:["Owns, insured elsewhere: When's the last time anybody actually looked at it line by line?", "Owns, unhappy with the rate: Then you're exactly who I'd want in front of our property specialist.", "Rents: Switch to Path P3 — renters is the fastest cross in the book.", "A new address came up in the review: That's the one to jump on. A move means the property was rewritten somewhere."]},
{n:"Gap statement", say:"Almost everybody in [city/county] has taken a renewal increase the last two cycles, and a lot of those policies quietly got re-rated with a higher hurricane deductible. We're independent on the home side — we've got thirteen different carriers we can shop you across, so you're not stuck with one company's rate."},
{n:"Transfer ask", say:"Let me put you with [Agent], our property specialist. [He's/She's] at the desk right now, and [he'll/she'll] ask about roof age and wind mitigation and tell you whether we can beat what you're paying. Hold on one second for me."}
],
tip:"Notice the cross is a statement, not a request. You are not asking permission to look — you are telling them you noticed and moving. “Let's go ahead and take a look” assumes the yes.",
watch:"Don't get pulled into roof-age or carrier-eligibility questions. “That's the first thing [he'll/she'll] ask you” and move to the handoff.",
filler:[{g:"The property", qs:["Is it a single family, a condo, or a townhouse?", "Roughly what year was it built?", "About how many square feet?", "Is it your primary residence, a second home, or do you rent it out?"]}, {g:"The roof", qs:["How old is the roof — or do you know the year it was last replaced?", "Do you know what it is? Shingle, tile, or metal?", "Has anyone done a wind mitigation inspection on it?"]}, {g:"Updates and features", qs:["Any updates to the electrical, plumbing, or HVAC, and roughly when?", "Is there a pool? Is it fenced?", "Any trampoline on the property?", "Any dogs, and what breed?"]}, {g:"What they have now", qs:["Who is the home with currently?", "When does it renew?", "Do you know roughly what it is insured for?", "Any claims on the home in the last five years?"]}, {g:"The mortgage", qs:["Is there a mortgage on it, and who is the lender?", "Is the insurance escrowed, or do you pay it direct?"]}],
kw:"auto client, no property the largest recoverable premium pool in the book. auto households closed without a property cross is where the money leaks. household has vehicles with us and no home, condo, or renters policy on file. auto only monoline home cross property homie roof wind mitigation hurricane deductible thirteen carriers assumptive hi Kasey Osman, this is [you] over at kasey osman insurance — we handle your auto. quick call, nothing's wrong. i've got you with us since [year] — thank you for that, we appreciate it. let me make sure what we have on file is still current. i show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — still where you're at? ... is (321) 725-8022 the best number, and is KaseyOsman1@allstate.com still good? ... and anything change on the work side? you know, while i was looking over everything, i noticed we don't have your home with us. let's go ahead and take a look at that and see if we can help — are you owning or renting right now? almost everybody in [city/county] has taken a renewal increase the last two cycles, and a lot of those policies quietly got re-rated with a higher hurricane deductible. we're independent on the home side — we've got thirteen different carriers we can shop you across, so you're not stuck with one company's rate. let me put you with [agent], our property specialist. [he's/she's] at the desk right now, and [he'll/she'll] ask about roof age and wind mitigation and tell you whether we can beat what you're paying. hold on one second for me. is it a single family, a condo, or a townhouse? roughly what year was it built? about how many square feet? is it your primary residence, a second home, or do you rent it out? how old is the roof — or do you know the year it was last replaced? do you know what it is? shingle, tile, or metal? has anyone done a wind mitigation inspection on it? any updates to the electrical, plumbing, or hvac, and roughly when? is there a pool? is it fenced? any trampoline on the property? any dogs, and what breed? who is the home with currently? when does it renew? do you know roughly what it is insured for? any claims on the home in the last five years? is there a mortgage on it, and who is the lender? is the insurance escrowed, or do you pay it direct?"
},
{
code:"P2", spine:"A", route:"Hunter", name:"Home client, no auto",
trigger:"Household has a property policy with us and the vehicles are somewhere else.",
quick:"Lead with the discount they are currently not getting. Frame it as a loss, not a pitch.",
beats:[
{n:"Identify", say:"Hi [Name], [You] with Kasey Osman Insurance — we've got your home covered."},
{n:"Mini-review", say:"You've been with us since [year] — thank you, we appreciate the business. Let me confirm a couple of things. I show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — correct? ... Best number still (321) 725-8022, and KaseyOsman1@allstate.com still the right email? ... And who's driving in the household these days?"},
{n:"Assumptive cross", say:"You know, while I was looking over everything, I noticed we don't have your auto with us. Let's go ahead and take a look at that and see if we can help. What vehicles do you drive?", branch:["Names the vehicles: Perfect — that's exactly what I needed. Let me get you over to our auto specialist.", "“Who's it with now?” asked back: We'd shop it — that's the point. Who are you with currently, and how long has it been?", "Three-plus years with a carrier: That's usually right where the loyalty penalty kicks in — carriers rate new business sharper than they rate renewals.", "“I'm happy with them”: Good — that's what I want to hear. This isn't a switch conversation, it only takes a few minutes."]},
{n:"Gap statement", say:"You're currently missing the multi-policy discount, and it's usually the biggest one on the board. Bundled households also hold their rate better over time — that's the part most people don't see until year three."},
{n:"Transfer ask", say:"Let me put you with [Agent], our auto specialist — [he/she] can run it against the home while you're on the phone. Give me one second."}
],
tip:"“Who's driving in the household these days?” in the review is doing double duty — it's verification and it's your auto opener. Ask it there and the cross writes itself.",
watch:"Never promise the bundle will be cheaper. Say it “usually stacks” and let the agent own the number.",
filler:[{g:"The vehicles", qs:["What is the year, make, and model on each vehicle?", "Are they owned outright, financed, or leased?", "Are they all garaged at 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901?"]}, {g:"The drivers", qs:["Who else drives in the household?", "What is their relationship to you?", "Anybody under twenty-five?", "Anyone in the house with a permit, or about to get licensed?"]}, {g:"How they use them", qs:["Roughly how far is the commute each way?", "About how many miles a year would you say?", "Is any of it used for work, rideshare, or delivery?"]}, {g:"What they have now", qs:["Who is the auto with, and how long have you been with them?", "When does it renew?", "Do you know your current limits — or is there a declarations page you could pull up?", "Any gap in coverage in the last six months?"]}, {g:"Driving history", qs:["Any accidents or tickets in the last three to five years?", "Anybody in the household with a suspension or a major violation?"]}],
kw:"home client, no auto lead with the discount they are currently not getting. frame it as a loss, not a pitch. household has a property policy with us and the vehicles are somewhere else. home only monoline auto cross hunter bundle multipolicy discount loyalty penalty vehicles drivers assumptive hi Kasey Osman, [you] with kasey osman insurance — we've got your home covered. you've been with us since [year] — thank you, we appreciate the business. let me confirm a couple of things. i show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — correct? ... best number still (321) 725-8022, and KaseyOsman1@allstate.com still the right email? ... and who's driving in the household these days? you know, while i was looking over everything, i noticed we don't have your auto with us. let's go ahead and take a look at that and see if we can help. what vehicles do you drive? you're currently missing the multi-policy discount, and it's usually the biggest one on the board. bundled households also hold their rate better over time — that's the part most people don't see until year three. let me put you with [agent], our auto specialist — [he/she] can run it against the home while you're on the phone. give me one second. what is the year, make, and model on each vehicle? are they owned outright, financed, or leased? are they all garaged at 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901? who else drives in the household? what is their relationship to you? anybody under twenty-five? anyone in the house with a permit, or about to get licensed? roughly how far is the commute each way? about how many miles a year would you say? is any of it used for work, rideshare, or delivery? who is the auto with, and how long have you been with them? when does it renew? do you know your current limits — or is there a declarations page you could pull up? any gap in coverage in the last six months? any accidents or tickets in the last three to five years? anybody in the household with a suspension or a major violation?"
},
{
code:"P3", spine:"A", route:"Hunter", name:"The renter",
trigger:"Client says they rent, or the address is a known rental. Applies to any household.",
quick:"Fastest cross in the book. Low objection, low price, and it drops the auto rate.",
beats:[
{n:"Identify", say:"Hi [Name], [You] at Kasey Osman Insurance — quick one for you."},
{n:"Mini-review", say:"Let me make sure we're current first — I show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901, is that still where you're at? ... And (321) 725-8022 and KaseyOsman1@allstate.com still good? ... Thanks, that's set."},
{n:"Assumptive cross", say:"While I was in there, I noticed there's no renters policy on the household. Let's go ahead and get that looked at — has anyone walked you through what the landlord's policy actually covers?"},
{n:"Gap statement", say:"Most people skip renters because they assume the landlord's insurance covers their stuff, and it doesn't — that covers the building. Renters runs around fifteen dollars a month, and it drops the auto rate enough that it very often pays for itself."},
{n:"Transfer ask", say:"Let me get you with [Agent], our auto specialist — it only takes a few minutes. One second."}
],
tip:"Renters is need-created, not asset-dependent. The client doesn't know they need it until you say the landlord line. Say the landlord line.",
watch:"This path usually fires mid-call off P1 — if you already ran the review at the top, don't run it twice. And don't oversell: fifteen dollars a month and “it pays for itself” is the whole pitch.",
filler:[{g:"The unit", qs:["Is it an apartment, a house, or a condo?", "Anyone else on the lease with you?", "When does the lease renew?"]}, {g:"Their belongings", qs:["If you had to replace everything in there tomorrow, are we closer to twenty thousand or fifty?", "Anything high value — jewellery, instruments, camera gear, bikes?"]}, {g:"Requirements and features", qs:["Does the lease require a specific liability amount?", "Does the building have an alarm or sprinklers?", "Any pets, and what breed?"]}],
kw:"the renter fastest cross in the book. low objection, low price, and it drops the auto rate. client says they rent, or the address is a known rental. applies to any household. renters tenant landlord apartment rental hunter fifteen dollars need created hi Kasey Osman, [you] at kasey osman insurance — quick one for you. let me make sure we're current first — i show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901, is that still where you're at? ... and (321) 725-8022 and KaseyOsman1@allstate.com still good? ... thanks, that's set. while i was in there, i noticed there's no renters policy on the household. let's go ahead and get that looked at — has anyone walked you through what the landlord's policy actually covers? most people skip renters because they assume the landlord's insurance covers their stuff, and it doesn't — that covers the building. renters runs around fifteen dollars a month, and it drops the auto rate enough that it very often pays for itself. let me get you with [agent], our auto specialist — it only takes a few minutes. one second. is it an apartment, a house, or a condo? anyone else on the lease with you? when does the lease renew? if you had to replace everything in there tomorrow, are we closer to twenty thousand or fifty? anything high value — jewellery, instruments, camera gear, bikes? does the lease require a specific liability amount? does the building have an alarm or sprinklers? any pets, and what breed?"
},
{
code:"P4", spine:"A", route:"Either", name:"Life-event trigger",
trigger:"New driver, new address, marriage, new vehicle, retirement, or a child leaving for college.",
quick:"The highest-intent call you will make. The client is already thinking about it — you're just early.",
beats:[
{n:"Identify", say:"Hi [Name], [You] at Kasey Osman Insurance — congratulations, by the way."},
{n:"Mini-review", say:"I saw [the new address / the new vehicle / the driver added] come through and I wanted to make sure the rest of the file caught up with it. Is 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 current? ... Are (321) 725-8022 and KaseyOsman1@allstate.com still the best way to reach you? ... And anything change on the work side?"},
{n:"Assumptive cross", say:"While I'm in here, let's go ahead and take a look at the whole household together — a change like this moves more than one policy. What else has changed on your side in the last year?"},
{n:"Gap statement", say:"A new driver changes the auto, a new address changes the property, and most people find that out at renewal instead of now. Let's get ahead of it while it's all fresh."},
{n:"Transfer ask", say:"Let me put you with [Agent] for a proper look at everything. One second for me."}
],
tip:"Congratulations first, business second. This is the one call where a little warmth outperforms efficiency.",
watch:"A teen driver is an auto call and a liability call. Flag the umbrella opportunity for the agent — don't quote it yourself.",
filler:[{g:"If it is a new driver", qs:["What is their full name and age?", "When did they get the licence?", "Are they driving one of the current cars, or getting their own?", "Full-time student? And how are the grades?", "Living at home, or away at school?"]}, {g:"If it is a new home", qs:["What is the new address?", "When is the closing date?", "Who is the lender?", "Year built, and how old is the roof?", "Are you keeping the old place or selling it?"]}, {g:"If it is a marriage", qs:["What is your spouse's full name?", "Who are they insured with now?", "What are they driving?", "Are you combining into one household?"]}, {g:"If it is a new vehicle", qs:["Year, make, and model?", "Financed, leased, or owned outright?", "Is it replacing something, or adding to what you have?"]}],
kw:"life-event trigger the highest-intent call you will make. the client is already thinking about it — you're just early. new driver, new address, marriage, new vehicle, retirement, or a child leaving for college. life event new driver teen marriage moved new home vehicle college trigger umbrella liability hi Kasey Osman, [you] at kasey osman insurance — congratulations, by the way. i saw [the new address / the new vehicle / the driver added] come through and i wanted to make sure the rest of the file caught up with it. is 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 current? ... are (321) 725-8022 and KaseyOsman1@allstate.com still the best way to reach you? ... and anything change on the work side? while i'm in here, let's go ahead and take a look at the whole household together — a change like this moves more than one policy. what else has changed on your side in the last year? a new driver changes the auto, a new address changes the property, and most people find that out at renewal instead of now. let's get ahead of it while it's all fresh. let me put you with [agent] for a proper look at everything. one second for me. what is their full name and age? when did they get the licence? are they driving one of the current cars, or getting their own? full-time student? and how are the grades? living at home, or away at school? what is the new address? when is the closing date? who is the lender? year built, and how old is the roof? are you keeping the old place or selling it? what is your spouse's full name? who are they insured with now? what are they driving? are you combining into one household? year, make, and model? financed, leased, or owned outright? is it replacing something, or adding to what you have?"
},
{
code:"P5", spine:"A", route:"Homie", name:"Flood and coastal opener",
trigger:"Coastal or flood-zone address, or the client raises storm or water damage unprompted.",
quick:"A door-opener, not a destination. A flood quote on its own does not satisfy the cross-sell requirement.",
beats:[
{n:"Identify", say:"Hi [Name], [You] at Kasey Osman Insurance."},
{n:"Mini-review", say:"You've been with us since [year] — appreciate you. I'm working through our coastal households and I want to be sure I've got the right property. I show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — is that correct? ... And are (321) 725-8022 and KaseyOsman1@allstate.com still current?"},
{n:"Assumptive cross", say:"Good — and that address is exactly why I'm calling, because it drives the flood zone. I noticed there's no flood on this household, so let's go ahead and take a look. Do you carry it somewhere else?"},
{n:"Gap statement", say:"A homeowners policy doesn't cover rising water, and a lot of the flood policies out there were written to satisfy a lender rather than to actually cover the house. We write flood both through the NFIP and privately, so there's usually a real comparison to be had."},
{n:"Transfer ask", say:"Let me put you with [Agent], our property specialist — [he'll/she'll] pull the flood zone and the elevation and look at the homeowners at the same time. One second."}
],
tip:"Confirming the address isn't housekeeping on this path — it's the whole setup. The zone follows the address, so the verification question is what earns the flood question.",
watch:"Flood alone does not satisfy KOI's cross-sell requirement. Make sure the agent is looking at the homeowners on the same call, or you handed over a flood conversation and left the household half-covered.",
filler:[{g:"The structure", qs:["Single family, condo, or townhome?", "What is the foundation — slab, crawlspace, or up on stilts?", "Is there a basement, or a ground-level enclosure or garage?", "How many floors?"]}, {g:"Elevation and zone", qs:["Do you have an elevation certificate anywhere?", "Do you know your flood zone off the top of your head?"]}, {g:"What they have now", qs:["Who is the flood through currently?", "Roughly what are you paying for it?", "When does it renew?", "Is it building only, or building and contents?", "Is it there because the lender required it, or did you choose it?"]}, {g:"History", qs:["Has the property ever taken water, even a little?", "Any prior flood claims on it?"]}],
kw:"flood and coastal opener a door-opener, not a destination. a flood quote on its own does not satisfy the cross-sell requirement. coastal or flood-zone address, or the client raises storm or water damage unprompted. flood nfip private flood coastal zone elevation rising water lender minimum storm surge homie address hi Kasey Osman, [you] at kasey osman insurance. you've been with us since [year] — appreciate you. i'm working through our coastal households and i want to be sure i've got the right property. i show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — is that correct? ... and are (321) 725-8022 and KaseyOsman1@allstate.com still current? good — and that address is exactly why i'm calling, because it drives the flood zone. i noticed there's no flood on this household, so let's go ahead and take a look. do you carry it somewhere else? a homeowners policy doesn't cover rising water, and a lot of the flood policies out there were written to satisfy a lender rather than to actually cover the house. we write flood both through the nfip and privately, so there's usually a real comparison to be had. let me put you with [agent], our property specialist — [he'll/she'll] pull the flood zone and the elevation and look at the homeowners at the same time. one second. single family, condo, or townhome? what is the foundation — slab, crawlspace, or up on stilts? is there a basement, or a ground-level enclosure or garage? how many floors? do you have an elevation certificate anywhere? do you know your flood zone off the top of your head? who is the flood through currently? roughly what are you paying for it? when does it renew? is it building only, or building and contents? is it there because the lender required it, or did you choose it? has the property ever taken water, even a little? any prior flood claims on it?"
},
{
code:"P6", spine:"A", route:"Either", name:"High-liability household",
trigger:"Pool, teen driver, rental property, boat, business run from home, or high household income signals.",
quick:"Umbrella is need-created. You are surfacing the exposure, not selling the product.",
beats:[
{n:"Identify", say:"Hi [Name], [You] at Kasey Osman Insurance — I handle household reviews on our side."},
{n:"Mini-review", say:"You've been with us since [year], thank you for that. Let me confirm what we have — is 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 still right? ... (321) 725-8022 and KaseyOsman1@allstate.com current? ... And who's living at the property these days?"},
{n:"Assumptive cross", say:"While I was going through the household, I noticed we don't have an umbrella on you. Let's go ahead and take a look at that — do you have a pool, a trampoline, a boat, or a young driver in the house?"},
{n:"Gap statement", say:"Most policies here carry three hundred thousand in liability. That sounds like a lot right up until there's an accident on your property involving somebody else's kid — and then it isn't. There's a policy that sits on top of everything you own and it's usually cheaper than people expect."},
{n:"Transfer ask", say:"I'm not going to guess at a number for you — let me put you with [Agent] and [he'll/she'll] show you what the layer costs against what you're already carrying. One second."}
],
tip:"Umbrella never sells on price, it sells on a picture. Give them one specific scenario, not a list of benefits.",
watch:"Do not describe what an umbrella covers in detail. That's a coverage representation and it belongs to the licensed agent. Surface the exposure and hand off.",
filler:[{g:"The household", qs:["How many vehicles and how many drivers in total?", "Any drivers under twenty-five?"]}, {g:"What they own", qs:["How many properties — primary, second home, anything you rent out?", "Any watercraft, and roughly what size?", "Any recreational vehicles, ATVs, or golf carts?"]}, {g:"The exposures", qs:["Is there a pool? Is it fenced, and is there a diving board or slide?", "Any trampoline?", "Any dogs, and what breed?", "Anything run out of the house as a business?"]}, {g:"Underlying limits", qs:["Do you know your current liability limits on the home and the auto?", "Do you sit on any boards, or do volunteer work in an official capacity?"]}],
kw:"high-liability household umbrella is need-created. you are surfacing the exposure, not selling the product. pool, teen driver, rental property, boat, business run from home, or high household income signals. umbrella liability pool trampoline boat teen driver rental property exposure excess specialty hi Kasey Osman, [you] at kasey osman insurance — i handle household reviews on our side. you've been with us since [year], thank you for that. let me confirm what we have — is 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 still right? ... (321) 725-8022 and KaseyOsman1@allstate.com current? ... and who's living at the property these days? while i was going through the household, i noticed we don't have an umbrella on you. let's go ahead and take a look at that — do you have a pool, a trampoline, a boat, or a young driver in the house? most policies here carry three hundred thousand in liability. that sounds like a lot right up until there's an accident on your property involving somebody else's kid — and then it isn't. there's a policy that sits on top of everything you own and it's usually cheaper than people expect. i'm not going to guess at a number for you — let me put you with [agent] and [he'll/she'll] show you what the layer costs against what you're already carrying. one second. how many vehicles and how many drivers in total? any drivers under twenty-five? how many properties — primary, second home, anything you rent out? any watercraft, and roughly what size? any recreational vehicles, atvs, or golf carts? is there a pool? is it fenced, and is there a diving board or slide? any trampoline? any dogs, and what breed? anything run out of the house as a business? do you know your current liability limits on the home and the auto? do you sit on any boards, or do volunteer work in an official capacity?"
},
{
code:"P7", spine:"B", route:"Either", name:"Cold prospect or internet lead",
trigger:"No existing relationship. Internet lead, referral, purchased list, COI introduction, or your own prospecting.",
quick:"No file to review and no permission yet. Earn ten seconds first, then drive.",
beats:[
{n:"Identify", say:"Hi [Name] — [You] calling from Kasey Osman Insurance here in Melbourne. Did I catch you at a bad time?"},
{n:"Reason for call", say:"I'll be quick. We're an independent agency here in Brevard and we're picking up a lot of households right now who got hit hard on their renewal — and your information came through to us on [the website / a request / a referral]."},
{n:"One question", say:"Who are you with currently for the home and the cars?"},
{n:"Gap statement", say:"Most of what we're seeing is people who've been loyal for years and quietly got rated up, and they don't find out until they compare it against a live market. On the home side alone we've got thirteen different carriers we can run you against — it costs nothing to know where you stand."},
{n:"Transfer ask", say:"Let me put you with one of our agents for a straight comparison. One second."}
],
tip:"“Did I catch you at a bad time?” gets a no far more often than “do you have a minute?” gets a yes. Use it.",
watch:"No mini-review on this path — there's no file to review, and pretending otherwise sounds false. Check do-not-call and consent status before you dial, and enter the lead in IX the same day.",
filler:[{g:"What they have now", qs:["Who is the home with, and who is the auto with?", "How long have you been with them?", "When do they renew?"]}, {g:"The risk", qs:["Do you own or rent?", "What is the address?", "How many vehicles and how many drivers?", "Anything on the record in the last few years — claims, accidents, tickets?"]}, {g:"Why now", qs:["What made you willing to take a look?", "Is there anything in the current policy you specifically do not want to lose?"]}, {g:"Logistics", qs:["If we cannot reach an agent right now, what is the best time to catch you?"]}],
kw:"cold prospect or internet lead no file to review and no permission yet. earn ten seconds first, then drive. no existing relationship. internet lead, referral, purchased list, coi introduction, or your own prospecting. cold call internet lead self generated prospect referral coi list new business dnc consent melbourne brevard hi Kasey Osman — [you] calling from kasey osman insurance here in melbourne. did i catch you at a bad time? i'll be quick. we're an independent agency here in brevard and we're picking up a lot of households right now who got hit hard on their renewal — and your information came through to us on [the website / a request / a referral]. who are you with currently for the home and the cars? most of what we're seeing is people who've been loyal for years and quietly got rated up, and they don't find out until they compare it against a live market. on the home side alone we've got thirteen different carriers we can run you against — it costs nothing to know where you stand. let me put you with one of our agents for a straight comparison. one second. who is the home with, and who is the auto with? how long have you been with them? when do they renew? do you own or rent? what is the address? how many vehicles and how many drivers? anything on the record in the last few years — claims, accidents, tickets? what made you willing to take a look? is there anything in the current policy you specifically do not want to lose? if we cannot reach an agent right now, what is the best time to catch you?"
},
{
code:"P8", spine:"A", route:"Either", name:"Callback from your voicemail",
trigger:"They are calling you back. You have roughly eight seconds of goodwill.",
quick:"Do not make them ask twice why you called. Answer it immediately and move.",
beats:[
{n:"Identify", say:"[Name] — thanks for calling me back, I appreciate it. Nothing's wrong with your policy."},
{n:"Mini-review", say:"While I've got you, quick housekeeping — is 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 still current, and is KaseyOsman1@allstate.com the right one for you? ... Perfect."},
{n:"Assumptive cross", say:"So the reason I reached out — I was reviewing your household and noticed we're only covering [the auto / the home] for you. Let's go ahead and take a look at the other side while I've got you. [What vehicles do you drive? / Are you owning or renting?]"},
{n:"Gap statement", say:"We've got carriers you may not have been shopped against, and it only takes a few minutes to find out where you actually stand."},
{n:"Transfer ask", say:"Since I've got you, let me walk you straight over to [Agent] now rather than playing phone tag again. One second."}
],
tip:"“Since I've got you” is the strongest transfer language available on a callback. They already spent effort to reach you — use it.",
watch:"Keep the review to two items here. They called you — don't make them sit through a full audit. And never open a callback with “what can I do for you?”",
filler:[{g:"Start with the matching bank", qs:["If the gap is property, work the P1 bank. If the gap is auto, work the P2 bank.", "They called you, so keep it lighter than a full intake — two or three items, not twenty."]}, {g:"Always capture", qs:["When does the current policy renew?", "Is there a declarations page you could pull up or email over?", "If we get cut off, what is the best number to come back to?"]}],
kw:"callback from your voicemail do not make them ask twice why you called. answer it immediately and move. they are calling you back. you have roughly eight seconds of goodwill. callback returned call voicemail inbound phone tag since ive got you housekeeping Kasey Osman — thanks for calling me back, i appreciate it. nothing's wrong with your policy. while i've got you, quick housekeeping — is 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 still current, and is KaseyOsman1@allstate.com the right one for you? ... perfect. so the reason i reached out — i was reviewing your household and noticed we're only covering [the auto / the home] for you. let's go ahead and take a look at the other side while i've got you. [what vehicles do you drive? / are you owning or renting?] we've got carriers you may not have been shopped against, and it only takes a few minutes to find out where you actually stand. since i've got you, let me walk you straight over to [agent] now rather than playing phone tag again. one second. if the gap is property, work the p1 bank. if the gap is auto, work the p2 bank. they called you, so keep it lighter than a full intake — two or three items, not twenty. when does the current policy renew? is there a declarations page you could pull up or email over? if we get cut off, what is the best number to come back to?"
},
{
code:"P9", spine:"B", route:"Either", name:"Requote — the promised follow-up",
trigger:"A prior quote that never closed. Worked off the requote list or an X-date coming around.",
quick:"You are not cold-calling. You are keeping a promise — open like it, and the call earns its own permission.",
beats:[
{n:"Identify", say:"Hi [Name], this is [You] with Kasey Osman Insurance."},
{n:"Reason for call", say:"I'm giving you a call as promised from our conversation about [six months] ago. We were going to go ahead and update the quotes for you, but I just wanted to make sure — has anything changed since the last time we spoke?"},
{n:"One question", say:"For example — upgraded vehicles? Updated your roof? Added another driver? Moved? Anybody in the house get licensed?", branch:["“Nothing's changed”: Perfect — that makes this quick. The market's changed even if you haven't, so it's still worth the fresh numbers.", "“I went with somebody else”: No problem at all. When does that one renew? I'll make a note and we'll take a look before it does.", "A change comes back: That's exactly why I wanted to catch you before we reran it — that would have thrown the whole quote off.", "“I don't remember talking to you”: No worries — we'd quoted you back in [month]. Either way, it only takes a few minutes and rates have moved since then."]},
{n:"Gap statement", say:"Good to know. Rates have moved a fair amount since we last talked, and we've actually taken a couple of rate decreases in that window — so it's worth a fresh look rather than dusting off the old numbers."},
{n:"Transfer ask", say:"Let me put you with [Agent], our [property/auto] specialist, and [he'll/she'll] rerun it against what's current. One second."}
],
tip:"“As promised” does the heavy lifting. It reframes an outbound dial as you honouring a commitment, which is a completely different call than a cold one.",
watch:"No mini-review here — they are not a client, so there is no file to confirm. If they say they bound elsewhere, capture the renewal date and let them go warmly.",
filler:[{g:"What changed since the quote", qs:["Any new or different vehicles?", "Has the roof been replaced or repaired?", "Anybody added to or moved out of the household?", "Same address?"]}, {g:"Where they landed", qs:["Did you end up going with somebody, or is it still where it was?", "Who is it with, and when does it renew?"]}, {g:"Then work the line bank", qs:["If the requote is property, work the P1 bank. If it is auto, work the P2 bank."]}],
kw:"requote — the promised follow-up you are not cold-calling. you are keeping a promise — open like it, and the call earns its own permission. a prior quote that never closed. worked off the requote list or an x-date coming around. requote follow up promised quote x-date aged quote never closed rate decrease anything changed hi Kasey Osman, this is [you] with kasey osman insurance. i'm giving you a call as promised from our conversation about [six months] ago. we were going to go ahead and update the quotes for you, but i just wanted to make sure — has anything changed since the last time we spoke? for example — upgraded vehicles? updated your roof? added another driver? moved? anybody in the house get licensed? good to know. rates have moved a fair amount since we last talked, and we've actually taken a couple of rate decreases in that window — so it's worth a fresh look rather than dusting off the old numbers. let me put you with [agent], our [property/auto] specialist, and [he'll/she'll] rerun it against what's current. one second. any new or different vehicles? has the roof been replaced or repaired? anybody added to or moved out of the household? same address? did you end up going with somebody, or is it still where it was? who is it with, and when does it renew? if the requote is property, work the p1 bank. if it is auto, work the p2 bank."
},
{
code:"P10", spine:"A", route:"Either", name:"Renewal review",
trigger:"Working the renewal list ahead of a policy's renewal date.",
quick:"The one moment each year the client actually thinks about insurance. Use it, and cross while you are already in the file.",
beats:[
{n:"Identify", say:"Hi [Name], [You] at Kasey Osman Insurance — nothing's wrong, this is just your renewal review."},
{n:"Mini-review", say:"You've been with us since [year] — thank you for that. Your policy renews [date], and before it does I want to make sure everything we have is accurate. I show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — correct? ... (321) 725-8022 and KaseyOsman1@allstate.com still good? ... And anything change on the work side?"},
{n:"Assumptive cross", say:"Perfect, that's updated. And while I'm in here, I noticed we don't have your [auto / home] with us. Let's go ahead and take a look at that too while we're reviewing everything. [What vehicles do you drive? / Are you owning or renting?]"},
{n:"Gap statement", say:"Renewal is the natural time to do it — it's the one moment a year anybody actually looks at their insurance, and on the home side we've got thirteen different carriers we can shop you across."},
{n:"Transfer ask", say:"Let me put you with [Agent], our [property/auto] specialist, while we've got everything in front of us. One second."}
],
tip:"You already have a legitimate reason to be in the file, which means the cross costs you nothing in goodwill. This is the lowest-friction cross-sell call on the board — work the renewal list hard.",
watch:"Do not discuss what the renewal premium is doing. Rate questions belong to the licensed agent, and a renewal call is exactly where a client will ask.",
filler:[{g:"Confirm the renewing policy", qs:["Is everything on the policy still accurate — same vehicles, same drivers, same address?", "Anything you have added in the last year that we may not know about?"]}, {g:"The keyring", qs:["Any other properties, motorcycles, boats, RVs, trailers, ATVs, or golf carts?", "Anything else on the keyring we should be protecting?"]}, {g:"Then work the cross bank", qs:["If the cross is property, work the P1 bank. If it is auto, work the P2 bank."]}],
kw:"renewal review the one moment each year the client actually thinks about insurance. use it, and cross while you are already in the file. working the renewal list ahead of a policy's renewal date. renewal review renewing policy x-date annual review cross while in file hi Kasey Osman, [you] at kasey osman insurance — nothing's wrong, this is just your renewal review. you've been with us since [year] — thank you for that. your policy renews [date], and before it does i want to make sure everything we have is accurate. i show 930 S Harbor City Blvd Suite 202, Melbourne, FL 32901 — correct? ... (321) 725-8022 and KaseyOsman1@allstate.com still good? ... and anything change on the work side? perfect, that's updated. and while i'm in here, i noticed we don't have your [auto / home] with us. let's go ahead and take a look at that too while we're reviewing everything. [what vehicles do you drive? / are you owning or renting?] renewal is the natural time to do it — it's the one moment a year anybody actually looks at their insurance, and on the home side we've got thirteen different carriers we can shop you across. let me put you with [agent], our [property/auto] specialist, while we've got everything in front of us. one second. is everything on the policy still accurate — same vehicles, same drivers, same address? anything you have added in the last year that we may not know about? any other properties, motorcycles, boats, rvs, trailers, atvs, or golf carts? anything else on the keyring we should be protecting? if the cross is property, work the p1 bank. if it is auto, work the p2 bank."
}
];
const OBJECTIONS = [
{q:"“How much is it?”", mean:"Interested, but testing whether you will waste their time.", say:"That's exactly why I'm handing you off — I'm not licensed to quote and I'd rather not guess at you. [He'll/She'll] have a real number for you in just a few minutes.", never:"Never give a ballpark, a range, or “usually around.” Any number you say becomes the number they expected, and the agent inherits the gap.", kw:"“how much is it?” interested, but testing whether you will waste their time. that's exactly why i'm handing you off — i'm not licensed to quote and i'd rather not guess at you. [he'll/she'll] have a real number for you in just a few minutes. price cost how much rate ballpark number quote"},
{q:"“No, I don't want to look at the auto.”", mean:"Reflex against a second policy, not a real objection to the policy itself.", say:"It only takes a few minutes, and this way we can make sure you're properly protected and you're not leaving any money on the table — same as we did when we helped you with the home.", never:"Don't drop it on the first no and don't apologise for asking. One reframe, then read the room. This is the objection you'll hear most, so have this line cold.", kw:"“no, i don't want to look at the auto.” reflex against a second policy, not a real objection to the policy itself. it only takes a few minutes, and this way we can make sure you're properly protected and you're not leaving any money on the table — same as we did when we helped you with the home. no dont want auto second policy refuse assumptive cross decline push back money on the table"},
{q:"“I'm not interested.”", mean:"Reflex. It fired before they heard what you said.", say:"Fair enough, I won't keep you. Can I ask one thing before I let you go — when's the last time anyone actually shopped it for you?", never:"Do not argue and do not ask “why not?” One question, then you genuinely let them go.", kw:"“i'm not interested.” reflex. it fired before they heard what you said. fair enough, i won't keep you. can i ask one thing before i let you go — when's the last time anyone actually shopped it for you? not interested no thanks brush off reflex"},
{q:"“I'm busy right now.”", mean:"Usually true. This is not a rejection.", say:"I completely understand, and I'll respect your time — I'm not selling you anything on this call. Are you generally better in the morning or the afternoon?", never:"Do not push for “just two minutes.” Book a specific day and time, log it, and actually call then.", kw:"“i'm busy right now.” usually true. this is not a rejection. i completely understand, and i'll respect your time — i'm not selling you anything on this call. are you generally better in the morning or the afternoon? busy bad time call back later appointment time"},
{q:"“My guy handles all that.”", mean:"Loyalty, or inertia dressed as loyalty.", say:"Understood — and I'm not asking you to leave them. Do you know if they're actually shopping you across carriers each year, or just renewing you? That's the piece I'd want you to see.", never:"Never criticise the other agent. The moment you do, defending them becomes their job.", kw:"“my guy handles all that.” loyalty, or inertia dressed as loyalty. understood — and i'm not asking you to leave them. do you know if they're actually shopping you across carriers each year, or just renewing you? that's the piece i'd want you to see. my agent my guy loyal current agent broker"},
{q:"“Just send me something by email.”", mean:"Polite exit.", say:"We can absolutely do that — I just need to connect you with [Agent] first so the quotes they send you are accurate. Let's get you connected so you're getting real numbers rather than a guess.", never:"Never offer email before they ask for it — that hands them the exit yourself. And never agree to send something and hang up: an emailed quote with no conversation behind it is a guess, and it is the fastest way to lose the household.", kw:"“just send me something by email.” polite exit. we can absolutely do that — i just need to connect you with [agent] first so the quotes they send you are accurate. let's get you connected so you're getting real numbers rather than a guess. email send me information brochure literature"},
{q:"“I already have flood.”", mean:"They think that closes the topic. It does not.", say:"Good — who's it through, and is that a full policy or the bare minimum the lender required?", never:"Do not stop at flood. Route to property regardless — flood alone does not satisfy the cross-sell requirement.", kw:"“i already have flood.” they think that closes the topic. it does not. good — who's it through, and is that a full policy or the bare minimum the lender required? already have flood nfip lender required covered"},
{q:"“I'm happy with my current company.”", mean:"No active pain. You need a comparison, not a complaint.", say:"I can respect that, and if you were my customer I'd hope you'd say the same thing. Who are you with currently? ... We've been helping a lot of people coming over from them lately — now I've got to look.", never:"Do not try to make them unhappy. Reframe from “switch” to “compare” and the resistance drops.", kw:"“i'm happy with my current company.” no active pain. you need a comparison, not a complaint. i can respect that, and if you were my customer i'd hope you'd say the same thing. who are you with currently? ... we've been helping a lot of people coming over from them lately — now i've got to look. happy satisfied fine no complaints current carrier"},
{q:"“I just renewed / I just paid it.”", mean:"They think the timing closes the door. It does the opposite.", say:"That's actually good timing. If you do end up moving, the old company refunds you for the days you already paid for — nothing you've paid goes to waste. Let's still take the look.", never:"Do not promise a specific refund amount or a timeline. “They refund the unused days” is safe; a dollar figure is not yours to give.", kw:"“i just renewed / i just paid it.” they think the timing closes the door. it does the opposite. that's actually good timing. if you do end up moving, the old company refunds you for the days you already paid for — nothing you've paid goes to waste. let's still take the look. just renewed just paid prepaid refund timing renewed already"},
{q:"“I'm waiting on quotes from other companies.”", mean:"Shopping in progress. You want to be in the comparison, not after it.", say:"Totally fair — knowing your options is smart. Most places will just match what you already have, which is the thing worth a second look in the first place. Let me get you with [Agent] so you've got one more real number in the pile — it only takes a few minutes.", never:"Do not disparage the other quotes and do not ask what they came in at. Get into the comparison instead of arguing with it.", kw:"“i'm waiting on quotes from other companies.” shopping in progress. you want to be in the comparison, not after it. totally fair — knowing your options is smart. most places will just match what you already have, which is the thing worth a second look in the first place. let me get you with [agent] so you've got one more real number in the pile — it only takes a few minutes. waiting on quotes shopping other companies comparing options"},
{q:"“I only want the home looked at, not the auto.”", mean:"They are trying to keep the call small.", say:"For sure, we'll start there. The best value shows up when we look at both together though, because that's where the discounts stack. It's a few extra minutes.", never:"Do not accept the single-line boundary and move on. The bundle is the whole reason for the call.", kw:"“i only want the home looked at, not the auto.” they are trying to keep the call small. for sure, we'll start there. the best value shows up when we look at both together though, because that's where the discounts stack. it's a few extra minutes. only one quote just the home just the auto single line one policy"},
{q:"“How did you get my number?”", mean:"Suspicion. Answer it plainly and fast.", say:"You're a client of ours — we handle your [auto / home]. I'm calling from our office here in Melbourne.", never:"Never be vague or cute here. Hesitation ends the call. If they are not a client, say exactly where the lead came from.", kw:"“how did you get my number?” suspicion. answer it plainly and fast. you're a client of ours — we handle your [auto / home]. i'm calling from our office here in melbourne. how did you get my number who are you privacy suspicious"},
{q:"“Are you trying to sell me something?”", mean:"Fair question. Give a straight answer.", say:"I'm trying to find out whether we should be. If the answer's no, that's a two-minute call and I'll say so.", never:"Do not say “no, I'm just calling to review your account.” They know. Straight beats slick.", kw:"“are you trying to sell me something?” fair question. give a straight answer. i'm trying to find out whether we should be. if the answer's no, that's a two-minute call and i'll say so. selling sales pitch telemarketer straight answer"},
{q:"“I just shopped it last year.”", mean:"They think the market is static. In Florida it is not.", say:"A year is a long time in this market — we've had carriers enter, exit, and re-file in that window. What was competitive last year frequently isn't now.", never:"Do not claim you will definitely beat it. Claim the market moved, which is true.", kw:"“i just shopped it last year.” they think the market is static. in florida it is not. a year is a long time in this market — we've had carriers enter, exit, and re-file in that window. what was competitive last year frequently isn't now. shopped last year already compared recently market"},
{q:"“Insurance is a scam, my rate went up for no reason.”", mean:"Venting. Let them.", say:"Honestly, you're not wrong to be frustrated — that's most of the conversations I have right now. That's exactly why I'd want you talking to somebody who can show you where you stand instead of just renewing you again.", never:"Do not defend the industry and do not explain rate filings. Agree with the feeling, redirect to the person who can act.", kw:"“insurance is a scam, my rate went up for no reason.” venting. let them. honestly, you're not wrong to be frustrated — that's most of the conversations i have right now. that's exactly why i'd want you talking to somebody who can show you where you stand instead of just renewing you again. scam rate increase went up frustrated angry venting rip off"},
{q:"“I need to talk to my spouse.”", mean:"Real, and often a soft no.", say:"Of course. Nothing gets decided today — this is just getting the numbers in front of you both so the conversation's worth having. Are they around now, or should I catch you both this evening?", never:"Do not accept it as a close and hang up. Either get both on now or book a time with both.", kw:"“i need to talk to my spouse.” real, and often a soft no. of course. nothing gets decided today — this is just getting the numbers in front of you both so the conversation's worth having. are they around now, or should i catch you both this evening? spouse wife husband partner talk to decide together"},
{q:"“Nobody will write me, my roof is too old.”", mean:"They have been declined before and are pre-empting it.", say:"I understand — how old is your roof? ... We're independent on the property side, so we're not down to one carrier's roof rules. Let me get you to [Agent] and [he'll/she'll] tell you straight whether we've got an option.", never:"Ask the age before you say anything encouraging. If the roof is genuinely too old there may be no market, and promising otherwise sets the agent up to disappoint them.", kw:"“nobody will write me, my roof is too old.” they have been declined before and are pre-empting it. i understand — how old is your roof? ... we're independent on the property side, so we're not down to one carrier's roof rules. let me get you to [agent] and [he'll/she'll] tell you straight whether we've got an option. roof age old roof declined non renewed eligibility four point inspection"},
{q:"“Aren't you Allstate? I heard they're expensive.”", mean:"Brand objection, usually second-hand and out of date.", say:"Rates change all the time, and we've actually taken a couple of rate decreases over the past few years. So let's take a look at it — worst case we tell you to stay with your current provider, best case we get you into a better policy.", never:"Do not get defensive about the brand. The worst-case framing is what disarms this one — don't skip it.", kw:"“aren't you allstate? i heard they're expensive.” brand objection, usually second-hand and out of date. rates change all the time, and we've actually taken a couple of rate decreases over the past few years. so let's take a look at it — worst case we tell you to stay with your current provider, best case we get you into a better policy. allstate expensive brand captive independent carriers rate decrease"},
{q:"“I have a claim open right now.”", mean:"Timing issue, and a real one.", say:"Then let's not touch anything mid-claim. Can I make a note to come back to you once it's closed out — roughly when do you expect that?", never:"Do not transfer this one. Log it, set the follow-up date, and move on.", kw:"“i have a claim open right now.” timing issue, and a real one. then let's not touch anything mid-claim. can i make a note to come back to you once it's closed out — roughly when do you expect that? open claim pending claim adjuster mid claim timing"},
{q:"“Switching is too much hassle.”", mean:"Effort objection, not a price objection.", say:"That part's on us, not you. If it makes sense, the agent handles the paperwork and the cancellation — your side of it only takes a few minutes on the phone.", never:"Do not respond with savings. They didn't raise price, they raised effort. Answer the thing they actually said.", kw:"“switching is too much hassle.” effort objection, not a price objection. that part's on us, not you. if it makes sense, the agent handles the paperwork and the cancellation — your side of it only takes a few minutes on the phone. hassle too much work paperwork effort switching cancel"},
{q:"“Call me next week.”", mean:"Soft deferral. Without a specific time it means never.", say:"Absolutely. Is Tuesday morning or Thursday afternoon better for you? ... Perfect, I've got you down for Tuesday at 10:15 and I'll call this number.", never:"Never accept “next week” without a day and a time. A vague callback is a lost lead with extra steps.", kw:"“call me next week.” soft deferral. without a specific time it means never. absolutely. is tuesday morning or thursday afternoon better for you? ... perfect, i've got you down for tuesday at 10:15 and i'll call this number. call me next week later defer callback reschedule"}
];
const ROUTES = [
{n:"Homie", h:"Property lines", b:"Homeowners, condo, dwelling fire, flood, and anything to do with the structure. Homies do not quote auto — do not send them auto.",
team:[{l:"", names:["Deanna","Julie","Will","Chris"]}]},
{n:"Hunter", h:"Auto lines", b:"Personal auto, motorcycle, RV, boat, and renters when it's attached to the auto conversation. Hunters do not quote property.",
team:[{l:"", names:["Chris","JaNa","Joe","Denny"]}]},
{n:"Commercial", h:"Business lines", b:"Anything with a business name on it — BOP, commercial auto, general liability, contractors. If they mention a business, ask before you assume it's personal.",
team:[{l:"Commercial auto", names:["John","Kyle"]},{l:"Commercial building", names:["John","Julie","Kyle"]}]},
{n:"Either", h:"Household reviews", b:"Umbrella and full-household reviews go to whichever agent already owns the relationship. If nobody owns it, route by the largest line in the household.",
team:[]}
];
const CHECKS = [
"Agent confirmed available in RingCentral and the Slack handoff channel",
"Correct seat for the line of business — property to Homie, auto to Hunter",
"Client told who they're being handed to, by name",
"Cross posted in the Slack handoff channel and claimed by an agent",
"Warm intro delivered — name, tenure, city, and the cross",
"Confirmed the agent picked up before you dropped off the line",
"Disposition logged in IX before your next dial"
];
const EOD = [
"Outcome dispositioned in IX — same day, no exceptions",
"Receiving agent's name recorded on the handoff",
"Renewal date captured if the client gave you one",
"Decline reason captured if they said no",
"Self-generated leads entered into the CRM before end of day",
"Follow-up date set on anything that wasn't a transfer"
];
const VOICEMAILS = [
{code:"VM1", name:"First attempt — existing client", when:"Day 1, after a no-answer.",
say:"[Name], it's [You] at Kasey Osman Insurance — nothing's wrong with your policy, I just found something on your account I want to run by you. [Number]. If I miss you I'll try again Thursday.",
note:"Curiosity plus reassurance. “Nothing's wrong” stops the panic; “something on your account” earns the callback. Then actually call Thursday."},
{code:"VM2", name:"Second attempt — close the loop", when:"Day 5, after two live attempts.",
say:"[Name], [You] again at Kasey Osman Insurance. I'll stop chasing you — if you'd rather I just left it alone, no problem at all. If you want a few minutes on it, I'm at [Number].",
note:"Permission to say no gets more callbacks than another pitch. Use it once and mean it."},
{code:"VM3", name:"Self-generated / cold lead", when:"No existing relationship.",
say:"[Name], [You] calling from Kasey Osman Insurance here in Melbourne. We work with a lot of households in [area] on the home and auto side. [Number] if you want to compare where you stand.",
note:"Shorter and lower-pressure than a client message. No hook, no urgency — you have no relationship to trade on yet."},
{code:"TXT", name:"Text follow-up", when:"Only where consent is on file.",
say:"Hi [Name] — [You] at Kasey Osman Insurance. Left you a voicemail earlier about your household coverage. Happy to keep it to a few minutes whenever suits. Reply STOP to opt out.",
note:"Confirm consent status in IX first and follow KOI Data Policy v1.5. No rates, no numbers, no coverage claims in a text — ever."}
];
/* six service-outreach questions */
const SIXQ = [
{q:"Has your marital status changed?", why:"Changes the household, the drivers, and the discount. A marriage is two policies becoming one — and a competitor's client becoming ours."},
{q:"Have you changed jobs or retired?", why:"Moves the commute, the annual mileage, and sometimes the discount. Retirement usually drops mileage enough to matter."},
{q:"Do you own a business?", why:"Straight to Commercial. Most people never think to mention it because you asked about their car."},
{q:"Has a child entered or exited the household?", why:"Entered means a driver in a few years and a life conversation now. Exited means a policy that no longer matches — and often a renters policy at a new address."},
{q:"Have any adults entered or exited the household?", why:"An undisclosed driver is a claim problem. An adult moving in is usually a whole second household of policies."},
{q:"In order to properly insure you and notate the file, we need to know everything you own — whether you insure it with us or not. Walk me through every key on your keyring.", why:"The catch-all. Other properties, motorcycles, boats, RVs, trailers, ATVs, golf carts, rentals — this is the question that finds what nobody thought to mention."}
];
/* list inventory */
const LISTS = [
{g:"OTH campaigns — run P1 / P2", qs:["Mailer Call-In Recycle","OTH-Auto → Renters","OTH-Retain Suite","OTH-Seeded Policies","OTH-Shoff-Ivantage","OTH-Termination","Recycled Leads","Shoff Allstate Client","System Generated"]},
{g:"Sources — warm, run P1 / P2 / P8", qs:["Call-in","Company Transfer","Cross Sale","Customer Request","Friends & Family","Lifetime Referral Program","Other Agent","Phone Call","Transfer in","Walk-in","Realtor"]},
{g:"Sources — marketing, run P7", qs:["Allstate Mailer","Allstate Website","Dat-Condo Mailer","Google/Web Search","Home Mailer","KOI Website","Landlord Mailer","NCC Auto"]},
{g:"Sources — re-engage, run P9", qs:["Rate Re-Shop","Requote","Winback","Non-Renewal"]},
{g:"Renewals — run P10", qs:["Renewal list, worked ahead of the renewal date","Your lowest-friction cross-sell call — work it hard"]},
{g:"Internet Leads — run P7", qs:["Call in minutes, not hours — these overrule your block","Two attempts on day one, at different times"]}
];
const RAMP = [
"Week 1 — one list only. Renewals (P10). Longest tenure, warmest reception, and the review is the whole call.",
"Week 1 — roleplay the transfer intro with the Sales Lead until it is automatic.",
"Week 2 — add OTH campaign work (P1 and P2). Two paths, nothing else.",
"Week 3 — add requotes (P9) and start taking inbound call-ins.",
"Week 4 — add cold and internet leads (P7). This is the hardest path; it goes last, not first.",
"Dials float during ramp. Transfers per connect is the number that actually matters."
];
/* ------------------------------------------------------------------ RENDER */
const el = (h)=>{const d=document.createElement('div'); d.innerHTML=h.trim(); return d.firstElementChild;};
const esc = (s)=>String(s).replace(/&/g,'&').replace(//g,'>');
/* tabs */
const tabsEl = document.getElementById('tabs');
let active = 'paths';
TABS.forEach(t=>{
const b=el(``);
b.onclick=()=>setTab(t.key);
tabsEl.appendChild(b);
});
const counter = el('');
tabsEl.appendChild(counter);
function setTab(k){
active=k;
tabsEl.querySelectorAll('.chip').forEach(c=>c.setAttribute('aria-pressed', c.dataset.tab===k));
TABS.forEach(t=>document.getElementById(t.view).classList.toggle('on', t.key===k));
applyFilter();
window.scrollTo({top:0, behavior:'smooth'});
}
/* paths */
const pg = document.getElementById('pathgrid');
PATHS.forEach((p,i)=>{
const color = ROUTECOLOR[p.route];
const beats = p.beats.map((b,bi)=>`
${bi+1}
${esc(b.n)}
${b.say ? `
${esc(b.say)}
` : ''}
${b.branch ? `
${b.branch.map(x=>`
${x}
`).join('')}
` : ''}
`).join('');
const c = el(`
${p.code}
${esc(p.name)}
Route to ${esc(p.route==='Either'?'either seat':p.route)}
`)));
buildChecks('ramp', RAMP);
/* filler tab */
const FILLRULES = [
"Say why you're asking — “so you're not repeating yourself” — before the first question.",
"Keep it bounded — “give me just a few minutes”. If the agent still isn't free by then, book the appointment and let them go.",
"Never quote, never estimate, never hint at what it will cost.",
"Never interpret anything you collect. You gather, the agent assesses.",
"If they get short with you, stop asking. The transfer matters more than the intake.",
"Log it in IX before the handoff, so the agent sees it on pickup — not after the call."
];
buildChecks('fillrules', FILLRULES);
const fl = document.getElementById('fillerlist');
PATHS.forEach(p=>{
const color = ROUTECOLOR[p.route];
fl.appendChild(el(`
${esc(p.code)} — ${esc(p.name)}
Gathering for the ${esc(p.route==='Either'?'receiving':p.route)} seat.
${fillerHTML(p.filler)}
`));
});
/* objections */
const ol = document.getElementById('objlist');
OBJECTIONS.forEach(o=>{
const d = el(`