(function(){try{var q=window.location.search;var m=q.match(/[?&]akp_notrack=([01])/);if(m){document.cookie='akp_notrack='+m[1]+';path=/;max-age='+(m[1]==='1'?15552000:0)+';SameSite=Lax';}var armed=/(^|; )akp_notrack=1(;|$)/.test(document.cookie)||(m&&m[1]==='1');if(armed&&!window.fbq){var n=function(){};n.queue=[];n.loaded=true;n.version='2.0';n.callMethod=function(){};window.fbq=n;window._fbq=n;}}catch(e){}})();
https://annakatherinepage.com/wp-content/plugins/burst-statistics/assets/js/timeme/timeme.min.js
var breeze_prefetch = {"local_url":"https://annakatherinepage.com","ignore_remote_prefetch":"1","ignore_list":["/?wc-api=wc_facebook_get_feed_data&secret=1760aef9e5a5d06e2a1f0f642c457ce5","/cart/","/checkout/","/my-account/","wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
https://annakatherinepage.com/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js
https://annakatherinepage.com/wp-includes/js/jquery/jquery.min.js
https://annakatherinepage.com/wp-includes/js/jquery/jquery-migrate.min.js
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js
var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https://annakatherinepage.com/checkout/","is_cart":"","cart_redirect_after_add":"no"};
//# sourceURL=wc-add-to-cart-js-extra
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js
var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"};
//# sourceURL=woocommerce-js-extra
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js
window.__wc_fb_page_generated = 1793011541;
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
window.FacebookSignals = window.FacebookSignals || {
_held: false,
_releasing: false,
_pixelInitialized: false,
_pixelId: null,
_pixelUserInfo: {},
_pixelOptions: {},
_pendingPixelEvents: [],
_queue: [],
_config: {},
_attribution: {},
_seenEventIds: {},
_fbclid: (function() {
try {
var m = window.location.search.match(/[?&]fbclid=([^&]*)/);
return m ? decodeURIComponent(m[1]) : null;
} catch(e) { return null; }
})(),
init: function(config) {
config = config || {};
this._config = config;
this._attribution = config.attribution || {};
var cookieState = this._getCookie('wc_facebook_signals_state');
this._held = cookieState ? cookieState === 'held' : !!config.held;
this._fbclid = this._fbclid || null;
if (typeof fbq === 'function') {
fbq('consent', this._held ? 'revoke' : 'grant');
}
try {
var raw = window.sessionStorage.getItem('wc_facebook_signals_seen_event_ids');
this._seenEventIds = raw ? JSON.parse(raw) : {};
} catch (e) {
this._seenEventIds = this._seenEventIds || {};
}
},
initPixel: function(pixelId, userInfo, options) {
this._pixelId = pixelId;
this._pixelUserInfo = userInfo && typeof userInfo === 'object' && !Array.isArray(userInfo) ? userInfo : {};
this._pixelOptions = options || {};
if (!this._held) {
this._runPixelInit();
}
},
_runPixelInit: function() {
if (this._pixelInitialized || !this._pixelId || typeof fbq !== 'function') return;
fbq('init', this._pixelId, this._pixelUserInfo, this._pixelOptions);
this._pixelInitialized = true;
this._flushPendingPixelEvents();
},
_flushPendingPixelEvents: function() {
var pending = this._pendingPixelEvents;
this._pendingPixelEvents = [];
for (var i = 0; i < pending.length; i++) {
var ev = pending[i];
this._firePixelEvent(ev.name, ev.params, ev.method, ev.eventId);
}
},
_fireOrQueuePixelEvent: function(name, params, method, eventId) {
if (!this._pixelInitialized) {
this._pendingPixelEvents.push({
name: name, params: params || {}, method: method || 'track', eventId: eventId || null
});
return;
}
this._firePixelEvent(name, params || {}, method || 'track', eventId || null);
},
_firePixelEvent: function(name, params, method, eventId) {
method = method || 'track';
if (eventId) {
fbq(method, name, params || {}, { eventID: eventId });
} else {
fbq(method, name, params || {});
}
},
queueEvent: function(eventData) {
if (!eventData || !eventData.event_name) return;
var originalId = eventData.event_id || null;
if (originalId && this._seenEventIds[originalId]) return;
if (!this._held) {
this._fireOrQueuePixelEvent(eventData.event_name, eventData.custom_data || {}, eventData.method || 'track', originalId);
return;
}
eventData = this._cloneEventData(eventData);
eventData.event_id = this._generateEventId();
eventData.event_time = eventData.event_time || Math.floor(Date.now() / 1000);
this._queue.push(eventData);
var idToMark = originalId || eventData.event_id;
if (idToMark) {
this._seenEventIds[idToMark] = 1;
try {
window.sessionStorage.setItem(
'wc_facebook_signals_seen_event_ids',
JSON.stringify(this._seenEventIds)
);
} catch (e) {}
}
},
trackEvent: function(name, params, userData, method, eventId) {
method = method || 'track';
eventId = eventId || (params && params.eventID) || null;
if (this._held) {
this.queueEvent({
event_name: name,
custom_data: params || {},
event_id: eventId,
event_time: Math.floor(Date.now() / 1000),
method: method
});
} else {
this._fireOrQueuePixelEvent(name, params || {}, method, eventId);
}
},
release: function() {
var self = this;
if (!self._held || self._releasing || !self._config.ajaxUrl) {
return Promise.resolve({ success: true, data: { sent_count: 0 } });
}
self._releasing = true;
var attribution = self._collectAttribution();
var payload = JSON.stringify({
events: self._queue,
attribution: {
fbp: attribution.fbp || null,
fbc: attribution.fbc || null
},
fbclid: self._fbclid || null
});
var url = self._config.ajaxUrl +
(self._config.ajaxUrl.indexOf('?') === -1 ? '?' : '&') +
'action=' + encodeURIComponent(self._config.action);
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
try {
var resp = JSON.parse(xhr.responseText);
self._handleReleaseResponse(resp.data || {}, attribution);
resolve(resp);
} catch(e) { self._releasing = false; reject(e); }
} else {
self._releasing = false;
reject(new Error('Signal release AJAX failed: ' + xhr.status));
}
};
xhr.onerror = function() { self._releasing = false; reject(new Error('Network error')); };
xhr.send(payload);
});
},
_handleReleaseResponse: function(data, attribution) {
this._syncAttributionCookies(data || {}, attribution);
// Override cached user_info with fresh data from the release response.
if (data.user_info && typeof data.user_info === 'object' && !Array.isArray(data.user_info)) {
this._pixelUserInfo = data.user_info;
}
this._held = false;
this._releasing = false;
fbq('consent', 'grant');
this._runPixelInit();
var queue = this._queue;
for (var i = 0; i < queue.length; i++) {
var ev = queue[i];
this._fireOrQueuePixelEvent(ev.event_name, ev.custom_data || {}, ev.method || 'track', ev.event_id || null);
}
this._queue = [];
},
_collectAttribution: function() {
var clientParams = {};
if (typeof clientParamBuilder !== 'undefined') {
try {
clientParams = clientParamBuilder.processAndCollectParams(this._getAttributionUrl()) || {};
} catch (e) {}
}
var fbp = this._getCookie('_fbp') || clientParams._fbp || (typeof clientParamBuilder !== 'undefined' ? clientParamBuilder.getFbp() : null);
var fbc = this._getCookie('_fbc') || clientParams._fbc || (typeof clientParamBuilder !== 'undefined' ? clientParamBuilder.getFbc() : null);
if (!fbc && this._fbclid) {
fbc = 'fb.1.' + Date.now() + '.' + this._fbclid;
}
return { fbp: fbp || null, fbc: fbc || null };
},
_syncAttributionCookies: function(data, attribution) {
var fbp = data.fbp || (attribution && attribution.fbp) || null;
var fbc = data.fbc || (attribution && attribution.fbc) || null;
if (fbp) {
this._setAttributionCookie('_fbp', fbp, data.fbp_domain || null);
}
if (fbc) {
this._setAttributionCookie('_fbc', fbc, data.fbc_domain || null);
}
},
_setAttributionCookie: function(name, value, domain) {
if (!value) return;
var domainAttr = domain ? ';domain=' + domain : '';
document.cookie = name + '=' + encodeURIComponent(value) + ';path=/;max-age=7776000' + domainAttr + ';SameSite=Lax';
},
_getCookie: function(name) {
var match = document.cookie.match(new RegExp('(?:^|;\\s*)' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '=([^;]*)'));
if (!match) return null;
try { return decodeURIComponent(match[1]); } catch(e) { return null; }
},
_cloneEventData: function(eventData) {
var clone = {};
for (var key in eventData) {
if (Object.prototype.hasOwnProperty.call(eventData, key)) {
clone[key] = eventData[key];
}
}
return clone;
},
_generateEventId: function() {
if (window.crypto && typeof window.crypto.randomUUID === 'function') {
return window.crypto.randomUUID();
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
},
_getAttributionUrl: function() {
if (!this._fbclid) return window.location.href;
try {
var url = new URL(window.location.href);
if (!url.searchParams.get('fbclid')) {
url.searchParams.set('fbclid', this._fbclid);
}
return url.toString();
} catch (e) {
return window.location.href;
}
}
};
FacebookSignals.init({
held: false,
ajaxUrl: "https:\/\/annakatherinepage.com\/wp-admin\/admin-ajax.php",
action: 'facebook_release_signals',
pixelId: "5552345558112956",
attribution: {}
});
FacebookSignals.initPixel(
"5552345558112956",
{},
{"agent":"woocommerce_0-11.2.1-3.7.8"} );
document.addEventListener( 'DOMContentLoaded', function() {
document.body.insertAdjacentHTML( 'beforeend', '<div class=\"wc-facebook-pixel-event-placeholder\"></div>' );
}, false );
Skip to content
How to Price Flowers for Florists: A Wholesale Guide for Small Farms
Disclosure
This post contains affiliate links, which means I may earn a small commission if you make a purchase through my links, at no extra cost to you.
Quick answer: Small farms usually sell to florists by the 10-stem bunch , priced below retail but above cost. Published farm wholesale lists show examples like $9 a bunch for zinnias and $10 to $20 a bunch for dahlias , with a minimum order (often around $100) and delivery charged separately. Wholesale trades a lower price for volume and less of your time per stem.
Why florists pay less
Florists buy in volume, take flowers in simple bunches instead of finished designs, and handle the arranging themselves. You skip bouquet-making, sleeves, and market-day hours. That saved time is what makes a lower per-stem price work.
A sample wholesale price list
One Pennsylvania farm’s published list:
Flower
Price per 10-stem bunch
Per stem
Dahlias, double or fancy
$20
$2.00
Dahlias, single or open-centered
$10
$1.00
Sunflowers
$10
$1.00
Zinnias
$9
$0.90
Plume celosia
$9
$0.90
Terms: $100 minimum, $15 delivery fee, set pickup and delivery days.
How to set your own wholesale prices
Start from cost per stem. Wholesale is the channel where underpricing hurts most, because the margin is already thinner.
Price by the bunch. Florists think in bunches, and it keeps your invoicing simple.
Set a minimum order. It keeps small orders from eating a delivery trip.
Charge for delivery or offer set pickup days.
Publish an availability list weekly. Florists buy what they know you have.
What works here is treating wholesale as a way to move volume on your most productive crops, not as a place to dump everything at a discount.
Frequently asked questions
How much lower than retail should wholesale be?
There is no single rule. Compare your wholesale bunch price to what those stems earn in a market bouquet after your time, and make sure wholesale still clears your cost per stem with room to spare.
Do florists expect consistent stem length and quality?
Yes. Grade your stems and only send wholesale-grade flowers. Seconds can go into market bunches.
Should I sell to grocery stores the same way?
Grocery and large buyers usually want lower prices and higher volume. Price those separately.
Know your floor before you quote
The Flower Farm Pricing Toolkit ($27) calculates cost per stem for 35 varieties, so you can see your wholesale floor before you send a price list.
More pricing guides: Flower Farm Pricing Hub · Dahlia and Zinnia Prices Per Stem
Your cart
(items: 0)
Products in cart
Available on backorder
Previous price:
Discounted price:
Your shopping cart is empty
(function () {
var c = document.body.className;
c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
document.body.className = c;
})();
https://annakatherinepage.com/wp-includes/js/comment-reply.min.js
https://annakatherinepage.com/wp-includes/js/dist/hooks.min.js
https://annakatherinepage.com/wp-includes/js/dist/i18n.min.js
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
https://annakatherinepage.com/wp-includes/js/dist/private-apis.min.js
https://annakatherinepage.com/wp-includes/js/dist/url.min.js
https://annakatherinepage.com/wp-includes/js/dist/api-fetch.min.js
wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "https://annakatherinepage.com/wp-json/" ) );
wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "331c98801c" );
wp.apiFetch.use( wp.apiFetch.nonceMiddleware );
wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware );
wp.apiFetch.nonceEndpoint = "https://annakatherinepage.com/wp-admin/admin-ajax.php?action=rest-nonce";
//# sourceURL=wp-api-fetch-js-after
https://annakatherinepage.com/wp-content/uploads/burst/js/burst.min.js
var wc_facebook_signals_params = {"ajax_url":"https://annakatherinepage.com/wp-admin/admin-ajax.php","nonce":"29196f1dbe","action":"wc_facebook_update_signals_state"};
//# sourceURL=wc-facebook-signals-js-extra
https://annakatherinepage.com/wp-content/plugins/facebook-for-woocommerce/assets/js/facebook-for-woocommerce-signals.js
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js
var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://annakatherinepage.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
//# sourceURL=wc-order-attribution-js-extra
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js
https://annakatherinepage.com/wp-content/plugins/facebook-for-woocommerce/assets/js/frontend/pixel-events.js
(function() {
var processParams = function() {
if (typeof clientParamBuilder !== "undefined" && !/(?:^|;\s*)wc_facebook_signals_state=held(?:;|$)/.test(document.cookie)) {
clientParamBuilder.processAndCollectAllParams(window.location.href);
}
};
if (typeof clientParamBuilder !== "undefined") {
processParams();
return;
}
var fallbackScript = document.createElement("script");
fallbackScript.src = "https:\/\/unpkg.com\/meta-capi-param-builder-clientjs@1.3.2\/dist\/clientParamBuilder.bundle.js";
fallbackScript.onload = processParams;
document.head.appendChild(fallbackScript);
}());
//# sourceURL=facebook-capi-param-builder-js-after
/* WooCommerce Facebook Integration Event Tracking */
fbq('set', 'agent', (function(){var a='woocommerce_0-11.2.1-3.7.8';if(window.__wc_fb_page_generated&&(Math.floor(Date.now()/1000)-window.__wc_fb_page_generated)>1800){a=a.replace(/(\d+\.\d+\.\d+)/,'$1_c');}return a;})(), '5552345558112956');
window.wcFacebookPixelFiredEvents = window.wcFacebookPixelFiredEvents || {};
if (!window.wcFacebookPixelFiredEvents["314f9bf1-4566-4da1-945e-10d0710ee34b"]) {
window.wcFacebookPixelFiredEvents["314f9bf1-4566-4da1-945e-10d0710ee34b"] = true;
var isStale = window.__wc_fb_page_generated && (Math.floor(Date.now()/1000) - window.__wc_fb_page_generated) > 1800;
if (window.FacebookSignals && typeof window.FacebookSignals.trackEvent === 'function') {
window.FacebookSignals.trackEvent('PageView', {
"source": "woocommerce_0",
"version": "11.2.1",
"pluginVersion": "3.7.8"
}, null, 'track', isStale ? null : "314f9bf1-4566-4da1-945e-10d0710ee34b");
} else if (isStale) {
fbq('track', 'PageView', {
"source": "woocommerce_0",
"version": "11.2.1",
"pluginVersion": "3.7.8"
});
} else {
fbq('track', 'PageView', {
"source": "woocommerce_0",
"version": "11.2.1",
"pluginVersion": "3.7.8"
}, {
"eventID": "314f9bf1-4566-4da1-945e-10d0710ee34b"
});
}
}
//# sourceURL=facebook-for-woocommerce-inline-js-after
(function(){
function rgb(c){var m=(c||"").match(/[0-9.]+/g);return m?m.map(Number):null;}
function lum(a){return (0.299*a[0]+0.587*a[1]+0.114*a[2])/255;}
function effbg(el){var n=el;while(n){var c=rgb(getComputedStyle(n).backgroundColor);if(c&&(c.length<4||c[3]>0.5))return c;n=n.parentElement;}return null;}
var sel="main h1,main h2,main h3,main h4,main p,main li,main span,#frc h1,#frc h2,#frc h3,#frc p,#frc span,#frc li";
document.querySelectorAll(sel).forEach(function(t){
var bg=effbg(t);
if(!bg) return;
if(lum(bg)<0.30){
var fc=rgb(getComputedStyle(t).color);
if(fc && lum(fc)<0.5){ t.style.setProperty("color","#f7f1e6","important"); }
}
});
})();
Leave a Reply