Franchise Due Diligence MCP Server
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.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| evaluate_franchisor | Deep research + corporate + reviews + complaints. | $0.20 |
| analyze_complaint_trajectory | CFPB + Trustpilot + multi-review sentiment. | $0.12 |
| assess_market_saturation | Google Maps density + BLS economics. | $0.10 |
| investigate_corporate_structure | OpenCorporates + deep research ownership. | $0.10 |
| track_franchise_regulation | FTC Franchise Rule + Federal Register. | $0.08 |
| benchmark_franchise_brand | Head-to-head franchise comparison. | $0.25 |
| score_territory_economics | BLS + Maps territorial analysis. | $0.08 |
| generate_investment_dossier | All 8 sources, 4 scoring models, BUY/AVOID verdict. | $0.40 |
Example: 100 events = $20.00 · 1,000 events = $200.00
Connect to your AI agent
Add this MCP server to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
https://ryanclinton--franchise-due-diligence-mcp.apify.actor/mcp{
"mcpServers": {
"franchise-due-diligence-mcp": {
"url": "https://ryanclinton--franchise-due-diligence-mcp.apify.actor/mcp"
}
}
}Documentation
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.allSettledso 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
- 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. - Choose your tool — Start with
generate_investment_dossierand 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 likeassess_market_saturationoranalyze_complaint_trajectory. - 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.
- 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
locationinassess_market_saturationandscore_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_brandbeforeevaluate_franchisorwhen 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
# Full investment dossier — STRONG_BUY/BUY/HOLD/AVOID verdict
curl -X POST "https://franchise-due-diligence-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "generate_investment_dossier",
"arguments": {
"franchise": "Pinnacle Fitness Franchise",
"location": "Austin, TX"
}
},
"id": 1
}'
# Compare two franchise systems head-to-head
curl -X POST "https://franchise-due-diligence-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "benchmark_franchise_brand",
"arguments": {
"franchise_a": "Anytime Fitness",
"franchise_b": "Planet Fitness"
}
},
"id": 2
}'
How to connect this MCP server
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"franchise-due-diligence": {
"url": "https://franchise-due-diligence-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}
Cursor, Windsurf, Cline, and other MCP clients
Use the same endpoint URL and Authorization header in your client's MCP server configuration. The server uses Streamable HTTP transport (stateless per request), compatible with all MCP 1.x clients.
Endpoint: https://franchise-due-diligence-mcp.apify.actor/mcp
Method: POST
Auth: Bearer YOUR_APIFY_TOKEN
How Franchise Due Diligence MCP works
Phase 1: Parallel data collection
When any tool is called, runActorsParallel dispatches all required actor calls simultaneously using Promise.allSettled. This means a full 8-source dossier collects all data in roughly the time of the slowest single source, not 8 times that time. Failures in individual sources return empty arrays rather than aborting the entire run — the scoring models degrade gracefully on missing data with conservative defaults.
Each actor call is capped at 256 MB memory and a 120-second timeout via the Apify client configuration. Actor IDs are hardcoded rather than looked up dynamically, ensuring consistent targeting of the correct actor versions: Company Deep Research (2cAY2V9yz1JE2H1S2), CFPB Complaints (OuMDkYU3IROUS0AEj), Trustpilot Review Analyzer (BLXRNH33QZNOoyKEg), Multi-Review Analyzer (S85IfVOoTyN9XWyXs), OpenCorporates (x0a1Q4g0MLc7h15Im), Google Maps Lead Enricher (nbWolQ1LMHgZsZeSg), Federal Register (8bZkbWKlXQrDq0ZgK), BLS Economic Data (7IoF52qtM0SrQcCDG).
Phase 2: Four independent scoring models
Each scoring model processes raw data arrays from specific sources and returns a normalized 0-100 score with a classification level and human-readable signal strings.
Franchise Health Score extracts ratings from both Trustpilot and multi-review arrays, computing a mean rating mapped to a 30-point component via meanRating * 6. CFPB complaint count is penalized at 3 points per complaint up to 25 points maximum, then inverted. OpenCorporates entities are parsed for active versus dissolved status using string matching on company_status and status fields. Company research items are full-text searched for keywords: growth/expansion/revenue (positive) versus lawsuit/bankrupt/fraud/decline (negative).
Market Saturation Index counts Google Maps locations for the density component (2 points per location, max 40). Location ratings below 3.5 accumulate as quality degradation signals. BLS series IDs are matched against LNS14 unemployment patterns and CPI consumer indicators, with unemployment below 4.0% adding 5 economic strength points and above 6.0% deducting 3. Geographic concentration adds 2 points per location above the 5-location baseline up to 15 additional points.
Regulatory Compliance Profile scans Federal Register document titles for "enforcement", "penalty", "ftc", "franchise", "fdd", and "disclosure" keywords. The complaint-to-regulation ratio captures the pattern of complaints without a corresponding regulatory response. Volume pressure combines raw counts from both CFPB and Federal Register sources.
Franchisee Sentiment Trend merges Trustpilot and multi-review arrays, computing average rating for 35 points, review count for 25 points, low-rating (1-2 star) ratio inverted for 20 points, and CFPB complaint count offset for 20 points.
Phase 3: Composite scoring and verdict
The investment dossier combines all four scores: health * 0.30 + (100 - saturation) * 0.20 + (100 - regulatory) * 0.20 + sentiment * 0.30. Saturation and regulatory are inverted because higher scores represent worse outcomes for investors. The resulting composite maps to verdicts at thresholds 75, 55, and 35. Two override conditions force AVOID regardless of composite score: healthLevel === 'FAILING' (score below 20) or complianceLevel === 'CRITICAL' (regulatory score above 80).
Phase 4: MCP protocol transport
The server uses StreamableHTTPServerTransport from the MCP SDK with sessionIdGenerator set to stateless mode — a new server instance is created per POST request, making the server horizontally scalable and compatible with Apify's standby infrastructure. The Express app runs on ACTOR_STANDBY_PORT in standby mode, and exits cleanly after 1 second in normal actor run mode to pass health checks.
Tips for best results
-
Include a territory location for saturation analysis. Calling
assess_market_saturationorscore_territory_economicswithout a location returns national-level data. Adding a specific city or metro (e.g., "Denver, CO") makes Google Maps density and BLS data meaningful for your actual investment decision. -
Use
benchmark_franchise_brandbefore committing to deeper evaluation. A head-to-head comparison costs $0.045 and immediately identifies which franchise system has better sentiment and market positioning. Reserve the more data-intensiveevaluate_franchisorcalls for the stronger candidate. -
Treat CFPB complaint count as a leading indicator. The CFPB database captures complaints before they escalate to regulatory action. A franchise with 15+ CFPB complaints and no Federal Register response is building enforcement risk — the signal "High complaints but no regulatory response — enforcement risk building" specifically flags this pattern.
-
Override signals take priority over composite score. An AVOID verdict from override logic (FAILING health or CRITICAL regulatory level) is a hard stop regardless of how well other dimensions score. Read the
allSignalsarray carefully before interpreting the composite score in isolation. -
Run quarterly for portfolio monitoring. Franchise brand health changes slowly. Running
analyze_complaint_trajectoryevery 90 days for franchises you already operate gives early warning of system deterioration — sentiment drops typically precede unit-level sales declines by 2-4 quarters. -
Combine with FDD review, not as a replacement. This MCP surfaces independent public-data signals that complement and sometimes contradict what franchisors disclose. Use the scores as a pre-filter and hypothesis generator, then verify material findings in the actual FDD.
-
Set a per-run spending limit for agent workflows. AI agents using tool-use loops can call MCP tools multiple times in a single session. Configure a maximum spend in your Apify run settings to prevent unexpected costs during development.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| Company Deep Research | Run standalone deep research on a franchisor's parent company to expand management and financial intelligence beyond what the dossier captures |
| Trustpilot Review Analyzer | Extract granular review text and sentiment for specific franchise locations as a follow-up to a brand-level evaluation |
| Multi-Review Analyzer | Pull cross-platform reviews from Google, Yelp, and Trustpilot for specific franchise outlet addresses identified during territory research |
| Google Maps Lead Enricher | Enrich individual franchise location listings with full contact data — phone, website, hours — after market saturation analysis |
| Website Contact Scraper | Extract franchise broker and consultant contact details for outreach after identifying target franchise systems |
| B2B Lead Qualifier | Score franchise development leads from trade shows or broker networks before committing research time to full evaluations |
| Website Change Monitor | Monitor franchisor websites and FDD landing pages for material changes between your evaluation and contract signing |
Limitations
- No FDD or Item 19 financial data. Franchise Disclosure Document contents, Item 19 financial performance representations, and audited financial statements are not available through any of the 8 public data sources. This MCP uses proxy signals (review sentiment, complaint trajectory, location density) as indicators of system health, not direct financial performance data.
- Review data reflects consumer and franchisee perspectives mixed together. Trustpilot and multi-platform reviews aggregate customer reviews and occasionally franchisee reviews without distinguishing between them. Sentiment signals represent the brand's public reputation, not franchisee satisfaction in isolation.
- CFPB covers financial services complaints only. The CFPB database captures complaints related to financial products and services. Non-financial franchise complaints (food quality, service failures, employment disputes) are not captured here. Franchise categories without a financial product component (food, fitness, home services) will show fewer CFPB complaints by nature, not necessarily better performance.
- OpenCorporates coverage varies by jurisdiction. Corporate registry data is comprehensive for the US, UK, and many EU jurisdictions but may be sparse or delayed for less-covered states and international markets. Entity counts should be interpreted as minimum counts, not definitive totals.
- Google Maps density reflects publicly listed locations only. Franchise locations that have not claimed or created a Google Maps listing will not appear in density counts, potentially understating saturation in some markets.
- BLS economic data is national or state-level by default. Sub-metro or neighborhood-level economic data requires custom BLS series IDs not supported by the default query. General employment and consumer indicators may not reflect hyper-local market conditions.
- Scoring models are signal-based, not predictive. Scores reflect current public data signals. They do not guarantee investment outcomes or predict future franchise system performance. Use them as one input among many in a proper due diligence process.
- API timeout is 120 seconds per actor call. If source actors are under load, individual tool calls may approach their timeout cap. The
Promise.allSettledpattern returns empty arrays for timed-out sources rather than failing, but affected scoring dimensions will return conservative defaults.
Integrations
- Zapier — trigger a franchise dossier when a new lead enters your deal pipeline spreadsheet and push the verdict score back to the row automatically
- Make — build a multi-step workflow that evaluates a franchise, filters AVOID verdicts, and creates a deal record in your CRM only for BUY and above
- Google Sheets — pipe franchise scores and signal lists into a tracker sheet for portfolio monitoring across multiple franchise systems
- Apify API — call any tool programmatically from a deal management system, franchise broker platform, or custom research application
- Webhooks — get notified in Slack or email when quarterly franchise health monitoring runs complete
- LangChain / LlamaIndex — integrate this MCP server as a tool in LangChain agents or LlamaIndex workflows for automated franchise research pipelines
Troubleshooting
Verdict returns AVOID but individual scores look reasonable. The scoring model includes two override conditions that force AVOID regardless of the composite score: franchiseHealth.healthLevel === 'FAILING' (score below 20) or regulatoryCompliance.complianceLevel === 'CRITICAL' (regulatory score above 80). Check those two fields directly in the output. If both show non-critical levels, open an issue — this may be a scoring edge case worth investigating.
Market saturation assessment returns very low location counts. Google Maps matching uses the franchise's consumer-facing brand name. Try variations: "Subway" versus "Subway Sandwiches", or "H&R Block" versus "H and R Block". Confirm you are also including a location parameter — without it, the query returns a sparse national sample rather than a density count for your target territory.
generate_investment_dossier runs longer than 2 minutes. The full dossier queries 8 sources in parallel, each with a 120-second individual timeout. If underlying actors are under load, total wall time can approach 3-4 minutes. This is expected behavior. If the call consistently times out, try running evaluate_franchisor and assess_market_saturation as separate tool calls — they cover most of the same data with a smaller parallel fan-out.
Review scores are 0 and sentiment returns as DECLINING with no review signal. This typically means the franchise brand name did not match any results in Trustpilot or multi-platform search. Try a shorter or more common version of the name. Some regional or emerging franchise systems have minimal review coverage — the signal 'No reviews found — limited brand visibility or new franchise' will appear in this case.
Corporate structure returns only 1-2 entities for a major franchise. OpenCorporates search is name-based. Parent company names often differ from the operating brand (e.g., "Doctor's Associates Inc." operates Subway). Run investigate_corporate_structure with the legal parent company name rather than the brand name for larger systems.
Responsible use
- This MCP server accesses only publicly available data from government databases, consumer review platforms, and corporate registries.
- All data sources — CFPB, Federal Register, BLS, OpenCorporates, Trustpilot — provide public APIs or publicly accessible databases.
- Use investment signals as one input in a proper due diligence process, not as the sole basis for an investment decision.
- Comply with applicable laws when using franchise intelligence data in advisory, legal, or investment contexts.
- For guidance on web scraping and data use legality, see Apify's guide.
FAQ
How does franchise due diligence via this MCP differ from reading the FDD? The FDD is franchisor-authored and audited on a fixed schedule. This MCP provides real-time, independent signals from public data sources — complaint databases, consumer reviews, corporate registries, and economic indicators — that update continuously and may contradict or supplement FDD disclosures. They are complementary, not interchangeable.
How many franchise systems can I evaluate in one session?
There is no per-session limit. Each tool call is priced independently at $0.045. You can evaluate 100 franchise systems in one AI session for $4.50 using benchmark_franchise_brand for initial screening, then drill down with evaluate_franchisor on the top candidates.
Does franchise due diligence work for international franchise systems?
Coverage depends on the source. CFPB and Federal Register data is US-only. OpenCorporates covers 140+ jurisdictions globally. Trustpilot and Google Maps have international coverage. BLS data is US-only. For non-US franchise analysis, evaluate_franchisor and benchmark_franchise_brand will return partial results — review and corporate data — with US regulatory and economic components producing conservative defaults.
How accurate is the Franchise Health Score? The score reflects the weight of public signals, not an audit of franchise financials. It is designed to be a fast filter that surfaces systems worth deeper scrutiny and reliably flags clear red flags: high complaint counts, dissolved entities, poor sentiment. Borderline scores in the 40-60 range warrant follow-up using individual tool calls before drawing conclusions.
Can I use this MCP to monitor a franchise I already own?
Yes. Running analyze_complaint_trajectory quarterly gives you early warning of brand deterioration. Schedule it on Apify's platform to run automatically and receive webhook notifications when assessments complete — a low-effort early warning system for your existing investment.
How is the market saturation score calculated? Saturation combines four components: Google Maps location density (max 40 points at 2 per location), low-rating ratio of existing locations (max 25 points when many locations are under 3.5 stars), BLS economic indicators (max 20 points based on unemployment rate and CPI data), and geographic concentration above 5 locations (max 15 points). Higher scores indicate a more crowded market — less opportunity for new entrants.
Is it legal to use this data for franchise investment research? Yes. All data sources are publicly available government databases, regulated consumer complaint registries, or public review platforms. See Apify's guide on web scraping legality.
What happens if one of the 8 data sources fails during a dossier run?
The actor client uses Promise.allSettled so individual source failures return empty arrays rather than aborting the run. Affected scoring dimensions default to conservative mid-range values and the signal array for that dimension will be empty. All output fields are always present, making it clear which dimensions had data and which returned defaults.
How is this different from hiring a franchise consultant? A franchise consultant applies professional judgment, industry relationships, and experience that no automated tool replicates. This MCP provides the data foundation — complaint records, review analysis, corporate structure, market economics — that consultants typically spend 10-20 hours gathering per engagement. It reduces the research burden, not the need for professional advice on material decisions.
Can I connect this MCP to Cursor or other coding AI tools?
Yes. The server uses standard Streamable HTTP MCP transport compatible with Cursor, Windsurf, Cline, and any MCP 1.x client. Use the endpoint https://franchise-due-diligence-mcp.apify.actor/mcp with your Apify token as a Bearer Authorization header.
What does the AVOID verdict override mean? Two conditions force an AVOID verdict regardless of the composite score: Franchise Health Score producing a FAILING classification (score below 20) or Regulatory Compliance producing a CRITICAL classification (score above 80). These represent situations where the severity of a single dimension justifies a hard stop even if other signals are positive.
How long does a full investment dossier take to generate?
The generate_investment_dossier tool queries 8 actors in parallel, each with a 120-second cap. In practice, full dossiers return in 90-150 seconds depending on data volume and source load. Individual tools — evaluate_franchisor, assess_market_saturation — typically complete in 30-60 seconds.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom franchise research workflows, enterprise integrations, or bulk evaluation pipelines, reach out through the Apify platform.
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try Franchise Due Diligence MCP Server?
Start for free on Apify. No credit card required.
Open on Apify Store