Why per-character pricing works
Compare three pricing approaches for a $60 engraved bracelet:
| Approach | Customer wanting 8 chars ("Sarah!") | Customer wanting 25 chars ("For my dearest sister") | Merchant margin capture |
|---|---|---|---|
| Free engraving unlimited | Base $60, pays $60 | Base $60, pays $60 | Weak — long-engraving customers get free labor |
| Flat $10 engraving fee | Base $60 + $10, pays $70 — feels expensive for short text | Base $60 + $10, pays $70 — bargain for long text | OK — but short-text customers may abandon |
| Per-character (first 10 free, $1/char after) | Base $60, pays $60 — under threshold, no friction | Base $60 + 15 × $1 = $75, pays $75 — proportional | Best — captures value proportionally |
Per-character psychology: customers with short engravings feel like they got a deal (free upgrade). Customers with long engravings feel the fee is fair (they used more of the surface + more labor). Both segments convert.
Standard formulas by product category
| Product category | Typical surface size | Free chars | Fee per extra char | Hard max chars |
|---|---|---|---|---|
| Rings (inside band) | ~15mm × 3mm | 10 | $1.00 | 25 |
| Necklaces (pendant back) | ~20mm × 15mm | 15 | $0.75 | 40 |
| Cufflinks (face) | ~15mm square | 6 | $1.50 | 10 (3 letters × 3 lines) |
| Coffee mugs (wrap) | ~215mm × 90mm | 25 | $0.25 | 80 |
| Wine glasses | ~50mm × 30mm | 15 | $0.50 | 40 |
| Tumblers (wrap) | ~215mm × 200mm | 30 | $0.20 | 150 |
| Cutting boards (front) | ~300mm × 200mm | 40 | $0.15 | 200 |
| Doormats | ~700mm × 400mm | 60 | $0.10 | 300 |
| Custom signs | Varies | 60 | $0.10-0.25 | 500 |
Rule of thumb: smaller surface = fewer free chars + higher per-char fee (labor is more precise). Larger surface = more free chars + lower per-char fee (more forgiving).
Setup with Print It My Way (5 minutes)
- Install Print It My Way (Basic tier $7.99/mo — per-character pricing is native)
- Dashboard → New Personalizer
- Add a Text field, name it (e.g. "Engraving Text")
- Click the field → Pricing tab
- Select pattern "Per-character"
- Enter: Free chars 10, Per-char fee $1.00, Max chars 25
- Enable "Show live fee counter" toggle
- Attach personalizer to product
- Test order — the fee auto-computes at cart and shows as clean cart line
Live counter UX (critical for conversion)
Show the customer the exact fee as they type. Without live feedback, they discover the fee only at checkout — confusion + potential abandon.
Print It My Way renders below the text input:
"Chars: 15 / 25 • Fee: +$5.00 (10 chars free, 5 extra × $1.00)"
Updates on every keystroke. Customer decides in real time whether the extra chars are worth the extra cost. Higher conversion + higher AOV vs. delayed-fee display.
The Cart Transform under the hood
Cart Transform runs when the cart loads at checkout. It reads the Engraving Text line-item property and computes the fee:
const FREE_CHARS = 10;
const PER_CHAR_FEE = 1.00;
for (const line of cart.lines) {
const text = line.attribute?.value;
if (!text) continue;
const extra = Math.max(0, text.length - FREE_CHARS);
if (extra === 0) continue;
const feeAmount = extra * PER_CHAR_FEE;
// Add fee to line price
addOperation({ lineUpdate: { cartLineId: line.id, priceDelta: feeAmount }});
}
Print It My Way ships this as a native function. On non-Plus stores, the equivalent runs app-side with the same customer experience.
Tiered per-character (advanced)
Some merchants use graduated tiers instead of flat per-char:
- Chars 1-10: free
- Chars 11-20: $0.50 each
- Chars 21-30: $1.00 each
- Chars 31+: $1.50 each
Rationale: longer text requires more precision from the engraver (labor cost rises non-linearly with length). Tiered pricing captures this. Print It My Way Pro tier supports tiered per-character; Basic tier is flat-only.
Per-character with font upgrade
Combine per-character with per-font pricing:
- Standard fonts (Inter, Arial, Roboto): included
- Premium script fonts (Great Vibes, Allura): +$2 flat
- Custom uploaded font (Unlimited tier): +$5 flat
Combined: 15 chars in Great Vibes = 5 extra × $1 + $2 font = $7 add-on fee. Cart Transform handles both.
Space + special character handling
Question that comes up in every implementation: do spaces count as characters? Special characters (é, ñ, emoji)?
Standard convention:
- Spaces: count as characters. "Emma Rose" = 9 chars.
- Special Latin characters (é, ñ, ü): count as 1 char. Verify with your engraver they can produce.
- Emoji: reject. Most engravers can't produce them cleanly. Reject at upload with clear error message.
- Line breaks: count as 1 char OR 0 depending on multi-line vs single-line field. Configure per personalizer.
Tax on per-character fees
Fees inherit the parent product's tax rate. Sales tax rules:
- US: Shopify Tax auto-computes; fees inherit product's tax jurisdiction rate
- EU VAT: Fee is part of the same supply; same VAT rate as product
- UK: Same as EU VAT
- Canada: GST/HST applies to fees at product rate
- Australia: GST inclusive if product is; verify GST registration threshold
No separate tax configuration needed. Cart Transform fees show as tax-inclusive or tax-exclusive matching store settings.
Displaying "starting at" pricing
Product page should show the base price, not a "starting at $X" hedge:
- Product card: "$60 — engraving from $0"
- Product page above title: "$60 base + engraving fee if over 10 chars"
- Live cart: Base "$60" + separate line "Engraving 'Emma Rose' (9 chars): free"
Being explicit about the free threshold + fee structure builds trust. Hiding it until checkout = cart abandonment spike.
Reporting + analytics
Cart Transform fees are attached to the parent product line, not separate SKUs. Reports show:
- Base product revenue (what customers paid for the product)
- Cart Transform fee revenue (aggregated per fee category)
- AOV impact (how much of AOV comes from personalization fees)
Print It My Way dashboard breaks this down per personalizer field. Typical result on jewelry: 25-35% of revenue from base variant, 10-20% from engraving fees, 5-10% from font upgrades. Total fees add 15-30% to product AOV.
Common issues + fixes
| Issue | Cause | Fix |
|---|---|---|
| Fee counter shows wrong amount | Free char threshold + per-char fee misconfigured | Verify Print It My Way field pricing settings match product surface |
| Fee not appearing at checkout | Cart Transform inactive or wrong field name | Dashboard → Cart Transform logs → verify runs |
| Customer complains "you charged for engraving I didn't want" | Text field auto-populated by browser autofill | Set field type to prevent autofill (autocomplete="off") |
| Emoji breaks fee calculation | Emoji is multi-byte; counted as 2+ chars | Reject emoji at input; personalizer regex blocks non-ASCII if configured |
| Discount code makes fee negative | Percentage discount exceeds base + fee | Cart Transform + Discount Function coordination; set minimum thresholds |
Frequently asked questions
How do I charge per character on Shopify?
Cart Transform via personalizer app (Print It My Way, Bold, Zepto). Configure text field with free-char threshold + per-char fee. Fee auto-computes at checkout as clean cart line.
Standard per-character fee for engraving?
$0.50-$1.00 per char on small surfaces (rings, necklaces). $0.10-0.25 on large surfaces (mugs, cutting boards). Adjust to your labor cost.
Should first N characters be free?
Yes — 10 chars free is standard. Removes friction for short-name customers; captures value from long-message customers.
Do spaces count as characters?
Standard: yes. "Emma Rose" = 9 chars including the space. Some merchants exclude; make sure your display counter matches your fee calculation.
Best app for per-character pricing?
Print It My Way Basic ($7.99/mo) — native per-character pricing on all fields. Bold Product Options + Zepto also support at higher price points.
Can per-character be tiered?
Yes on Pro tier: 1-10 free, 11-20 $0.50/char, 21-30 $1.00/char, 31+ $1.50/char. Print It My Way Pro supports.
How to show the fee to customer as they type?
Enable "Show live fee counter" in Print It My Way field settings. Renders "Chars: 15 / 25 • Fee: +$5.00" below the input.
Do fees include tax?
Cart Transform fees inherit parent product's tax rate. Shopify Tax handles automatically for US, EU VAT, UK, Canada GST/HST, Australia GST.
How do emoji + special characters count?
Reject emoji (engravers can't reliably produce). Latin special chars (é, ñ) count as 1 each — verify engraver support.
Can per-character be combined with font upgrade?
Yes. Cart Transform combines both — per-char fee + flat font fee. Cart line shows breakdown.
Related setup guides
- Shopify Charge Extra Per Option
- Cart Transform Functions Developer Guide
- Text Personalization Setup
- Best Fonts for Engraved Products
Per-character pricing — free on Shopify
Print It My Way's Free plan includes per-character pricing on 1 personalizer field. Test the feature before upgrading.
Install Print It My Way