Shopify Customs Fees at Delivery: Who Pays, What to Reply
When a customer is asked to pay customs fees at delivery on a Shopify order, your reply depends on one fact: did your checkout already collect duties and import taxes? If it did, the customer should not pay again, so you fix it and refund the extra charge once they send the carrier's receipt. If your policy says the buyer pays duties at delivery and checkout showed this clearly, explain the policy politely and give them two options: pay and receive the parcel, or refuse it and follow your return terms.
This guide gives you a 2-minute check, a decision table for each customs fee case, four replies you can copy, and the rules to give an AI agent so it can answer these tickets following your policy.
Why customs fee tickets need a fast answer
A customs ticket is not a normal "where is my order" email. The carrier is holding the parcel, and it won't hold it forever. If the customer waits hours for you, they may just refuse delivery. A small fee then becomes a return shipment, a refund and a lost customer.
These tickets also arrive angry. The customer already paid you, and now someone wants more money at the door. A slow or vague answer looks like you are hiding something. The goal is simple: answer fast, answer correctly and give the same answer every time.
Who pays customs fees on a Shopify order?
Two terms cover almost every case.
- DDP (Delivered Duty Paid): duties and import taxes are collected at checkout, and the parcel ships with a DDP label. The customer should not pay duties at delivery.
- DAP or DDU (duty unpaid): you do not collect duties. The carrier asks the customer to pay them before handing over the parcel.
Shopify's Help Center states the link between the two directly: "If your customer pays duties and import taxes at checkout, then ensure that you purchase and use a delivery duty paid (DDP) shipping label to fulfill their order. This ensures that the customer isn't charged duties and import taxes again upon delivery."
One recent change matters if you sell with Shopify Managed Markets. According to the Shopify changelog, since August 24, 2026, Managed Markets no longer supports duty unpaid shipping in countries where it supports DDP. Stores that kept Managed Markets on now collect duties at checkout in those markets. If your old shipping policy still says "duties are paid at delivery", update it, or your replies will contradict your checkout.
Fees can appear even when duties were paid. A customer can see a charge at delivery even on a DDP order, and Shopify gives two reasons:
- Duties collected at checkout are estimates. Customs can charge more, for example when the HS code on the order is wrong.
- Handling, brokerage and disbursement fees are not part of Shopify's duty calculation. Some carriers bill them separately.
So "I already paid duties" does not always mean the carrier made a mistake. Read the carrier receipt before you promise a refund.
The 2-minute check before you reply
Open the order and answer these four questions:
- Were duties or import taxes charged at checkout? Look at the order's payment summary.
- Which label and carrier service did you ship with: DDP or a standard label?
- What does the carrier receipt say? Duties, import tax (VAT, GST) or a brokerage or handling fee?
- What does your shipping policy say about international duties, and could the customer see it before paying?
Once you have those four answers, you know which reply to send.
Customs fees at delivery: decision table
- Duties paid at checkout, charged again. What happened: standard label used, or carrier error. Reply: apologize, ask for the receipt, refund the duplicate amount. Who handles it: AI, if your permissions allow refunds; team otherwise.
- Duties paid, carrier adds a brokerage or handling fee. What happened: the fee is not part of Shopify's duty calculation. Reply: explain the fee, apply your policy on carrier fees. Who handles it: AI if the policy is written, team if not.
- Duties paid, customs charged more than the estimate. What happened: wrong HS code or updated rate. Reply: check the receipt, decide on a goodwill refund of the gap. Who handles it: team.
- Buyer pays duties, shown clearly at checkout. What happened: the policy is working as written. Reply: explain, link the policy, list the options. Who handles it: AI.
- Buyer pays duties, policy unclear or hidden. What happened: the customer could not have known. Reply: goodwill gesture or partial refund. Who handles it: team.
- Customer wants to refuse the parcel. What happened: they do not want to pay the fee. Reply: explain what happens under your return terms. Who handles it: AI explains, team approves the amount.
- Gift recipient was charged. What happened: the buyer and the person charged are different people. Reply: reply to the buyer, with care. Who handles it: team.
- Customer thinks the fee message is a scam. What happened: the fee request arrived by SMS or email. Reply: check only on the carrier's official site. Who handles it: AI.
The scam case needs its own note. Fake customs fee messages exist. Never ask a customer to pay through a link you did not send, and tell them to check the fee on the carrier's official website with their tracking number. That one line protects your customer and saves you a dispute later. If a dispute starts anyway after you refunded part of the order, our guide on what to prove in a Shopify chargeback on a partial refund, listed at the end of this article, explains how to show the money already returned and why you kept the rest.
What to reply: 4 templates you can reuse
Edit the policy lines so they match your exact wording.
Duties already paid at checkout: "Hi Sarah, you're right: you paid duties and import taxes when you placed order #4812, so you shouldn't be charged again. If you've already paid the carrier, reply with a photo of their receipt and we'll refund that amount to your original payment method. If you haven't paid yet, don't pay. Reply here and we'll sort it out with the carrier."
Buyer pays duties, policy shown at checkout: "Hi Tom, this fee comes from your country's customs, not from us. As our shipping policy says, international orders ship without duties included, so they're collected at delivery. You have two options: pay the carrier and receive your parcel, or refuse it. If you refuse it, we'll refund your order once it's back with us, as described in our return policy."
Brokerage or handling fee on a duty paid order: "Hi Amira, your duties were paid at checkout. The charge you see is a handling fee the carrier added for processing the import, and it isn't part of the duties. Could you send us a photo of the receipt? We'll check it and come back to you with what we can do."
Customer unsure the message is real: "Hi Lina, good call checking. Don't use the link in that message. Go to the carrier's official website, enter your tracking number and see whether a fee is due. If a fee shows there, it's real. If not, ignore the message."
If the customer is already furious when they write, read our replies to angry customer emails, listed at the end of this article, for tone tips before you send any of these.
Rules to give your AI agent
An AI agent handles customs fee tickets well when the rules are written down, not left to guesswork. Relay answers, refunds and resolves your Shopify tickets 24/7, following your rules. For customs tickets, those rules usually split the work in two.
Tickets the agent can answer, following your rules:
- Explain who charges the fee and why, using your shipping policy wording.
- Check the order to see whether duties were collected at checkout.
- Share tracking so the customer can confirm the fee on the carrier's site. Our guide to automating where is my order emails on Shopify, listed at the end of this article, covers that reply.
- Refund duties charged twice once the receipt is in, if the permissions you give it include refunds.
- Send the anti-scam reply.
Tickets the agent passes to your team:
- Any refund or action outside the permissions you gave it.
- Orders where your policy never said who pays duties.
- Customs charges higher than the checkout estimate.
- Gift orders where the recipient was charged.
- Customers who threaten a chargeback or a public complaint, or ask for a person. Our guide on how to reply when a customer asks for a human agent by email is listed at the end of this article.
- Any case where the carrier and the customer give different facts.
You stay in control. The agent only takes the actions your permissions allow, and it brings in your team for everything else.
How to prevent the next customs fee ticket
Customs tickets start with a surprise. If customers aren't surprised, they don't write in.
- Say it at checkout. Add one line near the shipping options: "Duties and import taxes are not included and are paid at delivery." If you collect them, say that instead.
- Say it in the shipping confirmation email. Customers read it just before the carrier contacts them.
- Match labels to checkout. If you collect duties, ship with DDP labels. If you don't, customers can end up paying twice.
- Check your HS codes. A wrong code is one reason customs charges more than the estimate.
- Write a refused parcel rule. Full refund, refund minus return shipping, or product only. Our guide on who pays return shipping on Shopify and how to reply, listed at the end of this article, helps you choose.
- Keep one source of truth. Your shipping policy, FAQ and support replies should use the same words.
If the parcel is not held at customs and just isn't moving, that is a different ticket. Use our shipping delay email templates, listed at the end of this article, instead.
FAQ
Who pays customs fees on a Shopify order? It depends on your setup. If you collect duties and import taxes at checkout and ship with a DDP label, the customer has already paid them. If you don't, the customer pays the carrier at delivery. Your shipping policy should say which one applies.
Why was my customer charged duties twice? Usually because duties were collected at checkout but the order shipped with a standard label instead of a DDP label. Ask for the carrier's receipt and refund the extra charge.
Why is there a fee at delivery if duties were paid at checkout? Duties at checkout are estimates, and customs can charge more, for example when the HS code is wrong. Carriers can also bill handling or brokerage fees, which Shopify doesn't include in its duty calculation.
Should I refund customs fees if the customer refuses the parcel? Follow your return policy. The customer never paid those duties, so there is nothing to refund for them. You only refund what the customer paid you, under your terms.
Can an AI agent answer customs fee tickets? Relay can answer these tickets following your rules and the permissions you give it: explaining the policy, checking the order, sharing tracking and warning about scams. Unclear policies, gift orders and cases where the facts don't match should go to a person.

