Forklift for Craft CMS

Free for Craft Commerce 5 · Pro $149

Wholesale, without leaving Commerce

WooCommerce has B2BKing, Wholesale Suite and WooCommerce B2B. Craft has had Bulk Pricing and catalog pricing rules, and nothing for the rest. Forklift adds company accounts, contract price lists, approvals, quotes, net terms and tax exemption to the Commerce store you already run.

Forklift

One price, and why it is that price

A wholesale buyer looking at £8.40 wants to know whether that is their contract rate, a break they have just earned, or the public price. Every price Forklift computes comes from one place and carries its reason with it, so the price a buyer is shown cannot disagree with the price they are charged.

twig
{% set price = craft.forklift.price(variant, 12) %}

{{ price.price|commerceCurrency(cart.currency) }}      {# £8.40            #}
{{ price.listPrice|commerceCurrency(cart.currency) }}  {# £10.50           #}
{{ price.sourceLabel }}                                {# Quantity break at 12+ #}

{% if price.nextBreak %}
    {{ price.nextBreak.qty }}+ at {{ price.nextBreak.price|commerceCurrency(cart.currency) }} each
{% endif %}

{# The cart, the pad, the CSV upload, reorder and the quote builder
   all read this same PriceResult. #}

Features

Everything a trade account needs, built on Commerce's own carts, gateways and tax engine rather than beside them.

Company accounts, buyers and roles

A company is a Craft element with a field layout of your own. Buyers attach as members, and the role belongs to the membership, so the same person can administer one account and only view another.

  • Administrator, approver, buyer and viewer, with no permission matrix
  • Per-buyer spend limits: blank means none, zero means not unassisted
  • On hold stops new orders and nothing else

Contract price lists

A price list is a document: a name, an owner, dates it is good between, and rows. Fixed prices, percentage or amount off, by variant, product, product type or everything, with quantity breaks.

  • The highest priority list wins only for the lines it mentions
  • A contract price above list is refused, and the CP says why
  • A cheaper public promotion beats the contract

Spend approvals

Orders need signing off by company threshold, by the buyer's own limit, or by a flag on the buyer. The reason is recorded when the request is raised and never recomputed.

  • Approvers decide from an email link, with no login needed
  • An approval covers an amount: a basket that grows needs approving again

Quotes with pay-by-link

The buyer asks, you edit quantities and prices, add delivery and set an expiry, then send. Forklift builds a real Commerce cart carrying those prices and emails a signed link that loads it.

  • This is craftcms/commerce#1156, still open in Commerce
  • From the click it is an ordinary checkout, every gateway included

Net terms and credit limits

A purchase-order gateway that authorises rather than purchases. The order completes and totalPaid stays at zero, which is true, until you capture the payment with Commerce's own machinery.

  • Over the limit withdraws the gateway, not the checkout
  • The balance is a SUM over an append-only ledger, every time
  • Aged statements as printable HTML and CSV

Quick order, CSV and reorder

Wholesale buyers do not browse. Type part numbers into the pad, upload a spreadsheet, or reorder last month's order. All three return the same result, and nothing is silently dropped.

  • Exact SKU match, then case-insensitive, and no guessing
  • Every failed row says why, with its line number
  • Reorder re-prices at today's rates and names what changed

Tax exemption certificates

Certificates are held per company with a jurisdiction and an expiry. Tax is removed only when one is approved by a person, unexpired, and covers the delivery address.

  • A Texas resale certificate does not exempt a delivery to Ohio
  • A subclass of Commerce's own adjuster, so the tax arithmetic stays Commerce's
  • Avalara and TaxJar stores keep their own engine

Lite is a real plugin, not a demo

Lite is free and uncapped: companies, buyers, roles and spend limits, order history and the buyer portal, PO numbers, tax certificates, the quick-order pad and reorder. Pro is the money half.

  • Pro adds price lists, approvals, terms and credit, quotes and CSV upload
  • A lapsed licence never breaks a store: Pro settings are ignored, not obeyed

Frequently Asked Questions

The questions worth answering before you install it.

Start free, upgrade when the money is involved

Lite is free and uncapped: companies, buyers, roles, the portal, PO numbers, certificates, quick order and reorder. Pro is $149 with a $129/year renewal, and adds price lists, approvals, net terms, quotes and CSV upload.