How to handle free plan for an app

Topic summary

A developer is encountering a validation error when attempting to create a free subscription plan ($0) for their Shopify app using GraphQL mutations.

The Issue:

  • The mutation fails with error: “Validation failed: Price must be greater than zero”
  • Developer needs to track subscription start/end dates to monitor user activity and enforce free plan limitations

Technical Details:

  • Using appSubscriptionCreate mutation with price set to “0” USD
  • Interval set to “EVERY_30_DAYS”
  • Test mode enabled

Current Status:

  • The problem remains unresolved
  • A second user has reported experiencing the same issue
  • No solutions or workarounds have been identified yet

The core challenge is that Shopify’s billing API appears to reject subscription plans with zero-dollar pricing, preventing the creation of trackable free tier subscriptions.

Summarized with AI on November 24. AI used: claude-sonnet-4-5-20250929.

Hi,

Currently I’m developing a Shopify app with two plans: Free Plan and a paid plan.

The default plan will be free and there will be various limitations for the free plan. Therefore I need to keep track of the subscription start and end dates (in order to calculate the actions taken by the merchant between those dates). I am trying to create a free subscription plan with the following graphQL mutation.

const variables =
    {
        "lineItems": {
            "plan": {
                "appRecurringPricingDetails": {
                    "price": {
                        "amount": "0",
                        "currencyCode": "USD"
                    },
                    "interval": "EVERY_30_DAYS"
                },
            }
        },
        "name": "Free Subscription Plan",
        "returnUrl": "myreturnURL",
        "test": true,
    }

    const query = `
        mutation appSubscriptionCreate($lineItems: [AppSubscriptionLineItemInput!]!, $name: String!, $returnUrl: URL!, $test: Boolean) {
            appSubscriptionCreate(lineItems: $lineItems, name: $name, returnUrl: $returnUrl, test: $test) {
              userErrors {
                field
                message
              }
              appSubscription {
                createdAt
                id
                name
                lineItems{
                    id
                    plan{
                        pricingDetails
                    }
                }
                returnUrl
                status
                currentPeriodEnd
              }
              confirmationUrl
            }
          }
        `

Yet I get the following response.

“message”: “Validation failed: Price must be greater than zero”

My question is: How can I create a free subscription so that I can track user activity between the start and end dates of each subscription period.

2 Likes

Having the same problem here. Could you find any solutions?