For Shopify app developers

Know which store
asked for what.

Embed a feedback board inside your Shopify app and every feature request, vote, and comment arrives tagged with the merchant's store — automatically. Zero typing for merchants, zero-code to start, and a verified email + store identity with ~10 lines on your backend. Your feedback board becomes a customer list.

The signal “Metafield sync” — 14 votes · Acme Outdoor Gear, Bob's Gear, +9 stores
The problem

“Someone wants this” is useless.
“Your top merchants want this” isn't.

Feedback from an embedded app widget is usually anonymous — a pile of requests with no idea whether they came from a $29/mo trial store or the Plus merchant paying half your MRR. You can ask merchants to type their email into a feedback form, but inside your own app, where they're already logged in, that's friction they'll rightly skip.

FeatureWish fixes both halves. The store attaches itself: embedded Shopify admin pages carry ?shop=acme.myshopify.com, and the FeatureWish embed script picks it up with no configuration at all. And on Pro, your backend — which already holds a verified Shopify session — vouches for the merchant, so they arrive with a verified email, name, and store without typing a thing.

Free · zero code

Store capture, out of the box.

Drop the embed script into your app's admin page. That's the whole setup.

The snippet

<script src="https://app.featurewish.com/embed.js"
        data-org="your-workspace" async></script>

What happens

Embedded Shopify admin URLs carry the merchant's store as ?shop=<store>.myshopify.com. The widget validates and claims it, and every post, vote, and comment shows the store in your dashboard — honestly marked “claimed”, because nothing has verified it yet. Great attribution for free; upgrade the trust level whenever you're ready.

Pro · verified identify

Verified merchants, no typing. ~10 lines.

Your backend signs a short token with a FeatureWish-issued secret (Settings → Integrations) and injects it into the snippet. Merchants arrive verified — email, name, store, even their Shopify plan.

Server route (Node — any JWT library works)

// server route that renders the page embedding FeatureWish
import jwt from "jsonwebtoken";

const identifyToken = jwt.sign(
  {
    external_id: session.shop,          // or `${session.shop}:${userId}` for staff accounts
    email: shop.email,                  // from your own DB or the shop GraphQL object
    name: shop.shop_owner,
    company: {
      external_id: session.shop,        // acme.myshopify.com
      name: shop.name,
      meta: { plan: shop.plan_display_name, country: shop.country_name }
    }
  },
  process.env.FEATUREWISH_SSO_SECRET,   // from Settings → Integrations — keep it server-side
  { algorithm: "HS256", expiresIn: "1h" }
);

Then in the page

<script src="https://app.featurewish.com/embed.js"
        data-org="your-workspace"
        data-user="${identifyToken}" async></script>

SPAs can call FeatureWish.identify(token) after load instead.

Good to know

Shopify session tokens don't contain the merchant's email — that's exactly why the token comes from your backend, which has the shop record. Use the shop domain alone as external_id for owner-only apps, or shop:userId when staff accounts matter. And never put the secret in theme or App Bridge frontend code — client-side JavaScript is view-source-public.

We never ask for your Shopify API secret. That's a master credential for your app, and no feedback tool should hold it. The signing secret is ours, per-workspace, rotatable in one click — and if it leaked, the blast radius is “someone could spoof a feedback identity,” never your app or your merchants' data.

In your dashboard

A feedback board that doubles as a customer list.

Who + which store, everywhere

Every request shows its author's store on the post detail. The Users page lists every merchant with their store, activity counts, and a shield when the identity is verified — “claimed” when it's not. Prioritise by who is asking.

Close the loop automatically

Verified merchants get the “it shipped” email when you mark their request completed — the moment that teaches merchants that asking works. High-integrity boards (verified-only voting) work seamlessly, since identified merchants are already verified.

One identity, everywhere

The same merchant on a second device, or one who once left an email on your public board, resolves to one identity — votes deduped, history merged. Shared computer at the store? Two staff logins never get fused into one person.

FAQ

Shopify app feedback, answered.

How do I collect feature requests from my Shopify app’s merchants?

Embed the FeatureWish widget in your app’s admin page (one script tag, or an inline iframe). Merchants post requests, vote, and comment right inside your app — and because embedded Shopify admin pages carry the ?shop= parameter, every post, vote, and comment is automatically tagged with the store it came from. No typing, no sign-up wall for your merchants.

Does FeatureWish need my Shopify API secret?

No — never. That’s a master credential for your app, and we deliberately refuse to touch it. For verified identity, FeatureWish issues you its own per-workspace signing secret. If that secret ever leaked, the worst anyone could do is spoof a feedback identity on your board — they could never reach your app, your merchants’ data, or Shopify.

What’s the difference between the free store capture and verified identify?

Free (zero code): the widget picks the store domain up from the ?shop= URL parameter on embedded admin pages, and your dashboard shows it as a “claimed” store — attribution, honestly labelled as unverified. Pro ($20/mo flat): your backend signs a short token with your FeatureWish secret, and every merchant arrives with a verified email, name, and store — they can vote on high-integrity boards and get ship notifications without ever typing an email.

How much code is the verified tier?

About ten lines in the server route that renders your embedded app page: sign a JWT with the secret from Settings → Integrations and drop it into the embed snippet as data-user. Any language with a JWT library works — the recipe on this page is Node, and the claims are plain JSON.

Do merchants have to create a FeatureWish account?

No. Merchants never see FeatureWish sign-up. Anonymous voting works out of the box; with verified identify they’re recognised automatically via your app’s own session. When you ship something they voted for and mark it completed, they get the “it shipped” email — the loop that keeps feedback coming.

Is this a Shopify app I install from the App Store?

No — FeatureWish is not a merchant-facing Shopify app and doesn’t appear in your merchants’ app list. It’s a feedback board for you, the app developer, with embed ergonomics built for the Shopify admin. Nothing to review, nothing added to your app’s permissions.

Where do I see which store asked for what?

Everywhere it matters: the Users page becomes a customer list — every merchant with their store, a shield icon when the identity is verified — and each request shows the author’s store on the post detail. So “should we build this?” becomes “our three biggest stores are asking for this.”

Ship what your merchants actually want.

Start free with zero-code store capture. Flip on verified identify whenever you're ready — $20/mo flat, never per-merchant.

Create your board — it's free