franchiseoperatorsdiscovery
Franchise Multi-Unit Operator Discovery via API
Discover multi-unit franchise operators by searching Google Maps, grouping by shared contacts, and scoring by location count. Highest-value B2B prospects.
8 min
Discovering franchise multi-unit operators via API means searching Google Maps for franchise brand locations, grouping results by shared phone numbers or website domains, and identifying operators who control multiple locations. These are the highest-value B2B prospects for food service, POS, insurance, and real estate vendors.
Why multi-unit operators matter
- Higher contract value: one deal covers multiple locations
- Decision authority: multi-unit operators make purchasing decisions independently
- Growth signal: operators adding locations are actively spending
- Harder to find: not indexed in typical B2B databases
Discovery pipeline
Python
import requests
from collections import defaultdict
def discover_operators(brand: str, regions: list) -> list:
"""Find multi-unit franchise operators."""
all_locations = []
for region in regions:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": "YOUR_KEY"},
json={
"query": f"{brand} near {region}",
"num_results": 20
}
)
data = resp.json()
for r in data.get("local_results", []):
all_locations.append({
"name": r.get("title", ""),
"phone": r.get("phone", ""),
"website": r.get("website", ""),
"address": r.get("address", ""),
"region": region,
"rating": r.get("rating", ""),
"reviews": r.get("reviews_count", 0)
})
# Group by phone to find multi-unit operators
by_phone = defaultdict(list)
for loc in all_locations:
if loc["phone"]:
by_phone[loc["phone"]].append(loc)
operators = []
for phone, locations in by_phone.items():
if len(locations) >= 2:
operators.append({
"phone": phone,
"location_count": len(locations),
"regions": list(set(l["region"] for l in locations)),
"website": locations[0]["website"],
"avg_rating": sum(
float(l["rating"]) for l in locations if l["rating"]
) / len(locations)
})
return sorted(operators, key=lambda x: x["location_count"], reverse=True)
# Find multi-unit Chick-fil-A operators
operators = discover_operators("Chick-fil-A", [
"Atlanta GA", "Charlotte NC", "Nashville TN", "Dallas TX"
])
for op in operators[:10]:
print(f"Phone: {op['phone']} | Locations: {op['location_count']}")
print(f" Regions: {', '.join(op['regions'])}")
Enrich with web presence data
JavaScript
// After finding operators, check their web presence
async function enrichOperator(operator) {
// Search for the operator's website/business info
const resp = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.SCAVIO_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
query: operator.website || operator.phone,
num_results: 5
})
});
const data = await resp.json();
const results = data.organic_results || [];
return {
...operator,
hasWebsite: Boolean(operator.website),
webMentions: results.length,
possibleOwnerName: results[0]?.title?.split("|")[0]?.trim() || null
};
}
Outreach strategy for multi-unit operators
- Start with the biggest operators (5+ locations) -- highest deal value
- Reference specific locations in outreach ("I noticed your 6 locations across Dallas...")
- Lead with a problem specific to multi-unit operations (consistency, reporting)
- Phone outreach converts better than email for franchise operators
Cost model
Scanning 100 regions for one franchise brand: ~2,000 queries = $10. Scanning 10 brands across 100 regions: ~20,000 queries = $100. Total operator discovery for a sales quarter: under $200 vs $2,000+ for a purchased lead list from a franchise data broker.