The PayPal activity CSV: gross, fee and net, currency conversions, and the rows that are not sales
The activity download from PayPal is a ledger, not a sales report: every payment, refund, fee, withdrawal to the bank and currency conversion is a row, with gross, fee and net columns and the fee written as a negative number. Summing the gross column gives nonsense until the rows that are not sales are taken out. The filter tool here keeps the rows you mean, and the amounts stay the text PayPal wrote.
What the download usually contains
Each row has a date, a time and the timezone in separate columns; a name and an email; a type — payment, refund, withdrawal, currency conversion and a dozen others; a status; a currency; and the three amount columns, gross, fee and net, with the fee negative so that gross plus fee equals net. A transaction id identifies the row and a reference id links a refund back to the payment it reverses.
A sale in a foreign currency appears as three rows: the payment in that currency, and a pair of conversion rows, one negative in the foreign currency and one positive in yours. The pair nets to nothing in money terms and to double-counting in a naive total.
Keep the rows you mean
For sales, keep the rows whose type is a payment and whose status is completed; for the fees you paid, take the fee column of those same rows; for what reached the bank, keep the withdrawals. The filter tool here takes rules like these — a column equals a value, several rules all of which must hold — shows the row count, and downloads the result with every amount as written.
Depending on the account’s language settings the amounts may carry thousands separators, such as 1,234.56. They come through as text here; the SQL console can sum them after removing the separator in one expression, and it can group by type to see what each kind of row adds up to.
Refunds and their payments
A refund row carries the id of the original payment in its reference column. To see each payment with its refund beside it, the merge tool matches the refund rows to the payment rows on that id and lists the payments with no refund and the refunds with no matching payment in the export’s date range.
Two exports of overlapping periods contain the same transactions twice; the duplicate remover, keyed on the transaction id, leaves one of each.
Questions
- Why is the fee column negative?
- So that gross plus fee equals net. A payment of 50.00 with a fee of -1.75 nets 48.25; the sign makes the arithmetic work in a spreadsheet without a separate subtraction.
- What are the currency conversion rows?
- A sale in another currency is converted to yours, and the download shows the conversion as a pair of rows, one out of the foreign currency and one into yours. They are not sales; filter on the type column to leave them out of a total.
- Why do my totals not match the PayPal dashboard?
- Almost always because withdrawals, conversions, refunds or pending rows were included. Keep completed payments only and the gross column agrees; the fee column of those rows is what PayPal kept.
- How do I match refunds to the payments they reverse?
- A refund’s reference id is the payment’s transaction id. Merge the refund rows against the payment rows on that pair of columns and each payment shows its refund beside it.
- The amounts have commas in them — will they sum?
- They stay as text here, so nothing is silently rounded. To total them, the SQL console removes the separator and converts inside the sum; the values in the file are untouched.
- Is my export uploaded anywhere?
- No. The rules that keep only completed payments run in your browser, against your own copy of the activity download, with outbound connections blocked while they do.