Title: FFL Monkey Checkout for WooCommerce
Author: FFLMonkey.com
Published: <strong>November 2, 2026</strong>
Last modified: November 2, 2026

---

Search plugins

![](https://ps.w.org/ffl-monkey-checkout-for-woocommerce/assets/banner-772x250.png?
rev=3780782)

![](https://ps.w.org/ffl-monkey-checkout-for-woocommerce/assets/icon-256x256.png?
rev=3780782)

# FFL Monkey Checkout for WooCommerce

 By [FFLMonkey.com](https://profiles.wordpress.org/fflmonkey/)

[Download](https://downloads.wordpress.org/plugin/ffl-monkey-checkout-for-woocommerce.1.6.1.zip)

 * [Details](https://wordpress.org/plugins/ffl-monkey-checkout-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/ffl-monkey-checkout-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/ffl-monkey-checkout-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/ffl-monkey-checkout-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/ffl-monkey-checkout-for-woocommerce/)

## Description

In the United States a firearm bought online is not shipped to the buyer. It
 ships
to a federally licensed dealer, an FFL, who completes the transfer in person. This
plugin adds that step to a WooCommerce checkout.

#### What it does

 * Adds a dealer picker to checkout, in both the Checkout block and the classic
   
   checkout. The buyer searches by ZIP code, or by their location if they choose
   to share it, and picks a dealer from a list and a map.
 * Splits a mixed cart. Items that need a dealer ship to the dealer; everything
   
   else ships to the buyer’s own address, as a separate package.
 * Holds the order until the requirement is met. A dealer whose licence has
    expired
   is refused, and an order with an NFA item needs a dealer with a Special Occupational
   Tax (SOT) on record.
 * Records the chosen dealer on the order and shows it on the order screen, with
   
   a link to the ATF’s FFL eZ Check.
 * Optionally lets buyers collect from your own premises, upload a licence for a
   
   dealer that is not listed, or place the order now and name a dealer later.
 * Adds a checkbox to each product for “ships to a dealer”, and one for NFA
    items
   that need an SOT dealer.

#### Requires an account

The dealer directory the picker searches is a service run by FFLMonkey.com, a
 paid
subscription. The plugin cannot search for dealers without an account at https://
fflmonkey.com, which the setup screen creates or signs in to.

The plugin itself is free software under the GPL and contains no locked,
 time-limited
or paid-only code. A subscription buys access to the service’s dealer directory,
not to features of this plugin.

#### Requirements

 * WooCommerce
 * PHP 7.2 or newer
 * An account at FFLMonkey.com

### External services

The plugin uses five external services. None is contacted until you choose
 Create
an account or I already have an account on the plugin’s page (or, if the FFL Monkey
Data Feed plugin is connected on this store, until you open the page), or press 
an eZ Check control on an order (4, below). Activating or deactivating the plugin
sends nothing. Once the store is connected, the transfer of each order that needs
a dealer is sent to FFLMonkey.com, and it includes the buyer’s name, email address,
phone number and addresses (below). Nothing about buyers is sent to OpenFreeMap 
or OpenStreetMap.

**1. FFLMonkey.com, `https://backend.fflmonkey.com`**

Runs the dealer directory and your account.

 * Setup, from your server, while the store is not connected: when you choose
    Create
   an account or I already have an account, a request for the sign-in choices on
   offer, which says nothing about your store. When you sign in, your email and 
   password; when you create an account, your name, email and password, and your
   business name and how you found FFL Monkey if you give them. With either, your
   site’s address and name, your admin URL and an identifier for this installation;
   during setup, the licence and plan you choose. If the FFL Monkey Data Feed plugin
   is connected on this store, its licence key is sent when you open the page, so
   you are signed in without typing your password. Choosing a paid plan opens Stripe’s
   checkout in a new tab.
 * Admin screens, once the store is connected: your site and admin URLs, the
    licence
   key the plugin holds and the product name.
 * The Dealer licences and Account tabs, from your browser, once the store is
    connected:
   these tabs load the dealer licences and SOT stamps you uploaded there, and your
   subscription, directly from this host, using a short-lived token the plugin obtains
   for them. The licence and stamp files you drop or choose on the Dealer licences
   tab are sent to this host, which reads them to find each dealer. As with any 
   web request, the browser also sends its IP address. Subscribing or managing billing
   opens a new tab on this host, which passes you to Stripe to pay.
 * Dealer search, from the buyer’s browser: the ZIP code searched (or the
    buyer’s
   coordinates, only if they choose “Use my location”), the store’s public dealer-
   search key and, if the buyer uploads a dealer’s licence, that file. As with any
   web request, the browser also sends its IP address.
 * At checkout, from your server: the chosen dealer’s licence number, to check
    
   it is valid.
 * At checkout, for a connected store whose cart holds products Data Feed
    brought
   in and ships to a US state, from your server: those products’ catalog IDs and
   the state, with the store’s licence ID and API token, to ask which of them that
   state’s law restricts. The answer is kept for 15 minutes.
 * When a dealer is recorded on an order after checkout, from your server: that
   
   dealer’s licence number, to fetch their name, address, licence expiry and contact
   details. This happens whatever the dealer verification setting, for an FFL number
   you type or pick in the order’s FFL transfer box, a dealer the buyer chooses 
   from the link in their email, and the dealer of an approved upload.
 * Every 15 minutes, for a connected store with orders waiting on a dealer
    licence
   the buyer uploaded, from your server: each upload’s reference, with the store’s
   licence ID and API token, to ask whether FFLMonkey.com has read and approved 
   it, and for the dealer’s licence number once it has.
 * When an order is placed and completed: a reference for the order, made from
    
   its order key so that the key itself is never sent, the dealer’s licence number,
   name, address and licence expiry, and whether a dealer was named.
 * The FFL transfer of each order that needs a dealer, for a connected store,
    whenever
   it changes: its code, status and history (who did what, and when), the order’s
   number, status, currency and total, the buyer’s name, email address, phone number
   and billing and shipping addresses, the items ordered, the dealer’s details, 
   contact and answer, and the carrier, tracking number and serial numbers once 
   you mark it shipped.
 * When a transfer request is emailed to a dealer, from your server: your FFL
    number,
   to fetch the copy of your FFL (and SOT, for an NFA order) that FFLMonkey.com 
   holds, to attach it.
 * When a dealer sends their FFL or SOT copy from their answer page, from your
    
   server: that file, with the store’s public dealer-search key.
 * When the store’s licence has stopped (a failed payment, an ended trial or
    free
   period, a cancelled subscription) and you open the plugin’s page, from your server:
   the store’s licence ID and API token, to ask whether a subscription restores 
   it; and when you choose a plan, that plan, to open Stripe’s checkout (5, below).
 * When you download a dealer’s FFL or SOT copy from an order, from your
    server:
   that dealer’s licence number, with the store’s API token.
 * Your own FFL or SOT document, if you upload one on the Your FFL tab: from
    your
   browser, with the store’s short-lived sign-in for its FFL Monkey screens, or 
   from your server when the page cannot send it directly.
 * Support tickets, for a connected store: what you write and any files you
    attach,
   from your browser, with the name and email of the WordPress user who sends it,
   your site’s address, and your plugin, WordPress, WooCommerce and PHP versions.
   Never your licence key or any password. While you are in wp-admin, your server
   also asks whether a reply is waiting for you, at most once a minute, with the
   store’s licence ID and API token.

Terms: https://fflmonkey.com/legal/terms
 Privacy: https://fflmonkey.com/legal/privacy

**2. OpenFreeMap, `https://tiles.openfreemap.org`**

The picker’s map is drawn from OpenFreeMap’s map style, tiles and fonts,
 loaded
by the buyer’s browser when results are shown. Each request carries the buyer’s 
IP address and the referrer your site’s policy allows (by default your store’s origin,
never the page address).

Terms: https://openfreemap.org/tos/
 Privacy: https://openfreemap.org/privacy/

**3. OpenStreetMap, `https://tile.openstreetmap.org`**

When OpenFreeMap’s map cannot be drawn (it does not load, or the buyer’s
 browser
has no WebGL), the picker’s map is drawn from OpenStreetMap tiles instead, loaded
by the buyer’s browser. Each request carries the buyer’s IP address and your store’s
origin as the referrer (never the page address), which the tile policy requires.

Terms: https://osmfoundation.org/wiki/Terms_of_Use
 Privacy: https://osmfoundation.
org/wiki/Privacy_Policy

**4. ATF FFL eZ Check, `https://fflezcheck.atf.gov`**

The public licence lookup of the U.S. Bureau of Alcohol, Tobacco, Firearms and
 
Explosives. When you press “ATF eZ Check” or “Verify on ATF eZ Check” in an order’s
FFL transfer box, your browser opens eZ Check in a new tab and posts the dealer’s
licence number to its search (the region, district and last five digits, the fields
the search asks for), to show whether the licence is current. Nothing is sent until
you press it, and nothing about the buyer is sent. As with any web request, the 
browser also sends its IP address.

Terms: the system use notice on https://fflezcheck.atf.gov/FFLEzCheck/
 Privacy:
https://www.justice.gov/doj/privacy-policy

**5. Stripe Checkout, `https://checkout.stripe.com`**

Choosing a paid plan during setup, or on the plugin’s page once the store’s
 licence
has stopped, opens Stripe’s checkout in a new tab, where you pay. FFLMonkey.com 
creates the checkout; the plugin sends nothing to Stripe itself, and your card details
never touch your site.

Terms: https://stripe.com/legal
 Privacy: https://stripe.com/privacy

### Credits

The merchant screens bundled in this plugin show department icons from Game
 Icons(
https://game-icons.net), by Lorc, Delapouite and contributors, licensed under CC
BY 3.0 (https://creativecommons.org/licenses/by/3.0/).

## Screenshots

[⌊Checkout: the buyer chooses where the firearm goes, a licensed dealer near them
or a dealer's licence they upload.⌉⌊Checkout: the buyer chooses where the firearm
goes, a licensed dealer near them or a dealer's licence they upload.⌉[

Checkout: the buyer chooses where the firearm goes, a licensed dealer near them 
or a dealer’s licence they upload.

[⌊Find an FFL: licensed dealers near a ZIP code on a map, best match first, with
those confirmed to accept transfers marked.⌉⌊Find an FFL: licensed dealers near 
a ZIP code on a map, best match first, with those confirmed to accept transfers 
marked.⌉[

Find an FFL: licensed dealers near a ZIP code on a map, best match first, with those
confirmed to accept transfers marked.

[⌊The chosen dealer: address, phone, licence number, transfer fee and whether they
accept transfers.⌉⌊The chosen dealer: address, phone, licence number, transfer fee
and whether they accept transfers.⌉[

The chosen dealer: address, phone, licence number, transfer fee and whether they
accept transfers.

[⌊An order's FFL transfer box: each step from the order to shipping, the dealer,
the licence check and the history.⌉⌊An order's FFL transfer box: each step from 
the order to shipping, the dealer, the licence check and the history.⌉[

An order’s FFL transfer box: each step from the order to shipping, the dealer, the
licence check and the history.

[⌊Transfers: every firearm order until it ships, and whom it waits on.⌉⌊Transfers:
every firearm order until it ships, and whom it waits on.⌉[

Transfers: every firearm order until it ships, and whom it waits on.

[⌊Your FFL: send your own licence and SOT stamp, and let buyers collect firearms
from your shop.⌉⌊Your FFL: send your own licence and SOT stamp, and let buyers collect
firearms from your shop.⌉[

Your FFL: send your own licence and SOT stamp, and let buyers collect firearms from
your shop.

[⌊Appearance: the dealer picker's words and colour.⌉⌊Appearance: the dealer picker's
words and colour.⌉[

Appearance: the dealer picker’s words and colour.

## Blocks

This plugin provides 1 block.

 *   FFL dealer selector Lets a buyer choose the licensed dealer their firearms 
   ship to. Place it inside the Checkout block, or on its own page.

## Installation

 1. Install and activate WooCommerce.
 2. Install and activate this plugin.
 3. Open **FFLMonkey.com  Checkout** in the admin menu and follow the setup steps. 
    You sign in or create an account inside the panel and the store connects itself.
    Nothing has to be copied or pasted.
 4. On each product that must ship to a dealer, tick the box on its edit screen.
 5. Review the Your FFL and Appearance tabs.

## FAQ

### Do I need an account?

Yes. The dealer directory is a service run by FFLMonkey.com, and the plugin
 needs
an account there to search it.

### Does it work with the Checkout block?

Yes. The same picker appears in the Checkout block and in the classic
 checkout,
and both enforce the same rules.

### What happens to a cart with a firearm and a holster?

It is split into two packages. The firearm ships to the chosen dealer and the
 holster
ships to the buyer, each with its own shipping options.

### What if the buyer’s dealer is not in the directory?

The buyer can upload the dealer’s licence, or place the order and name a
 dealer
later. You can also let buyers collect from your own premises on the Your FFL tab.

### Is the source code available?

Yes. The plugin is licensed GPLv2 or later and its full source is in the
 download.
The PHP is in `src/`. The browser scripts in `assets/dist/` are compiled; their 
source is in `assets/src/` and, for the dealer picker, source/checkout-sdk/, with
the build configuration at the plugin root. The licences of the libraries bundled
into the picker are in `source/licenses/`.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“FFL Monkey Checkout for WooCommerce” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ FFLMonkey.com ](https://profiles.wordpress.org/fflmonkey/)

[Translate “FFL Monkey Checkout for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/ffl-monkey-checkout-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/ffl-monkey-checkout-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/ffl-monkey-checkout-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/ffl-monkey-checkout-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/ffl-monkey-checkout-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.6.1

 * The new FFL Monkey logo on the Checkout, setup and Support pages, three orange
   stripes in the menu, and a new banner and icon on the plugin’s WordPress.org 
   page.

#### 1.6.0

 * The dealer’s page has a new look, laid out like the FFL Monkey account, and a
   dealer answering from a page left open is told the transfer was already answered.

#### 1.5.0

 * The full-screen dealer search keeps keyboard focus inside it, and a dealer row’s
   grey lines are easier to read.
 * Transfers and Dealer licences read on a phone or tablet.
 * The dealer’s answer page keeps what the dealer typed when an answer is refused.
 * The FFL transfer box says when a dealer’s copy is not on file yet, and asks for
   a missing dealer email.
 * The plan step says who the free days are for, a buyer reads each checkout error
   once, and a reference code shows only when something failed on our side.

#### 1.4.0

 * Setup: the first screen asks FFL Monkey nothing until you choose to create an
   account or sign in. The first connect opens a short setup (your FFL licence, 
   store pickup, the picker’s wording and colour), then Transfers.
 * Your FFL: your licence goes straight to FFL Monkey from your browser, up to 10
   MB, so your host’s upload limit no longer refuses a phone photo. Your shop’s 
   phone is checked as a phone number.
 * Transfers: a transfer’s buttons open the order at its FFL transfer box, and recording
   a dealer’s answer by phone starts with no answer chosen.
 * Account: a cancelled plan is kept in one click, and support’s details sit under
   a closed Details for support.
 * A store that ships nothing is told so, and its orders still name the dealer. 
   A connection FFL Monkey refuses is said once, with Reconnect.
 * The page shows the plugin’s version and whether it is the newest.

#### 1.3.1

 * Transfers: the dealer a buyer picks from the link in their email is read from
   a cleaned copy of the form. Nothing you or buyers see changes.

#### 1.3.0

 * Setup: creating an account, signing in and choosing a plan happen on the FFL 
   Checkout page itself, then the page opens on Your FFL. A store running FFL Monkey
   Data Feed is signed in as the page opens.
 * Settings: leaving Your FFL or Appearance with changes not saved asks first.

#### 1.2.0

 * Ammunition shipped to California goes to a dealer: the dealer picker appears 
   for it, the buyer ticks that their dealer is a California licensed ammunition
   vendor, and the ammunition goes in the dealer’s parcel and on the dealer’s request.
   Elsewhere it ships to the buyer as before.

#### 1.1.0

 * FFL transfers: every firearm order opens a transfer. The dealer is asked by email
   and answers on your store, and you follow it from a Transfers tab, an FFL transfer
   box on the order and a printable record. The buyer gets an email at each step.
 * Dealer picker: the dealer’s details in two numbered steps with Directions and
   Call, an uploaded licence read while the buyer waits, and the picker can sit 
   inside the Checkout block.
 * Your FFL tab (formerly Collection) and Dealer licences tab for your own licence,
   SOT stamp and the licences you collect.
 * Appearance: a colour window for the picker’s colour, and the Search button text
   now changes the search button.
 * Setup and billing: the payment wait and the payment and licence pages share one
   clear card, and every error ends with a reference to quote.
 * Account: a licence that works without a plan says Free access and offers no plan.
 * Your FFL: a chosen file shows it is sending, the tab follows the check without
   a reload, and Send a different file opens the upload with a Back button.
 * Missing values read “None” instead of a dash.

#### 1.0.0

 * First public release.
 * Dealer picker for the Checkout block and the classic checkout, with ZIP and
    
   location search, a list and a map.
 * Splits carts between the dealer and the buyer, and holds orders until the
    dealer
   requirement is met.
 * The map shows on stores that send a strict referrer policy.

## Meta

 *  Version **1.6.1**
 *  Last updated **5 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.8 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.2 or higher **
 * Tags
 * [checkout](https://wordpress.org/plugins/tags/checkout/)[dealer](https://wordpress.org/plugins/tags/dealer/)
   [FFL](https://wordpress.org/plugins/tags/ffl/)[firearms](https://wordpress.org/plugins/tags/firearms/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/ffl-monkey-checkout-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/ffl-monkey-checkout-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/ffl-monkey-checkout-for-woocommerce/reviews/)

## Contributors

 *   [ FFLMonkey.com ](https://profiles.wordpress.org/fflmonkey/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/ffl-monkey-checkout-for-woocommerce/)