O:Request a Quote ‑ Hide Price

O:Request a Quote ‑ Hide Price Logo

Built for Shopify

O:Request a Quote ‑ Hide Price

Rating

50

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

27-Aug-19

O:Request a Quote ‑ Hide Price Logo

Built for Shopify

O:Request a Quote ‑ Hide Price

Rating

50

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

27-Aug-19

O:Request a Quote ‑ Hide Price Logo

Built for Shopify

O:Request a Quote ‑ Hide Price

Rating

50

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

27-Aug-19

Request a Quote button & form to hide prices and capture B2B, wholesale & DTC quote requests

Quote Snap adds a Request a Quote button to product and collection pages so B2B, wholesale and DTC customers can propose their own price through a customizable form. Get instant notifications, build quotes with drag-and-drop sections, and auto-fill company details for B2B buyers. Track each negotiation, then convert quotes to a PDF or order in one click. You can also hide prices and the Add to Cart button anywhere on your store, and apply discounts to the full quote or individual line items.

Categories:

Pricing quotes, Forms

Integrations:

Checkout, Customer accounts, Shopify Admin, B2B, Email SMTP, Foxify Smart Page Builder, GemPages Landing Page Builder, Google reCaptcha, Wholesale

Checkout, Customer accounts, Shopify Admin, B2B, Email SMTP, Foxify Smart Page Builder, GemPages Landing Page Builder, Google reCaptcha, Wholesale

Languages:

English

English

Filter Reviews

Operator reports

50

%

Recommended

(

1

reviews

)
Photo of Reviewer Erick K.

Erick K.

Role:

Developer

Category:

Home & Decor

Shopify Plan:

Plus

Overall satisfaction

Neutral

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:

No

Importance:

Critical for me to do my job

What exceeded expectations

Automated Quote Generation: This is clearly a strong suit for Quote Snap. Real-time Notifications: Quote Snap's notification system appears to be highly effective

What was disappointing

Potential Limitations in Customization: While the app allows for customization, it's unclear how extensive these options are.

Photo of Reviewer Erick K.

Erick K.

Role:

Developer

Category:

Home & Decor

Shopify Plan:

Plus

Overall satisfaction

Neutral

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:

No

Importance:

Critical for me to do my job

What exceeded expectations

Automated Quote Generation: This is clearly a strong suit for Quote Snap. Real-time Notifications: Quote Snap's notification system appears to be highly effective

What was disappointing

Potential Limitations in Customization: While the app allows for customization, it's unclear how extensive these options are.

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