Skip to main content

Insights

Accounting: Your Ledger and the Export for Your Accountant

What the Accounting totals count, how refunds and costs are treated, how to export the ledger as a CSV for your accountant, and how to sync sales, refunds and payouts to QuickBooks Online or Xero.

Overview

Finance → Accounting shows your store's money for a date range: Revenue, Expenses, Profit and Invoices scanned, a revenue-against-expenses chart, and the Ledger, the list of every money movement BestWebby recorded for your store. Accounting is part of the Scale plan and above. The owner, admins and anyone with the accountant role can open it.

Pick the range with the two dates in the Ledger section. It starts at the last 30 days.

What the totals count

Every ledger entry has a type, and the type decides where it counts:

CategoryLedger typesWhere it counts
RevenuePOS sale, order payment, subscriptionAdds to Revenue
RefundRefundComes off Revenue. Refunds are stored as negative amounts: money going back out
CostNetwork order cost, API costAdds to Expenses, by size, whatever sign it was stored with
OtherEvery other type, for example scanned supplier invoices, chargebacks, gift cards issued and vendor payoutsListed in the ledger and the export, not counted in the totals

So Revenue is what you took after refunds, and Profit is Revenue minus Expenses.

The screen lists the newest 200 entries in the range; the totals always cover the whole range. To see every entry, export it.

Entries left over from the retired payroll screen are not real pay: their amounts were made up. They stay out of the ledger, the totals and the export. When a range has any, the Ledger says how many, and Show them lists them with their amounts struck through.

Test-mode payments

A card payment Stripe took while your Stripe account was in test mode moved no real money, so it is not revenue. An order counts as test mode when every payment that paid it was a Stripe test-mode payment. Its ledger entries (the payment, and any refund, chargeback or fee on that order) are left out of the totals, the ledger list and the export. When a range has any, the top of the Ledger says so, for example "2 test-mode payments not counted".

  • An order paid partly in test mode and partly with real money counts in full, because real money did move.
  • Cash, e-Transfer and orders marked paid by hand are always real money.
  • Payments recorded before BestWebby started noting Stripe's mode count as real.
  • A customer's card payment of one of your invoices is left out when Stripe took it in test mode, and so is a credit note against an invoice paid only that way.
  • Other entries that do not belong to an order, such as scanned supplier invoices, count as before.

The same rule applies to the revenue figures on Analytics and the store overview: test-mode orders are left out, and the page says how many. It applies to the money everywhere else too: customer spend and the RFM money score in the CRM, on the Customers list, on each customer's page and in the customer export, segment spend rules, cohort revenue and the VIP group, the Hub briefing and the daily brief, the Intelligence health score, board report and cash-flow forecast, the Digital twin's figures, the funnel's revenue by source and campaign, the sales on AI agent traffic, the lifetime value in a win-back suggestion, the recent sales on Shop health, Benchmarks (yours and the other businesses'), the Québec QST heads-up and franchise royalty statements. Where a figure counts what customers did (orders placed, the last order, a VIP's order count, Orders this month on the Billing page), a test-mode order still counts. The Billing page shows no sales figure.

If a period has more than 30,000 test-mode entries to leave out, a report or export asks you to choose a shorter period instead of counting them.

Exporting the ledger for your accountant

In the Ledger section, set the two dates and click Export CSV. You get ledger-<from>-to-<to>.csv with every entry in the range, not just the 200 on screen, oldest first.

  • The range runs from the start of the first day to the end of the last day, in UTC, and can be up to two years long.
  • Amounts are as recorded. Refunds are negative, so adding up the amount column nets them off. Each amount is given twice: in cents, and in dollars and cents.
  • The category column is the same rule the totals use: revenue, refund, cost or other. Revenue rows plus refund rows give revenue after refunds; cost rows, added by size, give expenses; other rows are in neither.
  • Legacy payroll entries are left out, as they are on screen.
  • Test-mode entries are left out too, the same ones the screen leaves out.
  • Up to 100,000 entries go in one file. If the range holds more, you are told the file is partial and how many entries it has; export a shorter range for the rest.
  • Spreadsheet-safe. A cell that starts with a character a spreadsheet would treat as a formula is written as text. Negative amounts stay numbers.

The columns:

ColumnWhat it holds
dateWhen the entry was recorded, in UTC
typeThe ledger type, for example order_payment, pos_sale or refund
categoryrevenue, refund, cost or other (see above)
amount_centsThe amount in cents; negative for a refund
amountThe same amount in dollars and cents
currencyThe currency of the entry
reference_type, reference_idWhat the entry belongs to, for example an order and its id
descriptionThe description shown in the ledger
entry_idThe ledger entry's own id

Only people who can open Accounting can export it, and each export is recorded in Settings → Audit log.

Sync to QuickBooks Online or Xero

Finance → Accounting → Ledger sync sends this store's money to your own accounting software, one record at a time and once each: every paid order, every refund, and every Stripe payout. Connect one ledger at a time; to switch, disconnect the first.

If a provider shows Not available yet, BestWebby's own connection to it is not set up yet, so it cannot be connected. It appears here when it is ready.

Connecting

Click Connect QuickBooks Online or Connect Xero, sign in on Intuit's or Xero's own page and choose the company (in Xero, the organisation) to connect. BestWebby never sees your password. If you use an authenticator app, you are asked for a code first, because connecting lets BestWebby write to your books. Only the owner, admins and accountants can connect, change or disconnect a ledger, and each of those is recorded in Settings → Audit log.

Xero lets you tick more than one organisation on its page; BestWebby keeps the first one and gives back access to the rest.

Choosing the accounts

After connecting, Where the money goes lists the accounts from your own chart of accounts, with a suggestion for each:

RowWhat goes there
SalesThe goods on each order
Shipping incomeWhat shoppers paid for shipping
DiscountsDiscount codes and promotions, as a negative line
RefundsMoney given back
Tax collectedThe sales tax BestWebby charged, as a line of its own
Gift card liabilityGift cards sold (owed until spent), and gift cards spent on an order (taken off again)
Stripe feesThe fees Stripe kept from each payout
Stripe clearingCard payments land here, refunds leave from here, and each payout moves the rest to your bank
Other paymentsCash, Interac e-Transfer and orders you marked paid; often Undeposited Funds (BestWebby is not endorsed by or affiliated with Interac Corp.)
Bank accountWhere Stripe pays out

Rows marked (if you use it) can stay empty until a record needs them; that record then waits with a message saying which account to choose. Your ledger's own system tax account (QuickBooks "GST/HST Payable", Xero's GST or VAT account) does not accept direct posts, so choose or create a separate liability account for tax collected. The tax is posted as its own line and is not run through your ledger's tax engine, so file your sales tax from BestWebby's tax report, not your ledger's. A QuickBooks company outside the US also asks for a tax code on every line: pick one that charges no tax, such as Exempt or Out of scope.

Sync from is the first day that is sent. It starts on the day you connected; an earlier day (up to two years back) also sends those older records, so choose a day after anything you already entered by hand. Then click Save and turn sync on. Saving checks every account against your ledger as it is now, and creates what the documents need there: in QuickBooks, a service item per row ("BestWebby Sales" and so on) and a customer called "BestWebby Sales"; in Xero, contacts called "BestWebby Sales" and "Stripe". No shopper's name, email or address is sent to your ledger.

What is posted

BestWebby recordQuickBooks OnlineXero
A paid order (web, POS, or marked paid)A sales receiptA paid invoice
A refundA refund receiptA credit note with its refund
A Stripe payoutA journal entry: the payout into your bank, Stripe's fees to Stripe fees, the total out of Stripe clearingA transfer from Stripe clearing to your bank, and a spend of the fees

Each document is numbered BW- and a code from BestWebby (for example BW-S1A2B3C4D5E6F7): S for a sale, R for a refund, P for a payout. The order is named in the memo.

  • Sent when paid. A sale goes to your ledger when it is paid, as BestWebby's own ledger records it. A second payment on an order (an exchange top-up, say) is posted as its own sale of that amount.
  • A refund that failed and came back is posted as money in, against Refunds.
  • Test-mode payments move no real money. An order paid while your Stripe account was in test mode, and any refund of it, is skipped with a message saying so. An order paid partly in test mode and partly with real money is not posted; post the real part by hand. Payments recorded before BestWebby started noting Stripe's mode count as real.
  • Payouts are posted once Stripe has finished listing what each one carried; until then the record says it is waiting. Test-mode payouts move no real money and are never posted. A payout carrying more than BestWebby reads from Stripe is not posted, with a message to post it by hand.
  • Not sent: Stripe's fee on each single order (the fees are posted once, with the payout that carried them), your BestWebby subscription, scanned supplier invoices, and the other ledger types that do not count toward revenue.
  • Currencies. Records in your ledger's home currency always go. A record in another currency goes only when your ledger has multi-currency turned on and that currency added; otherwise it is not posted, and its message says what to change. Payouts in a currency other than the home one are posted by hand.

The sync log

The Sync log lists every record with its status:

  • Waiting: due on the next run. Runs happen every ten minutes, and each sends a limited number per ledger so as to stay inside the provider's limits (Xero allows 60 requests a minute).
  • Posted: in your ledger, with its number there.
  • Not posted: with your ledger's own reason. A temporary problem is tried again by itself (after 2, 4, 8 minutes and so on, up to eight tries); anything that needs you, such as an account not chosen or a currency not turned on, waits for Retry. Retry on a row sends that one again; the button above the log sends every one that was not posted.
  • Skipped: there is nothing to post (for example, the order was paid in Stripe test mode, or Stripe later reported the payout as failed).

Nothing is posted twice. Each BestWebby record has one entry per ledger company. Before trying again, BestWebby first looks in your ledger for the document by its number, so a send whose answer was lost is found instead of repeated. If you delete a posted document in your ledger, BestWebby does not send it again.

Disconnecting

Disconnect gives up BestWebby's access at Intuit or Xero and deletes the stored keys, and nothing more is posted. Documents already posted stay in your ledger. Reconnecting the same company later keeps your account choices and posts nothing twice; turn sync on again after checking them. If the provider could not be reached, BestWebby still forgets the keys and tells you to remove BestWebby from the connected apps in QuickBooks or Xero yourself.

If your ledger stops accepting BestWebby's access (you removed the app there, or it was unused for months), the screen shows Needs reconnecting and nothing is posted. Reconnecting the same company keeps your account choices and sync carries on where it stopped. Connecting a different company starts again: new account choices, and sync from that day.

Refunds in the order export

A refund never changes an order's total: it is a ledger entry against the order. The order export (Export on the Orders list) therefore has a last column, refunded_cents, with how much of each order has been refunded, as a positive number of cents. See Orders and shipping.

A card refund that the shopper's bank turned down after it was issued is booked back as a refund reversal: a positive entry beside the refund it cancels. Accounting counts it off your refunds, and refunded_cents leaves it out.