All Collections
Post-Purchase Offers
Shopify's Post-Purchase Offer Considerations & Limitations
Shopify's Post-Purchase Offer Considerations & Limitations

Fulfillment Holds, Partially Paid Orders, Pixel Tracking, and Selling Subscriptions

Aaron Dungca avatar
Written by Aaron Dungca
Updated over a week ago

Post-Purchase offers are a great way to increase your AOV by allowing customers to add products to their order after the initial checkout has been completed.

Below you can find more context regarding the above considerations. For a full list of considerations, you can visit the Shopify developer hub here.

Data Source Rules

Post-Purchase does NOT support the following data source rules:

  • "Cart" Rules

    • *note: Cart Subtotal, Cart Line Count and Cart Item count are indeed supported

  • URL Based Rules

  • Order Tag Rules

  • Recently Viewed Endpoint

  • Buy it Again Endpoint

  • Products Search Endpoint

  • Geolocation Rules

When a Post-Purchase Offer Will and Will Not Display

In some instances, the post-purchase offer will not display. We've outlined a few common scenarios below, and Shopify has a full list of limitations in their documentation here.

The following limitations and considerations for post-purchase checkout extensions apply:

  • Additional payment methods: The post-purchase page won't be surfaced in the following scenarios:

    • The customer chooses to check out with an installment service or a wallet service (such as Klarna, Affirm, AfterPay, Apple Pay, Amazon Pay, or Google Pay).

    • The initial purchase was made with a gift card or any payment method other than a credit card.

  • Duties and support for multiple currencies: Post-purchase upsell offers won’t be surfaced on orders with duties and multiple currencies.

    • Multiple Currencies in this case means that if the user checks out using a currency that is different from your stores default currency, Shopify will not surface the Post-Purchase offer.

  • Order creation delays: In scenarios such as flash sales where the Shopify Platform is under extreme load, our system might optimize to capture orders but briefly delay the order creation step for a fast and seamless buyer experience. In these scenarios, post-purchase pages won't be surfaced, even if the request for the post-purchase page was properly made.

  • Orders for local delivery: Post-purchase upsell offers won’t be surfaced on orders for local delivery.

  • Minimum order price: Orders need to be $0.50 or more to qualify for post-purchase offers.

In the event that a post-purchase offer does not display, the original order will be maintained and processed as usual.

Fulfillment Holds: Sending the updated order to your fulfillment / inventory management system / order management system

3rd Party Fulfillment

With the "Fulfillment Holds" update applied by Shopify on May 3rd, 2021 Rebuy should now work smoothly with 3rd party fulfillment apps and services. More details can be found in Shopify's documentation here.

While the customer is interacting with the Post-Purchase Page, the fulfillment status for orders that show post-purchase offers on Shopify Checkout will be set to "On hold”. This is to prevent these orders from being fulfilled while buyers are still interacting with the post-purchase offer for their order. The hold will be lifted when the buyer reaches the Shopify Thank You Page, or after one hour if they don't reach the TY page.

*the one hour fulfillment hold timeline is controlled by Shopify and currently can not be edited.

After that, the fulfillable_quantity will be updated to the correct quantity of items ordered, fulfillment_status will be set to open, and the order can be successfully fulfilled. Please note that orders with "On hold" status can't be fulfilled as the fulfillable_quantity = 0 at that time:

To be compatible with any post-purchase app that works on Shopify Checkout, all 3rd Party Logistics (3PL) apps and services must use the fulfillable_quantity field as noted here by Shopify in their API documentation.

This change should not have any impact on any 3rd party fulfillment apps using the Shopify Order Fulfillment API. However, fulfillment apps that consume some other API (Order API, etc.) to work will not be able to fulfill orders while the orders have an "On hold" status and they could have other issues with fulfillment orders where post-purchase was shown or bought. Using the Order Fulfillment API is highly recommended, but if that’s not possible for your 3rd party fulfillment provider to do, then retrying the fulfillment after one hour has passed is the recommended workaround.

Payment Capture and ensuring the post-purchase authorization is captured

Sometimes your customers will receive a payment declined message when attempting to buy a one click post-purchase offer. There are several reasons why a customer can get a "transaction declined" or another error message when attempting to buy a post-purchase offer.

The two main reasons are:

  • Decline from the bank (customer side)

  • Decline from the payment processor (payment processor side)

In this case, the post-purchase upsell product is still added to the order when the customer clicks the "Add to Order" button, regardless of whether the transaction was successful or failed.

  • If the post-purchase transaction was successful, then you'll see an additional transaction in the Order, and the whole order will be marked as paid.

  • If the post-purchase transaction was failed, then the upsell product will be added, but there will be no additional transaction in the Order, and order status will be partially paid.

In this case, the customer receives a special email from Shopify explaining that they added a product to the order, but haven't yet completed payment for it. The email will include a link they can click to pay for it. This email will be sent by Shopify automatically for these cases.

On the merchant side, it will show as a partially paid order because the offer was accepted, but did not have a successful payment, and the Order was updated. Merchants can then handle the order in a few different ways. A few options are:

  • Collecting payment

  • Editing the order to remove the unpaid item

    • The “Enabled updating partial order” setting of Rebuy's Post Purchase Widget automatically removes the unpaid item after 60 minutes if payment isn't received for it before then, if enabled

    • If the unpaid Post-purchase offer charged extra for shipping, then even after the unpaid item is removed, the order will remain in "Partially paid" status because we do not remove the unpaid shipping amount from the order.

    • When an unpaid item is removed from an order via Order Editing, it is tracked in the "Returns" column in your Shopify analytics.

Since Shopify hasn't added the payment failure information on Orders yet, it's recommended to contact Shopify Support with affected order numbers for more details about that if needed.

Additional considerations:

  • If the customer checks out using only a Phone Number (no Email address entered) then the "Order edit invoice" email which includes the payment link will not be sent by Shopify. The current recommendation is to copy the "Checkout link for payment collection" and Text it to the customer instead.

  • Make sure that the customer has actually paid for the un-paid upsell offer before fulfilling the order.

Another reason "Partially paid" can show for an order that includes post-purchase upsell(s) is if your store uses the "Manual" Payment capture method:

In this case, payment must be manually captured for the original order + any post-purchase upsell(s) added before the order status will update to "Paid".

Supported Payment Processors

Shopify Payments is of course fully supported for post-purchase offers!

For a complete list of supported credit card processors for your store and region, click into the Settings > Payments > Third-party providers section of your Shopify admin and then click on the "Choose third-party provider" button there to see the list:

Any "direct" payment providers listed there will work. A direct payment provider is a form of payment that is included on the Shopify Checkout. Your customer completes their payment on the Shopify Checkout and is not redirected at any time during the checkout process.

External/offsite payment providers (such as Mollie) are not supported at this time. When your customers complete their order, they are redirected away from the Shopify Checkout to complete their payment with the external payment provider, so their payment information can't be vaulted by Shopify.

If your payment gateway requires a CVV for each transaction by default (Bambora/Beanstream) this will not work for Post-purchase offers. The customer will see an error when trying to accept the offer. It is recommended to not require a CVV for every transaction within your payment gateway, if possible.

Braintree, PayPal Payments Pro, and PayPal Payflow Pro are now supported on Shopify Checkout and for one click post-purchase offers, with a few exceptions:

  • Braintree will only work if the settings are configured to not require a CVV when entering credit card information. If this setting is enabled within your Braintree account, the customer will see an error when trying to accept the offer. See Braintree's CVV rules for more details.

  • PayPal Payments Pro / Payflow will only work when the customer uses a Credit Card to pay for their initial order. Make sure your PayPal settings are configured to not require a CVV for each credit card transaction so the post-purchase offer(s) can be added successfully. The express/wallet option is still not supported.

Pixel / Conversion Tracking on the Post-Purchase and Order Status Page when the post-purchase offer is enabled

The Order Status page and Thank You Page are one and the same.

Conversion pixels are small snippets of code that send data to third-party systems to track customer activity on your store. Typically, these pixels are triggered on the Order Status Page (Thank You Page) on each store.

However, if you have post-purchase offers set up on your store, customers may not reach the Order Status Page. For example, if a customer is presented with a post-purchase offer but then closes the tab without being redirected to the Order Status Page, it may appear as if the order never converted due to not reaching the Order Status Page.

To avoid this, you can configure your store's tracking pixels to fire the purchase event on both the Post-Purchase Page and the Order Status Page.

Adding code to the Additional scripts boxes

To prevent your customers from missing out on events from order conversions not making it to the Order Status page, add the relevant pixel code to the Additional scripts boxes. This is found under Shopify Admin > Settings > Checkout page.

There are two textarea inputs--one for the Post-purchase page and one for the Order status page (same as thank you page).

The Post-purchase page Additional scripts textarea only accepts JavaScript (no Liquid). However, the Order status page additional scripts box supports both JavaScript/HTML and Liquid tags.

Once you have added the relevant code, click the Save button to save your changes.

For more information, please refer to Shopify's documentation on Post-Purchase Pixel Tracking.

Selling Subscriptions Post-Purchase

When selling subscriptions post-purchase, there are certain restrictions and limitations imposed by Shopify. Subscriptions can only be offered after the initial order does not include any subscription products. If the initial order consists of subscription products, only one-time items can be sold after the purchase.


You can't create a post-purchase subscription that does the following:

  • Modifies a subscription on an order with an existing subscription

  • Adds a subscription to an order with an existing subscription

  • Converts a one-time purchase into a subscription order

If however the original order did not contain any subscription products, it is possible to sell a subscription product. This is a great way to drive recurring revenue.

More on post-purchase limitations can be found in Shopify's Documentation.

Did this answer your question?