AIDEVELOPER TOOLS

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.

Try on Apify Store
$0.20per event
1
Users (30d)
13
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.20
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

evaluate_franchisors
Estimated cost:$20.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
evaluate_franchisorDeep research + corporate + reviews + complaints.$0.20
analyze_complaint_trajectoryCFPB + Trustpilot + multi-review sentiment.$0.12
assess_market_saturationGoogle Maps density + BLS economics.$0.10
investigate_corporate_structureOpenCorporates + deep research ownership.$0.10
track_franchise_regulationFTC Franchise Rule + Federal Register.$0.08
benchmark_franchise_brandHead-to-head franchise comparison.$0.25
score_territory_economicsBLS + Maps territorial analysis.$0.08
generate_investment_dossierAll 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.

MCP Endpoint
https://ryanclinton--franchise-due-diligence-mcp.apify.actor/mcp
Claude Desktop Config
{
  "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 PointSourceExample
📊 Franchise Health Score (0-100)5-source compositeScore: 74, Level: HEALTHY
📋 CFPB complaint count and trajectoryCFPB Consumer Complaints3 complaints — clean consumer record
⭐ Average review rating across platformsTrustpilot + Multi-Review Analyzer4.2/5 across 38 reviews
🏢 Corporate entity status and countOpenCorporates12 active, 2 dissolved entities
📍 Location density per territoryGoogle Maps Lead Enricher14 locations in target metro area
📈 Market saturation levelMaps + BLS compositeOPPORTUNITY — market has room for growth
⚖️ FTC enforcement action countFederal Register0 enforcement actions — compliant
💰 Territory employment and consumer dataBLS Economic DataUnemployment 3.8%, CPI trending up
🏆 Investment verdictComposite scoring modelBUY — compositeScore: 67
🔍 Investment risks listMulti-source signal analysis["Market has 18 locations — moderate density"]
💪 Investment strengths listMulti-source signal analysis["Strong franchise health indicators"]
🆚 Side-by-side brand benchmarkDual-franchise comparisonSentiment 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

ToolPriceParametersDescription
evaluate_franchisor$0.045franchise (required)Company research, OpenCorporates, Trustpilot, multi-platform reviews, CFPB. Returns Franchise Health Score 0-100 with healthLevel classification
analyze_complaint_trajectory$0.045franchise (required)CFPB complaints + Trustpilot + multi-platform reviews. Returns Franchisee Sentiment trend with rating and complaint breakdown
assess_market_saturation$0.045franchise (required), location (optional)Google Maps location density + BLS economic indicators. Returns saturation classification and territory signals
investigate_corporate_structure$0.045franchise (required), jurisdiction (optional)OpenCorporates entity search + company research. Returns entity tree with active/dissolved status flags
track_franchise_regulation$0.045topic (optional), franchise (optional)Federal Register FTC/franchise rules + CFPB. Returns Regulatory Compliance Profile with enforcement action count
benchmark_franchise_brand$0.045franchise_a (required), franchise_b (required)Parallel dual-franchise comparison — sentiment, saturation, complaints, and location density for both systems
score_territory_economics$0.045location (required), franchise (optional)BLS employment and consumer data + Google Maps competitive density. Returns economic indicators and location count
generate_investment_dossier$0.045franchise (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

FieldTypeDescription
entitystringFranchise brand name passed to the tool
compositeScorenumberWeighted composite 0-100: health 30% + saturation inverted 20% + regulatory inverted 20% + sentiment 30%
verdictstringSTRONG_BUY (≥75) / BUY (≥55) / HOLD (≥35) / AVOID (<35 or override triggered)
franchiseHealth.scorenumber0-100 from review quality + complaint penalty + corporate health + company signals
franchiseHealth.complaintCountnumberRaw CFPB complaint count retrieved
franchiseHealth.reviewScorenumberMean rating across Trustpilot + multi-platform reviews (1 decimal)
franchiseHealth.corporateFlagsnumberCount of dissolved/inactive/struck corporate entities found
franchiseHealth.healthLevelstringFAILING / STRUGGLING / AVERAGE / HEALTHY / THRIVING
franchiseHealth.signalsstring[]Human-readable explanations of each score component
marketSaturation.scorenumber0-100, higher = more saturated (high score is negative for new entrants)
marketSaturation.locationDensitynumberCount of existing franchise locations found via Google Maps
marketSaturation.economicViabilitynumberNet BLS economic strength score (unemployment + consumer indicators)
marketSaturation.saturationLevelstringUNDERSERVED / OPPORTUNITY / BALANCED / CROWDED / OVERSATURATED
regulatoryCompliance.scorenumber0-100, higher = heavier regulatory burden
regulatoryCompliance.regulationCountnumberFederal Register documents retrieved for the franchise/topic
regulatoryCompliance.enforcementActionsnumberDocuments referencing enforcement, penalty, or FTC actions
regulatoryCompliance.complianceLevelstringMINIMAL / STANDARD / ELEVATED / HEAVY / CRITICAL
franchiseeSentiment.scorenumber0-100, higher = better sentiment
franchiseeSentiment.totalReviewsnumberTotal reviews analyzed across all platforms
franchiseeSentiment.averageRatingnumberWeighted average rating 0-5 (1 decimal)
franchiseeSentiment.sentimentTrendstringDECLINING / STABLE / IMPROVING / STRONG / EXCELLENT
allSignalsstring[]Merged signal list from all four scoring models
investmentRisksstring[]Automatically identified risk flags from scoring thresholds
investmentStrengthsstring[]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.

ScenarioTool callsCost per callTotal cost
Single tool test (complaints only)1$0.045$0.045
Basic franchisor evaluation1$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 monitoring12$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

  1. Include a territory location for saturation analysis. Calling assess_market_saturation or score_territory_economics without 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.

  2. Use benchmark_franchise_brand before 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-intensive evaluate_franchisor calls for the stronger candidate.

  3. 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.

  4. 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 allSignals array carefully before interpreting the composite score in isolation.

  5. Run quarterly for portfolio monitoring. Franchise brand health changes slowly. Running analyze_complaint_trajectory every 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.

  6. 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.

  7. 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

ActorHow to combine
Company Deep ResearchRun standalone deep research on a franchisor's parent company to expand management and financial intelligence beyond what the dossier captures
Trustpilot Review AnalyzerExtract granular review text and sentiment for specific franchise locations as a follow-up to a brand-level evaluation
Multi-Review AnalyzerPull cross-platform reviews from Google, Yelp, and Trustpilot for specific franchise outlet addresses identified during territory research
Google Maps Lead EnricherEnrich individual franchise location listings with full contact data — phone, website, hours — after market saturation analysis
Website Contact ScraperExtract franchise broker and consultant contact details for outreach after identifying target franchise systems
B2B Lead QualifierScore franchise development leads from trade shows or broker networks before committing research time to full evaluations
Website Change MonitorMonitor 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.allSettled pattern 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:

  1. Go to Account Settings > Privacy
  2. 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

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

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.

Ready to try Franchise Due Diligence MCP Server?

Start for free on Apify. No credit card required.

Open on Apify Store