UpCharge Fees Addons Surcharge

UpCharge Fees Addons Surcharge Logo

Built for Shopify

UpCharge Fees Addons Surcharge

Rating

50

%

Recommended

(

2

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

22-Jan-16

UpCharge Fees Addons Surcharge Logo

Built for Shopify

UpCharge Fees Addons Surcharge

Rating

50

%

Recommended

(

2

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

22-Jan-16

UpCharge Fees Addons Surcharge Logo

Built for Shopify

UpCharge Fees Addons Surcharge

Rating

50

%

Recommended

(

2

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

22-Jan-16

Set up a tax addon, dynamic surcharges, and a product surcharge. Easily add processing fees today.

Our surcharge app helps you apply conditional fees, late fees, and automatic fees. Quickly add surcharge rules for a small order fee or one time fee. Manage checkout addons, dynamic addons, and free addons to collect an additional charge. Configure a payment surcharge, shipping surcharges, or a bottle deposit. Easily handle an order surcharge, rush fees, deposit fees, service fees, and checkout fees. Bill a membership fee, order & product fees, or a checkout surcharge.

Categories:

Pricing - Other, Upsell and cross-sell

Integrations:

Checkout, Shopify POS, Shopify Admin

Checkout, Shopify POS, Shopify Admin

Languages:

English

English

Filter Reviews

Operator reports

50

%

Recommended

(

2

reviews

)

Overall satisfaction

Neutral

Mar 6, 2026

Years of use:

2-3 years

Relationship with this product:

I used it, but I didn't influence the buying decision

Still use this tool:

Yes

Importance:

Critical for me to do my job

What exceeded expectations

It is nice to add on fees that we do not have the ability to do otherwise. For example, we have a "Catch Weight" fee that covers weight overage on certain products.

What was disappointing

Sometimes the set up is a little confusing. Right now we are having an issue where not all of the applicable fees are being applied to certain products

Photo of Reviewer Shaylynn B.

Shaylynn B.

Other

Food & Drink

Plus

Overall satisfaction

Neutral

Mar 6, 2026

Years of use:

2-3 years

Relationship with this product:

I used it, but I didn't influence the buying decision

Still use this tool:

Yes

Importance:

Critical for me to do my job

What exceeded expectations

It is nice to add on fees that we do not have the ability to do otherwise. For example, we have a "Catch Weight" fee that covers weight overage on certain products.

What was disappointing

Sometimes the set up is a little confusing. Right now we are having an issue where not all of the applicable fees are being applied to certain products

Photo of Reviewer Russell B.

Russell B.

E-commerce Manager

Business Equipment

Plus

Overall satisfaction

Neutral

Oct 28, 2025

Years of use:

Less then 1 year

Relationship with this product:

I both used it and influenced the buying decisions

Still use this tool:

No

Importance:

Critical for me to do my job

What exceeded expectations

It works as expected and is a necessary tool for tariff compliance.

What was disappointing

It took a bit more setup than expected, specifically with regard to attaching fees to the right items and markets. The other somewhat frustrating aspect is the lack of fee visibility in the cart itself, and only on final checkout. Some customers have commented on the "hidden" nature of the fees.

Photo of Reviewer Russell B.

Russell B.

E-commerce Manager

Business Equipment

Plus

Overall satisfaction

Neutral

Oct 28, 2025

Years of use:

Less then 1 year

Relationship with this product:

I both used it and influenced the buying decisions

Still use this tool:

No

Importance:

Critical for me to do my job

What exceeded expectations

It works as expected and is a necessary tool for tariff compliance.

What was disappointing

It took a bit more setup than expected, specifically with regard to attaching fees to the right items and markets. The other somewhat frustrating aspect is the lack of fee visibility in the cart itself, and only on final checkout. Some customers have commented on the "hidden" nature of the fees.

Related Apps

import * as React from "react" type Props = { name: string slug: string description: string image: string developer: string categories: string pricing: string launchedAt: string dateModified: string ratingValue: number ratingCount: number faqQ1: string faqA1: string faqQ2: string faqA2: string faqQ3: string faqA3: string faqQ4: string faqA4: string faqQ5: string faqA5: string } export function SchemaMarkup(props: Props) { const { name, slug, description, image, developer, categories, pricing, launchedAt, dateModified, ratingValue, ratingCount, faqQ1, faqA1, faqQ2, faqA2, faqQ3, faqA3, faqQ4, faqA4, faqQ5, faqA5 } = props const scriptContent = ` (function () { var ORIGIN = window.location.origin; var SAT = { "Very Satisfied": 100, "Neutral": 50, "Not Satisfied": 0 }; var AGG_NOTE = "Percentage of vetted Shopify merchants and agency operators who recommend this app, based on first-party reviews collected by app store research."; function read(root, key) { if (!root) return ""; var el = root.querySelector('[data-k="' + key + '"]'); return el ? el.textContent.trim() : ""; } function iso(v) { if (!v) return null; var d = new Date(v); return isNaN(d) ? null : d.toISOString().slice(0, 10); } function notes(text) { return { "@type": "ItemList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": text }] }; } var root = document.getElementById("asr-seo-data"); if (!root) return; var NAME = read(root, "name"); var SLUG = read(root, "slug"); if (!NAME || !SLUG) return; var PAGE_URL = ORIGIN + "/shopify-app-reviews/" + SLUG; function collectReviews() { var out = []; Array.prototype.forEach.call( document.querySelectorAll(".asr-review-seo"), function (n) { var author = read(n, "author"); var pos = read(n, "positive"); var neg = read(n, "negative"); if (!author || (!pos && !neg)) return; var r = { "@type": "Review", "author": { "@type": "Person", "name": author }, "itemReviewed": { "@id": PAGE_URL + "#app" } }; var d = iso(read(n, "date")); if (d) r.datePublished = d; var s = read(n, "satisfaction"); if (s && SAT.hasOwnProperty(s)) { r.reviewRating = { "@type": "Rating", "ratingValue": String(SAT[s]), "bestRating": "100", "worstRating": "0", "alternateName": s }; } if (pos) r.positiveNotes = notes(pos); if (neg) r.negativeNotes = notes(neg); out.push(r); } ); return out; } function buildGraph(reviews) { var app = { "@type": "SoftwareApplication", "@id": PAGE_URL + "#app", "name": NAME, "url": PAGE_URL, "applicationCategory": "BusinessApplication", "operatingSystem": "Web (Shopify)" }; var v; if ((v = read(root, "description"))) app.description = v; if ((v = read(root, "image"))) app.image = v.replace(/&/g, "&"); if ((v = read(root, "developer"))) app.author = { "@type": "Organization", "name": v }; if ((v = read(root, "categories"))) app.keywords = v; if ((v = read(root, "pricing"))) { app.offers = { "@type": "Offer", "price": "0", "priceCurrency": "USD", "description": v }; } if ((v = iso(read(root, "launchedAt")))) app.datePublished = v; if ((v = iso(read(root, "dateModified")))) app.dateModified = v; if (reviews.length) app.review = reviews; var rv = read(root, "ratingValue"); var rc = parseInt(read(root, "ratingCount"), 10); if (reviews.length && rv && rc > 0) { app.aggregateRating = { "@type": "AggregateRating", "ratingValue": String(parseFloat(rv)), "bestRating": "100", "worstRating": "0", "ratingCount": String(rc), "description": AGG_NOTE }; } var graph = [app]; var faq = []; for (var i = 1; i <= 5; i++) { var q = read(root, "faqQ" + i); var a = read(root, "faqA" + i); if (q && a) { faq.push({ "@type": "Question", "name": q, "acceptedAnswer": { "@type": "Answer", "text": a } }); } } if (faq.length) { graph.push({ "@type": "FAQPage", "@id": PAGE_URL + "#faq", "mainEntity": faq }); } graph.push({ "@type": "BreadcrumbList", "@id": PAGE_URL + "#breadcrumb", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": ORIGIN + "/" }, { "@type": "ListItem", "position": 2, "name": "Shopify App Reviews", "item": ORIGIN + "/shopify-app-reviews" }, { "@type": "ListItem", "position": 3, "name": NAME, "item": PAGE_URL } ] }); return graph; } function build() { var reviews = collectReviews(); var old = document.getElementById("asr-jsonld"); if (old && old.dataset.count === String(reviews.length)) return; if (old) old.remove(); var s = document.createElement("script"); s.type = "application/ld+json"; s.id = "asr-jsonld"; s.dataset.count = String(reviews.length); s.textContent = JSON.stringify({ "@context": "https://schema.org", "@graph": buildGraph(reviews) }); document.head.appendChild(s); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", build); } else { build(); } [300, 900, 2000].forEach(function (ms) { setTimeout(build, ms); }); })(); ` return ( <> {/* HIDDEN DIV – provjeri da li je ID tačan */} {/* SCRIPT TAG – OBAVEZNO zatvoren */} </> ) } SchemaMarkup.defaultProps = { name: "Naziv aplikacije", slug: "slug-aplikacije", description: "", image: "", developer: "", categories: "", pricing: "", launchedAt: "", dateModified: "", ratingValue: 0, ratingCount: 0, faqQ1: "", faqA1: "", faqQ2: "", faqA2: "", faqQ3: "", faqA3: "", faqQ4: "", faqA4: "", faqQ5: "", faqA5: "" }