US Franchise Registration & FDD Leads Scraper avatar

US Franchise Registration & FDD Leads Scraper

Pricing

from $5.50 / 1,000 franchise registration records

Go to Apify Store
US Franchise Registration & FDD Leads Scraper

US Franchise Registration & FDD Leads Scraper

Search any US franchisor or brand and get its official state franchise filings with every FDD (Franchise Disclosure Document) as a PDF link, by year and version, plus status, file numbers and a lead score. Minnesota CARDS + Wisconsin DFI. Independent tool, not affiliated with any state regulator.

Pricing

from $5.50 / 1,000 franchise registration records

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

0.052 hours

Issues response

6 days ago

Last modified

Share

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

Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by US state franchise registries or any government body. All trademarks mentioned are the property of their respective owners. "US state franchise registries" is referenced only to describe the public data source this Actor collects from.

Search any franchisor or brand (for example "Atwell Suites", "Pizza Ranch" or "Holiday Hospitality Franchising") and get its official state franchise-registration filings with every Franchise Disclosure Document (FDD) as a direct PDF link, by filing date, version (clean or marked) and year. Or browse the newest registrations as franchise-development leads with status, file numbers, GTM intent signals and a 0–100 lead score.

Data comes straight from the official regulators: Minnesota Commerce CARDS (every franchise filing with its PDF) and Wisconsin DFI (registration status, expiry dates and the filing contact, whenever its search can be read - see Coverage). No login, no browser, one unified schema.

A franchise registration (or a renewal) is a franchisor actively selling franchises right now. The FDD it files is the document every prospective franchisee reads: fees, Item 19 financial performance, outlet counts, litigation and the franchise agreement.

What you get

  • Brand or franchisor search – a brand works on its own: "Atwell Suites" finds Holiday Hospitality Franchising, LLC with only its Atwell Suites filings. Search several names in one run with searchTerms.
  • Every FDD, by period – fddDocuments lists each FDD with its filing date, year, version (clean, marked, clean+marked), file number, size and PDF link; latestFddUrl is the newest complete one. Set filingYearFrom / filingYearTo to get one period only.
  • All filings – applications, orders of registration and renewal, amendments, exemptions, cancellations, deficiency notices, each with its PDF link (registrations[].documents).
  • Status – Registered, On file, Exempt (large-franchisor exemption), Cancelled, Withdrawn, with an isActive flag.
  • Lead fields – file numbers, filing years, GTM signals (new registration, renewal, multi-state, FDD available) and a lead score; Wisconsin adds the filing contact, address, officer and expiry date when its search is reachable (see Coverage).

Find a brand's FDDs for a period

Input:

{
"searchTerms": ["Atwell Suites", "Le Meridien"],
"filingYearFrom": 2023,
"filingYearTo": 2024,
"onlyWithFdd": true
}

Python (official apify-client), downloading every FDD PDF:

import pathlib, re
import requests
from apify_client import ApifyClient
client = ApifyClient("MY_APIFY_TOKEN")
run = client.actor("scrapesage/us-franchise-registrations-scraper").call(run_input={
"searchTerms": ["Atwell Suites", "Le Meridien"],
"filingYearFrom": 2023,
"filingYearTo": 2024,
"onlyWithFdd": True,
})
dataset_id = run.default_dataset_id # apify-client 3.x; on 1.x / 2.x use run["defaultDatasetId"]
# The Minnesota file server answers 403 to requests without a browser User-Agent,
# so send one when you download the PDFs.
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0"}
out = pathlib.Path("fdds")
out.mkdir(exist_ok=True)
for item in client.dataset(dataset_id).iterate_items():
for fdd in item["fddDocuments"]:
name = re.sub(r"[^\w.-]+", "_", f'{item["primaryBrand"]}_{fdd["receivedDate"]}_{fdd["version"]}_{fdd["documentId"]}') + ".pdf"
pdf = requests.get(fdd["url"], headers=headers, timeout=180)
pdf.raise_for_status()
(out / name).write_bytes(pdf.content)
print("saved", name)

Why this franchise scraper?

Most franchise actors scrape one state in isolation and return a flat list of filings. This one searches by brand or franchisor, groups every filing under the franchisor, labels the FDDs and keeps the whole filing history in one record.

DataSingle-state scrapersThis actor
Search by brand / trade name (not only the legal entity)rarely✅
One record per franchisor, every filing inside❌ raw filings✅
FDD PDFs with filing date, version and sizepartial✅
Period filter (filing years)partial✅
Registration status incl. exemptionspartial✅
Multiple states in one schema❌ one state each✅ MN + WI
Filing contact (name, email, phone)❌Wisconsin filings, when its search is reachable
GTM intent signals + lead score❌✅
Monitor mode — only new franchisors since the last run❌✅

Use cases

  • FDD research & due diligence – pull a brand's FDDs year by year for fees, Item 19 financial performance, outlet counts and agreement changes.
  • Franchise-development lead generation – franchisors that just registered or renewed are actively recruiting franchisees and buying services: brokers, consultants, lead-gen, PR, FDD/legal, financing, site selection and suppliers.
  • Competitive & market intelligence – watch who enters Minnesota, which brands renew, cancel or move to an exemption, and read their FDDs.
  • M&A & investment sourcing – emerging franchisors and their filing history.
  • CRM enrichment & monitoring – schedule runs in monitor mode to feed only newly registered franchisors into your pipeline.

Input

  • franchisorName – one franchisor or brand. Matches the legal franchisor name OR any brand / trade name. Leave blank to browse the newest registrations.
  • searchTerms – several franchisors or brands in one run; each record says which it matched (matchedSearchTerms).
  • brandName – keep only one brand's filings (brand names only), e.g. with franchisor "Holiday Hospitality" and brand "Atwell".
  • nameMatch – words (default: every word as a whole word, any order, so "Spark" does not return Sparkle or Mister Sparky), contains (anywhere in the name, like the registry's own search) or exact. Accents, case, punctuation and Inc/LLC never matter.
  • filingYearFrom / filingYearTo – the period. A name search covers every year unless you set it; a browse defaults to the current year. Filings outside the period are left out of each record.
  • onlyWithFdd – only franchisors with at least one FDD in the period.
  • states – MN and/or WI (default both).
  • mnDocumentType – only Minnesota filings of one document type (pick-list).
  • statusFilter / activeOnly – keep chosen statuses, or only active registrations (registered, on file or exempt).
  • newRegistrationsOnly / registeredWithinDays – only franchisors that filed recently.
  • expiringWithinDays / hasContactInfo / fetchContactDetails – Wisconsin expiry dates and filing contacts (need WI).
  • consolidateByFranchisor (default true) – one record per franchisor; off = one per franchisor per state.
  • maxResults / sortBy – how many franchisor records (each record is one charge) and their order (newest or leadScore). An API call with no search, filter or maxResults returns a 25-record sample.
  • monitorMode / monitorKey – emit only franchisors not delivered by earlier runs with the same key (great with Schedules).

Output

One record per franchisor. A real record from a search for "Atwell Suites" (lists shortened):

{
"franchisorName": "Holiday Hospitality Franchising, LLC",
"primaryBrand": "Atwell Suites",
"brandNames": ["Atwell Suites"],
"registeredStates": ["MN"],
"status": "Exempt",
"isActive": true,
"latestRegistrationDate": "2026-02-27",
"earliestRegistrationDate": "2019-09-18",
"fddCount": 12,
"latestFddUrl": "https://cards.web.commerce.state.mn.us/documents/%7B001ABD90-0000-C218-B347-FF25B1B149E9%7D/download?documentClass=FRANCHISE_REGISTRATIONS&contentSequence=0",
"latestFddDate": "2024-06-28",
"latestFddVersion": "marked",
"fddDocuments": [
{
"state": "MN",
"documentId": "31999-202406-02",
"label": "Marked FDD",
"version": "marked",
"labelSource": "documentType",
"brands": ["ATWELL SUITES"],
"year": "2024",
"receivedDate": "2024-06-28",
"fileNumber": "9105",
"fileName": "31999-202406-02.pdf",
"sizeBytes": 13631488,
"url": "https://cards.web.commerce.state.mn.us/documents/%7B001ABD90-0000-C218-B347-FF25B1B149E9%7D/download?documentClass=FRANCHISE_REGISTRATIONS&contentSequence=0"
},
{
"state": "MN",
"documentId": "27306-202303-04",
"label": "Clean FDD response",
"version": "clean",
"labelSource": "notes",
"brands": ["Atwell Suites"],
"year": "2023",
"receivedDate": "2023-03-29",
"fileNumber": "9105",
"url": "https://cards.web.commerce.state.mn.us/documents/%7B70D7E187-0000-CC23-BDAF-F25446C06F8F%7D/download?documentClass=FRANCHISE_REGISTRATIONS&contentSequence=0"
}
],
"fddDocumentUrls": ["https://cards.web.commerce.state.mn.us/documents/%7B001ABD90-0000-C218-B347-FF25B1B149E9%7D/download?documentClass=FRANCHISE_REGISTRATIONS&contentSequence=0"],
"filingYears": [2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019],
"documentTypes": ["Franchise Exemption Effectiveness", "Order of Cancellation", "Marked FDD", "Order of Renewed Registration w Amendment"],
"fileNumbers": ["11626", "9105"],
"registrations": [
{
"state": "MN",
"status": "Exempt",
"latestFilingDate": "2026-02-27",
"documents": [
{ "documentId": "35437-202602-03", "type": "Franchise Exemption Effectiveness", "notes": "Order of Exemption", "year": "2026", "receivedDate": "2026-02-27", "url": "https://cards.web.commerce.state.mn.us/documents/…" }
],
"sourceUrl": "https://cards.web.commerce.state.mn.us/franchise-registrations?doSearch=true&franchiseName=Atwell+Suites"
}
],
"matchedSearchTerms": ["Atwell Suites"],
"gtmSignals": ["activeRegistration", "renewal", "fddAvailable"],
"leadScore": 54,
"sources": ["Minnesota"],
"scrapedAt": "2026-10-08T16:39:48.093Z"
}

FDD fields. version is clean, marked (changes highlighted; a small marked file can be only the changed pages), clean+marked (one PDF with both) or unspecified. labelSource says where the label came from: Minnesota's document type, its notes column, or fileSize – an older filing Minnesota left unlabelled but whose PDF is FDD-sized. Those are listed in fddDocuments so no FDD is missed, but they are not used for latestFddUrl or fddDocumentUrls, because a few are other large filings (an exemption request with FDD exhibits, for example). sizeBytes is the size the registry lists (rounded).

Wisconsin records add businessAddress, contactName, contactEmail, contactPhone, contactFax, officerName, officerTitle, organizationType, statesApplicationFiled and expirationDate. When Wisconsin could not be read, sourcesUnavailable is ["WI"] and those fields are null.

Coverage

  • Minnesota publishes every franchise filing since about 2010 with its PDF. FDDs are labelled in most packages; older ones are often filed as "Other", which is why fddDocuments also checks the notes and the file size.
  • Large-franchisor exemptions. Some big franchisors (large hotel groups, for example) hold a Minnesota exemption: they file under the company name, sometimes with a generic brand label, and do not file every brand's FDD. If a brand returns nothing, search the franchisor's name (for example "Hilton" or "Marriott") to see what it filed.
  • Wisconsin is searched by name (it has no browse listing). Its public search currently puts results behind a browser security check; while it does, Wisconsin status, expiry dates and filing contacts are not included, the run says so on its status line, and the Minnesota data is delivered in full.

How much does it cost to scrape US state franchise registries?

This Actor uses Apify's pay-per-event pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

  • Franchise registration record - One franchisor lead record from official state franchise regulators: the franchisor and its brand(s), registration status, effective/expiration dates, FDD disclosure-document links, file numbers, business address, attorney/contact name with email & phone, multi-state registration footprint, GTM intent signals and a derived 0-100 lead score.

The current price of each event is shown on the Pricing tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches. A search that matches nothing, or a run stopped by a filter, is not billed.

Automate & schedule

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

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'],
newRegistrationsOnly: true,
registeredWithinDays: 90,
onlyWithFdd: true,
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} franchisors`);

Integrate with any app

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

  • Make — multi-step automation scenarios.
  • Zapier — push new franchisor leads straight into your CRM.
  • Slack — get notified when a monitored search finds new registrations.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • 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 — ask your assistant to "find the Atwell Suites FDDs filed in 2023 and 2024 and list their links" 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 pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • 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:

Tips

  • One brand, every FDD: franchisorName: "Atwell Suites" with no years returns the whole filing history; add filingYearFrom / filingYearTo for one period.
  • A multi-brand franchisor, one brand: franchisor "Holiday Hospitality" + brandName "Atwell".
  • Several brands at once: put them in searchTerms; the run's status line names any search that found nothing.
  • Freshest leads: leave the name blank, keep the current year, sortBy: "newest", optionally onlyWithFdd.
  • Partial names: "Atwell" finds "Atwell Suites"; to match inside words ("Spark" → "Sparkle") set nameMatch to contains.
  • No proxy needed: Minnesota answers directly; if its rate limit is reached, the run switches IP or waits on its own.

FAQ

Which states are covered? Minnesota (Commerce CARDS) and Wisconsin (DFI). The per-state design 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 disclosure every franchisor must give prospective franchisees: fees, initial investment, Item 19 financial performance, outlet counts, litigation and the franchise agreement. Minnesota keeps each filed version as a PDF, and this actor links every one.

Why does my download script get HTTP 403 on the PDF links? The Minnesota file server refuses requests that do not send a browser User-Agent (Python's requests, curl and wget defaults are refused). Send a browser User-Agent header as in the Python example above and the same link downloads.

I searched a well-known brand and got nothing. Why? Either the brand is not filed in the selected states, or the franchisor holds a Minnesota large-franchisor exemption and files under the company name (sometimes with a generic brand label). Search the franchisor's name, try fewer words, or set nameMatch to contains. A search that finds nothing is not billed.

Are the Wisconsin contacts included? When Wisconsin's search can be read, yes: the filing contact (often the franchise attorney) with email, phone and address, plus the officer and expiry date. Its public search currently sits behind a browser security check; while it does, those fields stay empty, sourcesUnavailable shows WI, and the run says so.

How do I get only newly registered franchisors? Turn on monitorMode and run on a Schedule; each run emits only franchisors not delivered before with the same monitorKey.

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. The FDD documents view shows the latest FDD per franchisor.

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.

Data & lawful use

The source is an official public register, published so that anyone can consult it. Records can name individuals (franchise filing contacts, company officers and agents for service of process named on registrations), so the output may contain personal data even though it is public. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis, honour access and deletion requests, and respect the register's own reuse conditions, which can restrict marketing or commercial use.

Under Apify's Standard Actor Contract, which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by US state franchise registries or any government body. All trademarks mentioned are the property of their respective owners.

"US state franchise registries" is referenced only in a descriptive, nominative sense - to identify the public data source this Actor collects from. This Actor is not an official product or service of US state franchise registries and is not authorised or certified by it. It collects only publicly available records; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the source's own terms of use or reuse conditions.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests — especially additional states — are welcome; this actor is actively maintained.