To find a flower’s price per stem, divide the bunch or bucket price by the number of stems in it: a $9 bunch of 10 zinnias is $0.90 a stem. Then check it against what each stem costs you. University of Tennessee Extension’s 2025 zinnia budget works out to about $0.67 a stem with labor counted, so any price under that loses money.
I built this calculator so you can check a price in a few seconds, at the market or before you send out an availability list. Change the three starting numbers to yours.
Flower Price Per Stem Calculator
Enter what you charge for a bunch or a bucket and how many stems are in it. The starting numbers are a 10-stem zinnia bunch at a real farm’s wholesale price and University of Tennessee Extension’s 2025 zinnia cost. Results update as you type.
Quick start
$
stems
$
Do not know your cost per stem yet? Keep the $0.67 to start, or work yours out with the profit per acre calculator.
Fine-tune: sleeves, your time and markup
Per bunch or bucket
$
min
$
Your target
x
The $0.67 starting cost already includes UT’s labor (112 hours at $15.87 an hour) and its marketing costs. If you keep it, leave the minutes at 0 unless you are adding time it misses. A markup of 1.5x is about where UT’s zinnia budget lands ($1.00 price on a $0.67 cost).
Nothing you type here is saved or sent anywhere.
Get the free pricing breakdown by email
Five short emails: the full breakdown of the free Flower Pricing Reality Check, then how to find your floor for one bouquet, three prices you can say without flinching, and why big quotes come out too small.
By signing up you agree to get these emails from Anna Katherine. Unsubscribe anytime. Privacy policy.
How the price per stem math works
1Price per stembunch price ÷ stems
2Your floorcost per stem + extras ÷ stemssleeves, bands, your time
3Keep or loseprice per stem minus floor
4Target pricefloor x your markupwhat to charge next time
Your floor is the lowest price that pays for the stem, the sleeve and your time. Sell under it and every bunch costs you money, no matter how fast it sells. The markup is what you add on top so the farm earns something after every bill is paid.
Worked example: a 10-stem zinnia bunch
Say you sell zinnias in 10-stem bunches, the standard count for most species in Virginia Tech’s cut flower guide. True Love Seeds lists wholesale zinnias at $9 for a bunch of 10, which is $0.90 a stem. UT’s budget puts one zinnia stem at about $0.67 ($6,166.82 in costs for 9,256 stems). Each stem leaves $0.23, or $2.30 a bunch.
Now add a $1 sleeve and 6 minutes of your own time, and say you pay yourself $20 an hour. That is $3 more per bunch, or $0.30 a stem, so your floor rises to $0.97. The same $9 bunch now loses $0.70. At a 1.5x markup, that bunch should be about $14.60.
This calculator checks one bunch at a time. The Flower Farm Pricing Toolkit I built is one spreadsheet with 17 tabs and 11 calculators. It works out your true cost per stem for 35 varieties, seed to sale, then turns it into bouquet, market, CSA and wedding prices with your labor built in. It works in Excel and Google Sheets and costs $27. If it is not for you, reply to your purchase email within 14 days for a full refund. See the $27 toolkit.
Price per stem questions
What does price per stem mean?
It is the price of one flower stem. Growers sell in bunches, buckets and bouquets, so price per stem is the bunch price divided by the number of stems in it. It lets you compare a 5-stem bunch with a 10-stem one, or your price with a wholesale list.
How do you calculate price per stem?
Divide the bunch or bucket price by the number of stems. A $9 bunch of 10 zinnias is $0.90 a stem. Then subtract what one stem costs you to grow; what is left is what each stem earns.
How many stems are in a bunch of flowers?
Ten. Virginia Cooperative Extension calls ten stems per bunch the standard for most species, with some sold in fives or as singles.
What is a reasonable cost per stem for flowers?
University of Tennessee Extension’s 2025 zinnia budget comes to about $0.67 a stem: $6,166.82 in costs, including labor at $15.87 an hour and marketing, for 9,256 stems sold at $1.00. Your own cost depends on the variety, your yield and your time. The profit per acre calculator on this site shows a lower break-even, $0.59, because it counts the budget’s marketing cost as a share of whatever price you charge.
The next step: what to charge
Flower Farm Pricing Toolkit
17 tabs and 11 calculators in one spreadsheet
True cost per stem for 35 varieties, seed to sale
Bouquet, market, CSA and wedding prices with your labor built in
Works in Excel and Google Sheets, instant download
(function(){
function $(id){return document.getElementById(id);}
function v(id){var x=parseFloat($(id).value);return isNaN(x)||x<0?0:x;}
function c2(x){return Math.round((x+(x<0?-1e-9:1e-9))*100)/100;}
function m(x){x=c2(x);return (x<0?"-$":"$")+Math.abs(x).toFixed(2);}
function esc(s){return String(s).replace(/&/g,"&").replace(/</g,"<").replace(/"/g,""");}
function bars(items,max){var h='<div class="bars">';items.forEach(function(it){var w=max>0?Math.max(0,it.v)/max*100:0;h+='<div class="b" title="'+esc(it.l+": "+it.t)+'"><span>'+esc(it.l)+'</span><div class="track"><div class="fill" style="width:'+w.toFixed(1)+'%;background:'+it.c+'"></div></div><span class="val">'+esc(it.t)+'</span></div>';});return h+'</div>';}
function run(){
var P=v("ps-pr"),N=v("ps-n"),C=v("ps-c"),S=v("ps-s"),L=v("ps-l"),W=v("ps-w"),M=v("ps-m");
var out=$("ps-out");
if(N<=0){out.innerHTML='<div class="hero neg"><div class="k">Price per stem</div><div class="v">Add stems</div><div class="small">Enter how many stems are in the bunch or bucket.</div></div>';return;}
var per=c2(P/N),extra=(S+L/60*W)/N,floor=c2(C+extra),gap=c2(per-floor),bunchFloor=c2(floor*N),profit=c2(P-floor*N),target=c2(floor*M),targetBunch=c2(c2(floor*M)*N),mult=floor>0?per/floor:0;
var neg=gap<0;
var h='<div class="hero'+(neg?' neg':'')+'"><div class="k">Your price per stem</div><div class="v">'+m(per)+'</div><div class="small">'+m(P)+' for '+N+' stems. '+(floor>0?'That is '+mult.toFixed(2)+'x your full cost of '+m(floor)+' a stem.':'Add your cost per stem to see your floor.')+'</div></div>';
h+='<div class="tiles"><div class="tile"><div class="k">Your floor (break-even)</div><div class="v">'+m(floor)+'</div><div class="s">a stem, or '+m(bunchFloor)+' for all '+N+' stems</div></div><div class="tile"><div class="k">'+(neg?'You lose':'You keep')+'</div><div class="v" style="color:'+(neg?'#D9622B':'#1F7FA8')+'">'+m(Math.abs(profit))+'</div><div class="s">on these '+N+' stems, '+m(Math.abs(gap))+' a stem</div></div><div class="tile"><div class="k">Price at '+M+'x markup</div><div class="v">'+m(targetBunch)+'</div><div class="s">'+m(target)+' a stem</div></div></div>';
if(neg){h+='<p class="small" style="margin-top:10px;color:#9a3a14"><strong>This price is under your floor.</strong> Every one sold at '+m(P)+' loses '+m(Math.abs(profit))+'. Charge at least '+m(bunchFloor)+' or put fewer stems in it.</p>';}
var mx=Math.max(per,floor,target,0.01);
var title=neg?'Your price is '+m(Math.abs(gap))+' a stem below your floor':'Your price clears your floor by '+m(gap)+' a stem';
h+='<div class="chart-t">'+esc(title)+'</div><div class="legend"><span><i style="background:#D9622B"></i>Your cost</span><span><i style="background:#1F7FA8"></i>Price</span></div>';
h+='<div role="img" aria-label="'+esc('Bar chart, per stem: your floor is '+m(floor)+', your price is '+m(per)+', and the price at '+M+'x markup is '+m(target)+'.')+'">'+bars([{l:"Your floor",v:floor,t:m(floor),c:"#D9622B"},{l:"Your price",v:per,t:m(per),c:"#1F7FA8"},{l:"At "+M+"x",v:target,t:m(target),c:"#1F7FA8"}],mx)+'</div>';
h+='<p class="small">Per stem. Starting cost from <a href="https://arec.tennessee.edu/wp-content/uploads/sites/17/2025/10/ZinniaBudget-8.4.25.pdf" target="_blank" rel="noopener">UT Extension zinnia budget, 2025</a> ($6,166.82 in costs for 9,256 stems).</p>';
h+='<div class="cta"><p><strong>Your floor is '+m(floor)+' a stem. Now price everything else from it.</strong> The Flower Farm Pricing Toolkit works out your true cost per stem for 35 varieties, seed to sale, and turns it into bouquet, market, CSA and wedding prices with your labor built in.</p><div class="btns"><a class="btn" href="https://annakatherinepage.com/product/flower-farm-pricing-toolkit/">Get the $27 toolkit</a></div></div>';
out.innerHTML=h;
}
["ps-pr","ps-n","ps-c","ps-s","ps-l","ps-w","ps-m"].forEach(function(id){$(id).addEventListener("input",run);});
run();
})();
window.fluent_form_ff_form_instance_2_1 = {"id":"2","ajaxUrl":"https:\/\/annakatherinepage.com\/wp-admin\/admin-ajax.php","settings":{"layout":{"labelPlacement":"top","helpMessagePlacement":"with_label","errorMessagePlacement":"inline","asteriskPlacement":"asterisk-right"},"restrictions":{"denyEmptySubmission":{"enabled":false}}},"form_instance":"ff_form_instance_2_1","form_id_selector":"fluentform_2","rules":{"email":{"required":{"value":true,"message":"This field is required"},"email":{"value":true,"message":"This field must contain a valid email"}}},"debounce_time":300,"file_upload_settings":[]};
(function(){
if (!window.matchMedia || !window.matchMedia('(max-width: 781px)').matches) return;
var aff = /go\.shopmy\.us|amzn\.to|amazon\.com\/.*tag=|walmrt\.us|pxf\.io|shareasale|awin1|anrdoezrs|dpbolvw|jdoqocy|tkqlhce|kqzyfj|sjv\.io|linksynergy/i;
var root = document.querySelector('.wp-block-post-content') || document.querySelector('.entry-content');
if (!root) return;
var btns = root.querySelectorAll('a.wp-block-button__link');
var first = null;
for (var i = 0; i < btns.length; i++) { if (aff.test(btns[i].href)) { first = btns[i]; break; } }
if (!first) return;
var name = '';
var p = root.querySelector('p');
if (p) { var l = p.querySelector('a'); if (l && l.href === first.href) name = l.textContent; }
if (!name) name = first.textContent;
var bar = document.createElement('div');
bar.className = 'ak-sticky-buy';
bar.setAttribute('role', 'region');
bar.setAttribute('aria-label', 'Top pick');
var span = document.createElement('span'); span.className = 'ak-sb-name'; span.textContent = 'Top pick: ' + name.trim();
var a = document.createElement('a'); a.href = first.href; a.target = '_blank'; a.rel = 'nofollow sponsored noopener'; a.textContent = 'Shop now';
var x = document.createElement('button'); x.type = 'button'; x.setAttribute('aria-label', 'Close'); x.textContent = '×';
bar.appendChild(span); bar.appendChild(a); bar.appendChild(x);
document.body.appendChild(bar);
var closed = false;
x.addEventListener('click', function(){ closed = true; bar.classList.remove('is-on'); });
function check(){
if (closed) return;
var r = first.getBoundingClientRect();
var footer = document.querySelector('footer');
var nearEnd = footer && footer.getBoundingClientRect().top < window.innerHeight;
if (r.bottom < 0 && !nearEnd) bar.classList.add('is-on'); else bar.classList.remove('is-on');
}
window.addEventListener('scroll', check, { passive: true });
check();
})();
(function () {
var c = document.body.className;
c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
document.body.className = c;
})();
var fluentFormVars = {"ajaxUrl":"https://annakatherinepage.com/wp-admin/admin-ajax.php","forms":[],"step_text":"Step %activeStep% of %totalStep% - %stepTitle%","step_completed_text":"Completed","is_rtl":"","date_i18n":{"previousMonth":"Previous Month","nextMonth":"Next Month","months":{"shorthand":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"longhand":["January","February","March","April","May","June","July","August","September","October","November","December"]},"weekdays":{"longhand":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"shorthand":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},"daysInMonth":[31,28,31,30,31,30,31,31,30,31,30,31],"rangeSeparator":" to ","weekAbbreviation":"Wk","scrollTitle":"Scroll to increment","toggleTitle":"Click to toggle","amPM":["AM","PM"],"yearAriaLabel":"Year","firstDayOfWeek":1},"pro_version":"","fluentform_version":"6.2.17","force_init":"","stepAnimationDuration":"350","upload_completed_txt":"100% Completed","upload_start_txt":"0% Completed","uploading_txt":"Uploading","choice_js_vars":{"noResultsText":"No results found","loadingText":"Loading...","noChoicesText":"No choices to choose from","itemSelectText":"Press to select","maxItemTextSingular":"Only %%maxItemCount%% option can be added","maxItemTextPlural":"Only %%maxItemCount%% options can be added"},"input_mask_vars":{"clearIfNotMatch":false},"nonce":"2dd3002c69","file_delete_nonce":"9d8e11a42f","form_id":"2","step_change_focus":"1","has_cleantalk":"","pro_payment_script_compatible":"","token_nonce":"2a12f8bd2b"};
var fluentform_submission_messages_2 = {"file_upload_in_progress":"File upload in progress. Please wait...","javascript_handler_failed":"Javascript handler could not be loaded. Form submission has been failed. Reload the page and try again"};
var fluentform_payment_messages_2 = {"stock_out_message":"This Item is Stock Out","item_label":"Item","price_label":"Price","qty_label":"Qty","line_total_label":"Line Total","sub_total_label":"Sub Total","discount_label":"Discount","total_label":"Total","signup_fee_label":"Signup Fee","trial_label":"Trial","processing_text":"Processing...","confirming_text":"Confirming..."};
var fluentform_save_progress_messages_2 = {"copy_button":"Copy","email_button":"Email","email_placeholder":"Your Email Here","copy_success":"Copied"};
var fluentform_address_messages_2 = {"please_wait":"Please wait ...","location_not_determined":"Could not determine address from location.","address_fetch_failed":"Failed to fetch address from coordinates.","geolocation_failed":"Geolocation failed or was denied.","geolocation_not_supported":"Geolocation is not supported by this browser."};
var fluentform_gateway_messages_2 = {"request_failed":"Request failed. Please try again","payment_failed":"Payment process failed!","no_method_found":"No method found","processing_text":"Processing..."};
var fluentform_submission_messages_global = {"javascript_handler_failed":"Javascript handler could not be loaded. Form submission has been failed. Reload the page and try again"};
var fluentform_address_messages_global = {"please_wait":"Please wait ...","location_not_determined":"Could not determine address from location.","address_fetch_failed":"Failed to fetch address from coordinates.","geolocation_failed":"Geolocation failed or was denied.","geolocation_not_supported":"Geolocation is not supported by this browser."};
//# sourceURL=fluent-form-submission-js-extra
Leave a Reply