GetSale Bulk Discounts Manager

GetSale Bulk Discounts Manager Logo

Built for Shopify

GetSale Bulk Discounts Manager

Rating

100

%

Recommended

(

2

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

18-Oct-19

GetSale Bulk Discounts Manager Logo

Built for Shopify

GetSale Bulk Discounts Manager

Rating

100

%

Recommended

(

2

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

18-Oct-19

GetSale Bulk Discounts Manager Logo

Built for Shopify

GetSale Bulk Discounts Manager

Rating

100

%

Recommended

(

2

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

18-Oct-19

Bulk price editor and discount manager for product discounts, quantity breaks, and bundle deals.

GetSale is an all-in-one discount app, built for Shopify merchants who want smarter sales. Apply a bulk discount and offer quantity breaks across products, collections, or your entire store with ease. Schedule automatic price changes with start and end times, so that your discount manager runs itself. Use the bulk price editor for a percentage or fixed product discount, as well as tiered pricing, using a discount countdown timer to drive urgency and conversions. Achieve it all in seconds, today!

Categories:

Discounts, Pricing optimization

Integrations:

Checkout, Shopify Admin

Checkout, Shopify Admin

Languages:

English

English

Filter Reviews

Operator reports

100

%

Recommended

(

2

reviews

)
BG

Barbara G.

Role:

E-commerce Manager

Category:

Fashion & Apparel

Shopify Plan:

Plus

Overall satisfaction

Very Satisfied

Nov 12, 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:

Yes

Importance:

Critical for me to do my job

What exceeded expectations

The app is excellent for stores with a large number of products. It’s very easy to use, and so far, I haven’t even needed to contact support. It has become my go-to tool for managing bulk product discounts, especially when preparing for promotional campaigns.

What was disappointing

I’m not satisfied with the interface and the way sale badges are displayed using the GetSale app, as they don’t align well with the merchant’s brand identity. In the industries I work with, visual appearance and brand consistency are extremely important, so better customization options would make a big difference.

BG

Barbara G.

Role:

E-commerce Manager

Category:

Fashion & Apparel

Shopify Plan:

Plus

Overall satisfaction

Very Satisfied

Nov 12, 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:

Yes

Importance:

Critical for me to do my job

What exceeded expectations

The app is excellent for stores with a large number of products. It’s very easy to use, and so far, I haven’t even needed to contact support. It has become my go-to tool for managing bulk product discounts, especially when preparing for promotional campaigns.

What was disappointing

I’m not satisfied with the interface and the way sale badges are displayed using the GetSale app, as they don’t align well with the merchant’s brand identity. In the industries I work with, visual appearance and brand consistency are extremely important, so better customization options would make a big difference.

Photo of Reviewer Filippo F.

Filippo F.

Role:

E-commerce Manager

Category:

Books, Music & Video

Shopify Plan:

Plus

Overall satisfaction

Very Satisfied

Jun 18, 2025

Years of use:

1-2 years

Relationship with this product:

I both used it and influenced the buying decisions

Still use this tool:

Yes

Importance:

Critical for me to do my job

What exceeded expectations

Great customization and easy to set up, great combinations to create different rules based on collections/products

What was disappointing

Probably sometimes it takes a bit of time in refreshing the product pricing

Photo of Reviewer Filippo F.

Filippo F.

Role:

E-commerce Manager

Category:

Books, Music & Video

Shopify Plan:

Plus

Overall satisfaction

Very Satisfied

Jun 18, 2025

Years of use:

1-2 years

Relationship with this product:

I both used it and influenced the buying decisions

Still use this tool:

Yes

Importance:

Critical for me to do my job

What exceeded expectations

Great customization and easy to set up, great combinations to create different rules based on collections/products

What was disappointing

Probably sometimes it takes a bit of time in refreshing the product pricing

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: "" }