US Firearms License (FFL) & Gun Dealer Leads Scraper
Pricing
$5.00 / 1,000 firearms licensee (ffl) records
US Firearms License (FFL) & Gun Dealer Leads Scraper
Scrape the official ATF Federal Firearms Licensee (FFL) registry: 130k+ licensed gun dealers, gunsmiths, manufacturers, importers & pawnbrokers with business name, full address, phone, license type & lead score. Filter by state & type. B2B firearms-industry leads + new-license monitoring.
Pricing
$5.00 / 1,000 firearms licensee (ffl) records
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Turn the official ATF Federal Firearms Licensee (FFL) registry into a clean, structured B2B lead list. Pull every active US firearms business — 77,000+ licensed dealers, gunsmiths, manufacturers, importers and pawnbrokers — with business name, full premise & mailing address, phone, license type, region/district codes and a derived lead score — filtered by state, license type, name and more. No browser, no API key, no login.
Why this FFL scraper?
- The complete, official source. Built directly on the ATF's monthly Complete Listing of Federal Firearms Licensees — the same authoritative file the firearms industry runs on — refreshed every month, fetched straight from atf.gov (no proxy needed).
- Every license type, decoded. Type 01 dealers/gunsmiths, 02 pawnbrokers, 06 ammunition manufacturers, 07 firearms manufacturers, 08 importers, and 09/10/11 destructive-device licensees — each mapped to a plain-English name and category.
- Business-only by design. The ATF business export already excludes Type 03 Curio & Relic collectors (individual hobbyists), so you get ~77K real firearms businesses, not hobbyists.
- Real contact data. Premise address, separate mailing address, and voice phone straight from the registry — not guessed, not enriched.
- Lead scoring built in. Every record carries a 0–100
leadScoreandleadSignals(manufacturer, importer, has-phone, incorporated, separate storefront…) so the best prospects rise to the top. - Monitor mode. Run on a schedule and emit only newly licensed firearms businesses since your last run — fresh purchase-intent leads, automatically.
Use cases
- Sell to gun stores & ranges — POS / inventory / bound-book & compliance software, e-commerce platforms, payment processors, distributors and wholesalers.
- Reach manufacturers & importers — machinery, components, packaging, logistics, testing and regulatory-compliance vendors.
- Insurance, finance & legal — FFL insurance brokers, lenders and firearms-industry attorneys.
- Market & competitive research — count and map licensees by state, type, region or city.
- Verification & enrichment — match an existing list against the official registry and append license type, address and phone.
How to use
- Click Try for free.
- Pick your filters — e.g. set States to
TX, leave Exclude collectors on for a clean dealer list. - (Optional) Narrow by License types (e.g.
07manufacturers), Business name contains (pawn,tactical), With phone only, etc. - Set Max results and run. Export to CSV, Excel, JSON or Google Sheets, or pull via API.
Input
| Field | Type | Description |
|---|---|---|
states | array | Premise state(s), two-letter USPS codes (e.g. TX, FL). Empty = all. |
cities | array | Exact premise city names (case-insensitive). |
zipCodes | array | Premise ZIP — full (77002) or prefix (770). |
licenseTypes | array | ATF type codes: 01,02,03,06,07,08,09,10,11. |
licenseCategories | array | Dealer, Pawnbroker, Manufacturer, Importer, Collector. |
excludeCollectors | boolean | Exclude Type 03 C&R hobbyists (already absent from the ATF business export). Default true. |
businessOnly | boolean | Only licensees with a business / trade name on file. |
withPhoneOnly | boolean | Only licensees with a phone number. |
businessNameContains | string | Substring match on the business / trade name. |
licenseeNameContains | string | Substring match on the legal license name. |
nameContains | string | Substring match on either name. |
regionCodes / countyCodes | array | Advanced: ATF region / county codes from the FFL number. |
maxResults | integer | Max records this run (ATF business export ≈ 77,000). |
sortBy | string | leadScore (default), businessName, state, source. |
monitorMode | boolean | Emit only FFLs new since the last run. |
monitorKey | string | Names the monitor memory (one per saved watch). |
proxyConfiguration | object | Optional. Direct download works; auto-falls back to Residential US if needed. |
Example input
{"states": ["TX"],"licenseCategories": ["Manufacturer", "Importer"],"withPhoneOnly": true,"maxResults": 500,"sortBy": "leadScore"}
Output
Each record is one Federal Firearms Licensee. Example (abridged):
{"fflNumber": "5-76-201-07-1A-04321","licenseType": "07","licenseTypeName": "Manufacturer of Firearms","licenseCategory": "Manufacturer","licenseeName": "ACME FIREARMS MFG INC","businessName": "ACME DEFENSE","displayName": "ACME DEFENSE","entityType": "Corporation","isBusiness": true,"isManufacturer": true,"premiseStreet": "9 FACTORY RD","premiseCity": "Round Rock","premiseState": "TX","premiseZip": "78664","premiseFullAddress": "9 FACTORY RD, Round Rock, TX 78664","mailStreet": "PO BOX 5","mailFullAddress": "PO BOX 5, Round Rock, TX 78680","mailingSameAsPremise": false,"voicePhone": "(512) 555-0199","phoneAreaCode": "512","licenseRegionCode": "5","licenseCountyCode": "201","leadScore": 96,"leadSignals": ["manufacturer", "hasPhone", "hasBusinessName", "incorporated", "separateMailing"],"dataSourceMonth": "2026-06","source": "ATF Federal Firearms Licensee registry"}
Switch between the FFL overview, Business leads, and Manufacturers & importers dataset views to focus the columns you need.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it monthly to capture newly licensed firearms businesses as fresh leads; perfect for CRM pipelines.
- Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/us-firearms-license-scraper').call({states: ['TX'],licenseCategories: ['Manufacturer', 'Importer'],withPhoneOnly: true,maxResults: 500,sortBy: 'leadScore',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} FFL leads`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new FFL leads straight into your CRM.
- Slack — get notified when a monitored state gets new licensees.
- 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 firearms manufacturers in Texas with a phone number" and let it run this scraper for you.
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 scrapers from scrapesage
Build a complete US B2B lead-gen stack from official registries:
- FAA Aircraft Registry Scraper — aircraft owners (LLCs, corporations, individuals) with mailing address.
- FMCSA Trucking Scraper — motor carriers, brokers & new authorities with contacts.
- FinCEN MSB Scraper — registered money services businesses.
- US Business Formation Scraper — newly registered LLCs & corporations.
- US Auto Dealer Scraper — licensed dealers, repair & body shops.
- US Contractor License Scraper — licensed contractors by state.
- SBA Loan Leads Scraper — SBA 7(a)/504-financed small businesses.
- EPA ECHO Scraper — regulated facilities, violations & penalties.
Tips
- Premium prospects: filter License categories to
Manufacturer+Importer, or sort by Lead score. - Recurring monitoring: turn on Monitor mode and create a monthly Schedule to capture only new licensees.
- Proxies: leave proxy off — the actor downloads the official ATF CSV directly. It only falls back to Residential (US) automatically if a direct download ever fails.
- Collectors: the ATF business export already omits Type 03 Curio & Relic hobbyists, so every record is a real firearms business.
FAQ
Where does the data come from? The official ATF Complete Listing of Federal Firearms Licensees, published monthly by the U.S. Bureau of Alcohol, Tobacco, Firearms and Explosives. The actor always uses the most recent available month.
Is this legal / public data? Yes. The FFL listing is public data the ATF publishes specifically for industry and public use. You are responsible for using it in compliance with applicable laws and the ATF's terms.
Does it include emails? No — the ATF registry does not publish email addresses. It does include the licensee's voice phone and full mailing & premise addresses. Pair this with a website/email enrichment actor if you need emails.
What's the difference between licensee name and business name? licenseeName is the legal license holder (a person or company); businessName is the trade name / DBA when one is on file. displayName picks the best of the two.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I get only new licensees? Turn on Monitor mode and run on a Schedule. The actor remembers which FFLs it has already returned and emits only new ones, tagged monitorEvent: "new". This works alongside Apify Schedules — the schedule starts the run; monitoring decides what's new.
A field is empty — why? Fields are empty only when the ATF registry doesn't carry that value (e.g. no separate trade name, or no phone on file), never because the scraper skipped them.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.