Knock where the hail actually fell.
Pull the housing stock around a storm, weight it by roof age and hail size, and work the streets inside the damage footprint first.
Top roofing opportunities
Highest score firstOpportunity map
Everything that spends a RentCast request.
Updates, past sales, the mailing list, storm sweeps and address look-ups live here, so Radar can be shared with other accounts without handing them the ability to pull. This tab is the owner’s.
Search a storm-hit area
Sweep several areas at once
One per line. A market name from the dropdown above (same radius applies), a ZIP code, or City, ST. Each area is pulled 500 records at a time until it runs dry or the budget is spent.
Update the state
Reads every home for sale in the state right now, then everything that came off the market recently — no filters on type, age or price. Leads you already have get their status brought up to date; homes you don’t have get added. A home your file has as closed or off market that is now for sale is flagged Back on market.
Pull past sales
Builds up the state’s sales history, year by year, with no filters. Recorded sales are county deed records with the real sale price. Listing history is homes that were listed and came off the market, with the agent. Check the size first: it costs one request per year per source and tells you exactly what the full pull would cost. Progress is saved as it goes, so you can stop any time and continue another day.
Mailing list
Every home in an area — including ones with no sale on record — kept apart from your leads, for mailers when a storm hits. The fastest way to use it: open a storm on the Storms tab and press Mailing list; it pulls just the homes inside that storm. Each pull checks the size first (1 request) and tells you the cost before spending.
Download mailing addresses
Stored in this browser on this device, separate from your leads and not in the regular backup (it could be hundreds of megabytes). A whole state is roughly 1,600+ requests, so after a big pull press Save mailing list to a file and keep it in OneDrive. Loading it on another computer, or after a browser reset, costs nothing. Pull statewide on a computer, not a phone.
Data status
New owner watch
Remembers which homes are listed today; anything that has vanished by your next check just went under contract. New owners are the easiest roofing sale there is — they are reachable, they are already spending on the house, and they are inside the insurance claim window.
Uses the area in the search panel above. Check it weekly — the gap between checks is how precisely you can date the flip.
Storm sweep
Storms come in on their own: hail and wind reports, severe thunderstorm and tornado warning areas, and hail the weather radar detected along a storm's path. Any lead inside one gets flagged. The buttons below still pull by hand.
Map any addresses that came in without coordinates
RentCast leads arrive already located. Imported and hand-typed addresses get matched by the U.S. Census geocoder, which is free and needs no key.
Leads
Who is listing the most
Storms drive roofing work. You are in Moving, so storms don’t change any scores. The storm mailing lists still work: a family whose house was hit may be about to move.
Log a storm by hand
For damage you saw yourself or a customer called in.
Storm log
Active NWS warnings
Add one lead
Import a sales list
Paste a CSV or pick a file, then match the columns. Works with county assessor exports, MLS exports, or anything else with an address column.
Backup that writes itself
Pick a file once — on your desktop, or better, inside OneDrive. Moving HQ rewrites it a few seconds after anything changes. A cleared browser or a dead laptop then costs you nothing.
Everything on file
Where the work is.
Every figure on this tab is counted out of your own records, right here in the browser. No API, no cost, nothing sent anywhere. It answers where to go, not what closes — that second question needs leads you have actually worked.
A full pass over twelve thousand leads takes a few seconds, longer if you have a lot of storms on file. It counts as you watch. Nothing is saved or sent anywhere.
Read-out
one AI request, about two centsThe numbers above go to Claude as a summary — no addresses, no owner details — and it writes back what it sees: where to go first, what you might be missing, and where the data is too thin to trust.
The ones you picked.
Leads you checked and want to work. Group them by agent or brokerage to make the calls, or put them in driving order for the day. Picks ride along in your backup, so the list follows you between devices.
On the list
Every moving lead. Every quote.
Every contract.
Track leads from Titan, Facebook, referrals or the app itself. Quote them with your rates, override the margin per job, send the draft with one tap.
No client open
Tap a card on the board, or press + New to add one.
Signature on your draft emails
Sits at the bottom of every contract draft. Change it here once, it follows every email.
Copies of everything, and a way back.
Every change to a client or event keeps the version it replaced. Deleted records wait in the Trash. A copy of the whole system is saved outside Supabase every day, and you can download your own copy any time.
Loading…
Heard about a move? Send it in.
Type what you know and send it. It goes straight into the CRM of the person who works your leads, and you can watch it below as it moves from New to Booked.
Send in a referral
Jobs posted, and who’s on them.
Reserve a spot on any job. You’re in line by the second you tap, even when a job is already full: the first ones in get the spots and the rest are backups. You’re on the crew once it says Confirmed.
Loading the board…
The jobs you’re on.
Everything for each job you’re approved on: where to go, directions, the crew chat, and the photos. Your calendar is underneath.
Loading…
Post jobs, fill the crews, confirm who’s going.
Post a job with the number of spots it needs. Everyone whose job board is on can reserve it, in the order they tap. Approve the ones you want; they see Confirmed on their board and the job lands on their calendar.
Loading…
The month, and what still needs doing.
Every booked move and appointment on one page, with Jarvis’s read on the day, your to-do list and the notes you can’t afford to lose. Jarvis can add to all three: “put a truck inspection on Thursday”, “remind me to call the Hendersons tomorrow”, “note the gate code for the Teays Valley job”.
Moves and events
Moves show in their pipeline colour, events as cyan pills, and to-dos with a due date as amber ticks. Switch on a team member under Calendars to see theirs too, marked with their colour and initials. Tap any day to add a move or an event; tap a name to open that client in the CRM.
To-do
Important notes
Day
Who gets which leads.
Pick the accounts, pick leads or mailing addresses by filter, see how many are new for each account, and send. Every send is a bubble under the account: × takes it back, ⇄ moves it to another account.
Sub accounts, and the leads you send them.
Each sub account sees only the leads you send it.
Every move, every photo.
Photos, contracts and documents from every client, yours and the ones they sent. Search by name, address, date, status or list.
Take down the lead,
price it, save it.
Who they are and what they’re moving on top; the price underneath. Save it with or without a quote and it goes straight into the CRM.
New lead
Booked days tap a day to pick it
Quote
uses the addresses aboveMy numbers
rates and settings every quote uses
Change these and every quote follows.
Work is counted by the truck load: base hours plus load and unload hours for each one, so two loads at 5 and 3 is 1.5 + 16 = 17.5 hours. Loads come from the house size unless you type a number. Two loads also means the truck runs between the houses three times, and every one of those miles is counted. A day past the long-day mark pays the long-day rate. A higher-value home adds 8% over $250,000 and 15% over $400,000.
West Virginia at full scale.
Takes the leads you have and projects them onto every occupied home in the state, county by county, then works out which years and which months bring the most work. Free: nothing here spends a RentCast request.
Settings
West Virginia only for now: the county household shares built in are West Virginia’s 55 counties, from Census population estimates (2023). Roof lifespan comes from Setup.
Where the money is moving
Median price per square foot in the last six months against the same six months a year earlier, county by county, so summer is compared with summer. Listings compared with listings only, so a change in your data mix cannot fake a trend. A county is only called Rising or Cooling with 30+ sales in both windows and a move of 5% or more.
Total dollar volume is left out on purpose: in your leads it mostly measures where you have searched, not where money is going. “Sold under value” is the share of recent sales that sold well below their neighbors — buyers who will be spending on repairs.
Busy months
100 = an average monthHome sales are what moving work follows; storm reports are what roofing work follows, usually a few weeks behind. Sales use your recorded sales from two or more years ago, so recent searches do not tilt them.
Your lead file at a glance.
Every chart below follows the same filters. Tap a state or a county inside a chart to drill into it. Nothing here costs a request.
Chart filters
Sales by month
Bars are how many sold or listed that month; the gold line is the median price. A jump at the right edge usually means you pulled more recent data, not that the market moved.
By state
Tap a slice to filter to that state.
Top counties
Tap a bar to filter to that county.
Price per square foot, by county
Median. A quick read on which counties are the pricier markets.
Estimated roof age
The current roof, not the house. Assumes a reroof every 20–25 years (change it in Setup). The gold bar is due now. It counts partial odds, so it runs higher than the “roofs likely due” tile, which only counts houses more likely due than not.
How recently they moved
Days since each lead’s latest sale or listing. The left bars are the people moving now.
Home size
Square feet. Bigger homes mean bigger moves.
House age
Year built. Most older houses are on their second or third roof, so this runs far older than the roof chart.
Price ranges
Sale price, or last list price for listings.
Market status
Where each lead sits right now.
Lead score
How the file scores. Most of the money is in the right-hand bars.
Storm exposure
Leads inside a storm on file, by storm type. Uses the storm window on the Radar tab.
Sold under value
From the neighbor-based estimate. Only sales from the last two years are judged.
Top agents
Most listings in this view. One relationship here beats a hundred doors.
Top brokerages
Which offices own this view.
Your pipeline
Status you have set on each lead. Fills in as you work them.
Accounts, and what each one sees.
The database everyone shares, who can sign in, what you have given them, and a record of what has been done. This page only exists for the owner account.
What each account can reach.
Per account: the data they see — everything, whole states, named counties, or only what you send them — which trades the tool is set to, and which pages they can open. Save, and their next open follows it.
Everything, from every device.
Each device reports what it holds and what it has spent, so the numbers here are the real ones: your true RentCast usage this month, what Jarvis costs, who is in sync, and what has been worked lately.
RentCast connection
RentCast's own guidance is that the API key must never sit in a web page. The included Netlify function keeps it on the server, where nobody can read it.
Direct mode sends the key from your browser. RentCast may block that outright, and anyone with access to the machine can read it from browser storage. Use it to try things out, then switch to the function.
AI connection
Same arrangement as RentCast: the key lives on the server in the Netlify function, never in this page. In Netlify add an environment variable ANTHROPIC_API_KEY with a key from platform.claude.com, then redeploy.
If the model name is ever rejected, the error will say so — change it here and press Test. Nothing else in Moving HQ depends on the AI: leave ANTHROPIC_API_KEY unset and the Coach tab simply says it is not connected.
Service areas
Where each business goes. Miles are straight-line from your base; a rough rule turns them into drive time (straight-line × 1.3 = road miles, about 50 mph). Used by the “In my service area” filter, the map rings, the badge, and Jarvis.
Moving
Roofing
What counts as a house
A sale at or under the land price with no size and no year built is treated as a lot: dropped from both businesses. A cheap sale with a real house on it is treated as a possible flip: pushed down for moving, left alone for roofing.
Sync across devices
Your work — list picks, pipeline statuses, notes, reminders, Jarvis’s notebook and the agent desk — is kept in the site’s own cloud drawer and shared by every device. It pushes a few seconds after any change and pulls when you open the app. The leads themselves are far too big for that, so they travel by snapshot or backup file.
The whole lead file
The lead file itself does not travel through the small drawer — use either of these when a device is short. Catch this device up asks the server how many leads it holds and fills in any it is missing (safe to press any time; does nothing when everything is already here). Save a snapshot / Pull the snapshot pushes or pulls the entire file at once through the same cloud drawer.
Setting it up: in Netlify, Project configuration › Environment variables, add NETLIFY_SYNC_TOKEN (User settings › Applications › Personal access tokens) and, if it is not already there, SITE_ID (Project configuration › General › Project ID). Redeploy and press Sync now. Until then everything works as it does today and the backup file is unchanged.
Jarvis
Which brain he uses, and a monthly spending limit. Auto uses the quick model (Claude Haiku 4.5) for commands and questions, and the model set under AI connection for writing and analysis. claude-sonnet-5 there is the current, cheaper choice; older copies of the app were set to claude-sonnet-4-6.
Playbook
Your own rules for spotting a good lead. Jarvis reads the one for the business that is on before every answer, and follows it first. Add a line whenever you learn something about your trade.
Password protection
Off until you switch it on. In Netlify, add an environment variable:
SITE_PASSWORD— whatever password you want. That alone turns the lock on.SITE_USERNAME— optional. Leave it out and any username works.- Redeploy. The browser will ask for it the next time the site loads.
Two locks read that same variable. The edge lock covers the whole site, but only works if your Netlify site has an Edge Functions tab listing auth — drag-and-drop deploys often skip edge functions. The data lock lives inside the function that always deploys: with it on, nobody can pull records or spend your API quota without the password, which goes in the Site password box above. Delete the variable and redeploy to turn both off.
Deploying this
- Drag the whole
lead-radarfolder onto the Netlify deploys page. - In the site's settings, open Environment variables and add
RENTCAST_API_KEYwith your key as the value. - Trigger a redeploy so the function picks up the key.
- Open the site and press Test connection above. It should come back green.
Coverage area
RLX covers most of southern and central West Virginia. PBZ is Pittsburgh for the northern panhandle, LWX the eastern panhandle, RNK the southeast, JKL the Kentucky border counties.
How the score works
Moving
Freshness first: a home that sold in the last two weeks scores highest, because the buyer is moving in now; the score falls off over about three months. A pending sale scores high (moving soon); a listing scores by how long it has been on the market (the seller is getting ready to go). Bigger homes and higher prices add a little, because they are bigger jobs, and a reachable agent adds a little more.
Roofing
Storm exposure first: hail size or wind speed from the strongest report covering that address. Then the estimated age of the current roof, the roof material when RentCast has it, and a bump for a recent sale, because a new owner is reachable and still inside the claim window.
Roof age resets: a roof is assumed to be replaced every few decades, so a 1960 house is not scored as if it still had a 1960 roof. Houses on their original or second roof get a real estimate. Houses past their second reroof get the same honest odds, because by then storms and deferred jobs have scrambled any schedule.
Where your data lives
Leads and storms are stored in this browser only. Nothing is sent anywhere except the searches you run. Save a backup before switching machines.