Skip to main content
Ratings: ZIPCushions Google

4.9/5

ZIPCushions Etsy

5/5

|
Flat 15% OFF Sitewide, Use Code: ZIPCUSHION15
|
Flat 15% OFF Sitewide, Use Code: ZIPCUSHION15
  • Custom Cushion Experts
    Custom Cushion Experts
  • Any Size Cushions
    Any Size
  • Any Color Custom Cusions
    Any Color
  • Any Shape Custom Cusions
    Any Shape
  • More Than 50000 happy customers
    Loved by 50,000+ Homes

Your Comfort, Your Style

We know comfort is key, whether you're lounging in a cozy nook, sprucing up a spacious patio, or adding flair to your office space. Show us your favorite ZIPCushions spot, big or small.

Share how you style your cushions in any setting—we don't judge!
Background image

How to participate? It’s simple

─    Just follow these easy steps   ─
custom cushion
custom cushion
Creative Requirements

We’re looking for high-quality images and videos that showcase your ZIPCushions beautifully. Here’s what we need

Image Product

Even Lighting
Ensure your photos and videos are well-lit without harsh shadows. Shooting early or later in the day or on an overcast/cloudy day is good.

Landscape/Portrait Images
Capture both horizontal and vertical photos.

Standard Shots
Each photo/video should capture all the furniture in a standard 1:1 shot. Videos should start with the whole furniture and gradually move closer to show product details.

Close-Up Images
To highlight the textures and details (zippers, piping) on your cushions.

Full Product Images
Capture both your furniture and cushions.

No Pets or Kids Please
Focus on the cushions and the seating space.

Your Styled Spaces

I am very happy with my new cushions. Patrick from their support team helped me figure out the measurements and was so great to work with. Shipping was fast. Love the Sunbrella fabric. I would definitely order from them again!
Marissa Huffman
We love our custom patio cushions, They are everything we had hoped they would be. Soft high quality Sunbrella fabric, sleek appearance, and super comfortable! Customer service was very good throughout the process.
Carrie Powell
Key Points

Jennifer Kenny

  • ● We accept JPG, PNG, and MP4 files
  • ● Files should not exceed a file size of 100MB.
  • ● Winners will be contacted via email within 7 business days, so keep an eye on your inbox!

Share Your Content

We can’t wait to see your favorite ZIPCushions spot!

Please note that our creative team will review all the submissions and determine their suitability. This process may take up to 7 working days. The winners will be notified via email.

Terms and Conditions

By submitting your content, you grant ZIPCushions the right to edit and use your photos and videos on our website, social media, and for other marketing purposes. Your personal information will remain confidential and will not be shared with third parties. For further details on how we handle your data, please refer to our comprehensive Privacy Policy available on our website.

Have questions ? Contact us at: dianna@zipcushions.com


Contact us

: * * * ARCHITECTURE NOTE — why this is one-shot install: * The JS sends BOTH: * - pubsub_token: best-guess parsed source_id from cookie * - cookie_raw: the raw cookie value * The server tries to extract source_id from `pubsub_token` first; if that * fails (e.g. Chatwoot changes cookie format in a future version) it falls * back to decoding `cookie_raw` server-side. This means future Chatwoot * upgrades won't require theme re-uploads — just bot_server updates. */ (function () { 'use strict'; // ========================================================================= // CONFIG — replace with your bot_server's public URL // ========================================================================= var FLASK_SYNC_URL = 'https://monitors-truly-designer-postings.trycloudflare.com/cart-tracker/sync'; var DEBOUNCE_MS = 600; // ========================================================================= // HELPERS // ========================================================================= function getCookie(name) { var m = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); return m ? decodeURIComponent(m[3]) : null; } /** * Extract source_id from a Chatwoot cw_conversation cookie value. * Tries every known format. Returns null if none work — the server-side * fallback (cookie_raw) will handle it instead. */ function extractSourceId(raw) { if (!raw) return null; // Format 1: JWT with payload {source_id, inbox_id, exp, iat} if (raw.split('.').length === 3) { try { var payload = raw.split('.')[1]; // base64url -> base64 payload = payload.replace(/-/g, '+').replace(/_/g, '/'); while (payload.length % 4) payload += '='; var decoded = JSON.parse(atob(payload)); if (decoded.source_id) return decoded.source_id; if (decoded.pubsub_token) return decoded.pubsub_token; } catch (e) { /* fall through */ } } // Format 2: JSON object if (raw.charAt(0) === '{') { try { var parsed = JSON.parse(raw); return parsed.source_id || parsed.pubsub_token || parsed.token || null; } catch (e) { /* fall through */ } } // Format 3: looks like a plain UUID if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(raw)) { return raw; } return null; } function getChatwootIdentifier() { return (window.$chatwoot && window.$chatwoot.identifier) || null; } function getChatwootEmail() { return (window.$chatwoot && window.$chatwoot.user && window.$chatwoot.user.email) || null; } function fetchCart() { return fetch('/cart.js', { credentials: 'same-origin', headers: { 'Accept': 'application/json' }, }).then(function (r) { if (!r.ok) throw new Error('cart fetch failed: ' + r.status); return r.json(); }); } function pushSnapshot(reason) { var rawCookie = getCookie('cw_conversation'); if (!rawCookie) return; // Chatwoot widget hasn't set its cookie yet var sourceId = extractSourceId(rawCookie); fetchCart().then(function (cart) { var payload = { // Best-guess client-side parsed token. Server prefers this. pubsub_token: sourceId, // Raw cookie as fallback. If pubsub_token is null OR the server's // cart→conversation matching fails, the server can decode this itself. cookie_raw: rawCookie, identifier: getChatwootIdentifier(), email: getChatwootEmail(), cart: cart, shop_domain: window.location.host, reason: reason, client_version: 'v2', }; if (reason === 'unload' && navigator.sendBeacon) { var blob = new Blob([JSON.stringify(payload)], { type: 'application/json' }); navigator.sendBeacon(FLASK_SYNC_URL, blob); } else { fetch(FLASK_SYNC_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), keepalive: true, }).catch(function () { /* silent — never break shopper UX */ }); } }).catch(function () { /* silent */ }); } var debounceTimer = null; function pushDebounced(reason) { if (debounceTimer) clearTimeout(debounceTimer); debounceTimer = setTimeout(function () { pushSnapshot(reason); }, DEBOUNCE_MS); } // ========================================================================= // TRIGGER 1: Widget ready — initial sync // ========================================================================= window.addEventListener('chatwoot:ready', function () { pushSnapshot('widget_ready'); }); if (window.$chatwoot && window.$chatwoot.hasLoaded) { setTimeout(function () { pushSnapshot('widget_already_ready'); }, 500); } // ========================================================================= // TRIGGER 2: Cart mutations — intercept fetch + XHR to Shopify cart endpoints // ========================================================================= var CART_MUTATION_PATHS = [ '/cart/add', '/cart/update', '/cart/change', '/cart/clear', '/cart/add.js', '/cart/update.js', '/cart/change.js', '/cart/clear.js', ]; function isCartMutation(url) { if (!url) return false; var s = typeof url === 'string' ? url : (url.url || ''); for (var i = 0; i < CART_MUTATION_PATHS.length; i++) { if (s.indexOf(CART_MUTATION_PATHS[i]) !== -1) return true; } return false; } if (window.fetch) { var origFetch = window.fetch; window.fetch = function () { var urlArg = arguments[0]; var p = origFetch.apply(this, arguments); if (isCartMutation(urlArg)) { p.then(function () { pushDebounced('cart_mutation_fetch'); }).catch(function () {}); } return p; }; } if (window.XMLHttpRequest) { var OrigXHR = window.XMLHttpRequest; var origOpen = OrigXHR.prototype.open; var origSend = OrigXHR.prototype.send; OrigXHR.prototype.open = function (method, url) { this.__ccpCartMutation = isCartMutation(url); return origOpen.apply(this, arguments); }; OrigXHR.prototype.send = function () { var self = this; if (this.__ccpCartMutation) { this.addEventListener('loadend', function () { if (self.status >= 200 && self.status < 400) { pushDebounced('cart_mutation_xhr'); } }); } return origSend.apply(this, arguments); }; } // ========================================================================= // TRIGGER 3: Page unload — last-chance sync // ========================================================================= window.addEventListener('pagehide', function () { pushSnapshot('unload'); }); document.addEventListener('visibilitychange', function () { if (document.visibilityState === 'hidden') { pushSnapshot('visibility_hidden'); } }); })();