The first time a paywall came back empty on Speech Route, I opened Xcode.

The product request looked like a failed network call. Identifiers matched. The fetch ran. StoreKit returned []. I treated that as a code problem for hours, because that is what an empty list looks like.

It was not the request. It was the account underneath the products.

This sits inside Guideline 2.1, App Completeness. Reviewers open the paywall and try to buy something. If nothing is there, the app is unfinished. The overview of that empty paywall is in Why StoreKit Returned No Products. This is the account-level piece of that checklist: the Paid Applications Agreement.

It is not an app setting

The agreement lives on the developer account, not on the app record.

You can create subscription products, fill in a display name, pick a price, and still get nothing back in the binary until the Paid Applications Agreement is signed and the tax and banking details attached to it are complete. A product that looks finished in App Store Connect is still invisible to StoreKit while that paperwork is waiting.

On Speech Route, part of this sat on the client's side. I could write the paywall. I could not sign their banking form. Until that was done, every StoreKit log I read was telling me a story about code that was not the problem.

Tax and banking are the part people skip

Signing the agreement is the obvious checkbox. Completing tax and banking is the one that stays "in progress" without a loud error in Xcode.

Apple will let you create the subscription. It will not return it to the app. There is no StoreKit error that says "the bank form is incomplete." You get the same empty array you would get from a wrong product ID or a missing sandbox sign-in.

That is why I now look at Agreements, Tax, and Banking before I look at the Swift. If the agreement is not clear, I stop. Debugging the request is wasted time.

What I check before I touch the fetch

I open App Store Connect at the account level, not at the in-app purchases screen.

The Paid Applications Agreement has to show as active. Tax forms have to be filed. Banking has to be attached. Only then do I treat a missing product as an app problem — incomplete metadata, a sandbox account, or the paywall itself.

Review still sees the same thing it saw on Speech Route: a purchase screen with nothing to buy. 2.1 does not care that the agreement was someone else's job. The eight rejections that taught me to look here first are in the first-submission post.