Free profit check-up for Etsy, Shopify and Amazon sellers: fees, sales, ads, shipping, plans, rates.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Works out the ROAS at which an Etsy shop's Etsy Ads pay for themselves (break-even ROAS = order ÷ what an ad order keeps after Etsy's fees and costs), the most an ad can cost per sale, and, with the shop's ROAS, what the ads gain or lose a month. It fits a seller who asks whether Etsy Ads are worth it, what ROAS they need, or whether to turn ads off. Takes the item price, shipping charged, materials, label cost, and the daily budget or exact monthly spend; packaging is optional ($1 typical, flagged) and ROAS from the Etsy Ads page adds the monthly gain or loss and the fix. Returns the margin, break-even ROAS, ad sales and earnings, the monthly gain or loss and, when the ads lose money, the fix and what it's worth. US dollars; dated Etsy rules with sources. Free, no sign-in. Takes numbers only; nothing is stored.
Typical item price, US dollars, before shipping.
The shipping label, US dollars.
Materials and supplies per item, US dollars.
Return on ad spend, last 30 days (Etsy Ads page): ad revenue ÷ ad spend, such as 1.5. Left out: only the break-even is returned.
Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default.
Etsy Ads daily budget, US dollars, $1 or more (Etsy's smallest; assumed fully spent, 30 days a month). Or send adsMonthlySpend.
Exact Etsy Ads spend last 30 days, US dollars. Or send adsDailyBudget.
What the buyer pays for shipping, US dollars (0 if free).
Works out the ROAS at which an Etsy shop's Etsy Ads pay for themselves (break-even ROAS = order ÷ what an ad order keeps after Etsy's fees and costs), the most an ad can cost per sale, and, with the shop's ROAS, what the ads gain or lose a month. It fits a seller who asks whether Etsy Ads are worth it, what ROAS they need, or whether to turn ads off. Takes the item price, shipping charged, materials, label cost, and the daily budget or exact monthly spend; packaging is optional ($1 typical, flagged) and ROAS from the Etsy Ads page adds the monthly gain or loss and the fix. Returns the margin, break-even ROAS, ad sales and earnings, the monthly gain or loss and, when the ads lose money, the fix and what it's worth. US dollars; dated Etsy rules with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| roas | number | Return on ad spend, last 30 days (Etsy Ads page): ad revenue ÷ ad spend, such as 1.5. Left out: only the break-even is returned. |
| itemPrice* | number | Typical item price, US dollars, before shipping. |
| labelCost* | number | The shipping label, US dollars. |
| materials* | number | Materials and supplies per item, US dollars. |
| packaging | any | Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default. |
| adsDailyBudget | number | Etsy Ads daily budget, US dollars, $1 or more (Etsy's smallest; assumed fully spent, 30 days a month). Or send adsMonthlySpend. |
| adsMonthlySpend | number | Exact Etsy Ads spend last 30 days, US dollars. Or send adsDailyBudget. |
| shippingCharged | number | What the buyer pays for shipping, US dollars (0 if free). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice",
"materials",
"labelCost"
],
"properties": {
"roas": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Return on ad spend, last 30 days (Etsy Ads page): ad revenue ÷ ad spend, such as 1.5. Left out: only the break-even is returned."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "Typical item price, US dollars, before shipping."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "The shipping label, US dollars."
},
"materials": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Materials and supplies per item, US dollars."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"adsDailyBudget": {
"type": "number",
"maximum": 10000,
"minimum": 1,
"description": "Etsy Ads daily budget, US dollars, $1 or more (Etsy's smallest; assumed fully spent, 30 days a month). Or send adsMonthlySpend."
},
"adsMonthlySpend": {
"type": "number",
"maximum": 300000,
"minimum": 0.01,
"description": "Exact Etsy Ads spend last 30 days, US dollars. Or send adsDailyBudget."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping, US dollars (0 if free)."
}
},
"additionalProperties": false
}Works out the ROAS (ad revenue ÷ ad spend, as Meta or Google reports it) at which Facebook, Instagram or Google ads pay for themselves, when the ad sends buyers to a Shopify store, an Etsy listing or an Amazon listing, with that platform's own fees on the order. Break-even ROAS = order ÷ what one ad order keeps after the platform's fees, product, label, packaging and refunds; that amount is also the most an ad can cost per order. It fits a seller who asks what ROAS they need, why ads with a ROAS of 3 still lose money, or whether to pause Meta or Google ads. Takes the item price, product cost and label; optionally the platform (shopify default), shipping charged, packaging ($1 typical, flagged), the refund share, and the platform's own field (Shopify plan, Amazon category and fulfillment fee). The monthly ad spend with the reported ROAS or ad revenue adds the monthly gain or loss and the fix; all orders a month check the ad platform's count against the seller's own orders. Returns the order line by line, what an ad order keeps, the margin, the break-even ROAS, and with spend the monthly gain or loss. Says that Meta and Google count purchases with their own attribution windows, so their ROAS can differ from the store's own orders. US dollars; dated rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| roas | number | The ROAS the ad platform reports (Meta Ads Manager or Google Ads, last 30 days): ad revenue ÷ ad spend, as a plain number such as 2.5. Google shows ROAS as a percent: 250% is 2.5. Or send adRevenue with adSpendMonthly. Left out: only the break-even is returned. |
| category | string | Amazon only: the referral category, or not-sure. Left out: Everything Else (15%), flagged. |
| platform | string |
Works out the ACoS (ad spend ÷ the sales the ads bring) at which Amazon Sponsored Products pay for themselves: what a unit an ad brings keeps before the ad (after the referral fee, the FBA fee estimate or the label and packaging, storage and the landed cost) as a share of what the buyer pays. Gives it outside peak season and in peak (October 15 to January 14), when the FBA peak fee lowers it. It fits a seller who asks what ACoS they need, whether their Amazon ads pay, or what to bid. Takes the price, category, fba or fbm, the packed size and weight bands or the packed dimensions (FBA) or shipping charged (FBM), and the landed cost. Optional: the monthly ad spend with the ACoS (or the ad sales) for the monthly gain or loss and the fix, and the conversion rate for the highest cost per click that pays. Amazon publishes no ACoS benchmark: the seller's own break-even is the test. The FBA fee and storage are estimates (estimate: true); Amazon's Fee Preview shows a seller's real fee. Assumes the Professional plan. Dated rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| acos | number | ACoS, last 30 days (Campaign Manager): ad spend ÷ the sales the ads brought, as a fraction (0.3 is 30%). Or send adSales with adSpend. |
| price* | number | The selling price on Amazon, US dollars. |
| packed | object | The packed size and weight, as Amazon measures it: makes the FBA estimate and the size and weight checks exact to the rate card. |
| adSales | number | Sales the ads brought, last 30 days, US dollars (Campaign Manager). Send with adSpend; the ACoS is adSpend ÷ adSales. |
Works out Amazon's fees on one unit at a price: the referral fee for the category (official, with the $0.30 minimum where the category has one), the $1.80 media closing fee (official), and for FBA an estimate of the fulfillment fee from Amazon's 2026 rate cards by size tier and weight, with the 3.5% fuel and logistics surcharge, and the peak-season fee from October 15 to January 14. It fits a seller who asks what Amazon takes on a sale, what FBA costs for an item, whether a price sits just over a fee line, or whether FBA or shipping it themselves costs less. Takes the price, category, fba or fbm, and for FBA the packed size and weight bands (or the packed dimensions); for FBM, the shipping the buyer pays. Or takes both (with packed, labelCost and, optionally, packaging, minutesPerOrder with hourlyValue, unitsPerMonth, inboundSplit and freightToAmazon) and compares Amazon shipping it with the seller shipping it for the same item, outside peak and from October 15 to December 31: each side's costs and what's left per unit, storage from the packed size, monthly totals, and the label + packaging + time where the answer flips. Assumes the Professional selling plan (the Individual plan adds $0.99 an item). Returns each fee, the total outside and in peak, what's left, and the price lines where a fee steps; a line whose reading Amazon doesn't confirm is marked verified: false. The FBA figure is estimate: true; Amazon's Fee Preview shows a seller's real fee. Dated rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| price* | number | The selling price on Amazon, US dollars. |
| packed | object | The packed size and weight, as Amazon measures it: makes the FBA estimate exact to the rate card (with dimensional weight). Required with both: it can change which side leaves more, and gives the storage (cubic feet). |
Works out the billable weight of one box with USPS (Priority Mail, Ground Advantage), UPS (Daily Rates and Retail Rates) and FedEx, from its outside size in inches and its actual weight, with each carrier's 2026 dimensional weight rules: sides rounded up to whole inches, cubic inches ÷ the divisor (139 for USPS since July 12, 2026, only for boxes over 1 cubic foot; UPS 139 Daily, 166 Retail; FedEx 139), rounded up to a pound, and the larger of that and the actual weight. It fits a seller who asks why a label cost more than the weight suggests, whether a box is too big, what dimensional weight a box has, or whether a smaller box would bill less. Takes lengthIn, widthIn, heightIn and weightLb or weightOz; optionally otherBox (a second box size) to compare. UPS and FedEx bill a large box (over 96 in long or over 130 in length plus girth) at least 90 lb; USPS prices by weight up to 108 in length plus girth (Ground Advantage commercial takes up to 130 in at a flat oversized price), and its row shows no billable weight past that; a box over 165 in length plus girth is refused. Returns per carrier the size weight, the billable weight, whether it bills on actual or size weight, and the largest box that still bills on the actual weight; USPS Ground Advantage cubic fit as information; warnings; and notes. No label prices (they depend on zone and account); divisors can differ by account. Dated carrier rules with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| widthIn* | number | Width, inches, measured on the outside of the box (decimals are fine: 15.2). |
| heightIn* | number | Height, inches, measured on the outside of the box (decimals are fine: 15.2). |
| lengthIn |
Runs the free profit check-up for an Etsy shop, a Shopify store or an Amazon seller. Returns the grade (a word such as Watch, with level 1 Healthy to 5 Losing money), what one order (Amazon: one unit) and the month keep after fees, ads and costs, the loss total, and the top 3 losses, each with its fix and what it's worth a month at the seller's numbers if orders hold. It fits a seller who asks where their money goes, whether their shop is healthy, or what to fix first. Takes platform (etsy is the default) and that platform's Quiz v1 answers; each field says what it takes. Bands and "not-sure" are accepted: every default used is listed (isDefault). There may be no grade yet: with too few answers, level is null, word is "Not enough answers yet", and grade.missing lists the answers a grade needs; losses found still show. Amazon: fulfillment, storage and returns dollars are estimates from Amazon's 2026 rates for the size and stock given (estimate: true, in estimatedLeakTotal, apart from leakTotal); a typed fbaFee from Fee Preview makes that fee the seller's own. Money is US dollars; shares are fractions (0.1 is 10%). Every result carries the dated rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
No arguments.
{
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"orders",
"itemPrice",
"shippingCharged",
"labelCost",
"tenK",
"etsyAds"
],
"properties": {
"roas": {
"anyOf": [
{
"type": "number",
"maximum": 100,
"minimum": 0
},
{
"enum": [
"under-1",
"1-1.9",
"2-2.9",
"3-4.9",
"5-plus"
],
"type": "string"
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "Etsy Ads ROAS, last 30 days (Etsy Ads page): a number, a band, or not-sure. Only when the shop runs ads."
},
"tenK": {
"enum": [
"yes",
"no-offsite-on",
"no-opted-out",
"not-sure"
],
"type": "string",
"description": "Has the shop sold $10,000 or more in any 12 months? yes (Offsite Ads 12% for life), no-offsite-on (15%, can opt out), no-opted-out (no Offsite fee), not-sure (estimated from orders × price)."
},
"deeper": {
"type": "object",
"properties": {
"refunds": {
"type": "object",
"required": [
"outcome"
],
"properties": {
"outcome": {
"enum": [
"back-buyer-pays-return",
"back-i-pay-return",
"buyer-keeps",
"mixed"
],
"type": "string",
"description": "What usually happens on a refund."
},
"perMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "Refunds in a typical month, as a number. Or send frequency."
},
"frequency": {
"enum": [
"rarely",
"sometimes",
"often"
],
"type": "string",
"description": "How often: rarely (1 in 50), sometimes (1 in 20), often (1 in 10). Or send perMonth."
}
},
"description": "Refunds: send frequency or perMonth, and outcome.",
"additionalProperties": false
},
"hourlyPay": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "The hourly pay the seller wants for their time, US dollars. Needs minutesPerItem."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"offsiteShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-5",
"5-14",
"15-24",
"25-plus"
],
"type": "string"
}
],
"description": "Share of sales from Offsite Ads (Marketing > Offsite Ads): a fraction, or a band. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default."
},
"discountDepth": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"none",
"up-to-10",
"11-20",
"21-30",
"over-30"
],
"type": "string"
}
],
"description": "Typical discount: a fraction (0.15), or a band."
},
"discountShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"a-few",
"some",
"many"
],
"type": "string"
}
],
"description": "Share of orders that use a discount: a fraction, or a band. Needed when discountDepth isn't none or 0."
},
"minutesPerItem": {
"anyOf": [
{
"type": "number",
"maximum": 6000,
"minimum": 1
},
{
"enum": [
"under-15",
"15-44",
"45-90"
],
"type": "string"
}
],
"description": "Minutes to make and pack one item: a number, or a band."
},
"freeShippingShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"none",
"1-in-4",
"half",
"3-in-4",
"all"
],
"type": "string"
}
],
"description": "Share of orders that ship free: a fraction (0.25), or a band."
}
},
"description": "Optional go-deeper answers; each one sharpens the result.",
"additionalProperties": false
},
"orders": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 1
},
{
"enum": [
"1-10",
"11-30",
"31-75",
"76-150",
"151-300"
],
"type": "string"
}
],
"description": "Orders in a typical month: a number from 1 to 100,000 (Shop Manager > Stats > Orders), or a band. Over 300: send the number."
},
"etsyAds": {
"enum": [
"no",
"yes",
"1-4",
"5-14",
"15-24",
"25-plus"
],
"type": "string",
"description": "Etsy Ads daily budget: no, a band (dollars a day), or yes with adsDailyBudget or adsMonthlySpend. 25-plus needs adsDailyBudget."
},
"platform": {
"type": "string",
"const": "etsy",
"default": "etsy",
"description": "etsy (the default when left out)."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "Typical item price in US dollars, before shipping (the item sold most)."
},
"labelCost": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "What the shipping label costs, US dollars, or not-sure (shipping is then treated as breaking even and shown as couldn't check)."
},
"materials": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Materials and supplies for one item, US dollars. Or send materialsShare when the seller isn't sure."
},
"adsDailyBudget": {
"type": "number",
"maximum": 10000,
"minimum": 0.01,
"description": "Etsy Ads daily budget, US dollars (assumed fully spent, 30 days a month)."
},
"materialsShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-20",
"20-35",
"35-50",
"over-50"
],
"type": "string"
}
],
"description": "When the seller isn't sure of materials: the share of the price they take, a fraction or a band."
},
"adsMonthlySpend": {
"type": "number",
"maximum": 300000,
"minimum": 0.01,
"description": "Exact Etsy Ads spend last 30 days, US dollars. Wins over the daily budget."
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping on a typical order, US dollars (0 if free)."
},
"targetProfitPerOrder": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "Profit per order the seller wants on top of costs, US dollars (used by the price fix when orders lose money). Default 0."
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"platform",
"orders",
"orderValue",
"shippingCharged",
"labelCost",
"plan",
"billing",
"payments",
"ads"
],
"properties": {
"ads": {
"enum": [
"none",
"yes",
"under-300",
"300-999",
"1000-2999",
"3000-plus"
],
"type": "string",
"description": "Ads a month (Meta, Google, TikTok): none, a band (US dollars a month), or yes with adsMonthlySpend. 3000-plus needs adsMonthlySpend."
},
"plan": {
"enum": [
"basic",
"grow",
"advanced",
"plus",
"starter",
"not-sure"
],
"type": "string",
"description": "The plan (Settings > Plan), or not-sure (plan fit and billing then can't be checked)."
},
"roas": {
"anyOf": [
{
"type": "number",
"maximum": 100,
"minimum": 0
},
{
"enum": [
"under-1.5",
"1.5-2.49",
"2.5-3.99",
"4-plus"
],
"type": "string"
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "Sales from Shopify (not Ads Manager) ÷ ad spend, last 30 days: a number, a band, or not-sure. Only when the store runs ads."
},
"deeper": {
"type": "object",
"properties": {
"appBill": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 0
},
{
"enum": [
"under-50",
"50-149",
"150-299"
],
"type": "string"
}
],
"description": "The monthly app bill: US dollars, or a band. $300 or more: send the dollars."
},
"refunds": {
"type": "object",
"required": [
"outcome"
],
"properties": {
"outcome": {
"enum": [
"back-buyer-pays-return",
"back-i-pay-return",
"buyer-keeps",
"mixed"
],
"type": "string",
"description": "What usually happens on a refund."
},
"perMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "Refunds in a typical month, as a number. Or send frequency."
},
"frequency": {
"enum": [
"rarely",
"sometimes",
"often"
],
"type": "string",
"description": "How often: rarely (1 in 50), sometimes (1 in 20), often (1 in 10). Or send perMonth."
},
"returnLabel": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "What a return label costs the store, US dollars. Default: what the outbound label costs."
},
"unsellablePerMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "Returned items a month that can't be resold."
}
},
"description": "Refunds and returns: send frequency or perMonth, and outcome.",
"additionalProperties": false
},
"packaging": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Packaging per order, US dollars. Left out: not counted, and flagged."
},
"appsUnproven": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 0
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "Of the app bill, US dollars a month for apps the seller can't tie to sales or time saved, or not-sure. Needs appBill."
},
"foreignShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"none",
"under-5",
"5-14",
"15-24",
"25-plus"
],
"type": "string"
}
],
"description": "Share of sales paid in another currency: a fraction, or a band."
},
"freeShippingShareOver": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"none",
"1-in-4",
"half",
"3-in-4",
"all"
],
"type": "string"
}
],
"description": "Share of orders at or over the threshold: a fraction, or a band."
},
"freeShippingThreshold": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "The free-shipping threshold, US dollars. Needs freeShippingShareOver."
},
"chargebacksLostPerMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "Chargebacks lost in a typical month."
}
},
"description": "Optional go-deeper answers; each one sharpens the result and adds a check.",
"additionalProperties": false
},
"orders": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 1
},
{
"enum": [
"1-30",
"31-100",
"101-300",
"301-1000"
],
"type": "string"
}
],
"description": "Orders in a typical month (Analytics > Orders): a number, or a band. Over 1,000: send the number."
},
"billing": {
"enum": [
"monthly",
"yearly",
"not-sure"
],
"type": "string",
"description": "How the plan is paid, or not-sure."
},
"payments": {
"enum": [
"shopify-payments",
"another",
"both",
"not-sure"
],
"type": "string",
"description": "How card payments arrive (Settings > Payments): shopify-payments, another (for example Stripe or Square), both, or not-sure (the third-party fee checks then can't run)."
},
"platform": {
"type": "string",
"const": "shopify",
"description": "shopify, for a store on the seller's own Shopify site."
},
"labelCost": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "What the shipping label costs, US dollars, or not-sure (shipping is then treated as breaking even and shown as couldn't check)."
},
"orderValue": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "A typical order before shipping and tax, US dollars (average order value)."
},
"productCost": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "What the products in that order cost the seller (COGS), US dollars. Or send productCostShare when not sure."
},
"targetMargin": {
"type": "number",
"maximum": 0.9,
"minimum": 0,
"description": "The margin the seller wants on each order after every cost, a fraction (0.2 is 20%), for the target price."
},
"adsMonthlySpend": {
"type": "number",
"maximum": 1000000,
"minimum": 0.01,
"description": "Ad spend a month, US dollars. Wins over the band."
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping on a typical order, US dollars (0 if free)."
},
"productCostShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-20",
"20-35",
"35-50",
"over-50"
],
"type": "string"
}
],
"description": "When the seller isn't sure of product cost: its share of the order, a fraction or a band."
},
"otherProcessorCents": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "The other card company's fixed fee per sale, in cents (30 is 30¢). Send with otherProcessorPercent."
},
"shopifyPaymentsShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "With both: the share of sales Shopify Payments handles (Shop Pay, local methods), a fraction. Left out: half, flagged."
},
"otherProcessorPercent": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "The other card company's rate as a percent (2.9 is 2.9%). Send with otherProcessorCents. Left out: 2.9% + 30¢, flagged."
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"platform",
"units",
"price",
"category",
"fulfillment",
"plan",
"ppc"
],
"properties": {
"ppc": {
"enum": [
"none",
"yes",
"under-500",
"500-1999",
"2000-4999",
"5000-plus"
],
"type": "string",
"description": "Sponsored Products a month: none, a band (US dollars a month), or yes with ppcMonthlySpend. 5000-plus needs ppcMonthlySpend."
},
"acos": {
"anyOf": [
{
"type": "number",
"maximum": 10,
"exclusiveMinimum": 0
},
{
"enum": [
"under-20",
"20-34",
"35-49",
"50-plus"
],
"type": "string"
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "ACoS, last 30 days (Campaign Manager): a fraction (0.3 is 30%), a band, or not-sure. Only when the seller runs Sponsored Products."
},
"plan": {
"enum": [
"professional",
"individual",
"not-sure"
],
"type": "string",
"description": "professional ($39.99 a month), individual ($0.99 an item), or not-sure."
},
"price": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The selling price on Amazon, US dollars."
},
"today": {
"type": "string",
"pattern": "^20(2[6-9]|[3-9]\\d)-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
"maxLength": 10,
"description": "Today's date, YYYY-MM-DD: picks the storage season and the peak window (October 15 to January 14). Default: today in Los Angeles."
},
"units": {
"anyOf": [
{
"type": "number",
"maximum": 1000000,
"minimum": 1
},
{
"enum": [
"1-40",
"41-150",
"151-500",
"501-1500",
"1501-5000"
],
"type": "string"
}
],
"description": "Units sold in a typical month (Business Reports > Sales Dashboard > Units Ordered): a number, or a band. Over 5,000: send the number."
},
"deeper": {
"type": "object",
"properties": {
"packed": {
"type": "object",
"required": [
"lengthIn",
"widthIn",
"heightIn",
"weightOz"
],
"properties": {
"widthIn": {
"type": "number",
"maximum": 200,
"description": "Width, inches, packed.",
"exclusiveMinimum": 0
},
"heightIn": {
"type": "number",
"maximum": 200,
"description": "Height, inches, packed.",
"exclusiveMinimum": 0
},
"lengthIn": {
"type": "number",
"maximum": 200,
"description": "Length, inches, packed.",
"exclusiveMinimum": 0
},
"weightOz": {
"type": "number",
"maximum": 4800,
"description": "Weight, ounces, packed (16 oz is 1 lb).",
"exclusiveMinimum": 0
}
},
"description": "The packed size and weight, as Amazon measures it: makes the FBA estimate and the size and weight checks exact to the rate card.",
"additionalProperties": false
},
"coupons": {
"type": "object",
"required": [
"runsPerMonth",
"discount",
"share"
],
"properties": {
"share": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of units sold with the coupon."
},
"discount": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "The coupon discount, a fraction of the price."
},
"runsPerMonth": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Coupon runs a month."
}
},
"description": "Coupons.",
"additionalProperties": false
},
"inbound": {
"type": "object",
"required": [
"split"
],
"properties": {
"split": {
"enum": [
"minimal",
"partial",
"optimized"
],
"type": "string",
"description": "How stock is split across Amazon's inbound locations."
},
"extraFreightPerUnit": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Extra freight per unit an optimized split costs, US dollars, if quoted."
}
},
"description": "Inbound placement choice.",
"additionalProperties": false
},
"returns": {
"type": "object",
"required": [
"rate"
],
"properties": {
"rate": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-3",
"3-6",
"6-10",
"10-15",
"over-15"
],
"type": "string"
}
],
"description": "Share of units returned: a fraction, or a band (bands are our assumption)."
},
"unsellableShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of returns that come back unsellable. Default 0."
}
},
"description": "Returns: the rate, and the unsellable share.",
"additionalProperties": false
},
"fbaShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "With fulfillment both: the share of units Amazon ships, a fraction. Left out: half, flagged."
},
"cubicFeet": {
"type": "number",
"maximum": 1000,
"description": "Cubic feet per packed unit, when the dimensions aren't known (storage).",
"exclusiveMinimum": 0
},
"inventory": {
"type": "object",
"properties": {
"agedBand": {
"enum": [
"181-270",
"271-365",
"over-365"
],
"type": "string",
"description": "How old those units are, in days. Default 181-270."
},
"agedUnits": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Units older than 6 months (181+ days)."
},
"daysOfSupply": {
"type": "integer",
"maximum": 3650,
"minimum": 0,
"description": "Days of supply on hand (Amazon's low-inventory measure)."
},
"unitsAtAmazon": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Units in Amazon's warehouses. Default: one month of sales."
}
},
"description": "Stock at Amazon.",
"additionalProperties": false
},
"packaging": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Packaging per unit the seller ships, US dollars. Left out: $1 typical, flagged."
},
"peakUnits": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Units shipped October 15 to January 14 (the peak season), for the whole season."
},
"sourcingCostEntered": {
"type": "boolean",
"description": "True when the seller has entered sourcing costs in Manage Your Sourcing Cost."
}
},
"description": "Optional go-deeper answers; each one sharpens the result. packed (the packed size) makes the FBA estimate and the size and weight checks exact to the rate card.",
"additionalProperties": false
},
"fbaFee": {
"type": "number",
"maximum": 1000,
"minimum": 0.01,
"description": "FBA or both: the FBA fee per unit from Fee Preview or the Revenue Calculator, US dollars, all-in. Turns the estimate into the seller's own number. Or send sizeBand and weightBand."
},
"category": {
"enum": [
"beauty-health",
"baby",
"grocery",
"clothing",
"home-kitchen",
"toys",
"sports-outdoors",
"pet",
"electronics-accessories",
"media",
"jewelry",
"furniture",
"everything-else",
"amazon-device-accessories",
"compact-appliances",
"full-size-appliances",
"automotive",
"base-power-tools",
"backpacks-handbags-luggage",
"business-industrial-scientific",
"computers",
"consumer-electronics",
"eyewear",
"footwear",
"gift-cards",
"lawn-garden",
"lawn-mowers-snow-throwers",
"mattresses",
"musical-instruments",
"office",
"tires",
"tools",
"video-games",
"video-game-consoles",
"watches",
"not-sure"
],
"type": "string",
"description": "The Amazon category, which sets the referral fee, or not-sure (Everything Else, 15%, flagged)."
},
"platform": {
"type": "string",
"const": "amazon",
"description": "amazon, for a seller on Amazon's US marketplace."
},
"sizeBand": {
"enum": [
"small-flat",
"standard-box",
"bigger"
],
"type": "string",
"description": "FBA or both, when the FBA fee isn't known: small-flat (fits 15 × 12 × 0.75 in), standard-box (up to 18 × 14 × 8 in), bigger. Send with weightBand."
},
"labelCost": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"type": "string",
"const": "not-sure"
}
],
"description": "FBM or both: what the label costs per unit, US dollars, or not-sure."
},
"landedCost": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Landed cost per unit (product + freight + duties + prep, to Amazon's door), US dollars. Or send landedCostShare when not sure."
},
"weightBand": {
"enum": [
"under-8oz",
"8oz-1lb",
"1-2lb",
"2-3lb",
"over-3lb"
],
"type": "string",
"description": "FBA or both, when the FBA fee isn't known: the packed weight band. Send with sizeBand."
},
"fulfillment": {
"enum": [
"fba",
"fbm",
"both"
],
"type": "string",
"description": "Who ships: fba (Amazon), fbm (the seller), or both."
},
"targetMargin": {
"type": "number",
"maximum": 0.9,
"minimum": 0,
"description": "The margin the seller wants after every cost, a fraction of the price (0.2 is 20%), for the repricing fixes. Default 0: break-even."
},
"landedCostShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-20",
"20-35",
"35-50",
"over-50"
],
"type": "string"
}
],
"description": "When the seller isn't sure of landed cost: its share of the price, a fraction or a band."
},
"ppcMonthlySpend": {
"type": "number",
"maximum": 1000000,
"minimum": 0.01,
"description": "Sponsored Products spend a month, US dollars. Wins over the band."
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "FBM or both: what the buyer pays for shipping per unit, US dollars (0 if free)."
}
},
"additionalProperties": false
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Works out the fees on one sale on Etsy (listing, transaction, processing; Offsite Ads optional), on a Shopify store (card fee by plan through Shopify Payments) and on Amazon (referral fee by category, the Individual plan's per-item fee, an optional FBA fee the seller types), side by side, each column equal to that platform's single fee tool; with orders a month, Shopify's plan and Amazon's Professional plan are spread over each order. It fits a seller who asks which platform takes less of a sale, Etsy vs Shopify vs Amazon fees, or which is cheaper to sell on. Takes the item price and shipping charged; optionally orders a month, the Offsite Ads rate, the Shopify plan, the Amazon category, plan and FBA fee. Returns each platform's fee lines, fixed cost per order, total, what's left and its share of the sale, and which costs least at these numbers, with the caveat that fees are one part of the choice. US dollars; dated rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| itemPrice* | number | The item price on the sale, US dollars, before shipping and tax. |
| amazonPlan | string | Amazon: professional ($39.99 a month) or individual ($0.99 an item). Left out: professional, flagged. |
| shopifyPlan | string | Shopify: the plan, paid through Shopify Payments. Left out: basic, flagged. |
| amazonCategory | string | Amazon: the category, which sets the referral fee. Left out: Everything Else (15%), flagged. |
Works out Etsy's fees on one sale, line by line: the $0.20 listing fee, the 6.5% transaction fee, the 3% + $0.25 payment processing fee (also charged on sales tax), the 2.5% currency conversion when it applies, and the Offsite Ads fee (12% or 15%, at most $100) when the sale came from an Offsite Ad. It fits a seller who asks what Etsy takes from a sale, or what they keep from it before costs. Takes the item price and shipping charged; optionally the sales tax rate, whether it was an Offsite Ads sale and at which rate, and a currency mismatch. Returns each fee, the total, its share of the order and what's left, in US dollars, with the dated Etsy rules and their sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| itemPrice* | number | The item price on this sale, US dollars, before shipping. |
| offsiteAds | string | Did this sale come from an Offsite Ad? none, or the rate the shop pays: 12-percent (the shop has sold $10,000 or more in any 12 months) or 15-percent (under $10,000). Default none; off is taken as none. |
| salesTaxRate | number | The sales tax rate the buyer paid, as a fraction (0.07 is 7%). Etsy charges its 3% processing fee on the tax too. Default 0. |
| shippingCharged | number | What the buyer paid for shipping, US dollars (0 if free). |
| currencyMismatch | boolean | True when the listing's currency differs from the payment account's (Etsy adds 2.5%). Default false. |
Works out what Etsy's Offsite Ads cost a shop at its share of sales (12% or 15% of an attributed order, at most $100 an order), per order and per month, and the item price that covers the fee. It fits a seller who asks what Offsite Ads cost them, whether to price them in, or whether to opt out. Takes the item price, shipping charged, the shop's Offsite Ads rate (12-percent past $10,000, 15-percent under, or off), orders a month, and the share of sales from Offsite Ads if the seller knows it (else 10%, the figure Etsy gave at launch in 2020, flagged as a default). Materials and label cost are optional and add how far orders could fall before the price rise leaves the seller worse off. Returns the fee per attributed order and on average, the monthly and yearly cost, the price fix and its value if orders hold, and when opting out is possible. US dollars; dated Etsy rules with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| orders* | any | Orders in a typical month: a number from 1 to 100,000 (Shop Manager > Stats > Orders), or a band. Over 300: send the number. |
| itemPrice* | number | Typical item price, US dollars, before shipping. |
| labelCost | number | Optional: the shipping label, US dollars. |
| materials | number | Optional: materials per item, US dollars. With labelCost, adds how far orders could fall before the price fix leaves the seller worse off. |
| packaging |
Works out the item price at which one Etsy order keeps a target profit after Etsy's fees (listing, 6.5% transaction, 3% + $0.25 processing), the average Offsite Ads fee, Etsy Ads spread over orders, materials, packaging and the label. The target is dollars per order or a share of the order; with neither, it returns the break-even price. It fits a seller who asks what to charge, how to price for a profit, or what their break-even price is on Etsy. Takes materials, label cost, shipping charged and the shop's Offsite Ads rate (12-percent, 15-percent or off); packaging, the Offsite share, ad spend with orders, and targetProfitPerOrder or targetMargin are optional. Returns the price, the order at that price line by line, the break-even price and what each extra dollar keeps. US dollars; dated Etsy rules with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| orders | number | Orders a month. Needed only with adsMonthlySpend. |
| labelCost* | number | The shipping label, US dollars. |
| materials* | number | Materials and supplies per item, US dollars. |
| packaging | any | Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default. |
| offsiteAds* | string | The shop's Offsite Ads rate: 12-percent (past $10,000 in any 12 months), 15-percent (under $10,000, on), or off. none is taken as off. |
Returns one platform's fee table, the one this server's numbers use: every fee and rule with its value, a plain label, its source link and the day it was checked, whether it's official or a third-party estimate, and both values where sources disagree, plus when the table is due for its next check. Etsy: listing, transaction, processing, Offsite Ads, Etsy Ads minimums, shipping lines, Etsy Plus, tax facts. Shopify: plan prices on both billings, card rates, the third-party processor fee, currency, chargebacks, Shopify Tax. Amazon: plans, referral by category, the media closing fee, FBA, size tiers, storage, aged stock, removal, returns, placement, low-inventory and peak fees (official, from Amazon's own pages), and coupon fees (third-party). It serves to cite a platform's fees, to answer what a fee is, or to check how current the numbers are. Takes no figures; platform defaults to etsy. Free, no sign-in. Nothing is stored.
| Argument | Type | Description |
|---|---|---|
| platform | string | Whose fee table. Default etsy. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"platform": {
"enum": [
"etsy",
"shopify",
"amazon"
],
"type": "string",
"default": "etsy",
"description": "Whose fee table. Default etsy."
}
},
"additionalProperties": false
}Works out how many more orders a sale or coupon needs just to keep the same profit a month, for one item on Etsy, Shopify or Amazon. Each platform's fees are worked out at the full price and again at the sale price: percentage fees fall with the price and fixed fees stay (Etsy's listing and processing fees, Shopify's 30¢), so the answer is extra orders = kept at full price ÷ kept on sale − 1. On Amazon the sale is a coupon plus the 2.5% coupon fee (third-party estimate); Amazon's public pages don't state whether the referral fee is on the price before or after the coupon, so both readings are returned. It fits a seller who asks whether 25% off is worth it, how many more sales a discount needs, or whether to join a sales event. Takes the platform, the item price, the discount percent, materials and label; optionally shipping charged, packaging ($1 typical, flagged), orders a month, and the platform's own field: Etsy Offsite Ads, Shopify plan, Amazon category and fulfillment fee. Returns one order at full price and on sale (price, each fee, costs, kept), the fee change, the extra orders needed and, with orders a month, the orders needed and what the sale costs if orders don't rise. When the sale price keeps nothing, it says no number of orders makes the sale pay. US dollars; dated rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| category | string | Amazon only: the referral category, or not-sure. Left out: Everything Else (15%), flagged. |
| platform* | string | Where the item sells. |
| itemPrice* | number | The item's full price, US dollars, before shipping and before the discount. |
Works out the shipping gap for an Etsy shop: what the label and packaging cost beyond what the buyer pays, per order and per month, and the fixes: the item price that covers the gap with shipping kept under Etsy's $6 search line, calculated shipping, and (for free-shipping shops) building shipping into items of $35 and up, each worth so much a month if orders hold. It fits a seller who charges less for shipping than the label costs, offers free shipping, or asks how to price shipping on Etsy. Takes the item price, shipping charged, label cost and orders a month; packaging (else $1 typical, flagged), the share of orders shipping free, the Offsite Ads rate and share, and materials are optional and sharpen the fix. Returns the gap, the fix price, every fix's monthly value and how far orders could fall before it leaves the seller worse off. US dollars; dated Etsy rules with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| orders* | any | Orders in a typical month: a number from 1 to 100,000 (Shop Manager > Stats > Orders), or a band. Over 300: send the number. |
| itemPrice* | number | Typical item price, US dollars, before shipping. |
| labelCost* | number | What the shipping label costs, US dollars (Shop Manager > Finances > Payment account > Shipping). |
| materials | number | Optional: materials per item, US dollars. Adds how far orders could fall before each fix leaves the seller worse off. |
Works out every fee on one order of a US Shopify store, line by line: the Shopify Payments card fee by plan (premium cards optional), the international card and currency conversion fees, the 1.25% for mixing Shopify Payments with another card processor, another processor's own fee and Shopify's third-party fee on top (2%, 1% or 0.6% by plan), and the PayPal exemption from that fee when Shopify Payments is the main processor. It fits a seller who asks how much Shopify takes per sale, what one order costs in fees, or what's left of an order. Takes the item price, shipping charged, the plan (basic, grow, advanced) and how the order was paid; orders a month, billing and the app bill put the plan price and apps on each order. Returns each fee with its working, the total, its share of the order and what's left, and with orders the plan and apps per order. US dollars; dated Shopify rates with sources. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| plan* | string | The store's plan (Settings > Plan). Plus is priced per store and Starter's rates aren't on Shopify's pricing page. |
| billing | string | How the plan is paid (price per month). Needs ordersPerMonth. Default monthly. |
| itemPrice* | number | What the buyer pays for the items on this order, US dollars, before shipping and tax. |
| processor* | string | How this order was paid: shopify-payments (the store's only card processor); another (Stripe, Square and others, or PayPal on a store without Shopify Payments: Shopify adds its third-party fee); both (the store runs Shopify Payments beside another card processor: the 1.25% applies to what Shopify Payments handles); paypal (paid with PayPal on a store whose primary provider is Shopify Payments: no third-party fee). |
Works out which Shopify plan (Basic, Grow, Advanced) costs least at a store's card sales: each plan's price plus the card fees that change with the plan (or Shopify's third-party fee on sales through another processor), the card sales above which each move up pays for itself, on monthly and yearly billing, and what yearly billing takes off the price. It fits a seller who asks whether to upgrade or downgrade their Shopify plan, whether yearly billing is worth it, or why a bigger plan costs them more. Takes monthly card sales (US dollars), the current plan, billing and processor; with both processors, the share Shopify Payments handles. Returns every plan's cost, the cheapest plan on the current billing and on either billing, the break-even sales, and the yearly-billing difference, with the dated Shopify rates and sources. A move's value holds at these sales; below the break-even the bigger plan costs more. Free, no sign-in. Takes numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| billing* | string | How the plan is paid now. |
| processor* | string | How card payments arrive (Settings > Payments): shopify-payments, another (Stripe, Square and others; Shopify then adds its third-party fee), or both. |
| currentPlan* | string | The store's plan (Settings > Plan). Plus is priced per store and Starter's figures aren't on Shopify's pricing page, so neither is compared here. |
| monthlyCardSales* | number |
| Where the ad sends buyers: shopify (the store), etsy (an Etsy listing) or amazon (an Amazon listing). Left out: shopify, flagged. |
| adRevenue | number | Optional: the purchase value the ad platform reports for the last 30 days, US dollars. Send with adSpendMonthly; ROAS = adRevenue ÷ adSpendMonthly. |
| itemPrice* | number | The average order before shipping, US dollars: what the buyer pays for the item (one item an order). |
| labelCost* | number | The shipping label per order, US dollars (0 if Amazon ships it). |
| packaging | any | Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default. |
| productCost* | number | Product or materials cost per order, US dollars (Amazon: landed cost). |
| refundShare | number | Optional: the share of orders refunded in full, a fraction from 0 to 0.9 (0.05 is 5%). A refunded order is counted as: the item comes back and can be sold again, the buyer pays the return label, and the seller loses the label, packaging and the fees the platform doesn't return. Left out: no refunds, flagged. |
| shopifyPlan | string | Shopify only: the plan, which sets the Shopify Payments card rate. Left out: basic, flagged. |
| adSpendMonthly | number | Optional: ad spend in the last 30 days on Meta (Facebook, Instagram) or Google, US dollars. With roas or adRevenue it gives the monthly gain or loss. |
| fulfillmentFee | number | Amazon only: the FBA fee per unit (Fee Preview) when Amazon ships it, US dollars. Left out: 0 (the seller ships), flagged. |
| ordersPerMonth | integer | Optional: all the orders the store or shop had in the last 30 days, from every source, a whole number. Send with adSpendMonthly: checks the ad platform's count against your own orders. |
| shippingCharged | number | What the buyer pays for shipping on that order, US dollars (0 if free). Left out: 0, flagged. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice",
"productCost",
"labelCost"
],
"properties": {
"roas": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "The ROAS the ad platform reports (Meta Ads Manager or Google Ads, last 30 days): ad revenue ÷ ad spend, as a plain number such as 2.5. Google shows ROAS as a percent: 250% is 2.5. Or send adRevenue with adSpendMonthly. Left out: only the break-even is returned."
},
"category": {
"enum": [
"beauty-health",
"baby",
"grocery",
"clothing",
"home-kitchen",
"toys",
"sports-outdoors",
"pet",
"electronics-accessories",
"media",
"jewelry",
"furniture",
"everything-else",
"amazon-device-accessories",
"compact-appliances",
"full-size-appliances",
"automotive",
"base-power-tools",
"backpacks-handbags-luggage",
"business-industrial-scientific",
"computers",
"consumer-electronics",
"eyewear",
"footwear",
"gift-cards",
"lawn-garden",
"lawn-mowers-snow-throwers",
"mattresses",
"musical-instruments",
"office",
"tires",
"tools",
"video-games",
"video-game-consoles",
"watches",
"not-sure"
],
"type": "string",
"description": "Amazon only: the referral category, or not-sure. Left out: Everything Else (15%), flagged."
},
"platform": {
"enum": [
"etsy",
"shopify",
"amazon"
],
"type": "string",
"description": "Where the ad sends buyers: shopify (the store), etsy (an Etsy listing) or amazon (an Amazon listing). Left out: shopify, flagged."
},
"adRevenue": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Optional: the purchase value the ad platform reports for the last 30 days, US dollars. Send with adSpendMonthly; ROAS = adRevenue ÷ adSpendMonthly."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The average order before shipping, US dollars: what the buyer pays for the item (one item an order)."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "The shipping label per order, US dollars (0 if Amazon ships it)."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"productCost": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Product or materials cost per order, US dollars (Amazon: landed cost)."
},
"refundShare": {
"type": "number",
"maximum": 0.9,
"minimum": 0,
"description": "Optional: the share of orders refunded in full, a fraction from 0 to 0.9 (0.05 is 5%). A refunded order is counted as: the item comes back and can be sold again, the buyer pays the return label, and the seller loses the label, packaging and the fees the platform doesn't return. Left out: no refunds, flagged."
},
"shopifyPlan": {
"enum": [
"basic",
"grow",
"advanced"
],
"type": "string",
"description": "Shopify only: the plan, which sets the Shopify Payments card rate. Left out: basic, flagged."
},
"adSpendMonthly": {
"type": "number",
"maximum": 1000000,
"minimum": 0.01,
"description": "Optional: ad spend in the last 30 days on Meta (Facebook, Instagram) or Google, US dollars. With roas or adRevenue it gives the monthly gain or loss."
},
"fulfillmentFee": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Amazon only: the FBA fee per unit (Fee Preview) when Amazon ships it, US dollars. Left out: 0 (the seller ships), flagged."
},
"ordersPerMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Optional: all the orders the store or shop had in the last 30 days, from every source, a whole number. Send with adSpendMonthly: checks the ad platform's count against your own orders."
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping on that order, US dollars (0 if free). Left out: 0, flagged."
}
},
"additionalProperties": false
}| adSpend | number | Sponsored Products spend, last 30 days, US dollars (Campaign Manager). With acos or adSales it gives the monthly gain or loss. |
| category* | string | The Amazon category, which sets the referral fee, or not-sure (Everything Else, 15%, flagged). |
| sizeBand | string | FBA: small-flat (fits 15 × 12 × 0.75 in), standard-box (up to 18 × 14 × 8 in) or bigger. Send with weightBand, or send packed. |
| labelCost | number | FBM: what the shipping label costs, US dollars. Left out: shipping is treated as breaking even (label = shipping charged − packaging), flagged. |
| packaging | number | FBM: packaging per order, US dollars. Left out: $1, a weakly sourced typical figure, flagged. |
| landedCost* | number | What one unit costs the seller, delivered: product, freight, duties and prep, to Amazon's door (FBA) or the seller's (FBM). US dollars. |
| weightBand | string | FBA: the packed weight band (the top of the band is used; over-3lb has no top, so it is billed from 3 lb and heavier items cost more: send packed for a closer number). Send with sizeBand. |
| fulfillment* | string | fba (Amazon ships; adds the FBA fee estimate) or fbm (the seller ships). |
| conversionRate | number | Orders ÷ clicks on the ads, last 30 days (Campaign Manager), as a fraction (0.1 is 10%). Adds the highest cost per click that still pays. |
| shippingCharged | number | FBM: what the buyer pays for shipping, US dollars (0 if free). The referral fee is charged on price + shipping. Default 0. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"price",
"category",
"fulfillment",
"landedCost"
],
"properties": {
"acos": {
"type": "number",
"maximum": 10,
"description": "ACoS, last 30 days (Campaign Manager): ad spend ÷ the sales the ads brought, as a fraction (0.3 is 30%). Or send adSales with adSpend.",
"exclusiveMinimum": 0
},
"price": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The selling price on Amazon, US dollars."
},
"packed": {
"type": "object",
"required": [
"lengthIn",
"widthIn",
"heightIn",
"weightOz"
],
"properties": {
"widthIn": {
"type": "number",
"maximum": 200,
"description": "Width, inches, packed.",
"exclusiveMinimum": 0
},
"heightIn": {
"type": "number",
"maximum": 200,
"description": "Height, inches, packed.",
"exclusiveMinimum": 0
},
"lengthIn": {
"type": "number",
"maximum": 200,
"description": "Length, inches, packed.",
"exclusiveMinimum": 0
},
"weightOz": {
"type": "number",
"maximum": 4800,
"description": "Weight, ounces, packed (16 oz is 1 lb).",
"exclusiveMinimum": 0
}
},
"description": "The packed size and weight, as Amazon measures it: makes the FBA estimate and the size and weight checks exact to the rate card.",
"additionalProperties": false
},
"adSales": {
"type": "number",
"maximum": 10000000,
"minimum": 0.01,
"description": "Sales the ads brought, last 30 days, US dollars (Campaign Manager). Send with adSpend; the ACoS is adSpend ÷ adSales."
},
"adSpend": {
"type": "number",
"maximum": 300000,
"minimum": 0.01,
"description": "Sponsored Products spend, last 30 days, US dollars (Campaign Manager). With acos or adSales it gives the monthly gain or loss."
},
"category": {
"enum": [
"beauty-health",
"baby",
"grocery",
"clothing",
"home-kitchen",
"toys",
"sports-outdoors",
"pet",
"electronics-accessories",
"media",
"jewelry",
"furniture",
"everything-else",
"amazon-device-accessories",
"compact-appliances",
"full-size-appliances",
"automotive",
"base-power-tools",
"backpacks-handbags-luggage",
"business-industrial-scientific",
"computers",
"consumer-electronics",
"eyewear",
"footwear",
"gift-cards",
"lawn-garden",
"lawn-mowers-snow-throwers",
"mattresses",
"musical-instruments",
"office",
"tires",
"tools",
"video-games",
"video-game-consoles",
"watches",
"not-sure"
],
"type": "string",
"description": "The Amazon category, which sets the referral fee, or not-sure (Everything Else, 15%, flagged)."
},
"sizeBand": {
"enum": [
"small-flat",
"standard-box",
"bigger"
],
"type": "string",
"description": "FBA: small-flat (fits 15 × 12 × 0.75 in), standard-box (up to 18 × 14 × 8 in) or bigger. Send with weightBand, or send packed."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "FBM: what the shipping label costs, US dollars. Left out: shipping is treated as breaking even (label = shipping charged − packaging), flagged."
},
"packaging": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "FBM: packaging per order, US dollars. Left out: $1, a weakly sourced typical figure, flagged."
},
"landedCost": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "What one unit costs the seller, delivered: product, freight, duties and prep, to Amazon's door (FBA) or the seller's (FBM). US dollars."
},
"weightBand": {
"enum": [
"under-8oz",
"8oz-1lb",
"1-2lb",
"2-3lb",
"over-3lb"
],
"type": "string",
"description": "FBA: the packed weight band (the top of the band is used; over-3lb has no top, so it is billed from 3 lb and heavier items cost more: send packed for a closer number). Send with sizeBand."
},
"fulfillment": {
"enum": [
"fba",
"fbm"
],
"type": "string",
"description": "fba (Amazon ships; adds the FBA fee estimate) or fbm (the seller ships)."
},
"conversionRate": {
"type": "number",
"maximum": 1,
"description": "Orders ÷ clicks on the ads, last 30 days (Campaign Manager), as a fraction (0.1 is 10%). Adds the highest cost per click that still pays.",
"exclusiveMinimum": 0
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "FBM: what the buyer pays for shipping, US dollars (0 if free). The referral fee is charged on price + shipping. Default 0."
}
},
"additionalProperties": false
}| category* | string | The Amazon category, which sets the referral fee, or not-sure (Everything Else, 15%, flagged). |
| sizeBand | string | FBA only (both needs packed): small-flat (fits 15 × 12 × 0.75 in), standard-box (up to 18 × 14 × 8 in) or bigger. Send with weightBand, or send packed. |
| labelCost | number | both (required): what the seller's shipping label costs per order, US dollars. |
| packaging | number | both: packaging per order, US dollars. Left out: $1, a weakly sourced typical figure, flagged. |
| weightBand | string | FBA only (both needs packed): the packed weight band (the top of the band is used; over-3lb has no top, so it is billed from 3 lb and heavier items cost more: send packed for a closer number). Send with sizeBand. |
| fulfillment* | string | fba (Amazon ships; adds the FBA fee estimate), fbm (the seller ships), or both (the two side by side for the same item: send packed and labelCost). |
| hourlyValue | number | both: what an hour of the seller's time is worth, US dollars. Send with minutesPerOrder. |
| inboundSplit | string | both: how stock goes to Amazon: minimal (one location; Amazon charges a placement fee), partial (2–3 locations, offered only for bulky sizes; a standard-size unit is priced as minimal), or optimized (Amazon's split, no placement fee). Extra-large pays none. Left out: placement isn't counted (said). |
| unitsPerMonth | integer | both: units sold a month; adds monthly totals. |
| freightToAmazon | number | both: the seller's own freight per unit to send stock to Amazon, US dollars. Left out: not counted (said). |
| minutesPerOrder | number | both: minutes the seller spends packing and shipping one order. Send with hourlyValue. Left out: the seller's time isn't counted (said). |
| shippingCharged | number | FBM or both: what the buyer pays for shipping when the seller ships, US dollars (0 if free). The referral fee is charged on price + shipping. Default 0. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"price",
"category",
"fulfillment"
],
"properties": {
"price": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The selling price on Amazon, US dollars."
},
"packed": {
"type": "object",
"required": [
"lengthIn",
"widthIn",
"heightIn",
"weightOz"
],
"properties": {
"widthIn": {
"type": "number",
"maximum": 200,
"description": "Width, inches, packed.",
"exclusiveMinimum": 0
},
"heightIn": {
"type": "number",
"maximum": 200,
"description": "Height, inches, packed.",
"exclusiveMinimum": 0
},
"lengthIn": {
"type": "number",
"maximum": 200,
"description": "Length, inches, packed.",
"exclusiveMinimum": 0
},
"weightOz": {
"type": "number",
"maximum": 4800,
"description": "Weight, ounces, packed (16 oz is 1 lb).",
"exclusiveMinimum": 0
}
},
"description": "The packed size and weight, as Amazon measures it: makes the FBA estimate exact to the rate card (with dimensional weight). Required with both: it can change which side leaves more, and gives the storage (cubic feet).",
"additionalProperties": false
},
"category": {
"enum": [
"beauty-health",
"baby",
"grocery",
"clothing",
"home-kitchen",
"toys",
"sports-outdoors",
"pet",
"electronics-accessories",
"media",
"jewelry",
"furniture",
"everything-else",
"amazon-device-accessories",
"compact-appliances",
"full-size-appliances",
"automotive",
"base-power-tools",
"backpacks-handbags-luggage",
"business-industrial-scientific",
"computers",
"consumer-electronics",
"eyewear",
"footwear",
"gift-cards",
"lawn-garden",
"lawn-mowers-snow-throwers",
"mattresses",
"musical-instruments",
"office",
"tires",
"tools",
"video-games",
"video-game-consoles",
"watches",
"not-sure"
],
"type": "string",
"description": "The Amazon category, which sets the referral fee, or not-sure (Everything Else, 15%, flagged)."
},
"sizeBand": {
"enum": [
"small-flat",
"standard-box",
"bigger"
],
"type": "string",
"description": "FBA only (both needs packed): small-flat (fits 15 × 12 × 0.75 in), standard-box (up to 18 × 14 × 8 in) or bigger. Send with weightBand, or send packed."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "both (required): what the seller's shipping label costs per order, US dollars."
},
"packaging": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "both: packaging per order, US dollars. Left out: $1, a weakly sourced typical figure, flagged."
},
"weightBand": {
"enum": [
"under-8oz",
"8oz-1lb",
"1-2lb",
"2-3lb",
"over-3lb"
],
"type": "string",
"description": "FBA only (both needs packed): the packed weight band (the top of the band is used; over-3lb has no top, so it is billed from 3 lb and heavier items cost more: send packed for a closer number). Send with sizeBand."
},
"fulfillment": {
"enum": [
"fba",
"fbm",
"both"
],
"type": "string",
"description": "fba (Amazon ships; adds the FBA fee estimate), fbm (the seller ships), or both (the two side by side for the same item: send packed and labelCost)."
},
"hourlyValue": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "both: what an hour of the seller's time is worth, US dollars. Send with minutesPerOrder."
},
"inboundSplit": {
"enum": [
"minimal",
"partial",
"optimized"
],
"type": "string",
"description": "both: how stock goes to Amazon: minimal (one location; Amazon charges a placement fee), partial (2–3 locations, offered only for bulky sizes; a standard-size unit is priced as minimal), or optimized (Amazon's split, no placement fee). Extra-large pays none. Left out: placement isn't counted (said)."
},
"unitsPerMonth": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "both: units sold a month; adds monthly totals."
},
"freightToAmazon": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "both: the seller's own freight per unit to send stock to Amazon, US dollars. Left out: not counted (said)."
},
"minutesPerOrder": {
"type": "number",
"maximum": 600,
"minimum": 0,
"description": "both: minutes the seller spends packing and shipping one order. Send with hourlyValue. Left out: the seller's time isn't counted (said)."
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "FBM or both: what the buyer pays for shipping when the seller ships, US dollars (0 if free). The referral fee is charged on price + shipping. Default 0."
}
},
"additionalProperties": false
}| number |
| Length, inches, measured on the outside of the box (decimals are fine: 15.2). |
| otherBox | object | Optional: a second (usually smaller) box to compare, inches, at the same weight. Adds what it bills at and the pounds it changes with each carrier. |
| weightLb | number | The packed box's actual weight, pounds (3.2 is 3.2 lb), up to 70. Or send weightOz. |
| weightOz | number | The packed box's actual weight in ounces (16 oz is 1 lb). Or send weightLb. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lengthIn",
"widthIn",
"heightIn"
],
"properties": {
"widthIn": {
"type": "number",
"maximum": 108,
"description": "Width, inches, measured on the outside of the box (decimals are fine: 15.2).",
"exclusiveMinimum": 0
},
"heightIn": {
"type": "number",
"maximum": 108,
"description": "Height, inches, measured on the outside of the box (decimals are fine: 15.2).",
"exclusiveMinimum": 0
},
"lengthIn": {
"type": "number",
"maximum": 108,
"description": "Length, inches, measured on the outside of the box (decimals are fine: 15.2).",
"exclusiveMinimum": 0
},
"otherBox": {
"type": "object",
"required": [
"lengthIn",
"widthIn",
"heightIn"
],
"properties": {
"widthIn": {
"type": "number",
"maximum": 108,
"description": "Width, inches, measured on the outside of the box (decimals are fine: 15.2).",
"exclusiveMinimum": 0
},
"heightIn": {
"type": "number",
"maximum": 108,
"description": "Height, inches, measured on the outside of the box (decimals are fine: 15.2).",
"exclusiveMinimum": 0
},
"lengthIn": {
"type": "number",
"maximum": 108,
"description": "Length, inches, measured on the outside of the box (decimals are fine: 15.2).",
"exclusiveMinimum": 0
}
},
"description": "Optional: a second (usually smaller) box to compare, inches, at the same weight. Adds what it bills at and the pounds it changes with each carrier.",
"additionalProperties": false
},
"weightLb": {
"type": "number",
"maximum": 70,
"description": "The packed box's actual weight, pounds (3.2 is 3.2 lb), up to 70. Or send weightOz.",
"exclusiveMinimum": 0
},
"weightOz": {
"type": "number",
"maximum": 1120,
"description": "The packed box's actual weight in ounces (16 oz is 1 lb). Or send weightLb.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}| etsyOffsiteAds |
| string |
| Etsy: did the sale come from an Offsite Ad? none, 12-percent (shops past $10,000 a year) or 15-percent. Left out: none, flagged. off is taken as none. |
| ordersPerMonth | integer | Orders a month, 1 to 100,000: spreads the fixed monthly costs (Shopify's plan, Amazon's Professional plan) over each order. Left out: fees on the sale only, before monthly plans (plansCounted false). |
| shopifyBilling | string | Shopify: how the plan is billed, used with ordersPerMonth. Left out: monthly. |
| shippingCharged | number | What the buyer pays for shipping, US dollars (0 if free). |
| amazonFulfillmentFee | number | Amazon: the FBA fee per unit (Fee Preview in Seller Central) when Amazon ships it. The Amazon sale is then the item price alone (no shipping charged), and the fee replaces the label. Left out: the seller ships, and the buyer pays shippingCharged. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice"
],
"properties": {
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The item price on the sale, US dollars, before shipping and tax."
},
"amazonPlan": {
"enum": [
"professional",
"individual"
],
"type": "string",
"description": "Amazon: professional ($39.99 a month) or individual ($0.99 an item). Left out: professional, flagged."
},
"shopifyPlan": {
"enum": [
"basic",
"grow",
"advanced"
],
"type": "string",
"description": "Shopify: the plan, paid through Shopify Payments. Left out: basic, flagged."
},
"amazonCategory": {
"enum": [
"beauty-health",
"baby",
"grocery",
"clothing",
"home-kitchen",
"toys",
"sports-outdoors",
"pet",
"electronics-accessories",
"media",
"jewelry",
"furniture",
"everything-else",
"amazon-device-accessories",
"compact-appliances",
"full-size-appliances",
"automotive",
"base-power-tools",
"backpacks-handbags-luggage",
"business-industrial-scientific",
"computers",
"consumer-electronics",
"eyewear",
"footwear",
"gift-cards",
"lawn-garden",
"lawn-mowers-snow-throwers",
"mattresses",
"musical-instruments",
"office",
"tires",
"tools",
"video-games",
"video-game-consoles",
"watches",
"not-sure"
],
"type": "string",
"description": "Amazon: the category, which sets the referral fee. Left out: Everything Else (15%), flagged."
},
"etsyOffsiteAds": {
"enum": [
"none",
"12-percent",
"15-percent",
"off"
],
"type": "string",
"description": "Etsy: did the sale come from an Offsite Ad? none, 12-percent (shops past $10,000 a year) or 15-percent. Left out: none, flagged. off is taken as none."
},
"ordersPerMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Orders a month, 1 to 100,000: spreads the fixed monthly costs (Shopify's plan, Amazon's Professional plan) over each order. Left out: fees on the sale only, before monthly plans (plansCounted false)."
},
"shopifyBilling": {
"enum": [
"monthly",
"yearly"
],
"type": "string",
"description": "Shopify: how the plan is billed, used with ordersPerMonth. Left out: monthly."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping, US dollars (0 if free)."
},
"amazonFulfillmentFee": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Amazon: the FBA fee per unit (Fee Preview in Seller Central) when Amazon ships it. The Amazon sale is then the item price alone (no shipping charged), and the fee replaces the label. Left out: the seller ships, and the buyer pays shippingCharged."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice"
],
"properties": {
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The item price on this sale, US dollars, before shipping."
},
"offsiteAds": {
"enum": [
"none",
"12-percent",
"15-percent",
"off"
],
"type": "string",
"default": "none",
"description": "Did this sale come from an Offsite Ad? none, or the rate the shop pays: 12-percent (the shop has sold $10,000 or more in any 12 months) or 15-percent (under $10,000). Default none; off is taken as none."
},
"salesTaxRate": {
"type": "number",
"default": 0,
"maximum": 0.2,
"minimum": 0,
"description": "The sales tax rate the buyer paid, as a fraction (0.07 is 7%). Etsy charges its 3% processing fee on the tax too. Default 0."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer paid for shipping, US dollars (0 if free)."
},
"currencyMismatch": {
"type": "boolean",
"default": false,
"description": "True when the listing's currency differs from the payment account's (Etsy adds 2.5%). Default false."
}
},
"additionalProperties": false
}| any |
| Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default. |
| offsiteAds* | string | The shop's Offsite Ads rate: 12-percent (the shop has sold $10,000 or more in any 12 months; for life, no opt-out), 15-percent (under $10,000, Offsite Ads on), or off (opted out). none is taken as off. |
| offsiteShare | any | Share of sales from Offsite Ads (Marketing > Offsite Ads): a fraction (0.1 is 10%), or a band. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default. |
| shippingCharged | number | What the buyer pays for shipping, US dollars (0 if free). Offsite Ads are charged on it too. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice",
"offsiteAds",
"orders"
],
"properties": {
"orders": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 1
},
{
"enum": [
"1-10",
"11-30",
"31-75",
"76-150",
"151-300"
],
"type": "string"
}
],
"description": "Orders in a typical month: a number from 1 to 100,000 (Shop Manager > Stats > Orders), or a band. Over 300: send the number."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "Typical item price, US dollars, before shipping."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Optional: the shipping label, US dollars."
},
"materials": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Optional: materials per item, US dollars. With labelCost, adds how far orders could fall before the price fix leaves the seller worse off."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"offsiteAds": {
"enum": [
"12-percent",
"15-percent",
"off",
"none"
],
"type": "string",
"description": "The shop's Offsite Ads rate: 12-percent (the shop has sold $10,000 or more in any 12 months; for life, no opt-out), 15-percent (under $10,000, Offsite Ads on), or off (opted out). none is taken as off."
},
"offsiteShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-5",
"5-14",
"15-24",
"25-plus"
],
"type": "string"
}
],
"description": "Share of sales from Offsite Ads (Marketing > Offsite Ads): a fraction (0.1 is 10%), or a band. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping, US dollars (0 if free). Offsite Ads are charged on it too."
}
},
"additionalProperties": false
}| offsiteShare | any | Share of sales from Offsite Ads: a fraction, or a band. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default. |
| targetMargin | number | The profit one order should keep as a share of the order (item + shipping), such as 0.25. Or send targetProfitPerOrder. |
| adsMonthlySpend | number | Optional: Etsy Ads spend a month, US dollars, spread over orders. Needs orders. |
| shippingCharged | number | What the buyer pays for shipping, US dollars (0 if free). |
| targetProfitPerOrder | number | The profit one order should keep after every cost, US dollars. Or send targetMargin. Neither: the break-even price. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"materials",
"labelCost",
"offsiteAds"
],
"properties": {
"orders": {
"type": "number",
"maximum": 100000,
"minimum": 1,
"description": "Orders a month. Needed only with adsMonthlySpend."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "The shipping label, US dollars."
},
"materials": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Materials and supplies per item, US dollars."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"offsiteAds": {
"enum": [
"12-percent",
"15-percent",
"off",
"none"
],
"type": "string",
"description": "The shop's Offsite Ads rate: 12-percent (past $10,000 in any 12 months), 15-percent (under $10,000, on), or off. none is taken as off."
},
"offsiteShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-5",
"5-14",
"15-24",
"25-plus"
],
"type": "string"
}
],
"description": "Share of sales from Offsite Ads: a fraction, or a band. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default."
},
"targetMargin": {
"type": "number",
"maximum": 0.85,
"minimum": 0,
"description": "The profit one order should keep as a share of the order (item + shipping), such as 0.25. Or send targetProfitPerOrder."
},
"adsMonthlySpend": {
"type": "number",
"maximum": 300000,
"minimum": 0,
"description": "Optional: Etsy Ads spend a month, US dollars, spread over orders. Needs orders."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping, US dollars (0 if free)."
},
"targetProfitPerOrder": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "The profit one order should keep after every cost, US dollars. Or send targetMargin. Neither: the break-even price."
}
},
"additionalProperties": false
}| labelCost* | number | The shipping label per order, US dollars (0 if Amazon ships it). |
| materials* | number | Materials or product cost per item, US dollars (Amazon: landed cost). |
| packaging | any | Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default. |
| offsiteAds | string | Etsy only: do these orders come from an Offsite Ad? none, or the shop's rate: 12-percent (past $10,000 in any 12 months) or 15-percent. Left out: none (no Offsite Ads fee). off is taken as none. |
| shopifyPlan | string | Shopify only: the plan, which sets the Shopify Payments card rate. Left out: basic, flagged. |
| fulfillmentFee | number | Amazon only: the FBA fee per unit (Fee Preview) when Amazon ships it, US dollars. It stays the same on sale. Left out: 0 (the seller ships), flagged. |
| ordersPerMonth | integer | Optional: orders a month at full price now, a whole number. Adds the orders needed a month and what the sale costs if orders don't rise. |
| discountPercent* | number | The discount, as a percent from 1 to 90 (25 is 25% off). It comes off the item price only. |
| shippingCharged | number | What the buyer pays for shipping, US dollars (0 if free). The discount doesn't touch it. Default 0. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"platform",
"itemPrice",
"discountPercent",
"materials",
"labelCost"
],
"properties": {
"category": {
"enum": [
"beauty-health",
"baby",
"grocery",
"clothing",
"home-kitchen",
"toys",
"sports-outdoors",
"pet",
"electronics-accessories",
"media",
"jewelry",
"furniture",
"everything-else",
"amazon-device-accessories",
"compact-appliances",
"full-size-appliances",
"automotive",
"base-power-tools",
"backpacks-handbags-luggage",
"business-industrial-scientific",
"computers",
"consumer-electronics",
"eyewear",
"footwear",
"gift-cards",
"lawn-garden",
"lawn-mowers-snow-throwers",
"mattresses",
"musical-instruments",
"office",
"tires",
"tools",
"video-games",
"video-game-consoles",
"watches",
"not-sure"
],
"type": "string",
"description": "Amazon only: the referral category, or not-sure. Left out: Everything Else (15%), flagged."
},
"platform": {
"enum": [
"etsy",
"shopify",
"amazon"
],
"type": "string",
"description": "Where the item sells."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "The item's full price, US dollars, before shipping and before the discount."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "The shipping label per order, US dollars (0 if Amazon ships it)."
},
"materials": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Materials or product cost per item, US dollars (Amazon: landed cost)."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"offsiteAds": {
"enum": [
"none",
"12-percent",
"15-percent",
"off"
],
"type": "string",
"description": "Etsy only: do these orders come from an Offsite Ad? none, or the shop's rate: 12-percent (past $10,000 in any 12 months) or 15-percent. Left out: none (no Offsite Ads fee). off is taken as none."
},
"shopifyPlan": {
"enum": [
"basic",
"grow",
"advanced"
],
"type": "string",
"description": "Shopify only: the plan, which sets the Shopify Payments card rate. Left out: basic, flagged."
},
"fulfillmentFee": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Amazon only: the FBA fee per unit (Fee Preview) when Amazon ships it, US dollars. It stays the same on sale. Left out: 0 (the seller ships), flagged."
},
"ordersPerMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Optional: orders a month at full price now, a whole number. Adds the orders needed a month and what the sale costs if orders don't rise."
},
"discountPercent": {
"type": "number",
"maximum": 90,
"minimum": 1,
"description": "The discount, as a percent from 1 to 90 (25 is 25% off). It comes off the item price only."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping, US dollars (0 if free). The discount doesn't touch it. Default 0."
}
},
"additionalProperties": false
}| packaging | any | Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default. |
| offsiteAds | string | Optional: the shop's Offsite Ads rate. Fees on the higher price depend on it. Left out: estimated from orders × price, flagged. none is taken as off. |
| offsiteShare | any | Optional: share of sales from Offsite Ads. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default. |
| shippingCharged* | number | What the buyer pays for shipping on an order that isn't free, US dollars (0 if shipping is always free). |
| freeShippingShare | any | Share of orders that ship free: a fraction (0.25), or a band. Default none. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice",
"shippingCharged",
"labelCost",
"orders"
],
"properties": {
"orders": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 1
},
{
"enum": [
"1-10",
"11-30",
"31-75",
"76-150",
"151-300"
],
"type": "string"
}
],
"description": "Orders in a typical month: a number from 1 to 100,000 (Shop Manager > Stats > Orders), or a band. Over 300: send the number."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "Typical item price, US dollars, before shipping."
},
"labelCost": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "What the shipping label costs, US dollars (Shop Manager > Finances > Payment account > Shipping)."
},
"materials": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Optional: materials per item, US dollars. Adds how far orders could fall before each fix leaves the seller worse off."
},
"packaging": {
"anyOf": [
{
"type": "number",
"maximum": 1000,
"minimum": 0
},
{
"enum": [
"mailer",
"box",
"not-sure"
],
"type": "string"
}
],
"description": "Packaging per order in US dollars, or mailer (about $1), box (about $3) or not-sure. Left out: $1, a weakly sourced typical figure, flagged as a default."
},
"offsiteAds": {
"enum": [
"12-percent",
"15-percent",
"off",
"none"
],
"type": "string",
"description": "Optional: the shop's Offsite Ads rate. Fees on the higher price depend on it. Left out: estimated from orders × price, flagged. none is taken as off."
},
"offsiteShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"under-5",
"5-14",
"15-24",
"25-plus"
],
"type": "string"
}
],
"description": "Optional: share of sales from Offsite Ads. Left out: 10%, the figure Etsy gave at launch in 2020, flagged as a default."
},
"shippingCharged": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping on an order that isn't free, US dollars (0 if shipping is always free)."
},
"freeShippingShare": {
"anyOf": [
{
"type": "number",
"maximum": 1,
"minimum": 0
},
{
"enum": [
"none",
"1-in-4",
"half",
"3-in-4",
"all"
],
"type": "string"
}
],
"description": "Share of orders that ship free: a fraction (0.25), or a band. Default none."
}
},
"additionalProperties": false
}| appsMonthly | number | The monthly app bill, US dollars. Needs ordersPerMonth. Default 0. |
| foreignShare | number | With shopify-payments or both only: the share of Shopify Payments sales paid by buyers abroad in another currency (1% international card fee + 1.5% conversion); 1 when this order was. Default 0. |
| ordersPerMonth | integer | Orders a month, a whole number from 1 to 100,000. Spreads the plan price and the app bill over each order. Left out: per-order fees only. |
| shippingCharged | number | What the buyer pays for shipping, US dollars (0 if free). |
| premiumCardShare | number | With shopify-payments or both only: the share of Shopify Payments card sales on premium cards (Amex, business cards), which pay a higher rate; 1 when this order was on one. Default 0. |
| otherProcessorCents | number | That company's fixed fee per sale, in cents (30 is 30¢). Send with otherProcessorPercent. |
| shopifyPaymentsShare | number | With both: the share of orders Shopify Payments handles, a fraction (1 when this order went through Shopify Payments, 0 when through the other one). Left out: half, flagged. |
| otherProcessorPercent | number | With another, both or paypal: that company's rate as a percent (2.9 is 2.9%). Send with otherProcessorCents. Left out: 2.9% + 30¢ (Stripe's standard rate), or 3.49% + 49¢ for paypal (the PayPal Wallet starting rate on Shopify's pricing page), flagged. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"itemPrice",
"plan",
"processor"
],
"properties": {
"plan": {
"enum": [
"basic",
"grow",
"advanced"
],
"type": "string",
"description": "The store's plan (Settings > Plan). Plus is priced per store and Starter's rates aren't on Shopify's pricing page."
},
"billing": {
"enum": [
"monthly",
"yearly"
],
"type": "string",
"description": "How the plan is paid (price per month). Needs ordersPerMonth. Default monthly."
},
"itemPrice": {
"type": "number",
"maximum": 100000,
"minimum": 0.01,
"description": "What the buyer pays for the items on this order, US dollars, before shipping and tax."
},
"processor": {
"enum": [
"shopify-payments",
"another",
"both",
"paypal"
],
"type": "string",
"description": "How this order was paid: shopify-payments (the store's only card processor); another (Stripe, Square and others, or PayPal on a store without Shopify Payments: Shopify adds its third-party fee); both (the store runs Shopify Payments beside another card processor: the 1.25% applies to what Shopify Payments handles); paypal (paid with PayPal on a store whose primary provider is Shopify Payments: no third-party fee)."
},
"appsMonthly": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "The monthly app bill, US dollars. Needs ordersPerMonth. Default 0."
},
"foreignShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "With shopify-payments or both only: the share of Shopify Payments sales paid by buyers abroad in another currency (1% international card fee + 1.5% conversion); 1 when this order was. Default 0."
},
"ordersPerMonth": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Orders a month, a whole number from 1 to 100,000. Spreads the plan price and the app bill over each order. Left out: per-order fees only."
},
"shippingCharged": {
"type": "number",
"default": 0,
"maximum": 1000,
"minimum": 0,
"description": "What the buyer pays for shipping, US dollars (0 if free)."
},
"premiumCardShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "With shopify-payments or both only: the share of Shopify Payments card sales on premium cards (Amex, business cards), which pay a higher rate; 1 when this order was on one. Default 0."
},
"otherProcessorCents": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "That company's fixed fee per sale, in cents (30 is 30¢). Send with otherProcessorPercent."
},
"shopifyPaymentsShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "With both: the share of orders Shopify Payments handles, a fraction (1 when this order went through Shopify Payments, 0 when through the other one). Left out: half, flagged."
},
"otherProcessorPercent": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "With another, both or paypal: that company's rate as a percent (2.9 is 2.9%). Send with otherProcessorCents. Left out: 2.9% + 30¢ (Stripe's standard rate), or 3.49% + 49¢ for paypal (the PayPal Wallet starting rate on Shopify's pricing page), flagged."
}
},
"additionalProperties": false
}| Online card sales a month, US dollars (order totals with shipping): what the card fees are charged on. |
| premiumCardShare | number | Share of card sales on premium cards (Amex, business cards), which pay a higher rate on every plan. Default 0. |
| shopifyPaymentsShare | number | With both: the share of sales Shopify Payments handles, a fraction. Left out: half, flagged. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"monthlyCardSales",
"currentPlan",
"billing",
"processor"
],
"properties": {
"billing": {
"enum": [
"monthly",
"yearly"
],
"type": "string",
"description": "How the plan is paid now."
},
"processor": {
"enum": [
"shopify-payments",
"another",
"both"
],
"type": "string",
"description": "How card payments arrive (Settings > Payments): shopify-payments, another (Stripe, Square and others; Shopify then adds its third-party fee), or both."
},
"currentPlan": {
"enum": [
"basic",
"grow",
"advanced"
],
"type": "string",
"description": "The store's plan (Settings > Plan). Plus is priced per store and Starter's figures aren't on Shopify's pricing page, so neither is compared here."
},
"monthlyCardSales": {
"type": "number",
"maximum": 10000000,
"minimum": 0.01,
"description": "Online card sales a month, US dollars (order totals with shipping): what the card fees are charged on."
},
"premiumCardShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of card sales on premium cards (Amex, business cards), which pay a higher rate on every plan. Default 0."
},
"shopifyPaymentsShare": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "With both: the share of sales Shopify Payments handles, a fraction. Left out: half, flagged."
}
},
"additionalProperties": false
}