Hextom: Quick Announcement Bar

Hextom: Quick Announcement Bar Logo

Built for Shopify

Hextom: Quick Announcement Bar

Rating

50

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

21-Oct-15

Hextom: Quick Announcement Bar Logo

Built for Shopify

Hextom: Quick Announcement Bar

Rating

50

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

21-Oct-15

Hextom: Quick Announcement Bar Logo

Built for Shopify

Hextom: Quick Announcement Bar

Rating

50

%

Recommended

(

1

reviews

)

Pricing

Free plan available. Free trial available.

Developer

Launched

21-Oct-15

Promote sales on a fully customizable banner, increase customer awareness and boost sales

Always keeping your customers in the loop about your business updates, promotions, and events is a key element of managing customer relationships. Quick Announcement Bar makes this easier and quicker. You can add a fully customizable banner on your website with a few clicks, inform your customers. You can have multiple bars shown in rotation or with various animations. You can offer different sales on different bars for different geo locations, customers, pages, etc, and optimize the return.

Categories:

Banners, Discounts

Integrations:

Shopify Admin, Hextom: Translate & Currency

Shopify Admin, Hextom: Translate & Currency

Languages:

English, Chinese (Simplified), Chinese (Traditional), French, German, Japanese, Spanish, Italian, Portuguese (Brazil), Portuguese (Portugal)

English, Chinese (Simplified), Chinese (Traditional), French, German, Japanese, Spanish, Italian, Portuguese (Brazil), Portuguese (Portugal)

Filter Reviews

Operator reports

50

%

Recommended

(

1

reviews

)
Photo of Reviewer Ryan W.

Ryan W.

Role:

Owner

Category:

Sports & Recreation

Shopify Plan:

Plus

Overall satisfaction

Neutral

Feb 9, 2026

Years of use:

More then 3 years

Relationship with this product:

I both used it and influenced the buying decisions

Still use this tool:

Yes

Importance:

Not very important

What exceeded expectations

It's free and let's us land both information and have a scheduling button on the banner together.

What was disappointing

It would be nice to have it go on schedule , or allow multiple messages to be cycled through, but those features require upgrading and we're ok with the basic version

Photo of Reviewer Ryan W.

Ryan W.

Role:

Owner

Category:

Sports & Recreation

Shopify Plan:

Plus

Overall satisfaction

Neutral

Feb 9, 2026

Years of use:

More then 3 years

Relationship with this product:

I both used it and influenced the buying decisions

Still use this tool:

Yes

Importance:

Not very important

What exceeded expectations

It's free and let's us land both information and have a scheduling button on the banner together.

What was disappointing

It would be nice to have it go on schedule , or allow multiple messages to be cycled through, but those features require upgrading and we're ok with the basic version

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