FranchiseDirect Franchise Listings Scraper avatar

FranchiseDirect Franchise Listings Scraper

Pricing

Pay per event

Go to Apify Store
FranchiseDirect Franchise Listings Scraper

FranchiseDirect Franchise Listings Scraper

Scrape public FranchiseDirect franchise rankings and category pages for opportunity names, URLs, investment ranges, sectors, and locations.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract structured franchise opportunity data from public FranchiseDirect ranking and category pages. The actor turns FranchiseDirect pages into clean records with franchise names, listing URLs, ranks, sectors, countries, investment signals, quick facts, and source URLs.

What does this actor do?

FranchiseDirect Franchise Listings Scraper reads public FranchiseDirect pages and saves one dataset row per franchise opportunity.

It is designed for:

  • Top 100 global franchise ranking pages
  • Franchise category pages such as food franchises
  • Franchise directory/listing pages that expose opportunity cards in the HTML
  • Investment research workflows where you need repeatable exports instead of manual copy and paste

The actor uses HTTP extraction and Cheerio parsing. It does not open a browser, log in, submit forms, or request private lead information.

Common use cases

  • Build a shortlist of franchise brands for investment research
  • Compare FranchiseDirect Top 100 rankings across categories
  • Collect listing URLs for manual due diligence
  • Export franchise category pages into CSV or Excel
  • Track sectors and native countries for market mapping
  • Enrich internal franchise CRM records with public listing data
  • Compare available locations, minimum cash fields, and business-type signals when FranchiseDirect exposes them

Who is it for?

This scraper is useful for franchise investors, brokers, consultants, lead-generation teams, market researchers, and analysts who need structured FranchiseDirect data.

Examples:

  • An investor exports the Top 100 rankings and filters for food-service opportunities.
  • A broker collects public listing URLs for a franchise category before manual review.
  • A market researcher tracks how many opportunities appear in each FranchiseDirect sector.
  • A lead-generation team exports public opportunity names and source URLs for enrichment in a separate workflow.

Input overview

The actor has two inputs.

FieldTypeRequiredDescription
startUrlsarrayyesFranchiseDirect ranking, category, investment, or listing result pages to scrape.
maxItemsintegernoMaximum number of franchise records to save across all start URLs. Default is 20.

Keep maxItems low for your first run. Increase it after checking that your selected pages produce the fields you need.

Example start URLs

Good first-run URLs include:

https://www.franchisedirect.com/top100globalfranchises/rankings
https://www.franchisedirect.com/foodfranchises/14

You can add multiple FranchiseDirect URLs in one run. The actor deduplicates listing URLs and stops after the global maxItems limit is reached.

Output overview

Each dataset item represents one franchise opportunity or ranking record.

Typical output fields include:

FieldDescription
sourceUrlFranchiseDirect page where the record was discovered.
urlAbsolute FranchiseDirect listing URL.
nameFranchise or opportunity name.
rankRanking number when scraped from a ranking page.
nativeCountryCountry shown on ranking pages when available.
sectorSector shown on ranking pages when available.
categoryCategory inferred from the source page or card content.
descriptionPublic summary text from the listing/card.
minCashRequiredMinimum cash text when present in FranchiseDirect HTML.
minimumInvestmentMinimum investment text when present.
investmentMinimumUsdParsed numeric minimum investment when the source text allows parsing.
availableLocationsAvailable location text when exposed by the listing card.
businessTypeBusiness type quick fact when available.
financingAssistanceFinancing assistance quick fact when available.
trainingProvidedTraining quick fact when available.
homeBasedHome-based quick fact when available.
partTimeFullTimePart-time/full-time quick fact when available.
imageUrlFranchise image/logo URL when available.
scrapedAtISO timestamp when the record was saved.

FranchiseDirect page layouts vary. Some records from rankings have rank, sector, and country fields; category records may include investment and quick-fact fields instead.

Example output item

{
"sourceUrl": "https://www.franchisedirect.com/top100globalfranchises/rankings",
"url": "https://www.franchisedirect.com/foodfranchises/example-franchise/12345",
"name": "Example Franchise",
"rank": 12,
"nativeCountry": "United States",
"sector": "Food",
"category": "Food Franchises",
"description": "Public FranchiseDirect summary text for the opportunity.",
"minCashRequired": "$100,000",
"minimumInvestment": "$250,000",
"investmentMinimumUsd": 250000,
"availableLocations": "United States and Canada",
"businessType": "Franchise",
"financingAssistance": "Available",
"trainingProvided": "Yes",
"homeBased": "No",
"partTimeFullTime": "Full-time",
"imageUrl": "https://www.franchisedirect.com/example-logo.jpg",
"scrapedAt": "2026-06-15T09:00:00.000Z"
}

How to run the actor in Apify Console

  1. Open the actor page in Apify Console.
  2. Add one or more FranchiseDirect URLs to Start URLs.
  3. Set Maximum franchises to a small value such as 20 for the first run.
  4. Click Start.
  5. Open the default dataset when the run finishes.
  6. Export the dataset as CSV, JSON, Excel, XML, RSS, or HTML.

Use this input for a quick smoke test:

{
"startUrls": [
{ "url": "https://www.franchisedirect.com/top100globalfranchises/rankings" }
],
"maxItems": 20
}

For category research, try:

{
"startUrls": [
{ "url": "https://www.franchisedirect.com/foodfranchises/14" }
],
"maxItems": 50
}

Combining multiple pages

You can scrape several FranchiseDirect pages in the same run:

{
"startUrls": [
{ "url": "https://www.franchisedirect.com/top100globalfranchises/rankings" },
{ "url": "https://www.franchisedirect.com/foodfranchises/14" }
],
"maxItems": 100
}

This is useful when you want one dataset for a broader franchise research project.

Data quality notes

  • The actor preserves the sourceUrl so you can audit every row.
  • Records are deduplicated by listing URL when possible.
  • Optional fields are only saved when FranchiseDirect exposes them on the public page.
  • Numeric investment parsing is best-effort. Always review the original text field before making financial decisions.
  • Rankings and listing pages expose different details, so not every row will have every field.

Pricing

This actor uses pay-per-event pricing.

  • A small one-time start event is charged when the run starts.
  • A per-item event is charged for every franchise record saved.

Use small limits for tests. For production exports, set maxItems to the number of records you actually need.

API usage with Node.js

Install the Apify API client:

$npm install apify-client

Run the actor and read the dataset:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const input = {
startUrls: [
{ url: 'https://www.franchisedirect.com/top100globalfranchises/rankings' },
],
maxItems: 50,
};
const run = await client.actor('automation-lab/franchisedirect-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 50 });
console.log(items);

API usage with Python

Install the Apify API client:

$pip install apify-client

Run the actor and read the dataset:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run_input = {
'startUrls': [
{'url': 'https://www.franchisedirect.com/foodfranchises/14'},
],
'maxItems': 50,
}
run = client.actor('automation-lab/franchisedirect-scraper').call(run_input=run_input)
items = client.dataset(run['defaultDatasetId']).list_items(limit=50).items
for item in items:
print(item['name'], item.get('minCashRequired'), item['url'])

API usage with cURL

Start a run:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~franchisedirect-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [
{ "url": "https://www.franchisedirect.com/top100globalfranchises/rankings" }
],
"maxItems": 50
}'

After the run succeeds, replace DATASET_ID with the run's defaultDatasetId:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json&token=$APIFY_TOKEN"

Using the actor from Apify MCP

You can expose this actor to Claude Desktop or another MCP-compatible client through Apify MCP.

CLI setup:

$claude mcp add apify https://mcp.apify.com/?tools=automation-lab/franchisedirect-scraper

Desktop JSON configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=automation-lab/franchisedirect-scraper"
}
}
}

Useful MCP prompts:

  • "Run automation-lab/franchisedirect-scraper for the FranchiseDirect Top 100 rankings with maxItems 50 and summarize the top sectors."
  • "Scrape https://www.franchisedirect.com/foodfranchises/14 and return franchise names, listing URLs, and minimum cash required."
  • "Compare a Top 100 export and a food category export. Which franchise names appear in both?"

Exporting and integrations

The default Apify dataset can be exported to:

  • CSV for spreadsheets
  • JSON for APIs and data pipelines
  • Excel for manual review
  • Google Sheets through Apify integrations
  • Webhooks for downstream automation
  • CRM enrichment workflows after your own compliance review

Scheduling

Schedule recurring runs when you need a regular snapshot of public FranchiseDirect pages.

Suggested schedule patterns:

  • Weekly Top 100 ranking export
  • Monthly category refresh for target sectors
  • Before-investment snapshot before manual due diligence

Store the dataset ID from each run if you need historical comparisons.

FAQ

The run returned zero items

Check that your URL is a FranchiseDirect ranking, category, investment, or listing results page. The homepage and informational articles may not contain franchise listing cards.

Some fields are missing

FranchiseDirect does not show every field on every page. Ranking pages may have rank/country/sector fields, while category cards may have investment and quick-fact fields.

I received fewer records than maxItems

The selected pages may contain fewer public listings than your requested maximum, or duplicate listing URLs may have been skipped.

I need detail-page enrichment

This version focuses on public ranking and category/listing pages. If you need additional detail-page fields, open an issue with example FranchiseDirect URLs and the exact fields required.

Limitations

  • No login or account-only data is supported.
  • No lead forms are submitted.
  • No private franchisor data is requested.
  • The actor depends on public HTML structure, so source-layout changes can affect extraction.
  • Investment fields should be treated as research signals, not financial advice.

Legality

This actor extracts public web pages that are visible without an account. You are responsible for using the data lawfully, respecting FranchiseDirect's terms, and following applicable privacy, marketing, and anti-spam rules.

Do not use exported data for unlawful targeting or unsolicited spam.

These actors may complement franchise and business-opportunity research:

Support

If a FranchiseDirect page stops working or you need a new page type, open an issue with:

  • The exact start URL
  • The expected fields
  • A sample row from the page, if possible
  • The run ID where you saw the problem

Clear examples make it much faster to add extraction support.