How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
etsyin Platforms. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Calculate seller fees, payout, profit and break-even price for Etsy, eBay, Amazon, Poshmark, Mercari, TikTok Shop and 15 more US marketplaces and payment platforms. Fee rates come from the open SellersCalc fee data (CC BY 4.0), with every fee line shown separately.
- every fee line with its rate and dollar amount (transaction, payment processing, listing, referral, FBA and other fees);
- total seller fees and your net payout;
- profit and margin when you give your item cost;
- the break-even price and, if you ask, the lowest price for your target margin;
- costs that are not included (sales tax, returns, ads, subscriptions, currency conversion), so you never read them as zero.
Good for
- Price a product so that it still makes money after Etsy, eBay or Amazon fees.
- Compare the same sale on 5–20 platforms in one run and see where you keep more.
- Get a clean fee table for your own spreadsheet, repricer or AI agent.
Not a good fit
- US fee schedules in USD only. Other countries and currencies return a
not_supportedrow, not guessed fees. - One standard rate per platform. Category rates, seller levels, Amazon FBA size tiers and promotions are not modeled.
- Amazon always includes the single published FBA fee. For merchant-fulfilled orders add
amazon.fbaFeetoexcludeFeeKeys. - Sales tax, returns, ads, subscriptions, storage and currency conversion are listed in
notIncluded, not calculated. - Rates are as last reviewed by SellersCalc (
scheduleLastReviewed). This is not a legal or accounting guarantee; check the platform page inofficialSourcebefore big decisions.
Who uses it
Online sellers
Price a product so it still makes money after fees.
Multi-channel shops
Compare the same sale on many platforms and see where you keep more.
Tool builders
Get a clean fee table for your repricer, sheet or AI agent.
Price
Prices will be shown after release.
Questions
Do I need a seller account?
No. It uses open SellersCalc fee data, not your account.
Are taxes and returns included?
No. They are listed as not included, so you never read them as zero.
Does it work outside the US?
No. It uses US fees in USD. Other countries get a not_supported row.
Are category fees used?
No. It uses one standard rate per platform.
Do I need an account on Etsy, eBay or Amazon?
No. The Actor uses open fee data. It does not log in and does not read your shop.
How fresh are the fees?
Each row has scheduleLastReviewed, the date SellersCalc last checked the rates. The Actor reads the data on every run. Platforms can change fees at any time; check officialSource for the platform page.
Why is my break-even price one cent different from another calculator?
The Actor finds the lowest price in whole cents that gives profit ≥ 0, using fee amounts rounded to cents, as shown in fees[]. Some calculators use unrounded rates.
Details
Step by step on Apify
- Open the Input tab.
- Keep the prefilled example: platform
etsyand three sales inscenarios. - Click Start.
- Open the Calculations view of the Dataset and check
totalSellerFees,netPayoutandprofit.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Price one product for a margin | scenarios, targetMarginPercent | calculation row | profit, marginPercent, breakEvenSalePrice, targetSalePrice | spreadsheet, repricer |
| Compare platforms for the same sale | platforms (several), scenarios | one row per platform | platform, totalSellerFees, netPayout, effectiveFeeRatePercent | BI table, dashboard |
| Check a whole catalog | scenarios (up to 100) | one row per product and platform | scenarioId, fees[], profit | Google Sheets, CSV |
| Keep a fee table | mode = export | fee row | feeKey, value, unit, minimumAmount, capAmount | your own calculator |
| Answer a fee question in an AI agent | prefill input via MCP | calculation row | fees[], netPayout, notIncluded | AI chat, agent |
Tips for better results
- Add your item cost. Then you also get profit and margin.
- Set a target margin to get the lowest price that reaches it.
- For Amazon orders you ship yourself, exclude the FBA fee.
Limits and good to know
not_supportedandinvalidrows are free- A run with no useful rows (
NO_RESULTS) costs only the start event - A run that stops on an input error or a source error costs only the start event and saves no rows
- Up to 100 sales and 25 platform names per run. 21 platforms are supported, so at most 2,100 charged rows plus up to 10 free rows. A full run took a few seconds in our tests
- One request to the fee data per run
- If Apify moves a run to another server, the run continues where it stopped: rows are not written or charged twice
- Default timeout 300 seconds, memory 256 MB
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"type": "calculation",
"status": "complete",
"scenarioIndex": 0,
"scenarioId": "mug",
"platform": "etsy",
"platformName": "Etsy",
"country": "US",
"currency": "USD",
"salePrice": 25,
"shippingCharged": 5,
"orderTotal": 30,
"itemCost": 8,
"shippingCost": 4.5,
"totalCosts": 12.5,
"totalSellerFees": 3.3,
"netPayout": 26.7,
"profit": 14.2,
"marginPercent": 47.33,
"effectiveFeeRatePercent": 11,
"breakEvenSalePrice": 9.31,
"targetSalePrice": null,
"fees": [
{ "key": "transactionPct", "name": "Transaction fee", "ratePercent": 6.5, "amount": 1.95, "status": "applied" },
{ "key": "paymentPct", "name": "Payment processing", "ratePercent": 3, "amount": 0.9, "status": "applied" },
{ "key": "paymentFixed", "name": "Payment fixed fee", "fixedAmount": 0.25, "amount": 0.25, "status": "applied" },
{ "key": "listingFee", "name": "Listing fee", "fixedAmount": 0.2, "amount": 0.2, "status": "applied" }
],
"notIncluded": [{ "item": "sales_tax", "reason": "Sales tax and fees charged on tax are not in the fee data; amounts exclude tax." }],
"scheduleLastReviewed": "2026-08-15",
"officialSource": "https://www.etsy.com/legal/fees",
"source": { "provider": "SellersCalc", "license": "CC BY 4.0", "attribution": "Fee data by SellersCalc (https://www.sellerscalc.com)" }
}Data fields (40)
| Field | Type | Meaning |
|---|---|---|
type | string | calculation = one sale scenario on one platform (mode calculate); fee = one line of a fee schedule (mode export). |
status | string | complete; partial = a fee rule could not be applied (see warnings); not_supported = unknown platform, country or currency (one row per platform or per scenario); invalid = the scenario failed validation (one row per scenario). Only complete and partial rows are charged; at most 10 free rows per run are written, the rest are listed in RUN_SUMMARY.skipped. |
message | string | Plain-English reason for partial, not_supported and invalid rows; null when complete. |
scenarioIndex | integer | Position of the scenario in your input list, starting at 0; null on a not_supported row for a whole platform. |
scenarioId | string | Your optional scenario id/label. |
platform | string | Platform id, e.g. etsy, ebay, amazon, poshmark; null on an invalid row for a whole scenario. |
platformName | string | Platform display name from the fee data. |
platformKind | string | marketplace or payments. |
country | string | Fee schedule country (ISO 2-letter). |
currency | string | Fee schedule currency; all money fields are in it. |
salePrice | number | Item price paid by the buyer, from your input. |
shippingCharged | number | Shipping the buyer paid you, from your input. |
orderTotal | number | salePrice + shippingCharged; the base for percentage fees. |
itemCost | number | Your cost of goods, from your input; null if not given. |
shippingCost | number | Your shipping/label cost, from your input (default 0). |
totalCosts | number | itemCost + shippingCost; null when itemCost is missing. |
totalSellerFees | number | Sum of fees the seller pays for this order. |
totalBuyerFees | number | Fees the platform charges the buyer on top (e.g. Vinted buyer protection); not deducted from the seller. |
buyerPays | number | orderTotal + totalBuyerFees, before tax. |
netPayout | number | orderTotal - totalSellerFees: what the platform pays out. |
profit | number | netPayout - totalCosts; null when itemCost is missing. |
marginPercent | number | profit / orderTotal x 100; null when itemCost is missing or orderTotal is 0. |
effectiveFeeRatePercent | number | totalSellerFees / orderTotal x 100; null when orderTotal is 0. |
breakEvenSalePrice | number | Lowest salePrice (same shipping and costs) with profit >= 0; null without itemCost or if none exists. |
targetMarginPercent | number | Target margin from input, if any. |
targetSalePrice | number | Lowest salePrice that reaches targetMarginPercent; null if not requested or not reachable. |
fees | array | Every fee line of the schedule with status applied, limit, not_applicable, not_included or excluded, the rate or fixed amount, the base and the charged amount. |
notIncluded | array | Costs this calculation does not cover (storage, taxes, refunds, ads...) with reasons. Never read them as zero. |
assumptions | array | Assumptions used for this row, in plain English. |
warnings | array | Rules that could not be applied or targets that cannot be reached. |
scheduleLastReviewed | string | Date SellersCalc last reviewed this platform's rates (not the date the rates took effect). |
officialSource | string | Official fee page of the platform, when the fee data lists one. |
officialSourceNote | string | Note about the official source. |
calculatorUrl | string | SellersCalc calculator page for this platform/fee. |
source | object | Provider, data URL, fetchedAt, license (CC BY 4.0) and attribution text. |
feeKey | string | Fee line key in the source data (export mode). |
feeName | string | Fee line name (export mode). |
role | string | charge, threshold, minimum or cap (export mode). |
payer | string | seller or buyer (export mode). |
basis | string | Basis such as per unit or per cubic foot per month; null = per order (export mode). |
Input settings (6)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode | mode | string | "calculate" |
| Platforms | platforms | array | ["etsy"] |
| Country | country | string | "US" |
| Sale scenarios | scenarios | array | [{"id": "mug", "salePrice": 25, "shippingCharged": 5, "itemCost": 8, "shippingCost": 4.… |
| Target margin % | targetMarginPercent | integer | |
| Exclude fee lines | excludeFeeKeys | array |
Use cases with this tool
Each guide shows all the steps and the other tools.


