eBay profit desk: true net margin per order and SKU

By General Input

See what each eBay order actually made after fees, ads, shipping, refunds and your product cost, rolled up by SKU and month to date.

Integrations

  • eBay
  • Google Sheets

Type

App

Categories

  • Finance
  • Operations

Build me an eBay profit desk I open every morning that finally shows what I actually made, not what eBay says I sold. The main page is a table of recent orders, one row per order line item, showing sale price, eBay fees, ad fees, shipping cost, refunds, my cost of goods, and the true net margin in both currency and percent. I want to sort by margin, filter by date range and SKU, and click into any order to see the individual fee lines that add up to its total.

Source the order rows from eBay Get Orders, using each line item's SKU as the join key to everything else. Pull the fee, ad fee and refund lines from eBay Get Transactions and match them back to their order, use eBay Get Transaction Summary for period level fee and refund totals, and use eBay Get Payout Summary so the desk can show how the computed net ties out against what eBay actually paid me. Use eBay Get Inventory Items for the master SKU list, so the cost sheet covers every SKU I sell rather than only the ones that happen to have sold recently.

Above the order table, show a month to date summary strip: gross sales, total eBay fees, total ad fees, total shipping cost, total refunds, total cost of goods, and net profit with margin percent. Below it, show a per SKU rollup table for the selected period with units sold, revenue, total fees, total cost and net margin per SKU, sorted worst margin first so the money losers surface immediately.

The second page is my cost sheet. It lists every SKU with an editable cost of goods field I can type or edit directly in the app, persisted in the app's own storage so the values survive reloads. Add a one click import that reads an existing cost sheet from Google Sheets using Get Values: let me paste a spreadsheet link and pick a range, map the SKU and cost columns, and preview the matches before committing. Any order whose SKU has no recorded cost must land in a visible missing cost queue on the main page with a count badge, and those orders must be excluded from the headline net profit figure rather than counted as zero cost, so the profit number stays honest instead of silently wrong.

Each SKU row, on both the cost sheet and the per SKU rollup, gets a Diagnose this SKU button that kicks off a background agent scoped to that SKU. The agent pulls the SKU's views and conversion rate from eBay Get Traffic Report, its Promoted Listings ads and current ad rate from eBay Get Ads, and its recent fee lines from eBay Get Transactions, then writes a short margin diagnosis of three or four sentences explaining where the margin is going and recommending a specific price change or ad rate change. Write the result back into the app as a dated note on that SKU row, so the row shows the latest diagnosis inline and I can expand to read earlier ones. Show a queued or running state on the row while the agent works.

Add an Export this month action that appends the monthly margin summary, one row per SKU plus a total row, to a Google Sheets tab using Append Values, so my bookkeeper works from the same numbers I am looking at. Let me choose the destination spreadsheet and tab, and record the last export time in the app.

A few details to get right. eBay Finances calls run against apiz.ebay.com rather than the main API host. Money values come back as value and currency objects, so normalize them into plain numbers for a single marketplace currency and display that currency consistently everywhere. The SKU, which is the custom label field on a listing, is the standard join key between listings, orders and cost records, so treat a missing or blank SKU as its own visible problem rather than dropping the order. Refunds should reduce the net for the original order's month, and every figure on screen should make clear which period it covers.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads