I didn't want to write this post. I wanted to spend those hours on actual product work. But the experience we had getting our Shopify app approved was strange enough (and specific enough) that I think it's worth documenting for other SaaS builders who might end up in the same trap.

What Sendboo Is and Why We Needed Shopify OAuth

Sendboo is an email marketing SaaS platform. Think Klaviyo, but with a broader data source model. We sync orders, products, and customers from e-commerce stores, then give merchants the tools to build email automations, segment audiences, and send campaigns.

We support multiple data connectors: WooCommerce, Stripe, PrestaShop and yes, Shopify. For Shopify specifically, the integration does three things: OAuth connection to read store data, webhook sync to keep our platform up to date, and nothing else. No embedded admin UI, no app block, no checkout extension. We're not building inside Shopify's ecosystem. We're reading data from it.

Billing at Sendboo is for email marketing features: contacts, email volume, automations. It's scoped at the organization level, not the store level. A merchant pays us for email marketing. They connect their Shopify store (for free) as one of potentially several data sources.

To support OAuth across multiple merchant stores without creating a custom app for each one, we needed a public Shopify app. Not listed on the App Store. Just a public app with OAuth credentials we could hand to merchants to initiate the connection flow themselves.

That's it. That's the whole ask.

The Initial Rejection

We submitted our app and got the rejection almost immediately:

Fix these core issues with your app: 1.2.1. Use Shopify App Pricing or the Shopify Billing API. Apps that use off-platform billing cannot be distributed through the Shopify App Store. Your app must use Shopify App Pricing or the Shopify Billing API for any app charges. During our testing, it was seen that the app is using offsite billing.

My immediate reaction was confusion. We're not charging for Shopify access. We're not monetizing the Shopify integration at all. Merchants connect their store for free. The billing they saw during testing was for Sendboo's email marketing plan, which exists completely independently of Shopify.

But okay. This is a review process. These things happen. I wrote a detailed email to support explaining the situation.

The First Email Exchange

Here's what I sent:

Subject: Billing API requirement clarification for unlisted public app used as data connector only

We're building Sendboo, an email marketing SaaS platform. We submitted a public app to integrate with Shopify stores, and our submission was flagged for using off-platform billing.

What our Shopify integration does: OAuth connection to read store data (orders, products, customers). Webhook sync to keep our platform up to date. No Shopify admin embedded UI, no app block, no checkout extension.

What it does not do: The Shopify integration itself has no paywall — merchants can connect their store for free. We do not charge for Shopify access or any Shopify-specific feature.

Where our billing happens: Sendboo charges merchants for email marketing features (email sending, automations, audience management). These features exist independently of Shopify — Shopify is one of several data connectors we support alongside WooCommerce, Stripe, etc. Our billing is for the SaaS platform, not for the Shopify integration.

Our goal: We do not want to be listed on the Shopify App Store. We only need a public app to support OAuth across multiple merchant stores without creating a custom app per store.

Our question: Given that (1) we have no interest in App Store distribution, (2) the Shopify integration itself is free, and (3) our billing is for unrelated SaaS features — are we still required to implement the Shopify Billing API? If an exception exists for our use case, could you confirm this in writing?

Jason from Shopify responded:

Hi Clement, Thanks for reaching out about your email marketing SaaS platform called Sendboo. Sounds very dynamic! Thank you for sharing all of the great details you did when it comes to what you are going to do with your app and how the integration will work.

One clarifying question before we can confirm the path forward on the billing requirement.

Your app connects Shopify stores to Sendboo, which is why the Shopify Billing API requirement has come into scope. Before we can confirm next steps, I need to understand your billing setup a bit better:

Do you own and operate the billing system that charges merchants directly for Sendboo? If yes — is there any legal or technical reason you can't route those charges through Shopify's billing system?

If the answer to either is no — meaning you don't own the billing system, or there's a legitimate legal reason it can't go through Shopify — please share those details and we'll factor them in.

If neither of those apply, the feedback you've already received about integrating with Shopify's billing system will stand as the requirement to move forward with your submission.

This framing concerned me. The question "is there any legal or technical reason you can't route charges through Shopify?" presupposes that the default is you should. That's a big presupposition for a platform-agnostic email marketing tool that just wants to read orders.

But fine. Let me explain the technical reasons.

The Three Technical Arguments

I laid them out clearly:

Thank you for the clarifying questions. Here are my direct answers:

Yes, we own and operate our billing system (we use Stripe).

However, there are three fundamental technical reasons we cannot route charges through Shopify's billing system.

  1. Billing units are structurally incompatible — Shopify's Billing API is scoped at the store level — each charge is tied to a specific Shopify store. Sendboo's billing is scoped at the organization level: a customer account that may connect multiple stores under a single subscription. A single Sendboo customer with three stores cannot be represented as three separate Shopify subscriptions. They are one customer, with one plan, one invoice, one billing relationship with us.

  2. Our pricing metric is unrelated to Shopify — Sendboo charges for email marketing volume — emails sent, contacts reached. This metric has no relationship to Shopify. The Shopify integration itself is free and has no paywall. We are not monetizing Shopify access in any way.

  3. A significant portion of our customers have no Shopify store at all — Sendboo is a CMS-agnostic platform. Many of our customers are marketing agencies managing WooCommerce, Prestashop, or other stores. These customers have no Shopify account and cannot be charged through Shopify's billing system. Routing all billing through Shopify would make it technically impossible to serve a large portion of our existing customer base.

Given these structural incompatibilities, could you confirm whether this qualifies as a legitimate technical reason to maintain our existing billing setup?

Jessica took over and escalated to the App Review team:

Hi Clément, I appreciate all the details and I completely understand your challenges to get it right and make sure your app can be approved!

At this point, I don't want to give you a generalized answer that skips over those edge cases. I've kept the case with our App Review team so they can assess your scenario against the billing requirement in the specific way your product works. I've included your latest examples around optional Shopify connections, mixed-platform organizations, and customers who may connect a Shopify store long after starting their Sendboo subscription.

For now, the general policy still stands that merchants who install through the Shopify App Store (even if the app is unlisted) are expected to use Shopify's billing flow. What still needs confirmation is how that policy applies to your optional-connection model and the mixed-platform examples you outlined.

Okay. I noticed something in that response worth pushing on.

The Unlisted App Argument

If the policy is "merchants who install through the Shopify App Store," and our app is unlisted — meaning no merchant can find it on the App Store, and the only installation path is a direct link from Sendboo.com — does that trigger condition ever actually apply?

I wrote back:

While we wait for the App Review team's response, I want to raise two specific points from your last message that I'm struggling to reconcile.

  1. "Merchants who install through the Shopify App Store" — If our app is unlisted, it is by definition not discoverable on the Shopify App Store. No merchant can find it there. The only installation path is a direct link we provide from our own website — which means the merchant's entry point is always Sendboo.com, never the Shopify App Store. Under that model, does the trigger condition — "installs through the Shopify App Store" — ever actually apply to our merchants?

  2. The policy you referenced — The highlighted requirement reads: "Apps that use off-platform billing cannot be distributed through the Shopify App Store." We are not distributing Sendboo through the Shopify App Store. We are requesting API access for OAuth connectivity. The policy as written does not appear to apply to our distribution model. Additionally, the same clause includes an exception: "unless you've been notified otherwise by Shopify." This support thread is precisely that notification process — we are actively seeking that confirmation from Shopify.

I thought these were reasonable points. The policy language seemed to be about distribution, and we weren't distributing anything through the App Store.

The Final Answer

Jessica came back with the definitive response:

Hi Clément, Thank you so much for your patience throughout this process, and for the thoughtful and detailed way you have approached every part of this conversation. I now have a definitive answer from our App Review team and I want to give you a clear and honest picture of where things stand.

I raised your exemption request with our App Review team in full, including all of the specific context you shared around your multi-platform billing model, the optional Shopify connection, and your mixed-platform customer base. After review, the exemption was not approved.

To address your two specific points directly: even when an app is set to unlisted, it remains a public app distributed through the Shopify App Store. The unlisted setting controls discoverability only, meaning merchants cannot find it through search, but the app still operates through Shopify's OAuth flow, lives within the Shopify admin, and is subject to all App Store requirements. The billing requirement applies to all public apps regardless of their visibility setting.

On the policy clause you referenced, the exception language "unless you've been notified otherwise by Shopify" refers specifically to Shopify granting a formal exemption following review. That review process has now been completed, and the exemption was not granted.

The confirmed requirement from our App Review team is this: if a merchant installs your app on any Shopify surface, any subscription cost for the connected service must be billed through Shopify Pricing. A billing exemption is only available for apps that are completely free and do not lead to any service charges off platform. Because Sendboo is a paid service with a published pricing structure, the full billing relationship for any merchant who installs through Shopify needs to go through Shopify's billing system.

To be clear about what remains unchanged: your existing billing arrangements for customers acquired outside of Shopify, including those on WooCommerce, PrestaShop, or who signed up directly through Sendboo.com, are not affected by this requirement at all. Only merchants who install the app through a Shopify surface would need to have their subscription processed through Shopify billing going forward.

I recognize this creates real complexity for a platform-agnostic model like yours, and I am sorry I was not able to bring back a different outcome.

What We're Doing About It

We're implementing Shopify Billing.

Not because it makes technical sense. Not because it solves a real problem. But because it's the only way to get the OAuth credentials we need to ship the Shopify integration.

We'll route Shopify-acquired merchants through Shopify's billing flow to satisfy the requirement. We'll maintain our Stripe billing for every other customer — the majority of our base. We'll deal with the operational complexity of having two parallel billing systems.

And yes, we've thought about whether we can quietly disable the Shopify billing path once the app is approved. Honestly, that's a conversation for another day and we'll cross that bridge when we come to it. For now: we implement what's required, we ship, we move on.

What This Means for SaaS Builders

If you're building a platform-agnostic SaaS that uses Shopify as one of several data connectors, know this going in: Shopify treats any public app with paying customers as subject to its billing requirements, regardless of whether those charges have anything to do with Shopify.

The distinction between "we're charging for our product" and "we're charging for Shopify access" doesn't exist in Shopify's policy framework. If a merchant can install your app on any Shopify surface, you're in scope. Full stop.

The unlisted app model does not provide a meaningful exemption. Unlisted controls discoverability, not policy applicability. That distinction is clearly documented in their response, and I wish I'd understood it earlier.

The exemption process is real, but the bar is high. "We have incompatible billing models" is not sufficient. "A large portion of our customers have no Shopify account" is not sufficient. The only exemption that appears to exist is for apps that are entirely free and lead to no off-platform charges. That's a narrow bar that most SaaS tools won't clear.

If you're early and can architect around this: build Shopify Billing support from day one if Shopify merchants are part of your target. The workaround tax, two billing systems, additional reconciliation, a different checkout experience for one segment of your customers, is real, and you'd rather not pay it retroactively.

We're going to ship the integration. Shopify merchants will be able to connect their stores to Sendboo. It'll work, and it'll work well. We'll just be paying a platform tax for the privilege of reading their order data.

That's the deal. I just wish someone had written this down before I went through the whole process.

Fuck You, Shopify

Rant over.