# US Franchise Registration & FDD Leads Scraper (`scrapesage/us-franchise-registrations-scraper`) Actor

Scrape US franchise registrations from official state regulators (MN & WI): franchisor, brands, status, effective/expiration dates, FDD documents, contact email & phone, multi-state footprint & lead score. Franchise-development B2B leads with filters + monitoring.

- **URL**: https://apify.com/scrapesage/us-franchise-registrations-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.50 / 1,000 franchise registration records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## US Franchise Registration & FDD Leads Scraper — Franchisors, Brands, FDD Documents & Contacts

Extract **every franchisor registered with US state franchise regulators** — in one unified, multi-state schema — including the data the single-state scrapers leave out: **registration status, effective & expiration dates, the actual FDD disclosure documents, business address, attorney/contact email & phone, multi-state footprint, GTM intent signals, and a 0–100 lead score.**

Pulls directly from the **official regulators** — Minnesota Commerce **CARDS** and Wisconsin **DFI** — so you get authoritative, public franchise-registration records, not a recycled third‑party directory. No login, no cookies, no browser.

> Franchise-registration states are where every franchisor in the US must file its Franchise Disclosure Document (FDD). A new or renewed registration = a franchisor **actively selling franchises right now** — the highest-intent signal in the franchise-development market.

### Why this franchise scraper?

Every competing actor scrapes **one state in isolation** and returns a flat list of filings. This actor **combines states into one franchisor-level record**, aggregates all of a franchisor's filings, links the FDD documents, and enriches with real contact data — the **richest franchise dataset in the category**.

| Data | Single-state scrapers | This actor |
|---|---|---|
| Multiple states in one unified schema | ❌ one state each | ✅ MN + WI (more coming) |
| One record per **franchisor** (not per filing) | ❌ raw filings | ✅ consolidated |
| Registration **status** (registered / expired / withdrawn / cancelled) | partial | ✅ |
| Effective & **expiration** dates | partial | ✅ |
| **FDD disclosure documents** (direct PDF links) | ❌ | ✅ |
| Business address | ❌ | ✅ (WI) |
| Contact **name + email + phone + fax** | ❌ | ✅ (WI) |
| **Multi-state registration footprint** | ❌ | ✅ |
| Organization type | ❌ | ✅ (WI) |
| GTM **intent signals** (new / renewal / expiring / expansion) | ❌ | ✅ |
| Lead score (0–100) | ❌ | ✅ |
| Monitor mode — only new/renewed since last run | ❌ | ✅ |

### Use cases

- **Franchise-development lead generation** — franchisors that just registered or renewed are actively recruiting franchisees and buying services: franchise brokers/consultants, lead-gen, PR & marketing, FDD/legal, financing, real-estate site selection, and supplier programs. Score them and reach the filing contact directly (`contactEmail`, `contactPhone`).
- **Competitive & market intelligence** — track who is entering each state, pull their FDD (`fddDocumentUrls`) for fees, Item 19 financial performance, and outlet counts, and watch competitors' registration status and expirations.
- **Franchisee & site-selection prospecting** — brands expanding into new states (`multiStateExpansion`, `statesApplicationFiled`) need locations, build-out, and local vendors.
- **M\&A & investment sourcing** — emerging franchisors (early registrations, growing multi-state footprint) are acquisition and franchise-investment targets.
- **Renewal & re-engagement timing** — `expiringWithinDays` surfaces registrations about to lapse — ideal timing for renewal services and outreach.
- **CRM enrichment & monitoring** — schedule recurring runs in **monitor mode** to feed only newly registered/renewed franchisors into your pipeline.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **US Franchise Registration & FDD Leads Scraper**, choose your `states`, and (optionally) a `franchisorName`, year range, or status filters.
3. Click **Start** and watch franchisor leads stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "states": ["MN", "WI"],
    "filingYearFrom": 2025,
    "filingYearTo": 2026,
    "activeOnly": true,
    "fetchContactDetails": true,
    "consolidateByFranchisor": true,
    "sortBy": "newest",
    "maxResults": 500
}
```

Browse the freshest registrations, search a brand, or monitor for new filings:

- **states** — `MN` (Minnesota Commerce CARDS — FDD documents) and/or `WI` (Wisconsin DFI — contact email/phone + multi-state footprint).
- **franchisorName** — search a specific franchisor/company across states (leave blank to browse all).
- **brandName** — filter by a brand / franchise trade name.
- **filingYearFrom / filingYearTo** — Minnesota registration year range (defaults to current year when browsing).
- **mnDocumentType** — optional Minnesota document-type filter (`Clean FDD`, `Order of Registration`, `Order of Renewed Registration`, `Order of Cancellation`, …).
- **statusFilter / activeOnly** — keep only chosen statuses, or only currently-active registrations.
- **newRegistrationsOnly / registeredWithinDays** — only franchisors registered or renewed recently.
- **expiringWithinDays** — only registrations expiring soon (Wisconsin).
- **hasContactInfo** — keep only franchisors with a contact email or phone.
- **fetchContactDetails** *(default true)* — enrich Wisconsin records with address, contact name/email/phone/fax, organization type, and multi-state footprint.
- **consolidateByFranchisor** *(default true)* — one record per franchisor, merged across states.
- **wiSearchTerms** — advanced: override the A–Z browse for Wisconsin with specific words.
- **maxResults / sortBy** — cap and order (`newest` or `leadScore`).
- **monitorMode / monitorKey** — emit only franchisors not seen on previous runs (great with Schedules).

### Output

One record per franchisor (consolidated across states), e.g.:

```json
{
    "franchisorName": "PIZZA RANCH, INC.",
    "primaryBrand": "Pizza Ranch",
    "brandNames": ["Pizza Ranch"],
    "registeredStates": ["MN", "WI"],
    "status": "Registered",
    "isActive": true,
    "registrationCount": 2,
    "latestRegistrationDate": "2026-04-03",
    "earliestRegistrationDate": "2019-03-30",
    "expirationDate": "2027-04-03",
    "businessAddress": "204 19TH ST SE ORANGE CITY , IA 51041 USA",
    "contactName": "Max Schott",
    "contactEmail": "mschott@larkinhoffman.com",
    "contactPhone": "952-896-3243",
    "contactFax": "952-842-1762",
    "organizationType": "C",
    "statesApplicationFiled": ["Minnesota", "North Dakota", "South Dakota"],
    "fddDocumentUrls": [
        "https://cards.web.commerce.state.mn.us/documents/{...}/download?documentClass=FRANCHISE_REGISTRATIONS"
    ],
    "documentTypes": ["Clean FDD", "Order of Renewed Registration"],
    "fileNumbers": ["8692", "640811"],
    "registrations": [
        {
            "state": "WI",
            "status": "Registered",
            "effectiveDate": "2026-04-03",
            "expirationDate": "2027-04-03",
            "fileNumbers": ["640811"],
            "documents": [{ "type": "Franchise Registration", "fileNumber": "640811", "status": "Registered" }],
            "sourceUrl": "https://apps.dfi.wi.gov/apps/FranchiseSearch/details.aspx?id=640811&hash=1854684284"
        },
        {
            "state": "MN",
            "status": "Registered",
            "latestFilingDate": "2026-04-29",
            "documents": [{ "type": "Clean FDD", "year": "2026", "fileNumber": "8692", "receivedDate": "2026-04-29", "url": "https://cards.web.commerce.state.mn.us/documents/{...}/download" }],
            "sourceUrl": "https://cards.web.commerce.state.mn.us/franchise-registrations?doSearch=true&franchisor=PIZZA%20RANCH"
        }
    ],
    "gtmSignals": ["activeRegistration", "newRegistration", "multiStateExpansion", "fddAvailable", "directContact"],
    "leadScore": 92,
    "sources": ["Minnesota", "Wisconsin"],
    "scrapedAt": "2026-06-20T18:30:00.000Z"
}
```

Fields are `null`/empty only when the regulator genuinely doesn't publish them (e.g. Minnesota records carry FDD documents but not contacts; Wisconsin carries contacts but not the FDD PDF).

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run daily/weekly with `monitorMode` to capture only newly registered or renewed franchisors.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger CRM import, Slack alert, or an email sequence the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/us-franchise-registrations-scraper').call({
    states: ['MN', 'WI'],
    newRegistrationsOnly: true,
    fetchContactDetails: true,
    maxResults: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} franchise leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new franchisor leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new registrations.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find franchisors that registered in Minnesota and Wisconsin this year and list their FDD links and contacts" and let it run this scraper.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More US B2B data & lead-gen scrapers from scrapesage

Build a complete US business-intelligence and lead-gen stack from official sources:

- **[US Business Formation Scraper](https://apify.com/scrapesage/us-business-formation-scraper)** — newly registered LLCs & corporations (new-business intent).
- **[US UCC Filings Scraper](https://apify.com/scrapesage/us-ucc-filings-scraper)** — UCC-1 secured-loan filings: business borrowers, lenders & collateral.
- **[SBA Loan Leads Scraper](https://apify.com/scrapesage/sba-loan-leads-scraper)** — 7(a) & 504 financed small businesses (financing intent).
- **[PPP Loan Data Scraper](https://apify.com/scrapesage/ppp-loan-data-scraper)** — 11.5M+ PPP loans with firmographics & owner demographics.
- **[US Property Records Scraper](https://apify.com/scrapesage/us-property-records-scraper)** — parcels & owner leads with mailing addresses.
- **[US Contractor License Scraper](https://apify.com/scrapesage/us-contractor-license-scraper)** — licensed contractors from state boards.
- **[US Professional License Scraper](https://apify.com/scrapesage/us-professional-license-scraper)** — licensed professionals across state agencies.
- **[US Auto Dealer Scraper](https://apify.com/scrapesage/us-auto-dealer-scraper)** — licensed dealers, repair & body shops.
- **[Nonprofit & IRS 990 Scraper](https://apify.com/scrapesage/nonprofit-990-scraper)** — tax-exempt orgs & decision-maker leads.
- **[SEC Form D Funding Scraper](https://apify.com/scrapesage/sec-form-d-funding-scraper)** — private-placement & startup-funding leads.

### Tips

- **Browse the freshest leads**: leave `franchisorName` blank, set `filingYearFrom` to the current year, and `sortBy: "newest"`.
- **Target a brand or competitor**: set `franchisorName` (matches legal & trade name) for a fast, complete pull across states.
- **Richest contacts**: keep `fetchContactDetails` on — Wisconsin detail pages carry the filing contact's email & phone plus the multi-state footprint.
- **Wisconsin coverage**: each Wisconsin search term returns up to 200 matches; for an exhaustive pull of a large set, pass specific `wiSearchTerms` or a `franchisorName`.
- **Cost control**: contact-detail enrichment runs only for the Wisconsin records you actually emit (after filtering and capping).
- **No proxy needed**: the state portals are reachable directly from Apify.

### FAQ

**Which states are covered?** Minnesota (Commerce CARDS) and Wisconsin (DFI) today — two of the major franchise-registration states. The per-state architecture is built to add California, Indiana, Washington, Maryland and the other registration states; request priorities on the Issues tab.

**What is an FDD?** The Franchise Disclosure Document — the federally mandated disclosure every franchisor must give prospective franchisees. Registration states require it on file; this actor links the Minnesota FDD PDFs directly (`fddDocumentUrls`).

**Where do the contact emails & phones come from?** Wisconsin's public franchise-filing detail pages, which list the franchisor's filing contact (often the franchise attorney) with email, phone, and address — the same data a human sees on the regulator's website.

**Is this the same as a franchise-opportunity directory?** No — this is the **official regulatory registration data** (status, dates, FDD, filings), which is more authoritative and timely than marketing directories, and includes the intent signal of *new/renewed* registrations.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only newly registered franchisors?** Turn on `monitorMode` and run on a [Schedule](https://docs.apify.com/platform/schedules); each run emits only franchisors not seen before. Monitor state is stored separately from Apify's scheduler, so the two never conflict.

**Is scraping this data legal?** It collects publicly available government records only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA where personal data is involved) and each regulator's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests — especially additional states — are welcome; this actor is actively maintained.

# Actor input Schema

## `states` (type: `array`):

Official state franchise regulators to query. MN = Minnesota Commerce CARDS (FDD documents). WI = Wisconsin DFI (contact email/phone + multi-state footprint). More states are being added.

## `franchisorName` (type: `string`):

Search a specific franchisor / company name (matches legal or trade name) across the selected states. Leave blank to browse all registrations.

## `brandName` (type: `string`):

Filter to a brand / franchise trade name (substring, case-insensitive).

## `filingYearFrom` (type: `integer`):

Earliest registration / filing year to include (Minnesota). Defaults to the current year when browsing; set lower to pull historical registrations.

## `filingYearTo` (type: `integer`):

Latest registration / filing year to include (Minnesota). Defaults to the current year.

## `mnDocumentType` (type: `string`):

Optional Minnesota document-type filter, e.g. 'Clean FDD', 'Order of Registration', 'Order of Renewed Registration', 'Order of Cancellation'. Leave blank for all.

## `statusFilter` (type: `array`):

Keep only these registration statuses (e.g. Registered, On file, Expired, Withdrawn, Cancelled). Leave empty for all.

## `activeOnly` (type: `boolean`):

Keep only franchisors with a currently-active registration (Registered / on file and not expired).

## `newRegistrationsOnly` (type: `boolean`):

Keep only franchisors registered / renewed within the window below — the freshest expansion-intent leads.

## `registeredWithinDays` (type: `integer`):

Window used by 'New registrations only'.

## `expiringWithinDays` (type: `integer`):

Keep only registrations expiring within this many days — perfect timing for renewal / re-engagement outreach (Wisconsin).

## `hasContactInfo` (type: `boolean`):

Keep only franchisors with a contact email or phone (requires Wisconsin contact-detail enrichment).

## `fetchContactDetails` (type: `boolean`):

Enrich Wisconsin records with the detail page: business address, contact name + email + phone + fax, organization type and multi-state footprint. One extra request per emitted Wisconsin franchisor.

## `consolidateByFranchisor` (type: `boolean`):

Output one record per franchisor, merging its registrations across states (recommended). Turn off for one record per franchisor per state.

## `maxResults` (type: `integer`):

Maximum number of franchisor records to emit.

## `sortBy` (type: `string`):

Order results by newest registration date or by lead score.

## `deduplicateResults` (type: `boolean`):

Remove duplicate franchisor records within a run.

## `monitorMode` (type: `boolean`):

Emit only franchisors not seen on previous runs with the same monitor key. Ideal with Apify Schedules to capture only newly registered / renewed franchisors. State is stored separately from Apify's scheduler so the two do not conflict.

## `monitorKey` (type: `string`):

Namespace for monitor-mode memory. Use distinct keys for distinct saved searches.

## `proxyConfiguration` (type: `object`):

Optional. The state portals are reachable directly from Apify; a proxy is not required. Enable only if you want to route traffic through Apify Proxy.

## Actor input object example

```json
{
  "states": [
    "MN",
    "WI"
  ],
  "franchisorName": "pizza",
  "statusFilter": [],
  "activeOnly": false,
  "newRegistrationsOnly": false,
  "registeredWithinDays": 365,
  "hasContactInfo": false,
  "fetchContactDetails": true,
  "consolidateByFranchisor": true,
  "maxResults": 500,
  "sortBy": "newest",
  "deduplicateResults": true,
  "monitorMode": false,
  "monitorKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped franchisor / franchise-registration records as JSON items in the default dataset.

# 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 = {
    "states": [
        "MN",
        "WI"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/us-franchise-registrations-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 = { "states": [
        "MN",
        "WI",
    ] }

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

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

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

```

## CLI example

```bash
echo '{
  "states": [
    "MN",
    "WI"
  ]
}' |
apify call scrapesage/us-franchise-registrations-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/us-franchise-registrations-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DZU7ZkTkpKJCcM9Ym/builds/24SIpHHtpuvUDtYgE/openapi.json
