Two ways to charge for delivery, and the quiet one is often the better business decision.
The cart asks Printful what shipping costs for this basket to this address, and shows the answer. Accurate, and it protects your margin on heavy or overseas parcels.
The cost is that your checkout now depends on an external API responding quickly, every time. When it is slow, the customer waits on the last screen before paying — the most expensive place on your site to make someone wait.
If you use live rates, the thing to verify is the failure path: a hard timeout, and a fallback to your own rate rather than an error. The cart must never block.
WooCommerce quotes a fixed amount you set. Instant, never fails, and completely under your control. You absorb the difference when reality costs more.
Done carelessly this loses money on every heavy or international order. Done with a little arithmetic it is perfectly sound, and most small shops are better off here while volumes are low.
Free shipping above a threshold works well here: set the threshold high enough that the order covers its own delivery.
What ours does not do. The free plugin copies simple products using the first variant, so it is not the answer if you sell one design in six sizes. It does not send orders to Printful and does not quote live shipping rates. It works with Printful only — not Printify or other providers.
These notes are written by sellerkit. We build a Printful sync plugin for WooCommerce (below), which is why we know these failure modes.
Everything above this box works whether or not you install anything. Where a workaround is enough, we say so.