Franchise Due Diligence
About
Franchise due diligence research inside any MCP-compatible AI client — one tool call delivers franchisor health scores, complaint trajectories, market saturation analysis, corporate structure investigation, and investment verdicts drawn from 8 parallel data sources.
Details
- Author
- apifyforge
- Downloads
- 141
- Categories
- Search
Jump to
- Composite Franchise Health Score (0–100) from 5 sources
- Market Saturation Index with 5‑tier classification
- Regulatory Compliance Profile tracking FTC enforcement actions
- Franchisee Sentiment Trend with rating and complaint breakdown
- Investment verdict: STRONG_BUY, BUY, HOLD, or AVOID
- 8 parallel data sources queried simultaneously
- Head‑to‑head brand benchmarking
- Spending limit enforcement on every tool call
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Franchise Due DiligenceCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Add the server URL to your MCP client configuration (Claude Desktop, Cursor, Windsurf) using the provided JSON block. Then call generate_investment_dossier with a franchise brand name (and optional territory) for a full structured dossier, or use individual tools like assess_market_saturation for targeted checks. Full dossiers complete in 90–120 seconds; individual tools return in 30–60 seconds.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"franchise due diligence": {
"franchise-due-diligence-mcp": {
"url": "https://ryanclinton--franchise-due-diligence-mcp.apify.actor/mcp"
}
}
}
}
McpServers
{
"franchise-due-diligence-mcp": {
"url": "https://ryanclinton--franchise-due-diligence-mcp.apify.actor/mcp"
}
}
Franchise Due Diligence MCP Server
> View on ApifyForge | Use on Apify Store
---
Quick Start
Add to your MCP client (Claude Desktop, Cursor, Windsurf):
{
"mcpServers": {
"franchise-due-diligence-mcp": {
"url": "https://ryanclinton--franchise-due-diligence-mcp.apify.actor/mcp"
}
}
}
---
Franchise due diligence research inside any MCP-compatible AI client — one tool call delivers franchisor health scores, complaint trajectories, market saturation analysis, corporate structure investigation, and investment verdicts drawn from 8 parallel data sources. Built for franchise investors, multi-unit operators, franchise attorneys, and consultants who need independent intelligence beyond what the Franchise Disclosure Document contains.
This MCP server orchestrates Company Deep Research, CFPB consumer complaints, Trustpilot and multi-platform reviews, OpenCorporates corporate registry, Google Maps location density, Federal Register regulatory filings, and BLS economic data into four proprietary scoring models. The composite algorithm weights franchise health (30%), market saturation (20%), regulatory compliance (20%), and franchisee sentiment (30%) to produce a STRONG_BUY, BUY, HOLD, or AVOID verdict — giving you the same analytical framework that professional franchise consultants use, automated and accessible from Claude, Cursor, or any AI agent.
What data can franchise due diligence extract?
| Data Point | Source | Example |
|---|---|---|
| 📊 Franchise Health Score (0-100) | 5-source composite | Score: 74, Level: HEALTHY |
| 📋 CFPB complaint count and trajectory | CFPB Consumer Complaints | 3 complaints — clean consumer record |
| ⭐ Average review rating across platforms | Trustpilot + Multi-Review Analyzer | 4.2/5 across 38 reviews |
| 🏢 Corporate entity status and count | OpenCorporates | 12 active, 2 dissolved entities |
| 📍 Location density per territory | Google Maps Lead Enricher | 14 locations in target metro area |
| 📈 Market saturation level | Maps + BLS composite | OPPORTUNITY — market has room for growth |
| ⚖️ FTC enforcement action count | Federal Register | 0 enforcement actions — compliant |
| 💰 Territory employment and consumer data | BLS Economic Data | Unemployment 3.8%, CPI trending up |
| 🏆 Investment verdict | Composite scoring model | BUY — compositeScore: 67 |
| 🔍 Investment risks list | Multi-source signal analysis | ["Market has 18 locations — moderate density"] |
| 💪 Investment strengths list | Multi-source signal analysis | ["Strong franchise health indicators"] |
| 🆚 Side-by-side brand benchmark | Dual-franchise comparison | Sentiment and market advantage identified |
Why use Franchise Due Diligence MCP Server?
Manual franchise research typically takes 15-20 hours per franchise system: sifting through FDD documents, searching CFPB databases, reading hundreds of reviews across platforms, checking corporate filings in multiple jurisdictions, and evaluating territory economics against labor statistics. A single franchise investment decision often involves comparing 3-5 competing systems, multiplying that time burden to 75-100 hours before signing anything. Specialized franchise research firms charge $200-500 per system evaluation in staff time.
This MCP server automates the entire data aggregation and scoring pipeline. Attach it to Claude or any AI agent, call generate_investment_dossier, and get a structured verdict in minutes — with underlying evidence from 8 sources cited directly in the response. Individual tools let you run targeted checks: market saturation before a territory commitment, complaint trajectory for an underperforming system you already operate, or a head-to-head benchmark when choosing between two franchise opportunities.
- Scheduling — run quarterly franchise health monitoring to track sentiment trends before they affect unit economics
- API access — trigger franchise evaluations from Python, JavaScript, or any HTTP client as part of a deal pipeline
- Parallel data collection — all 8 data sources are queried simultaneously, not sequentially, keeping response times under 2 minutes
- Monitoring — get Slack or email alerts when franchise assessments complete or when budget limits are reached
- Integrations — connect results to Zapier, Make, Google Sheets, or deal management CRMs via webhooks
Features
- Franchise Health Score (0-100) combining review quality (max 30 points), CFPB complaint penalty (max 25 points, 3 points deducted per complaint), corporate entity health (max 25 points), and company research signals (max 20 points)
- Market Saturation Index with 4-component scoring: Google Maps location density (max 40 points at 2 per location), rating distribution of existing locations (max 25 points), BLS unemployment and consumer indicators (max 20 points), and geographic concentration above 5 locations (max 15 points)
- Regulatory Compliance Profile tracking FTC Franchise Rule references, enforcement action counts from Federal Register title scanning, complaint-to-regulation pipeline ratios, and volume pressure across both regulatory sources
- Franchisee Sentiment Trend with 4-component scoring: average rating (max 35 points), review volume health (max 25 points), low-rating ratio inversion (max 20 points, inverted so fewer 1-2 star reviews score higher), CFPB complaint offset (max 20 points)
- Composite investment verdict weighting franchise health 30%, market saturation inverted 20%, regulatory compliance inverted 20%, sentiment 30% — with override logic that forces AVOID on FAILING health or CRITICAL regulatory classification regardless of other scores
- 8 parallel data sources dispatched via Promise.allSettled so individual source failures return empty arrays rather than aborting the entire assessment
- 5-tier saturation classification from UNDERSERVED through OVERSATURATED with territory-specific signal explanations for each component
- 5-tier sentiment classification from DECLINING through EXCELLENT with percentage breakdowns and complaint counts
- Head-to-head brand benchmarking running parallel data collection for two franchise systems simultaneously and identifying which has sentiment advantage and which has market opportunity advantage
- Territory economics scoring combining BLS employment series (LNS14 unemployment, CPI consumer data) with Google Maps competitive density for specific metro areas
- Corporate structure investigation with optional jurisdiction code filter and dissolved/active/struck entity ratio analysis via OpenCorporates status field matching
- Spending limit enforcement on every tool call — runs stop cleanly when your configured budget is reached, never silently overcharging
Use cases for franchise due diligence
Pre-investment franchise evaluation
A prospective franchisee has narrowed their shortlist to three restaurant franchise systems. Before paying an attorney to review each FDD, they use evaluate_franchisor to get independent Franchise Health Scores for all three. A system showing 22 CFPB complaints and a 2.8/5 review average gets removed from consideration before legal fees are incurred. The remaining candidates advance to detailed review with a clear evidence trail justifying the decision.
Multi-unit operator territory expansion
An existing franchisee with 4 units wants to add 2 more in a neighboring metro area. They call assess_market_saturation for their franchise brand in that city, see 19 existing locations against BLS data showing below-average consumer spending, and get a CROWDED saturation score. They pivot to an adjacent market showing only 4 locations with strong employment numbers and return an OPPORTUNITY classification — selecting a lower-risk territory before committing to lease negotiations.
Franchise attorney due diligence support
A franchise attorney preparing for FDD review uses investigate_corporate_structure to map the franchisor's legal entity tree before their client meeting. The tool surfaces 7 dissolved entities across 3 jurisdictions flagged as structural concerns, and track_franchise_regulation surfaces 3 FTC Franchise Rule references in the Federal Register. These findings go directly into the attorney's client briefing, reducing data gathering from days to minutes.
Competitive franchise benchmarking for investment selection
A private equity firm evaluating two competing fitness franchise systems calls benchmark_franchise_brand with both brand names. The tool returns parallel sentiment scores, market saturation indices, and complaint volumes in a single structured comparison. The franchise with the stronger sentiment advantage and lower saturation score moves forward in their acquisition pipeline with documented justification.
Ongoing portfolio monitoring for existing operators
A multi-unit franchisee uses scheduled runs of analyze_complaint_trajectory quarterly to track brand health for the system they already operate. A spike in CFPB complaints and a drop from 4.1 to 3.4 average rating over two quarters triggers an early conversation with the franchisor — months before a system-wide support decline would affect unit-level sales.
Franchise consultant client advisory
A franchise consultant onboarding a new client runs generate_investment_dossier as the first step in the engagement, producing a structured briefing that categorizes risks and strengths across all four scoring dimensions. The structured JSON output feeds directly into a client presentation without hours of manual research.
How to run a franchise due diligence analysis
1. Connect the MCP server — Add the server URL to your MCP client configuration. For Claude Desktop, paste the JSON block from the connection section below into your claude_desktop_config.json. For Cursor, Windsurf, or Cline, use the same endpoint URL and Bearer token header.
2. Choose your tool — Start with generate_investment_dossier and provide the franchise brand name (e.g., "Anytime Fitness") and optionally a target territory (e.g., "Austin, TX"). For faster targeted checks, use individual tools like assess_market_saturation or analyze_complaint_trajectory.
3. Wait for parallel data collection — The MCP queries up to 8 sources simultaneously. Full dossiers complete in 90-120 seconds. Individual tools complete in 30-60 seconds.
4. Read the structured verdict — Results arrive as structured JSON in your AI chat, showing the investment verdict, scores for each dimension, signal lists explaining every score component, and supporting data from each source.
MCP tools
| Tool | Price | Parameters | Description |
|------|-------|------------|-------------|
| evaluate_franchisor | $0.045 | franchise (required) | Company research, OpenCorporates, Trustpilot, multi-platform reviews, CFPB. Returns Franchise Health Score 0-100 with healthLevel classification |
| analyze_complaint_trajectory | $0.045 | franchise (required) | CFPB complaints + Trustpilot + multi-platform reviews. Returns Franchisee Sentiment trend with rating and complaint breakdown |
| assess_market_saturation | $0.045 | franchise (required), location (optional) | Google Maps location density + BLS economic indicators. Returns saturation classification and territory signals |
| investigate_corporate_structure | $0.045 | franchise (required), jurisdiction (optional) | OpenCorporates entity search + company research. Returns entity tree with active/dissolved status flags |
| track_franchise_regulation | $0.045 | topic (optional), franchise (optional) | Federal Register FTC/franchise rules + CFPB. Returns Regulatory Compliance Profile with enforcement action count |
| benchmark_franchise_brand | $0.045 | franchise_a (required), franchise_b (required) | Parallel dual-franchise comparison — sentiment, saturation, complaints, and location density for both systems |
| score_territory_economics | $0.045 | location (required), franchise (optional) | BLS employment and consumer data + Google Maps competitive density. Returns economic indicators and location count |
| generate_investment_dossier | $0.045 | franchise (required), location (optional) | All 8 sources, 4 scoring models, composite STRONG_BUY/BUY/HOLD/AVOID verdict with risks and strengths lists |
Input tips
- Start with generate_investment_dossier — it runs all 8 sources and all 4 models in one call for $0.045, giving the full picture before drilling down with targeted tools
- Always include a location in assess_market_saturation and score_territory_economics — without it the query defaults to national data which dilutes territory-specific signals
- Use the exact consumer-facing brand name the franchise operates under (e.g., "Jersey Mike's Subs" not "Jersey Mike's Franchise Systems") — source APIs match on publicly known names
- Run benchmark_franchise_brand before evaluate_franchisor when comparing multiple systems — benchmarking costs the same as a single evaluation and gives you relative context immediately
- Set a spending limit per run in your Apify run settings to cap costs in agent loops that may call tools repeatedly
Output example
{
"entity": "Pinnacle Fitness Franchise",
"compositeScore": 71,
"verdict": "BUY",
"franchiseHealth": {
"score": 74,
"complaintCount": 2,
"reviewScore": 4.1,
"corporateFlags": 1,
"healthLevel": "HEALTHY",
"signals": [
"Strong review sentiment: 4.1/5 average",
"No CFPB complaints — clean consumer record",
"8 active corporate entities — established structure"
]
},
"marketSaturation": {
"score": 32,
"locationDensity": 11,
"economicViability": 8,
"saturationLevel": "OPPORTUNITY",
"signals": [
"11 locations found — moderate presence",
"Most locations highly rated — strong brand execution"
]
},
"regulatoryCompliance": {
"score": 14,
"regulationCount": 3,
"enforcementActions": 0,
"complianceLevel": "MINIMAL",
"signals": [
"3 FTC Franchise Rule references — disclosure requirements active"
]
},
"franchiseeSentiment": {
"score": 76,
"totalReviews": 29,
"averageRating": 4.1,
"sentimentTrend": "STRONG",
"signals": [
"Excellent sentiment: 4.1/5",
"29 reviews providing solid signal base"
]
},
"allSignals": [
"Strong review sentiment: 4.1/5 average",
"No CFPB complaints — clean consumer record",
"8 active corporate entities — established structure",
"11 locations found — moderate presence",
"Most locations highly rated — strong brand execution",
"3 FTC Franchise Rule references — disclosure requirements active",
"Excellent sentiment: 4.1/5"
],
"investmentRisks": [],
"investmentStrengths": [
"Strong franchise health indicators",
"Market has room for growth",
"Excellent consumer/franchisee sentiment",
"Low regulatory burden"
]
}
Output fields
| Field | Type | Description |
|-------|------|-------------|
| entity | string | Franchise brand name passed to the tool |
| compositeScore | number | Weighted composite 0-100: health 30% + saturation inverted 20% + regulatory inverted 20% + sentiment 30% |
| verdict | string | STRONG_BUY (≥75) / BUY (≥55) / HOLD (≥35) / AVOID (<35 or override triggered) |
| franchiseHealth.score | number | 0-100 from review quality + complaint penalty + corporate health + company signals |
| franchiseHealth.complaintCount | number | Raw CFPB complaint count retrieved |
| franchiseHealth.reviewScore | number | Mean rating across Trustpilot + multi-platform reviews (1 decimal) |
| franchiseHealth.corporateFlags | number | Count of dissolved/inactive/struck corporate entities found |
| franchiseHealth.healthLevel | string | FAILING / STRUGGLING / AVERAGE / HEALTHY / THRIVING |
| franchiseHealth.signals | string[] | Human-readable explanations of each score component |
| marketSaturation.score | number | 0-100, higher = more saturated (high score is negative for new entrants) |
| marketSaturation.locationDensity | number | Count of existing franchise locations found via Google Maps |
| marketSaturation.economicViability | number | Net BLS economic strength score (unemployment + consumer indicators) |
| marketSaturation.saturationLevel | string | UNDERSERVED / OPPORTUNITY / BALANCED / CROWDED / OVERSATURATED |
| regulatoryCompliance.score | number | 0-100, higher = heavier regulatory burden |
| regulatoryCompliance.regulationCount | number | Federal Register documents retrieved for the franchise/topic |
| regulatoryCompliance.enforcementActions | number | Documents referencing enforcement, penalty, or FTC actions |
| regulatoryCompliance.complianceLevel | string | MINIMAL / STANDARD / ELEVATED / HEAVY / CRITICAL |
| franchiseeSentiment.score | number | 0-100, higher = better sentiment |
| franchiseeSentiment.totalReviews | number | Total reviews analyzed across all platforms |
| franchiseeSentiment.averageRating | number | Weighted average rating 0-5 (1 decimal) |
| franchiseeSentiment.sentimentTrend | string | DECLINING / STABLE / IMPROVING / STRONG / EXCELLENT |
| allSignals | string[] | Merged signal list from all four scoring models |
| investmentRisks | string[] | Automatically identified risk flags from scoring thresholds |
| investmentStrengths | string[] | Automatically identified strength flags from scoring thresholds |
How much does franchise due diligence cost?
This MCP server uses pay-per-event pricing — you pay $0.045 per tool call. Platform compute costs are included. There is no subscription and no minimum spend.
| Scenario | Tool calls | Cost per call | Total cost |
|----------|-----------|---------------|------------|
| Single tool test (complaints only) | 1 | $0.045 | $0.045 |
| Basic franchisor evaluation | 1 | $0.045 | $0.045 |
| Evaluate + territory + sentiment (3 tools) | 3 | $0.045 | $0.14 |
| Compare 5 franchise systems (benchmark tool) | 5 | $0.045 | $0.23 |
| Full pipeline: dossier + territory + quarterly monitoring | 12 | $0.045 | $0.54 |
You can set a maximum spending limit per run to control costs. The MCP stops cleanly when your budget is reached, returning an explicit error message rather than a partial result.
Franchise attorneys and consultants at specialized research firms typically spend $200-500 per franchise evaluation in staff research time. At $0.045 per tool call, a complete franchise investment dossier costs less than a cup of coffee. Apify's free tier includes $5 of monthly platform credits, covering over 100 tool calls with no payment method required.
Franchise due diligence using the API
Python
import urllib.request, json
url = "https://franchise-due-diligence-mcp.apify.actor/mcp"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "generate_investment_dossier",
"arguments": {
"franchise": "Pinnacle Fitness Franchise",
"location": "Austin, TX"
}
},
"id": 1
}
req = urllib.request.Request(url, json.dumps(payload).encode(), headers)
with urllib.request.urlopen(req) as resp:
result = json.loads(resp.read())
dossier = json.loads(result["result"]["content"][0]["text"])
print(f"Verdict: {dossier['verdict']} — Composite Score: {dossier['compositeScore']}/100")
print(f"Health: {dossier['franchiseHealth']['healthLevel']} ({dossier['franchiseHealth']['score']}/100)")
print(f"Saturation: {dossier['marketSaturation']['saturationLevel']}")
print(f"Sentiment: {dossier['franchiseeSentiment']['sentimentTrend']} — {dossier['franchiseeSentiment']['averageRating']}/5")
for strength in dossier["investmentStrengths"]:
print(f" + {strength}")
JavaScript
const url = "https://franchise-due-diligence-mcp.apify.actor/mcp";
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_APIFY_TOKEN"
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "tools/call",
params: {
name: "generate_investment_dossier",
arguments: {
franchise: "Pinnacle Fitness Franchise",
location: "Austin, TX"
}
},
id: 1
})
});
const result = await response.json();
const dossier = JSON.parse(result.result.content[0].text);
console.log(Verdict: ${dossier.verdict} (${dossier.compositeScore}/100));
console.log(Health: ${dossier.franchiseHealth.healthLevel});
console.log(Saturation: ${dossier.marketSaturation.saturationLevel});
console.log(Sentiment: ${dossier.franchiseeSentiment.sentimentTrend} — ${dossier.franchiseeSentiment.averageRating}/5);
for (const strength of dossier.investmentStrengths) {
console.log( + ${strength});
}
cURL
```bash
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.

