# Franchise Directory Scraper (`jungle_synthesizer/franchise-directory-aggregator-scraper`) Actor

Scrapes ~800 franchise brands from FranchiseDirect.com. Extracts franchise fee, minimum cash required, total investment range, territory availability, and brand description across all industry categories.

- **URL**: https://apify.com/jungle\_synthesizer/franchise-directory-aggregator-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## FranchiseDirect.com Scraper

Scrapes franchise brand listings from [FranchiseDirect.com](https://www.franchisedirect.com). Returns financial data, territory availability, and brand descriptions for ~800 franchise opportunities across all industry categories.

### FranchiseDirect.com Scraper Features

- Extracts franchise fee, minimum cash required, and total investment range per brand
- Collects territory availability and brand description for every profile
- Covers all ~28 industry categories — food, fitness, cleaning, healthcare, auto, and more
- Filters by category so you only pull the verticals you care about
- Uses sitemap-based discovery instead of crawling paginated listings, which means complete coverage rather than whatever happens to be featured that week
- Returns clean, structured JSON — no post-processing required

### FranchiseDirect.com Franchise Data — Use Cases

**Who uses FranchiseDirect data?**

- **Franchise consultants** — Build client comparison sheets without manually copying from 800 profile pages
- **Market researchers** — Analyze investment ranges and fee structures across categories to spot trends
- **Lead generation teams** — Feed franchise brand data into CRMs for outreach campaigns
- **SBA lenders and franchise finance brokers** — Pull minimum cash requirements and total investment ranges in bulk to pre-screen prospects
- **Directory operators** — Sync FranchiseDirect listings into your own franchise marketplace

### How It Works

1. The scraper fetches FranchiseDirect's sitemap index and walks all monthly sitemaps to build a complete list of franchise profile URLs — around 800 in total.
2. Each profile page is crawled to extract financial details from the structured data attributes and financial summary sections.
3. Results are saved as JSON records with one row per franchise brand.
4. Set `maxItems` to limit the run to a subset, or leave it at 0 to scrape everything.

### FranchiseDirect.com Scraper Input

```json
{
  "maxItems": 50,
  "categories": ["Food Franchises", "Fitness Franchises"]
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `maxItems` | integer | 0 (no limit) | Maximum number of franchise brands to scrape |
| `categories` | array | \[] (all) | Limit scraping to specific categories. Leave empty for all ~28 categories. Category names match the URL slugs on FranchiseDirect (e.g., "Food Franchises", "Fitness Franchises"). |

To scrape everything, omit both fields or use the defaults. A full run returns ~800 records.

### FranchiseDirect.com Scraper Output Fields

```json
{
  "franchise_brand": "Graze Craze",
  "category": "Food Franchises",
  "liquid_capital_required": 50000,
  "franchise_fee": 35000,
  "investment_min": 97000,
  "investment_max": 152000,
  "investment_range_text": "$97,000 - $152,000",
  "territories_available": "US and International",
  "description": "Graze Craze is a charcuterie franchise that offers customizable grazing boards...",
  "profile_url": "https://www.franchisedirect.com/food-franchises/graze-craze",
  "directory_source": "franchise-direct",
  "scrapedAt": "2026-05-05T15:30:00.000Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `franchise_brand` | string | Franchise brand name |
| `category` | string | Industry category (e.g., Food Franchises, Fitness Franchises) |
| `liquid_capital_required` | number | Minimum liquid capital / cash required (USD) |
| `franchise_fee` | number | Initial franchise fee (USD) |
| `investment_min` | number | Minimum total investment (USD) |
| `investment_max` | number | Maximum total investment (USD) |
| `investment_range_text` | string | Total investment range as displayed (e.g., "$308,469 - $557,879") |
| `territories_available` | string | Territory availability description |
| `description` | string | Franchise brand description and opportunity overview |
| `profile_url` | string | URL of the franchise profile page on FranchiseDirect.com |
| `directory_source` | string | Source directory identifier (`franchise-direct`) |
| `scrapedAt` | string | ISO timestamp when the record was scraped |

Financial fields (`liquid_capital_required`, `franchise_fee`, `investment_min`, `investment_max`) are returned as numbers when present, or `null` when FranchiseDirect doesn't publish the value for that brand.

### 🔍 FAQ

**How do I scrape FranchiseDirect.com?**
FranchiseDirect Scraper handles it. Configure `maxItems` and optionally filter by `categories`, run the actor, and collect your results from the dataset. No proxy setup or API keys required.

**What data can I get from FranchiseDirect.com?**
FranchiseDirect Scraper returns financial data (franchise fee, minimum cash required, investment range), territory availability, and a brand description for each of the ~800 franchise opportunities listed on the site.

**How much does FranchiseDirect Scraper cost to run?**
FranchiseDirect Scraper uses pay-per-event pricing at $0.10 per start plus $0.00125 per record. A full run of all ~800 franchise brands costs around $1.10 in platform charges — less than most franchise opportunity brochures.

**Can I filter by franchise category?**
Yes. Pass an array of category names in the `categories` input field. For example: `["Food Franchises", "Fitness Franchises"]`. Leave the array empty to scrape all categories.

**Does FranchiseDirect Scraper need proxies?**
FranchiseDirect Scraper doesn't need proxies. FranchiseDirect.com serves full HTML to standard requests, so no residential or datacenter proxy configuration is required.

**Will it return all ~800 franchise brands?**
FranchiseDirect Scraper discovers URLs from the sitemap index rather than paginated category listings, so it finds every profile — not just the featured or sponsored ones that appear on category pages. Set `maxItems` to 0 (the default) for a complete run.

### Need More Features?

Need custom fields, additional directory sources, or specific filtering? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use FranchiseDirect Scraper?

- **Complete coverage** — Sitemap-based discovery finds all ~800 profiles, not just the 12 featured brands per category page
- **Structured financial data** — Returns numeric values for investment ranges and fees, not raw text strings you have to parse yourself
- **Affordable** — ~$0.00125 per record, or roughly $1 for the full directory

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `maxItems` (type: `integer`):

Maximum number of franchise brands to scrape (0 = no limit)

## `categories` (type: `array`):

Limit scraping to specific franchise categories (e.g. \['Food Franchises', 'Fitness Franchises']). Leave empty for all categories.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "categories": []
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "categories": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/franchise-directory-aggregator-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "categories": [],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/franchise-directory-aggregator-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "categories": []
}' |
apify call jungle_synthesizer/franchise-directory-aggregator-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/franchise-directory-aggregator-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Franchise Directory Scraper",
        "description": "Scrapes ~800 franchise brands from FranchiseDirect.com. Extracts franchise fee, minimum cash required, total investment range, territory availability, and brand description across all industry categories.",
        "version": "0.1",
        "x-build-id": "2YMXKhTfDEefGH504"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~franchise-directory-aggregator-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-franchise-directory-aggregator-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~franchise-directory-aggregator-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-franchise-directory-aggregator-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~franchise-directory-aggregator-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-franchise-directory-aggregator-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of franchise brands to scrape (0 = no limit)",
                        "default": 0
                    },
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "Limit scraping to specific franchise categories (e.g. ['Food Franchises', 'Fitness Franchises']). Leave empty for all categories.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
