<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SU</title>
    <description>The latest articles on DEV Community by SU (@member_6dc4ff30).</description>
    <link>https://dev.to/member_6dc4ff30</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4225917%2F40a27506-9fce-4d48-b0dd-a34b8d800aa9.png</url>
      <title>DEV Community: SU</title>
      <link>https://dev.to/member_6dc4ff30</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/member_6dc4ff30"/>
    <language>en</language>
    <item>
      <title>Marketplace fees are step functions: 5 prices where a higher price pays you less</title>
      <dc:creator>SU</dc:creator>
      <pubDate>Wed, 04 Nov 2026 10:20:41 +0000</pubDate>
      <link>https://dev.to/member_6dc4ff30/marketplace-fees-are-step-functions-5-prices-where-a-higher-price-pays-you-less-dk</link>
      <guid>https://dev.to/member_6dc4ff30/marketplace-fees-are-step-functions-5-prices-where-a-higher-price-pays-you-less-dk</guid>
      <description>&lt;p&gt;Marketplace fee schedules look like smooth percentages. They are not. They are step functions, and a step function has a property that breaks the usual pricing instinct: raising the input can lower the output.&lt;/p&gt;

&lt;p&gt;I work on &lt;a href="https://www.sellerutility.com/about" rel="noopener noreferrer"&gt;SellerUtility&lt;/a&gt;, a tool for Amazon and Walmart sellers, and we wanted to know how often that happens. So we did the boring thing: run a fee engine over every cent from $3.00 to $60.00 and look for places where one more cent of price pays the seller less.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sweep
&lt;/h2&gt;

&lt;p&gt;Net payout per unit is &lt;code&gt;price - referral fee - fulfillment fee&lt;/code&gt;. The idea fits in a few lines (a sketch of the approach, not our production code):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_cliffs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# net(price_in_cents) -&amp;gt; payout in cents for one fixed category/box
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;net&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nf"&gt;net&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We ran that shape of check across 499 scenarios (every fee category, four packed-unit boxes per marketplace) on Amazon's 2026 FBA cards and Walmart's current fee schedules. The result was 646 cliffs. The surprising part is where they sit.&lt;/p&gt;

&lt;h2&gt;
  
  
  646 cliffs, 5 prices
&lt;/h2&gt;

&lt;p&gt;Every cliff falls on one of five prices: &lt;strong&gt;$10.00, $10.01, $15.01, $20.01 and $50.01.&lt;/strong&gt; That is a consequence of how the schedules are built: fulfillment fees change band at fixed price thresholds, and some referral rates step up on the &lt;em&gt;whole&lt;/em&gt; price once you cross a line.&lt;/p&gt;

&lt;p&gt;A few concrete cases from the data (2026 non-peak card, rate-card arithmetic):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A small standard, 4 oz FBA item nets &lt;strong&gt;$0.95 less at $10.00 than at $9.99&lt;/strong&gt;, in all 36 fee categories.&lt;/li&gt;
&lt;li&gt;In Beauty, Health and Personal Care the same item keeps $6.61 at $9.99, $5.66 at $10.00 and $4.97 at $10.01. It does not pay as much as $9.99 again until $11.94, so everything from $10.00 to $11.93 is a dead zone.&lt;/li&gt;
&lt;li&gt;The deepest cliff we found is &lt;strong&gt;-$1.39 at $20.01&lt;/strong&gt; in Clothing and Accessories, where the referral rate goes from 10% to 17% of the whole price.&lt;/li&gt;
&lt;li&gt;Walmart inverts one of them. A 0.5 lb Beauty item on WFS nets $4.74 at $9.99 and $5.75 at $10.00, because the $1.00 WFS surcharge applies only below $10. There, $10.00 is a jump &lt;em&gt;up&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full write-up, with a chart per category and a CSV, is in &lt;a href="https://www.sellerutility.com/resources/amazon-walmart-fee-cliffs-2026" rel="noopener noreferrer"&gt;Amazon and Walmart fee cliffs 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you write pricing code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Never assume monotonic payout.&lt;/strong&gt; If your repricer or margin model treats "higher price, higher profit" as true, it will happily walk into a dead zone. Test it with a property check like the one above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluate fees at the candidate price, not the current one.&lt;/strong&gt; A fee computed once at today's price and reused is wrong the moment the candidate lands on the other side of a threshold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version the rate card.&lt;/strong&gt; Amazon's peak card (October 15 onward) changes the numbers, so a cliff table without a card date is not reproducible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mind the boundary operator.&lt;/strong&gt; "Under $10" and "$10 or less" are different thresholds, and different fee lines can use different ones. See the &lt;a href="https://www.sellerutility.com/resources/walmart-wfs-under-10-surcharge" rel="noopener noreferrer"&gt;Walmart WFS surcharge under $10&lt;/a&gt; breakdown for how that plays out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you just want to check a specific product rather than read about it, the &lt;a href="https://www.sellerutility.com/resources/amazon-fba-calculator" rel="noopener noreferrer"&gt;Amazon FBA fee calculator&lt;/a&gt; shows the payout at a given price, and the &lt;a href="https://www.sellerutility.com/resources/amazon-fba-fees-2026" rel="noopener noreferrer"&gt;Amazon FBA fees 2026&lt;/a&gt; and &lt;a href="https://www.sellerutility.com/resources/walmart-seller-fees-2026" rel="noopener noreferrer"&gt;Walmart seller fees 2026&lt;/a&gt; guides cover the schedules themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;These are numbers from the published rate cards, not from a live seller account. Fees change, so check the current card before relying on any single figure. The sweep also does not cover every cost a seller pays, such as storage, returns or advertising.&lt;/p&gt;

&lt;p&gt;Curious whether other people have hit this in their own pricing code: did you model fees as a step function from the start, or find out the hard way?&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>amazon</category>
      <category>pricing</category>
      <category>algorithms</category>
    </item>
  </channel>
</rss>
