Miami Openings Radar Protocol
Purpose: maintain an adaptive feed of newly opening Miami food, cafe, market, and hospitality businesses that are worth Koatji outreach.
Full Public Reader
Miami Openings Radar Protocol
Purpose: maintain an adaptive feed of newly opening Miami food, cafe, market, and hospitality businesses that are worth Koatji outreach.
This is not a single-source scrape. New openings are noisy. One signal means "maybe." Two independent signals means "watch." Three aligned signals means "work this lead."
Operating Thesis
The best Koatji moment is before a shop has locked its beverage program.
The radar should catch prospects at four stages:
1. Buildout - permit, construction, certificate, plan review, or business registration activity.
2. Pre-open - "coming soon," hiring, menu testing, buildout photos, soft-opening language.
3. Soft open - limited hours, first posts, Resy/OpenTable listings, local coverage.
4. Newly open - media coverage, first reviews, active menu, ready for outreach or visit.
The protocol should avoid chasing every restaurant. It should prioritize shops where Koatji has a realistic product fit: specialty coffee, matcha, bakery cafes, health-forward restaurants, upscale markets, juice/wellness, coworking cafes, hospitality groups, and design-forward neighborhood concepts.
Source Tiers
Tier 0 - Official Early Signals
These are the earliest but least human-readable signals.
| Source | Use | Feed Behavior |
|---|---|---|
| Miami-Dade Local Business Tax GIS | Detect new or renewed business entities, business start dates, categories, NAICS, address, phone, email | Daily query, diff against prior snapshot |
| City of Miami Data Explorer / Building Permits | Detect restaurant/cafe buildouts, improvements, tenant changes, commercial food-service work | Daily or 3x weekly query |
| City of Miami Business Licensing / Certificate of Use | Confirm business legality and final opening readiness | Weekly/manual until API path is stable |
| Miami Beach Civic Access | Permits, BTR, CU, fire inspection, planning/code compliance for Miami Beach | Weekly/manual or portal-monitor |
| Miami-Dade Certificate of Occupancy / Certificate of Use | Detect change-of-use or occupancy readiness | Weekly/manual for high-score candidates |
Important source notes:
- Miami-Dade's Local Business Tax ArcGIS layer exposes useful fields including `BUSSDATE`, `NEWBUS`, `BUSNAME`, `BUSADDR`, `BUSCITY`, `CLASSDESC`, `CATGRYNAME`, `OCCDESC`, `BUSNAICSCD`, `PHONENO`, `EMAIL`, `LAT`, and `LON`.
- City of Miami's public Data Explorer includes building permit open data and business licensing resources.
- Miami Beach Civic Access is the live service portal for permits, planning, business tax receipts, and code compliance.
Tier 1 - Market-Ready Signals
These are less early, but much better for sales timing.
| Source | Use | Feed Behavior |
|---|---|---|
| Eater Miami Openings | Restaurants that are visible enough for public attention | Weekly scrape/check |
| The Infatuation Miami New Openings | Strong signal for trendy, design-forward, food-focused openings | Weekly scrape/check |
| Resy / OpenTable new listings | Detect restaurants taking reservations before broad coverage | Weekly check |
| Miami New Times food openings | Local editorial coverage and "coming soon" items | Weekly check |
| Yelp / Google Maps "new" listings | Confirm status, address, phone, hours | 2x weekly enrichment |
Tier 2 - Social Confirmation
This layer determines whether a lead is alive and whether the brand feels like Koatji.
Watch for:
- Instagram bio: `coming soon`, `soft opening`, `now open`, `grand opening`, `opening soon`
- Posts showing buildout, staff hiring, training, drink testing, first service, friends-and-family night
- Menu images with matcha, espresso, latte, chai, smoothies, wellness drinks, bakery, breakfast
- Tags from known Miami operators, designers, chefs, baristas, hospitality groups
- Follower/comment quality, not just follower count
Tier 3 - Human Verification
Human verification is required before outreach unless the lead comes from a trusted warm source.
Minimum verification:
- Business is real and local.
- Address is not a home office, warehouse-only address, or corporate back office.
- The business has an actual consumer-facing food/beverage use case.
- Contact route exists: email, website form, Instagram DM, phone, or visit.
- No obvious anti-ICP signal.
Lead States
| State | Meaning | Next Action |
|---|---|---|
| `raw_signal` | One source saw something | Wait for second signal or enrich |
| `watch` | Plausible opening, not enough proof | Check Instagram, Google Maps, permits |
| `verify` | Good enough to inspect manually | Human confirms fit and contact path |
| `outreach_ready` | Verified, contactable, ICP score above threshold | Send email, DM, call, or visit |
| `route_ready` | Worth in-person drop-by | Add to Miami route list |
| `contacted` | Outreach happened | Track response/follow-up |
| `sample_candidate` | Positive response or high-priority visit target | Prep sample/drop |
| `customer` | Converted | Move to active account |
| `nurture` | Not ready, but worth revisiting | Recheck in 30/60/90 days |
| `skip` | Not a fit | Store reason, suppress duplicates |
Feed Output
Every run should produce four views.
1. Fresh Radar
New candidates discovered in the last 7 days.
Columns:
- `discovered_at`
- `business_name`
- `address`
- `city`
- `source_count`
- `opening_stage`
- `opening_confidence`
- `icp_score`
- `outreach_priority`
- `recommended_action`
2. Outreach Ready
Verified leads where the next action is clear.
Columns:
- `business_name`
- `contact_method`
- `decision_maker`
- `why_now`
- `why_koatji`
- `opening_stage`
- `recommended_channel`
- `owner`
- `due_date`
3. Route Ready
Leads worth visiting physically.
Columns:
- `business_name`
- `address`
- `neighborhood`
- `hours`
- `stage`
- `drop_reason`
- `sample_needed`
- `notes`
4. Watchlist
Strong but premature leads.
Columns:
- `business_name`
- `latest_signal`
- `missing_signal`
- `next_check_date`
- `watch_reason`
Canonical Lead Schema
Use this schema for CSV, SQLite, Supabase, or dashboard ingestion.
| Field | Type | Meaning |
|---|---|---|
| `radar_id` | text | Stable hash of normalized name + address |
| `business_name` | text | Current public name |
| `legal_name` | text | Registered owner/entity if available |
| `address` | text | Physical address |
| `city` | text | Miami, Miami Beach, Coral Gables, etc. |
| `neighborhood` | text | Wynwood, Brickell, Coconut Grove, Design District, etc. |
| `lat` / `lon` | number | Coordinates |
| `category` | text | cafe, restaurant, bakery, market, juice, wellness, hospitality group |
| `opening_stage` | enum | buildout, pre_open, soft_open, newly_open, unknown |
| `first_seen_at` | date | First radar detection |
| `last_seen_at` | date | Most recent signal |
| `source_count` | integer | Count of independent source families |
| `source_urls` | json | Links and source labels |
| `official_signal` | boolean | Permit, LBT, CU, BTR, DBPR, etc. |
| `social_signal` | boolean | Instagram/social activity confirms life |
| `media_signal` | boolean | Eater, Infatuation, Resy, New Times, etc. |
| `maps_signal` | boolean | Google/Yelp/Maps confirms listing/hours |
| `contact_email` | text | |
| `phone` | text | Phone |
| `instagram` | text | IG handle |
| `website` | text | Website |
| `decision_maker` | text | Owner, GM, chef, beverage lead |
| `icp_score` | number | 0-100 |
| `opening_confidence` | number | 0-100 |
| `outreach_priority` | enum | P0, P1, P2, P3 |
| `recommended_action` | text | verify, email, DM, call, visit, hold |
| `status` | enum | raw_signal, watch, verify, outreach_ready, route_ready, contacted, sample_candidate, customer, nurture, skip |
| `skip_reason` | text | If skipped |
| `owner` | text | Mo, Kevin, Carson, unassigned |
| `next_check_date` | date | Follow-up date |
Scoring Model
Total score is 0-100.
A. Opening Timing Score, 0-25
- 25: soft-open or opening-week signal
- 22: active "coming soon" with staff/menu/buildout content
- 18: BTR/LBT/CU/new business signal within 60 days
- 12: permit/buildout signal, likely food/beverage but no social confirmation
- 5: vague rumor or old listing
B. ICP Fit Score, 0-30
Use the existing Koatji ICP standard.
- +8 specialty coffee, matcha, espresso, tea, bakery cafe, or wellness drinks
- +6 design-forward or premium brand
- +5 menu uses milk daily: latte, matcha, chai, smoothies, breakfast, pastry
- +4 health-forward, plant-based, organic, craft, local
- +4 1-5 locations or credible operator group
- +3 social feed has strong visual/aesthetic signal
C. Contactability Score, 0-15
- +6 direct email found
- +4 Instagram active and DM-friendly
- +3 phone found
- +2 decision-maker name found
D. Route Leverage Score, 0-10
- +5 near existing Miami account, warm contact, or planned route
- +3 dense cluster neighborhood
- +2 easy sample/drop logistics
E. Confidence Score, 0-15
- +5 official signal
- +5 social or map confirmation
- +3 media/reservation listing
- +2 two or more independent sources agree on name/address
F. Penalties
- -20 chain/franchise/corporate procurement
- -15 no beverage use case
- -12 stale signal older than 120 days with no movement
- -10 no contact path
- -10 address appears to be office/home/warehouse only
- -8 low-quality or inactive social presence
Priority Bands
| Priority | Score | Meaning | Action |
|---|---|---|---|
| P0 | 85-100 | Work now | Same-day verify and contact |
| P1 | 70-84 | Strong | Add to weekly outreach |
| P2 | 55-69 | Maybe | Watch or enrich |
| P3 | 40-54 | Weak | Hold unless route-adjacent |
| Skip | <40 | Not worth current attention | Store reason |
Adaptive Loop
The radar should learn from results.
Every outreach result updates the feed model:
- If response is positive, increase weight for the strongest source family that found it.
- If no response after two attempts, reduce contactability confidence but do not reduce ICP fit.
- If lead is not open yet, move to `nurture` with a timed recheck.
- If lead is not food/beverage, mark source pattern as false positive.
- If a lead converts, store its source trail as a gold-standard detection path.
Monthly model review:
- Top 10 converted or high-quality Miami prospects.
- Top 10 false positives.
- Best source families by conversion.
- Best neighborhoods by conversion.
- Best opening stage for contact.
- Average days from first signal to outreach.
Cadence
| Cadence | Job |
|---|---|
| Daily morning | Query official feeds and diff new/changed records |
| Monday / Wednesday / Friday | Enrich new candidates with Google/Instagram/web |
| Tuesday | Pull media/reservation/new-opening lists |
| Friday | Produce Miami Openings Digest |
| Monthly | Re-score source weights and false-positive rules |
Miami Neighborhood Focus
Initial high-value neighborhoods:
- Wynwood
- Design District
- Brickell
- Coconut Grove
- Coral Gables
- Little River
- Little Haiti
- Edgewater
- Miami Beach
- South Miami
- Midtown
- Downtown
Recommended Digest Format
Miami Openings Radar - YYYY-MM-DD
P0 - Work Now
1. Business Name - neighborhood
Stage: soft open
Why now: IG says opening week, Google listing active, BTR found
Why Koatji: matcha + espresso + design-forward cafe
Action: DM today, email tomorrow, visit this week
P1 - Strong
...
Watchlist
...
False positives suppressed
...Outreach Rules
- Do not send automated outreach from only one weak signal.
- Do not contact if the business is clearly not open and has no public-facing contact path.
- For soft openings, use light language: "Saw you just opened / are getting ready to open."
- For permit-only leads, do not mention permits. Treat permits as internal timing intelligence.
- If a lead is Miami route-ready, prefer visit/sample over cold email when practical.
Implementation Path
Phase 1 - Manual Feed
Create `data/miami-openings-radar.csv` weekly from the source checklist. Use this protocol for scoring.
Phase 2 - Semi-Automated Feed
Build a script that:
1. Queries Miami-Dade LBT ArcGIS.
2. Pulls City of Miami permit/open-data records.
3. Reads media/RSS/web pages.
4. Normalizes name/address.
5. Diffs against previous snapshots.
6. Writes CSV/JSON digest.
Phase 3 - CRM Integration
Add qualified leads into the Koji contact database:
- `contacts.type = lead`
- `contacts.source = miami_openings_radar`
- pipeline stage `lead`
- score from radar model
- next action based on priority
Phase 4 - Route + Digest Automation
Post a weekly digest to the Koatji sales workspace and create route-ready lead batches for Miami visits.
Current Source Registry
- Miami-Dade Local Business Tax GIS: https://gisweb.miamidade.gov/arcgis/rest/services/BusinessTracker/MapServer/0
- Miami-Dade LBT metadata: https://gisweb.miamidade.gov/GISSelfServices/Data/HTML/LocalBusinessTax.htm
- City of Miami Data Explorer: https://www.miami.gov/Maps-Data/Data-Explorer
- Miami Beach Civic Access: https://www.miamibeachfl.gov/business/civicaccess/
- Miami-Dade Certificate of Occupancy / Certificate of Use: https://vote.miamidade.gov/global/economy/building/cert-of-occupancy.page
- Eater Miami Openings: https://miami.eater.com/openings
- The Infatuation Miami New Openings: https://www.theinfatuation.com/miami/guides/new-miami-restaurant-openings
- Resy New Openings: https://blog.resy.com/new-on-resy/
Promotion Decision
Attach run IDs, datasets, metrics, and reproduction commands.
Source Anchor
koji-assistant/MIAMI-OPENINGS-RADAR-PROTOCOL.md
Detected Structure
Method · Evaluation · Architecture