Cultivated meat is real animal meat grown from cells, without slaughter. This model estimates how much of the meat market it could win, and how fast. Every assumption is a slider.
The model in one line: everyday meat in the US, point estimates. It repeats this for every kind of meat and region (charts 1, 2, 7). The left panel starts with the key assumptions; hover or tap ? for help.
Cost of a kilo of cells against the medium price, one line per reactor design; the dot is your setting.
How the four options' shares move with cultivated's price, for the meat chosen below.
Each factor's pull for or against cultivated, compared with conventional meat.
Cultivated (blue) climbs from near zero toward its ceiling (dashed); plant-based (green) stalls.
The same shopper model, with only the product's facts changed.
Luxury products are already beatable on price but tiny; commodity meat, where the volume is, stays out of reach.
Each step below has a one-line summary; click it for the detail. Equations are in appendix A0. Numbers with a bracketed reference, like 22.4 L/kg [1], come from that source; judgement calls are labelled; everything else is computed by the model at its default settings.
The price ratio R is cultivated meat's retail price divided by the price of the conventional meat beside it: 1 means the same price, 2 means twice the price. The retail price has three parts:
“Today's cost” means Pasitka's projection for a large plant built with today's technology, not what pilot production costs now. The headline ratio uses a $12/kg benchmark for everyday meat (range $10–14); charts 1, 2 and 7 use each meat's local price.
Worked example. Medium: 22.4 × $0.63 ≈ $14/kg. Plus the plant's $9.9: $24/kg of cells. Plus the $5 markup: $29/kg in the shop ($35 for a cut). Against $12 everyday meat: R ≈ 2.4.
The floor. Cells must eat a fixed amount of amino acids, glucose and salts (about $1.7/kg [2]; the salts, buffer and vitamins in it are an assumption), and even an ideal plant costs about $6/kg to run (a judgment read from Pasitka's breakdown [1]; Humbird's independent estimate is about $14.5/kg [2], most of it a charge of 24% of the plant's cost a year): a floor of about $7.7/kg. Parity with $12 meat and a $5 markup needs $7/kg, so even at the floor R ≈ 1.06.
Uncertainty. Across the plausible ranges of the four cost inputs, the median is R ≈ 2.1 (80% range 1.6–2.6); almost no draws reach parity. The median is below 2.4 because cell efficiency can only improve on today's cells.
What moves it most: the medium price and reactor scale (chart 3), then the markup. A 25% meat tax lowers R as much as a 20% cut in every cost.
A standard discrete-choice model [12]. For each meal a shopper picks conventional meat, plant-based meat, cultivated meat, or beans and other whole foods, so shares include the bean meals. Each option gets a score that adds up its price, taste, health, whether it is real meat and whether an animal was killed. Tastes vary, so the top score doesn't always win: each option's share rises smoothly with its score (one point more means about 2.7 times as often).
Two kinds of shopper: 95% mainstream, who choose mainly on price, taste and real meat; 5% vegetarian or vegan [7], who care about slaughter and mostly eat beans.
| option | price | taste | real meat | no slaughter | health |
|---|---|---|---|---|---|
| conventional meat | 1 | 1 | yes | no | −0.1 |
| plant-based meat | 1.77× [14] | 0.8 [7] | no | yes | 0 |
| cultivated meat | R (Step 1) | 1 (slider) | yes (slider) | yes | 0 |
| beans / whole food | ~0.25× [15] | 0.3 | no | yes | +2 |
Conventional meat's small health penalty stands for antibiotics and contamination; beans are “the healthy choice”.
The central premise. Cultivated meat is animal tissue, so, unlike a veggie burger, it keeps conventional meat's main advantage with mainstream shoppers and draws its buyers from conventional meat. The premise is a slider: full credit gives ~49% at equal price, none ~10%.
Tied to data. Price sensitivity follows grocery data for meat (1% dearer, 0.9% fewer purchases [4]), made steeper for cultivated because an almost identical product sits beside it (A1). Three weights are solved so the model reproduces plant-based meat's ~1.2% share and ~89% mainstream buyers [14], plus an assumed ~6% of mainstream meals that skip meat (A4). Taste sets the scale for the rest. As a check, the same model with only the product's facts changed to plant-based milk's predicts about 15%, close to milk's share (chart 6); a weak test, since milk's facts are set by hand.
At equal price, once familiar, mainstream shoppers see two near-identical real meats and split that market: cultivated ~49%, conventional ~44% (cultivated's small edge is its slaughter-free and cleaner profile; without the health edge, ~47%). The judgement calls that move it most:
| if cultivated meat… | share at equal price |
|---|---|
| tastes as good and is seen as real meat (default) | ~49% |
| tastes a little worse (0.8) | ~26% |
| tastes noticeably worse (0.6) | ~12% |
| is judged tastier (1.1) | ~61% |
| tastes as good, and “no slaughter” matters a little (0.5) | ~59% |
| tastes as good, and “no slaughter” matters a lot (1.0) | ~68% |
| tastes as good but isn't seen as real meat | ~10% |
At first contact the model gives ~6% (Step 4). At today's price (R ≈ 2.4) it gives ~9% in the long run (US, everyday meat): price is the binding constraint.
Cultivated meat costs about the same whatever animal it copies, but conventional prices vary: in the US, chicken mince is about $5/kg, a beef steak $20, sushi-grade fish $40. So the model runs each meat at its local price and adds up by weight (closest to the climate footprint) and by value (the market). Neither counts animals: most land animals raised for meat are chickens, where cultivated does worst.
Mince, cuts and premium. Premium means a cut at least 2.5 times the species' cheapest form (wagyu, sushi-grade fish). Up the ladder, authenticity matters more (nobody misses “the real thing” in a nugget; for wagyu the breed is the product: +0.2 for mince, −0.4 for cuts, −1.5 for premium) and buyers react less to price [5] (0.8× for cuts, 0.3× for premium). The directions are documented; the values are judgement, scaled by one premium resistance slider that the Monte Carlo samples (0.5–1.5).
What comes out (chart 1, at today's cost):
Regions. Europe is easiest (9.5% by weight, 15.9% by value): dear meat, rich shoppers. China and the world average are pulled down by cheap chicken and pork; low-income regions are hardest, with cheap meat and price-sensitive shoppers (A2). Prices and mixes for low-income regions are rough (A7).
Worked example (US, everyday meat, today's price and cost held fixed): near 0% at launch, ~1% after 10 years, ~8% after 30, against a long-run ceiling of ~9%; the curve flattens around year 25.
For timing, the biggest unknown is how wary people are today: surveys range from ~5% (a cold choice experiment) to ~60% (“cultivated chicken in a restaurant”) [10]. The “novelty today” slider spans that range (~3% at −3.5, ~49% at 0, ~60% near +0.5, ~80% at +1.5). It changes how fast, not how far. Plant-based runs on the same machinery but stalls: its taste and price gaps don't fade.
A luxury price is mostly not cost: A5 wagyu or caviar is dear because of breed, origin and scarcity (economic rent). Cultivated meat can copy the meat, not the pedigree, so the model compares its cost with the product's everyday grade (farmed salmon, crossbred wagyu). A prestige core of buyers never switches: 25% by default, a proxy from the only two published splits (wild salmon, bellota ibérico).
Already cheaper: foie gras, bluefin tuna, sea urchin, wagyu, lobster, but each market is thousands to hundreds of thousands of tonnes a year. Commodity beef, pork and chicken (tens of millions of tonnes each; chart 7 uses whole-category volumes) stay out of reach at world prices. New technologies often start at the top and move down-market as costs fall [18], [19]. Foie gras stands out: unstructured, expensive, and increasingly banned on welfare grounds that don't apply to a cultivated version.
Chart 7 gives luxury products higher shares than chart 1 because it removes the prestige core and treats the rest like ordinary cuts, where chart 1 applies one large penalty to the whole category; chart 1 is the conservative view. Chart 7 assumes sale at cost, so it shows reach and impact, not profit.
Step 1, the price ratio.
\[ R \;=\; \frac{\overbrace{\iota\,\eta\,p_{\rm med}}^{\text{medium}} \;+\; \overbrace{h}^{\text{plant}} \;+\; \overbrace{k}^{\text{scaffold (cuts)}} \;+\; \overbrace{m}^{\text{markup}}}{p_c\,t} \tag{1} \]\(\iota\): litres of medium per kilo; \(\eta\): cell efficiency (1 = today's cells); \(p_{\rm med}\): medium price; \(h\): plant running cost; \(k\): scaffold (cuts only); \(m\): markup; \(p_c\): conventional price; \(t\): meat-tax multiplier. The medium cost never falls below the feedstock dissolved in it, and the cost of cells never below the floor, about $7.7/kg.
Step 2, the score and the shares.
\[ V_j \;=\; \underbrace{\alpha\ln(y_{\rm eff}-p_j) \;-\; \lambda\,(d_j)^{+} + (d_j)^{-}}_{\text{price}} \;+\; \underbrace{w^{t}(a_j-1)}_{\text{taste}} \;+\; \underbrace{w^{rt}\,b_j}_{\text{real meat}} \;+\; \underbrace{w^{s}\,g_j}_{\text{no slaughter}} \;+\; \underbrace{w^{h}\,\zeta_j}_{\text{health}} \;+\; \underbrace{\nu_j+\tau_j}_{\text{novelty, authenticity}} \tag{2} \] \[ P_j = \frac{e^{V_j}}{\sum_k e^{V_k}}, \qquad \text{share}_j = w_{\rm eth}\,P^{\rm ethical}_j + (1-w_{\rm eth})\,P^{\rm mainstream}_j \tag{3} \]Price enters twice: through the dollars it takes from income (\(p_j = R_j\,p_c\); \(y_{\rm eff}\) is an income measure, A2), and through the premium over conventional meat, \(d_j = R_j-1\), split into its positive part \((d_j)^{+}\) and negative part \((d_j)^{-}\) (at the default \(\lambda=1\) the two terms are simply \(-d_j\); A3). \(a_j\): taste (1 = as good as conventional); \(b_j\), \(g_j\): 1 if real meat, 1 if slaughter-free; \(\zeta_j\): health image. The weights \(w\) (A4) differ between the two kinds of shopper for no slaughter, real meat and health. \(\nu_j\) (novelty) and \(\tau_j\) (authenticity by tier, A5) are zero unless set.
Step 3, adding up.
\[ \text{share}_{\rm vol} = \sum_i \frac{\omega_i}{\sum_k \omega_k}\,s_i, \qquad \text{share}_{\rm val} = \sum_i \frac{p_i\,\omega_i}{\sum_k p_k\,\omega_k}\,s_i \tag{4} \]\(s_i\): cultivated's share of meat type \(i\); \(\omega_i\): that type's share of meat eaten (the listed weights sum to slightly more than 1 in some regions, hence the normalisation); \(p_i\): its local price.
Step 4, over time.
\[ \text{share}(t) = F(t)\times \text{ceiling}\big(\nu(t)\big), \qquad \nu(t) = \nu_x + (\nu_{x0}-\nu_x)\,e^{-r\,E(t)} \tag{5} \]\(F(t)\): the fraction of the market reached, a Bass curve with rates \(p_{\rm B}\) (early adopters) and \(q_{\rm B}\) (word of mouth). Novelty \(\nu\) fades from today's \(\nu_{x0}\) toward its long-run \(\nu_x\) as cumulative exposure \(E(t)\) grows, at speed \(r\); the ceiling is the Step 2 share at that novelty.
Grocery data give the price elasticity of meat as a category, \(\varepsilon \approx -0.9\) [4]: 1% dearer, 0.9% fewer purchases. Meat as a whole has no close substitute, so it is fairly insensitive. A single cultivated product does have one, conventional meat on the same shelf, so its own sensitivity is \(\kappa\) times larger: \(\varepsilon_x = \kappa\varepsilon \approx 4 \times (-0.9) = -3.6\) at today's price. The price weight \(\beta\) (the slope of the price score) is solved so the model delivers exactly that at cultivated's own price \(p_x\) and share \(s_x\), which depend on each other and are solved together:
\[ \beta=\frac{\kappa\,\varepsilon}{p_x\,(1-s_x)}+\frac{\lambda}{p_c},\qquad \alpha=-\beta\,(y_{\rm ref}-p_x) \tag{A1} \]The \(\lambda/p_c\) term hands back the part of the price response already carried by the reference-price term in Eq. (2), so \(\kappa\) sets the level of sensitivity and \(\lambda\) only its shape around parity. The price \(p_x\) is cultivated's own price at the default costs ($29/kg), computed by the cost model rather than typed in: change the default costs and it moves. Moving the cost sliders on the page changes cultivated's price, but not this calibration point.
Evidence for \(\kappa\). Van Loo, Caputo and Lusk [8] priced lab-grown meat at six levels. Their two models put its elasticity at equal price between −0.84 and −3.4. The model's implied value in the same setting (equal price, first-contact wariness) at \(\kappa=4\) is -1.5, inside that range. No experiment has priced cultivated meat at 2.4 times conventional, so the −3.6 there is an assumption (\(\kappa\varepsilon\)), checked only against the data at parity. Once shoppers are familiar with the product, the model's elasticity is about −0.8 at parity, −1.7 at \(R=1.5\) and −3.6 at today's \(R\): share falls slowly just above parity, then faster. \(\kappa\) is the most consequential demand number above parity: at today's price, \(\kappa=3\) gives about 14%, 4 about 9% and 5 about 6%. It plays the role that a nested logit's similarity parameter would play for a “real meat” nest.
The income part of the price score, \(\alpha\ln(y_{\rm eff}-p_j)\), is the Berry–Levinsohn–Pakes form [12]: the same premium is a bigger bite of a smaller income, so poorer shoppers are more sensitive to price. Taken literally, this makes poor shoppers about six times as price-sensitive as rich ones, which is too steep for food. So income is damped, \(y_{\rm eff}=y_{\rm ref}\,(y/y_{\rm ref})^{\phi}\), with \(\phi=0.5\) matching the roughly twofold gap in the data [15] (\(\phi=0\) removes income; US results don't depend on \(\phi\)). For the same product at the same price as today, that gives about 9% in the US, 4% in China and 0.8% in Nigeria. Wealth relaxes price sensitivity but doesn't erase the other differences: even a very rich shopper buys cultivated only about 18% of the time at today's price.
People judge a price against the familiar price of the conventional product, and a premium can feel like a loss [13]. The term \(-\lambda(d_j)^{+}+(d_j)^{-}\) rewards a discount at rate 1 and penalises a premium at rate \(\lambda\). The default \(\lambda=1\) is symmetric; the slider goes up to Tversky and Kahneman's 2.25. It is left symmetric by default for three reasons: it barely moves the result once \(\beta\) is re-fitted (at today's price, 9% at \(\lambda=1\) vs 9% at 2.25); cultivated data can't identify it; and measured loss aversion largely reflects differences in price sensitivity between shoppers (Bell and Lattin, 2000), which \(\kappa\) already carries.
Fixed from data: plant-based meat's price premium (+77% [14]) and taste (0.8 [7]), and the ethical share (5% [7]). Solved: the mainstream real-meat weight and the two health weights, so that the model reproduces (i) the ~89% of plant-based buyers who are mainstream [14], (ii) ~6% of mainstream meals skipping meat by choice, and (iii) the ethical shoppers' small plant-based share. Together these give plant-based meat its observed ~1.2%. Moving the ethical share, \(\lambda\), \(\kappa\) or income re-solves them live, so plant-based stays anchored.
Only differences between scores matter in this kind of model, so one weight has to set the scale. Taste does (\(w^t = 5\)), anchored to willingness-to-pay studies that rank taste first (taste about twice health and three times safety; Malone and Lusk 2017). Each weight slider shows its size relative to taste. The solved mainstream health weight comes out at 0.17× taste, lighter than the ~0.5× in those studies. Beans' appeal is carried by their health score (+2) times a solved weight, rather than by a free constant; only the product of the two is pinned down by the data. Without it, plant-based meat would roughly triple, with mostly vegetarian buyers, contradicting the data.
| weight | symbol | mainstream | ethical | how it is set |
|---|---|---|---|---|
| price | α, β | β = -0.053 α = 4,517 (shared by both) | DERIVED from the price-sensitivity target εx = κε = 4×(-0.9) = -3.6 (A1), at cultivated’s own price px = $29/kg and share sx = 9%: β = εx/[px(1−sx)] + λ/pc = -3.6/[29·0.91] + 1/12 = -0.053; then α = −β(yref−px) = 4,517 (large only because differences in log income are tiny). px is computed from the default costs, not typed in; the page’s cost sliders change cultivated’s price but not this calibration point. | |
| taste | wt | 5.00 | 5.00 | FIXED scale: only differences between scores matter, so taste sets the scale for every other weight (anchored to willingness-to-pay studies). Expert slider. |
| no slaughter | ws | 0.00 | 4.0 | mainstream = SLIDER (θ, default 0); ethical = FIXED assumption (large: it is what defines the ethical shopper) |
| real meat | wrt | 2.24 | 0.00 | mainstream = SOLVED so ~89% of plant-based buyers are mainstream; ethical = FIXED ≈0 (they choose on “no slaughter”, not “is it meat”) |
| health | wh | 0.85 | 1.81 | both SOLVED: the mainstream meatless rate (~6%) and the ethical shoppers’ plant-based share |
| loss aversion | λ | 1.00 | 1.00 | SLIDER, default 1 = symmetric (A3) |
| segment mix | weth | — | 5% | SLIDER (Gallup: 5% vegetarian or vegan); moving it re-solves the calibration |
They are separate because they behave differently: a cultivated nugget faces novelty but no authenticity demand; a cultivated wagyu faces both. A fourth attribute, health image (\(\zeta\)), is separate again: it is 0 by default because surveys find both a “clean meat” draw and an “ultra-processed” aversion, and it is sampled between −0.5 and +0.5.
The tier ladder in formulas, with premium resistance \(\rho\) scaling both the authenticity offset and the elasticity multiplier \(\psi\):
\[ \tau_{\rm tier}=\rho\,\tau^0_{\rm tier},\qquad \varepsilon_{\rm tier}=\big(1+\rho\,(\psi^0_{\rm tier}-1)\big)\,\varepsilon,\qquad (\tau^0,\psi^0)=\begin{cases}(+0.2,\ 1.0)&\text{mince}\\ (-0.4,\ 0.8)&\text{cut}\\ (-1.5,\ 0.3)&\text{premium}\end{cases} \tag{A5} \]“Premium” is defined per species (at least 2.5 times the species' cheapest form), so every species can have one and a product doesn't change tier between regions. Wagyu and sushi-grade fish are well attested; organic chicken and heritage pork are real but smaller, so they carry little volume.
A product's headline price splits into the accessible price and the rent, and cultivated's price ratio is taken against the accessible price only (Rosen's hedonic pricing [16]):
\[ p^{\rm auth} = p^{\rm base} + \underbrace{(p^{\rm auth}-p^{\rm base})}_{\text{rent}},\qquad R = \frac{c_x}{p^{\rm base}},\qquad c_x = c_{\rm bio} + k\,[\text{cut}] + m \tag{A6a} \]A prestige core, a share \(\chi\) of the category's volume \(Q\), pays the rent and never switches. Luxury sellers keep their price and give up volume rather than discount, the classic Veblen pattern [17]. Only the rest is reachable, and cultivated wins a share \(s\) of it from the same shopper model as Step 2, using the mince or cut authenticity setting (the premium tier is the prestige core, already removed):
\[ Q^{\rm reach} = (1-\chi)\,Q,\qquad s = S\big(R;\ \tau_{\rm mince\ or\ cut}\big),\qquad D = s\cdot Q^{\rm reach}\quad(\text{kt/yr displaced}) \tag{A6b} \]Zones: about equal if the accessible price is within $3 of cultivated's cost; cheaper now if above it; only at the floor if above the floor cost; otherwise never on price. A single-grade product (no rent, \(\chi=0\)) reproduces chart 1's share exactly, so the two views agree. Authenticity is counted once: as removed volume for the prestige grade, and through the mince or cut setting for the accessible grade. Limits: no margin or profit is modelled, the shopper model is calibrated on meat (so it is indicative for luxury and seafood), and each product is treated in isolation. The accessible and headline prices are sourced per product (June 2026 retail and wholesale; hover a bubble for the basis); shark fin's price is an estimate.
Conventional retail prices by region and tier, the \(p_c\) in Eq. (1):
Prices: GlobalProductPrices (retail, January 2026), cross-checked against USDA ERS and BLS for the US. Volumes: USDA ERS per-capita availability (US); OECD-FAO Agricultural Outlook 2024 and FAO food balance sheets (Europe, China, world). The mix of meats differs by region: China is two-thirds pork, the US about half poultry, Europe pork-led and shifting to poultry. Prices and mixes for India, Brazil and Nigeria are rough.
The markup is added per kilo, not as a percentage. Much of it (processing, cold chain, retail handling) is genuinely per kilo, and conventional meat's farm-to-retail spread (USDA ERS, about $3–6/kg for ground beef) sets its size. But this is a modelling choice rather than a measurement, and a percentage markup would change the parity arithmetic. That is why the markup has its own slider.
Isn't ~49% at equal price just assumed? It follows from the model's symmetry: two options that mainstream shoppers see as equivalent split that market. The sliders show how it moves if they are not equivalent (Step 2 table).
Why not a nested logit? The shared real-meat attribute and the two kinds of shopper already make cultivated take its share almost entirely from conventional meat, which is what a nest would do, with fewer unobservable parameters.
Is there really no fitted constant? Almost none. Beans' appeal is a labelled attribute (health) times a solved weight, rather than a free constant, but its position (+2) is assumed; only the product is identified (A4).
Isn't premium resistance just novelty again? No. Novelty is the same for every product and fades; authenticity depends on the tier, is permanent, and comes with lower price sensitivity (A5).
The experiment behind the ~5% also had plant-based at 23% at equal price. Why doesn't the model? The model is fitted to what plant-based meat actually sells (~1.2%), and predicts about 10% for it among mainstream shoppers at equal price and taste. Hypothetical choice experiments tend to overstate adoption of new products; the model uses that experiment only for cultivated meat's starting wariness and price sensitivity.
Why no habit term? Habit can't be separated from preference without panel data (Heckman [13]); in this model it lives in the slow rollout and fading novelty of Step 4.
Why is loss aversion symmetric by default? See A3.
Every slider, its symbol, default and range, where it enters the equations, and its source. The full datasheet, with every number and its uncertainty range, is inputs.py.
Full results: RESULTS.md. Code and tests: github.com/PabloAMC/Cultivated_meat.