CN22/CN23 Customs Form Generator
Fill in a customs declaration for an international parcel, with the right form picked automatically by declared value.
Your details
Printable customs declaration
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Customs Declaration CN23</title>
<style>
* { box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; color: #111; margin: 0; padding: 32px; font-size: 13px; line-height: 1.5; background: #fff; }
.doc { max-width: 760px; margin: 0 auto; }
.row { display: flex; justify-content: space-between; gap: 24px; }
.head { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 28px; gap: 16px; }
h1 { font-size: 22px; margin: 0 0 4px; letter-spacing: -0.02em; }
h2 { font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin: 24px 0 8px; }
table { width: 100%; border-collapse: collapse; margin-top: 8px; }
th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid #e3e3e3; font-size: 12.5px; }
th { text-transform: uppercase; font-size: 10.5px; letter-spacing: 0.05em; color: #666; border-bottom: 2px solid #111; }
td.num, th.num { text-align: right; }
.totals { margin-top: 12px; width: 260px; margin-left: auto; }
.totals div { display: flex; justify-content: space-between; padding: 4px 0; }
.totals .grand { font-weight: 700; border-top: 2px solid #111; margin-top: 4px; padding-top: 8px; font-size: 15px; }
.muted { color: #666; }
.box { border: 1px solid #ddd; border-radius: 8px; padding: 12px 14px; }
.sig { margin-top: 40px; display: flex; gap: 40px; }
.sig div { flex: 1; border-top: 1px solid #111; padding-top: 6px; font-size: 11px; color: #666; }
@media print { body { padding: 0; } }
</style>
</head>
<body>
<div class="doc">
<div class="head">
<div><h1>Customs Declaration — CN23</h1><p class="muted">PS Form 2976-A style, for higher-value or restricted items</p></div>
<div class="box"><p><strong>Category:</strong> Sale of goods</p></div>
</div>
<div class="row">
<div><h2>Sender</h2><p><strong>Harbour & Co</strong></p><p class="muted" style="white-space:pre-line">48 Quay Street
Cork, Ireland</p></div>
<div style="text-align:right"><h2>Addressee</h2><p><strong>Wren & Co</strong></p><p class="muted" style="white-space:pre-line">12 Baker Street
London, UK</p></div>
</div>
<h2>Contents</h2>
<table><thead><tr><th>Description</th><th>HS tariff no.</th><th>Origin</th><th class="num">Qty</th><th class="num">Weight (kg)</th><th class="num">Value (EUR)</th></tr></thead><tbody><tr><td>Wool scarf</td><td>6214.20</td><td>Ireland</td><td class="num">4</td><td class="num">0.80</td><td class="num">96.00</td></tr><tr><td>Gift box</td><td>4819.50</td><td>Ireland</td><td class="num">4</td><td class="num">0.40</td><td class="num">12.00</td></tr></tbody></table>
<div class="totals">
<div><span>Total weight</span><span>4.80 kg</span></div>
<div class="grand"><span>Total value</span><span>EUR 432.00</span></div>
</div>
<h2>Additional information</h2><p class="muted">License: — · Certificate: — · Invoice: —</p>
<div class="sig"><div>Sender's signature and date</div></div>
</div>
</body>
</html>Using CN23 based on the total declared value. Print it, sign it and attach it to the parcel, or copy these details into your carrier's own online customs form.
This follows the standard CN22/CN23 layout used across postal carriers, but the live PS Form 2976 (CN22) and 2976-A (CN23) are the forms USPS actually accepts. Check your carrier's current form before you ship, especially for restricted, dutiable or high-value items.
Live preview
CN22 vs CN23
CN22 and CN23 are the standard postal customs declarations used worldwide for international mail. CN22 is the shorter form for lower-value items; CN23 is the fuller form, with a line for each item's HS tariff number and country of origin, used for higher-value, restricted or dutiable shipments.
USPS puts the common threshold at $400 declared value: below it, CN22 is generally enough; at or above it, CN23 is required. Set Which form to Auto and the tool follows the total value you enter, or force one form if your carrier's rule differs.
Filling it in correctly
- Describe contents specifically. "Clothing" invites a customs hold; "Wool scarf, 100% wool" doesn't.
- Use a real HS tariff number where you can. Your carrier or a customs broker can usually confirm one for a product you ship often.
- Category matters for duty. A genuine gift under your destination country's gift threshold may be duty-free; a commercial sale usually isn't.
- Sign it. Postal customs declarations aren't valid without the sender's signature, even on a form generated digitally.
Before you rely on this
This follows the standard CN22/CN23 layout, but it isn't the live PS Form 2976 or 2976-A that USPS (or your own postal operator) actually scans and accepts. For anything restricted, high-value, or going somewhere with unusual import rules, fill in your carrier's official form or check with them directly before shipping.
Questions people ask
What's the value threshold for CN22 vs CN23?
USPS uses $400 in declared value as the common line: below it, CN22 (PS Form 2976) is usually enough; at or above it, CN23 (PS Form 2976-A) is required. Other postal operators may set their own threshold, so check your carrier if you're not shipping from the US.
Do I always need an HS tariff number?
CN23 expects one for each item so customs can assess duty correctly. It's less critical on CN22 for low-value items, but including it rarely hurts and can speed up clearance.
What if I'm sending a gift?
Mark the category as Gift. Many countries have a separate, often more generous duty-free threshold for genuine gifts, but rules vary widely by destination.
Does this replace my carrier's online customs form?
No. Use it to work out exactly what to enter, then either print and attach this form or copy the same details into your carrier's own system, whichever they require for your shipment.
Related tools
Last reviewed 30 September 2026.
Sources: USPS: Customs forms · USPS FAQ: Which customs form do I use?
