Shopify Buy Button on Framer: 3 Real Limits and a Better Fix
Yes, you can put the Shopify Buy Button on a Framer site, and it will take payments. But it renders inside an iframe, which means limited styling, loading that fails in ways you cannot debug, and pixel tracking that drops exactly where it matters. For a design-led Framer store, a native Shopify integration gives you real product pages and a cart that survives navigation instead.
That trade-off is the whole story, and almost nobody writes it down. Search the term today and Google's AI Overview answers with Shopify's own help pages, while every organic result on page one is a Shopify Community or Reddit thread from someone whose button broke. The setup instructions are everywhere. The failure modes are not.
What is a buy button and how does it work?
A Buy Button is a Shopify sales channel that generates a snippet of HTML and JavaScript for one product, one collection or a cart. You paste the snippet into any external page, the shopify buy button js library (buy-button-js) loads from Shopify's CDN, and it draws a product card into your page. Clicking Add to cart opens an overlay cart, and checkout redirects to Shopify's hosted pages.
The important detail is the container. By default every top-level component renders inside an iframe. Shopify's own documentation explains why: iframes "isolate the embed in a 'sandbox' so that other parts of your website don't interact with it in unwanted ways." That sandbox is the point — and it is also the problem, because your Framer design lives entirely outside it.
Three ways the Shopify Buy Button breaks on a Framer site
Each of these is documented or reproducible, not theoretical.
1. Styling stops at the iframe boundary. Your Framer fonts, spacing scale and hover states do not cross into the embed. The documented escape hatch is iframe: false, but Shopify's Buy Button customization docs warn that when you disable it "your components will appear unstyled" — you inherit the job of restyling every element. Worse, the library still injects its own inline CSS into your page head even with the flag off. That bug, issue #440 in Shopify/buy-button-js, is still open.
"Still seeing this issue a year and a half later." — a developer on Shopify/buy-button-js issue #440
So shopify buy button customization has two bad ends: keep the iframe and accept Shopify's look, or drop it and fight injected styles you did not write.
2. The embed intermittently fails to render. The iframe sizes itself after its content loads. Inside Framer's animated, lazy-loaded canvas that race is easy to lose, and the button appears as empty space. Shopify's help docs confirm the sharp edge: if any CSS applies display: hidden to iframe elements, the Buy Button becomes invisible. A shopper on a slow connection does not report this. They just leave.
3. Tracking breaks at the two moments you care about. Add to cart happens inside a cross-origin iframe, and checkout happens on a Shopify domain. Your Framer-side Meta pixel and GA4 tags see the pageview and then lose the funnel, so you cannot attribute a sale to the campaign that produced it. Shopify's answer is that you track Buy Button orders from your Shopify admin — accurate for revenue, useless for ad optimization.
There is a fourth, quieter cost: Shopify warns the channel "can cause problems with the checkout process" when used on a Shopify store itself, and notes that Buy Buttons created before October 10, 2016 are no longer supported. This is maintained infrastructure, not strategic infrastructure.
How do I add a buy button in Shopify?
Four steps, and they genuinely are easy — this is why the Buy Button spreads.
- In your Shopify admin, go to Settings → Sales channels and add Buy Button from the Shopify App Store.
- Open the channel and click Create a Buy Button, then pick a product or a collection.
- Set the button text, colour and click behaviour (cart overlay or direct to checkout).
- Copy the generated embed code and paste it into a Framer Embed component or the page's custom code block.
Fifteen minutes, start to finish. The same snippet is what people mean by a shopify buy button on wix or Squarespace setup — the channel is platform-agnostic, which is exactly why it is also platform-indifferent to your design system.
Buy Button vs Framer plugin vs native integration
| Buy Button | Framer Shopify sync plugin | FramerLink | |
|---|---|---|---|
| Styling control | Iframe only; theme picker | Full — renders as Framer CMS | Full — native Framer components |
| Cart persists across pages | No | Varies by plugin | Yes |
| Meta / GA4 funnel tracking | Breaks at cart and checkout | Partial | Full, Framer-side events |
| Live inventory display | No | On sync interval | Yes |
| Indexable product pages | No — embed, not a URL | Yes, CMS pages | Yes, CMS pages |
| Setup time | ~15 min | 1–2 hours | ~30 min |
The row that decides most projects is indexable product pages. A Buy Button is a widget on a page you already have. It does not create a crawlable URL per product, so none of your catalogue competes in search. Everything in the headless Shopify on Framer approach exists to fix that single gap.
What the iframe actually costs you
Checkout friction is the most expensive variable in ecommerce. Baymard Institute puts the documented average cart abandonment rate at 70.22%, aggregated across 50 studies. A Buy Button adds friction at two points inside that number: an overlay cart that forgets itself when a shopper browses to another page, and a domain handoff mid-purchase.
The second one is fixable with care — see our notes on Shopify guest checkout from a Framer site. The first one is architectural. If a visitor adds a shirt on your lookbook page and a belt on your editorial page, a per-page embed cannot hold both in one cart.
Compare that to what you pay for the alternative. Shopify's plans start at $39 per month for Basic and run to $105 for Grow, so the platform cost is already sunk. The integration layer is the cheap part of the stack, and FramerLink's pricing is where you'd check that for your own store.
When the Buy Button is the right call
It is genuinely correct in three situations: you sell one or two products and will not add more; the embed sits on a single landing page where cross-page cart state is irrelevant; or you are validating demand this week and will rebuild properly later.
If you have a catalogue, want product pages you actually designed, or run paid acquisition that needs clean event data, the iframe is a ceiling you will hit within a month. Build on the Storefront API instead and let Framer render real pages.
Frequently asked questions
How much is the Shopify buy button?
The Buy Button sales channel itself is free. Shopify documents it as included in all subscription plans, so your only cost is the plan you already pay for — Basic starts at $39 per month billed monthly — plus your normal payment processing rates on each order. There is no separate per-button or per-embed fee.
Can you give me an example of a Buy Button on Shopify?
A typical Shopify Buy Button example is a single product card on a blog post: product photo, title, price and an Add to cart button, generated in the Buy Button channel and pasted into the page as a script tag. Clicking it opens a cart overlay, then redirects the shopper to Shopify checkout.
What is the buy button?
The Buy Button is a Shopify sales channel that generates embeddable HTML and JavaScript for a product, collection or cart. You paste that snippet into any external site and it renders a purchasable product card, sending shoppers to Shopify's hosted checkout to pay.
Sources
- Buy Button sales channel — Shopify Help Center
- Buy Button JS — Customization — Shopify
- iframe: false still injects inline css code (Issue #440) — Shopify/buy-button-js on GitHub
- Shopify Pricing — Shopify
- Cart Abandonment Rate — Baymard Institute