{"id":401423,"date":"2026-11-12T15:49:52","date_gmt":"2026-11-12T15:49:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/baffle-search\/"},"modified":"2026-11-12T15:49:26","modified_gmt":"2026-11-12T15:49:26","slug":"baffle-search","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/baffle-search\/","author":23600749,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.1","stable_tag":"0.2.1","tested":"7.1.4","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"baFFLe Search","header_author":"Quartermaster Arms","header_description":"FFL dealer search at WooCommerce checkout, powered by the paid baFFLe Search data service: ZIP-radius search with a map, the ship-to pinned to the chosen dealer, and an \"Awaiting FFL verification\" hold before fulfillment.","last_updated":"2026-11-12 15:49:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":176,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.1":{"tag":"0.2.1","author":"quartermasterarms1","date":"2026-11-12 15:49:26","revision":3798708}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3798708,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3798708,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3798708,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3798708,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3798708,"resolution":"1","location":"assets","locale":"","width":1440,"height":878},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3798708,"resolution":"2","location":"assets","locale":"","width":972,"height":755},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3798708,"resolution":"3","location":"assets","locale":"","width":1440,"height":761},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3798708,"resolution":"4","location":"assets","locale":"","width":1440,"height":540}},"screenshots":{"1":"The dealer picker at checkout: ZIP search, results and map.","2":"The FFL Transfer box on an order, with the dealer's license details and warnings.","3":"WooCommerce \u2192 FFL Dealers: list status, license and data service.","4":"The setup wizard."}},"plugin_section":[],"plugin_tags":[3148,15814,182389,198681,286],"plugin_category":[45],"plugin_contributors":[292321],"plugin_business_model":[],"class_list":["post-401423","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-dealer","plugin_tags-ffl","plugin_tags-firearms","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-quartermasterarms1","plugin_committers-quartermasterarms1"],"banners":{"banner":"https:\/\/ps.w.org\/baffle-search\/assets\/banner-772x250.png?rev=3798708","banner_2x":"https:\/\/ps.w.org\/baffle-search\/assets\/banner-1544x500.png?rev=3798708","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/baffle-search\/assets\/icon-128x128.png?rev=3798708","icon_2x":"https:\/\/ps.w.org\/baffle-search\/assets\/icon-256x256.png?rev=3798708","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/baffle-search\/assets\/screenshot-1.png?rev=3798708","caption":"The dealer picker at checkout: ZIP search, results and map."},{"src":"https:\/\/ps.w.org\/baffle-search\/assets\/screenshot-2.png?rev=3798708","caption":"The FFL Transfer box on an order, with the dealer's license details and warnings."},{"src":"https:\/\/ps.w.org\/baffle-search\/assets\/screenshot-3.png?rev=3798708","caption":"WooCommerce \u2192 FFL Dealers: list status, license and data service."},{"src":"https:\/\/ps.w.org\/baffle-search\/assets\/screenshot-4.png?rev=3798708","caption":"The setup wizard."}],"raw_content":"<!--section=description-->\n<p><strong>baFFLe Search\u2122 requires a paid subscription to the baFFLe Search\u2122 data service.<\/strong> The service supplies the nationwide FFL dealer list and building-level map pins that the dealer search runs on. The plugin is the client for that service: it downloads the list to your own site and searches it there.<\/p>\n\n<h4>What the service adds over the raw ATF file<\/h4>\n\n<p>ATF publishes its dealer list as a plain text file. The data service does the work of turning that file into something a checkout can use, and repeats it every month:<\/p>\n\n<ul>\n<li><strong>Cleaned.<\/strong> Records are normalized and checked, so bad rows never reach your store.<\/li>\n<li><strong>Deduplicated.<\/strong> One row per active license.<\/li>\n<li><strong>Rooftop-geocoded.<\/strong> Dealers are matched to their actual building, so the map shows the shop and not the middle of a ZIP code. The geocoding runs on our side, across the whole country.<\/li>\n<li><strong>Signed and published monthly.<\/strong> Each list carries a signature that the plugin verifies before using it. A list that fails the check is refused.<\/li>\n<\/ul>\n\n<h4>What the plugin does<\/h4>\n\n<p>When a cart holds a product you have flagged as an FFL item (a serialized firearm, frame, receiver, suppressor or other NFA item), the buyer searches the dealer list by ZIP code and distance, sees the dealers on a map, and chooses one. The shipping address is pinned to that dealer's licensed premises and can't be edited by the buyer. The order then waits in a dedicated <strong>Awaiting FFL verification<\/strong> status until you confirm the dealer's license and press <em>Mark FFL verified<\/em> on the order screen.<\/p>\n\n<ul>\n<li><strong>ZIP-radius search<\/strong> (1, 5 or 10 miles) over the Census ZIP table that ships with the plugin, with a map of the results. Search runs on your own site.<\/li>\n<li><strong>Ship-to locked to the dealer.<\/strong> The buyer still enters their own billing address.<\/li>\n<li><strong>Hold for verification.<\/strong> FFL orders stop in <em>Awaiting FFL verification<\/em>; the buyer gets a \"we're confirming your dealer\" email; you see the dealer's license number, type, expiry month and warnings (license expired, dealer missing from the latest list, address changed) in an <em>FFL Transfer<\/em> box on the order. Optionally require an uploaded copy of the dealer's license before an order can be marked verified.<\/li>\n<li><strong>Rules you set:<\/strong> which license types may receive (01, 02, 07 and the rest), blocked states, per-state notes shown to the buyer, in-store pickup for FFL items, your own checkout notice and email text.<\/li>\n<li><strong>Setup wizard<\/strong> under WooCommerce \u2192 FFL Setup. Every step can be skipped and run again later.<\/li>\n<\/ul>\n\n<h4>Without an active subscription<\/h4>\n\n<p>Product flagging, the FFL requirement at checkout, the verification hold, the order screen, in-store pickup and every non-firearm product keep working with or without a subscription. What a subscription pays for is the list:<\/p>\n\n<ul>\n<li>An out-of-date dealer list is not safe to ship against, so the list stops updating when a subscription ends and is removed within 30 days of its last update, the last time the service confirmed it. Until then, dealer search runs on the list you already have.<\/li>\n<li>You get one warning email 17 days after that last update. The plugin asks the service once more before it removes a list, and a removed list comes back with the next update once your subscription is active.<\/li>\n<li>A store that never had a license has no dealer list, so there is nothing to search. Checkout tells buyers to contact the store.<\/li>\n<\/ul>\n\n<h4>What it is not<\/h4>\n\n<p>You verify licenses. baFFLe Search\u2122 shows you the receiving dealer's details and links you to ATF eZ Check, but <strong>you confirm the license and complete the transfer under your own procedures.<\/strong> The plugin is a compliance aid, not legal advice. No plugin can provide 100% compliance, and it does not replace Form 4473, NICS, your bound book or your state's rules. The dealer list does not carry SOT status: for NFA items you confirm the receiving dealer's SOT yourself.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A baFFLe Search\u2122 subscription. <a href=\"https:\/\/checkout.freemius.com\/plugin\/42227\/plan\/73484\/\">Buy one here<\/a>, or from the plugin's FFL License screen.<\/li>\n<li>WooCommerce 9.0 or newer with the <strong>block checkout<\/strong> (the Checkout block). The classic shortcode checkout is not supported: a cart holding an FFL item is refused there and the buyer is sent to the checkout page.<\/li>\n<li>PHP 8.1 or newer.<\/li>\n<\/ul>\n\n<p>baFFLe Search\u2122 is published by Quartermaster Arms and is not affiliated with or endorsed by ATF. <a href=\"https:\/\/www.quartermasterarms.com\/baffle-search\/terms\/\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/www.quartermasterarms.com\/baffle-search\/privacy\/\">Privacy Policy<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>baFFLe Search\u2122 sends no order or buyer data anywhere. Dealer search runs on your own site's copy of the dealer list. The plugin uses these outside services:<\/p>\n\n<h4>baFFLe Search\u2122 data service (Quartermaster Arms)<\/h4>\n\n<p>The paid service this plugin is built on. It supplies the FFL dealer list, built from public ATF records, and building-level map pins. Host: ffl-geo-feed.bh2win.workers.dev.<\/p>\n\n<p>No connection is made until a subscription key is entered. After that the plugin checks the service weekly and downloads a new list when there is one; a new list is published monthly. Each request carries the site's install ID and a signature made with the install's secret. Your license key is never sent to this service, and neither is any order or buyer data.<\/p>\n\n<p>Terms: https:\/\/www.quartermasterarms.com\/baffle-search\/terms\/\nPrivacy: https:\/\/www.quartermasterarms.com\/baffle-search\/privacy\/<\/p>\n\n<h4>OpenStreetMap tiles (tile.openstreetmap.org)<\/h4>\n\n<p>Used to draw the dealer map at checkout. The buyer's browser loads map tiles directly from OpenStreetMap each time the map is shown, which shares the buyer's IP address and the map area viewed.<\/p>\n\n<p>Privacy: https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\nTile usage policy: https:\/\/operations.osmfoundation.org\/policies\/tiles\/<\/p>\n\n<h4>Freemius (freemius.com)<\/h4>\n\n<p>Used for key activation, the account page and checkout. When you activate a subscription key, Freemius receives:<\/p>\n\n<ul>\n<li>your license key<\/li>\n<li>your site's URL and a hashed site ID<\/li>\n<li>the plugin's ID, slug and version, and the Freemius SDK version<\/li>\n<li>your site's admin return URLs<\/li>\n<li>status flags: active, localhost, marketing off and tracking off<\/li>\n<li>your server's IP address<\/li>\n<li>your WordPress version and site URL, carried in the request's user agent<\/li>\n<\/ul>\n\n<p>It does not receive the admin's name or email, the site title, the site language, or your plugin or theme lists.<\/p>\n\n<p>After activation, Freemius links this install to the license owner's account. A daily license sync reports your site URL, plugin version, SDK version and active state, and deactivating or uninstalling the plugin reports the change of state.<\/p>\n\n<p>Terms: https:\/\/freemius.com\/terms\/\nPrivacy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<h4>Bundled data and links<\/h4>\n\n<p>ZIP-code center points come from U.S. Census ZCTA data and ship inside the plugin, so no connection to census.gov is made. The order screen has a button that opens ATF eZ Check in a new tab when staff click it; the plugin itself makes no connection to ATF.<\/p>\n\n<p>Leaflet 1.9.4 (BSD 2-Clause) draws the map. The minified file, its unminified source and its license are all in <code>assets\/vendor\/leaflet\/<\/code>.<\/p>\n\n<p>The Freemius SDK in <code>vendor\/freemius\/<\/code> is GPL software. Source for its minified files: the SDK at https:\/\/github.com\/Freemius\/wordpress-sdk, the pricing page at https:\/\/github.com\/Freemius\/pricing-page, jQuery Form at https:\/\/github.com\/jquery-form\/form and jQuery postMessage at https:\/\/github.com\/cowboy\/jquery-postmessage.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>baFFLe Search\u2122 stores dealer records, order dealer choices, verification records and license copies on your own site only. The publisher never receives your customers' data.<\/p>\n\n<p>Terms of Service: https:\/\/www.quartermasterarms.com\/baffle-search\/terms\/\nPrivacy Policy: https:\/\/www.quartermasterarms.com\/baffle-search\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active.<\/li>\n<li>Follow the notice to <strong>WooCommerce \u2192 FFL Setup<\/strong>: enter your FFL number, load the ZIP table, tick the product categories that need a dealer, and choose whether to allow in-store pickup.<\/li>\n<li>Enter your subscription key under <strong>WooCommerce \u2192 FFL License<\/strong>. The plugin makes no connection to the data service until you do.<\/li>\n<li>Once the dealer list has loaded, add a test product to a flagged category and walk through the checkout once.<\/li>\n<li>Fine-tune under WooCommerce \u2192 Settings \u2192 FFL. The list status is under WooCommerce \u2192 FFL Dealers.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20subscription%3F\"><h3>Do I need a subscription?<\/h3><\/dt>\n<dd><p>Yes. The dealer list comes from the paid data service, and without it there is no list to search. See \"Without an active subscription\" above for exactly what happens.<\/p><\/dd>\n<dt id=\"where%20does%20the%20dealer%20list%20come%20from%3F\"><h3>Where does the dealer list come from?<\/h3><\/dt>\n<dd><p>From the baFFLe Search\u2122 data service, built centrally from public ATF records. The plugin checks for a new list every week, and a new list is published every month. Dealers that drop off a newer list are kept but marked missing, and are not offered to buyers.<\/p><\/dd>\n<dt id=\"does%20it%20send%20my%20orders%20or%20customers%20anywhere%3F\"><h3>Does it send my orders or customers anywhere?<\/h3><\/dt>\n<dd><p>No. Search runs on your own site's copy of the list. Orders, buyers and chosen dealers stay in your WooCommerce database. The dealer map loads tiles from OpenStreetMap in the buyer's browser; see External services.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20classic%20%28shortcode%29%20checkout%3F\"><h3>Does it work with the classic (shortcode) checkout?<\/h3><\/dt>\n<dd><p>No. The plugin is built on the WooCommerce block checkout and its Store API. On a classic checkout page, a cart that holds an FFL item is refused with a message; nothing else about the store changes. Switch your checkout page to the Checkout block (edit the page, remove the shortcode, insert the Checkout block). Your payment methods must support the block checkout; most current ones do.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20verify%20the%20dealer%20for%20me%3F\"><h3>Does the plugin verify the dealer for me?<\/h3><\/dt>\n<dd><p>No. It shows you the dealer's details and links to ATF eZ Check; you verify the license and mark the order verified. Pickup orders are not held because the transfer happens at your own counter.<\/p><\/dd>\n<dt id=\"can%20a%20single%20product%20be%20exempted%20or%20flagged%3F\"><h3>Can a single product be exempted or flagged?<\/h3><\/dt>\n<dd><p>Yes. Categories carry the flag (subcategories included) and every product has an \"FFL transfer\" override on its General tab.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%3F\"><h3>What happens to my data if I uninstall?<\/h3><\/dt>\n<dd><p>Dealer tables and settings are kept unless you tick \"Delete the dealer tables and these settings when the plugin is deleted\" under Settings \u2192 FFL. Order data (dealer snapshots, verification records, license copies) is never deleted.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>First wordpress.org release: block-checkout dealer picker with map, the dealer list from the baFFLe Search\u2122 data service, verification hold and setup wizard.<\/li>\n<\/ul>","raw_excerpt":"FFL dealer search at WooCommerce checkout, powered by the paid baFFLe Search\u2122 data service. Firearm orders ship only to a licensed dealer.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/401423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=401423"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/quartermasterarms1"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=401423"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=401423"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=401423"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=401423"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=401423"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=401423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}