SA Request a Quote, Hide Price

SA Request a Quote, Hide Price Logo

Built for Shopify

SA Request a Quote, Hide Price

Rating

100

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

8-Jun-17

SA Request a Quote, Hide Price Logo

Built for Shopify

SA Request a Quote, Hide Price

Rating

100

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

8-Jun-17

SA Request a Quote, Hide Price Logo

Built for Shopify

SA Request a Quote, Hide Price

Rating

100

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

8-Jun-17

Allows your customers to submit quotes for any product and bargain for the best price

With SA Request a Quote, buyers can add products to quote in one click from collection and product pages as well as from the shopping cart. Let customers suggest new best-suited prices and add remarks to each quote item. With this app you can also hide price, hide add-to-cart button of a product. Require customer login to see product prices

Categories:

Pricing quotes, Forms

Integrations:

Customer accounts, Shopify Admin, ActiveCampaign, Zapier, Campaign Monitor, reCaptcha, GetResponse, Sendinblue, Globo Product Options, Hubspot, Omnisend, Mailchimp, Klaviyo

Customer accounts, Shopify Admin, ActiveCampaign, Zapier, Campaign Monitor, reCaptcha, GetResponse, Sendinblue, Globo Product Options, Hubspot, Omnisend, Mailchimp, Klaviyo

Languages:

English, German, French, Danish, Spanish, Finnish, Japanese, Italian, Korean, Dutch, Polish, Portuguese (Portugal), Swedish, Chinese (Simplified), Chinese (Traditional)

English, German, French, Danish, Spanish, Finnish, Japanese, Italian, Korean, Dutch, Polish, Portuguese (Portugal), Swedish, Chinese (Simplified), Chinese (Traditional)

Filter Reviews

Operator reports

100

%

Recommended

(

1

reviews

)
Photo of Reviewer Erick K.

Erick K.

Role:

Developer

Category:

Home & Decor

Shopify Plan:

Plus

Overall satisfaction

Very Satisfied

Oct 11, 2024

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

Core Quote Generation Functionality: The app delivers on its primary promise of automating quote generation, pulling product data accurately, and generating professional PDFs (in the paid plan). This aligns with your expectations for this core feature. Real-time Notifications: The app performs well in providing instant email and in-app notifications, ensuring both the customer and store owner are promptly informed. This meets your expectations for efficient communication.

What was disappointing

No Quote Expiration: The absence of a feature to set expiration dates for quotes is a significant omission. This can lead to issues with pricing validity and create confusion for both the customer and the store owner, especially if prices change frequently.

Photo of Reviewer Erick K.

Erick K.

Role:

Developer

Category:

Home & Decor

Shopify Plan:

Plus

Overall satisfaction

Very Satisfied

Oct 11, 2024

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

Core Quote Generation Functionality: The app delivers on its primary promise of automating quote generation, pulling product data accurately, and generating professional PDFs (in the paid plan). This aligns with your expectations for this core feature. Real-time Notifications: The app performs well in providing instant email and in-app notifications, ensuring both the customer and store owner are promptly informed. This meets your expectations for efficient communication.

What was disappointing

No Quote Expiration: The absence of a feature to set expiration dates for quotes is a significant omission. This can lead to issues with pricing validity and create confusion for both the customer and the store owner, especially if prices change frequently.

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