Quickstart: from a Stripe key to a reconciled month
Five parts. You create a read-only key in your own Stripe account, connect it in the task pane, pull your payouts into Microsoft Excel, and match them against the bank statement you paste in.
📥 What you end up with
Your Stripe payouts in the Excel grid, returned by =STRIPE.PAYOUTS(from, to), and a workbook that flags each payout Matched or UNMATCHED against your bank statement, with a summary of counts and totals. Your restricted Stripe key stays on your device, and the functions call api.stripe.com directly from your machine, so neither the key nor your payout data passes through Innova Apps servers.
What You Need
✅ Have these ready
- Microsoft Excel: on Windows or Mac with Microsoft 365, or Excel on the web.
- A Stripe account: your own, with permission to create API keys in it.
- A free Innova Apps add-in account: an email address and a password, used for sign-in and plan status.
- Your bank statement for the period you want to reconcile, as three columns you can copy: Date, Description and Amount. Only needed for Part 5.
You do not need bank credentials, a bank feed, or anything installed on a server. The Free plan covers the last 30 days of payouts and up to 25 rows per pull, for payouts and for the items inside a payout alike, which is enough to reconcile a recent month.
Create the Read-Only Restricted Key in Stripe
The add-in reads your Stripe account with a restricted key that you create yourself, with read permissions only. This takes about two minutes and is done once.
Open the restricted key form
Sign in to Stripe and go to Developers → API keys → Create restricted key. Give the key a name you will recognise later, for example "Excel reconciliation".
Grant exactly two permissions
Set these two to Read and leave everything else at None:
- Balance: Read, used by
=STRIPE.BALANCE()and by the second key check. - Payouts: Read, used by
=STRIPE.PAYOUTSand=STRIPE.PAYOUT_ITEMS.
Optionally, also grant Read on external payout accounts (bank accounts). That is what lets the add-in show bank names in the Bank column next to your payouts. It is not required: without it the Bank column shows the raw destination id, such as ba_1Abc..., instead of a bank name.
Create the key and copy the whole thing
Create the key and copy it in one go. A restricted key starts with rk_live_ (live mode) or rk_test_ (test mode). Test mode is a good way to try the add-in before pointing it at live data.
⚠️ Stripe shows a restricted key only once
Copy the entire key straight away and keep it somewhere safe until you have pasted it into the task pane. If you lose it or copy only part of it, Stripe cannot show it again, so create a fresh restricted key instead. You can revoke a key in Stripe at any time.
🚫 Never paste a secret key
Secret keys start with sk_ and can move money, so they must never go into any app. The add-in refuses them with an explanation, and it also refuses publishable keys (pk_), which cannot read payouts. Only rk_live_ and rk_test_ keys are accepted.
Install the Add-In and Open the Task Pane
🏪 Coming soon to Microsoft AppSource
Stripe Payout Reconciliation is not on the store yet. For early access, email support@innovaapps.ai and we will send you what you need to install it. The template workbook in Part 5 is a free download and works on its own timeline, so you can grab it today.
Get access to the add-in
Email support@innovaapps.ai for early access. Tell us which Excel you use (Windows, Mac or the web) and we will point you at the right install steps for it.
Open the task pane in Excel
Once the add-in is installed, open it from the ribbon in any workbook. The pane has three sections: 1 · Connect Stripe, 2 · Pull payouts and 3 · Account.
The task pane also has to be opened at least once per session for the =STRIPE.* functions to be available in the grid.
Sign in with your add-in account
Create or sign in to your free Innova Apps add-in account with an email address and a password. The account is used for sign-in and plan status only, and your Stripe key is never part of it.
Connect and Test the Key
Paste the key
In 1 · Connect Stripe, paste your restricted key into the Restricted key box and choose Save key (stays on this device). The field is masked, and the key is written only to the add-in's local storage on this device.
Run "Test my key"
Choose Test my key. Four checks run in order and stop at the first failure, so you always get one specific thing to fix rather than a wall of errors.
| Check | What it means | If it fails |
|---|---|---|
| 1. Key format | The key looks like a restricted key, and the add-in tells you whether it is live-mode or test-mode. | A secret key (sk_) or publishable key (pk_) is refused. Go back to Part 1 and create a restricted key. |
| 2. Key valid, Balance: Read | Stripe accepted the key and the balance can be read. | "Stripe rejected this key" means it was deleted, rolled or copied incompletely. Create a fresh one, since restricted keys are shown once. "Missing Balance: Read" means you should edit the key's permissions in Stripe. |
| 3. Payouts: Read | Your payouts can be listed, which is what the payout functions need. | Edit the key in Stripe and set Payouts to Read. |
| 4. Read-only probe | A write probe that creates and changes nothing: it POSTs to a payout id that cannot exist. HTTP 403 means Stripe refused the write outright, so the key is read-only and the check passes. | HTTP 404 means Stripe authorised the request and only then failed to find the object, which reveals that the key carries write permission, so "This key allows WRITES" is shown. The saved key is not blocked or deleted; recreate it with Read, not Write, on every permission. |
✅ All four green
When every check passes, try =STRIPE.BALANCE() in any empty cell. You should get Type, Currency and Amount, with one available row and one pending row per currency you hold.
🔒 Where the key lives
Only in the add-in's local storage on your device. It is never sent to, stored on, or logged by Innova Apps servers. Forget key in the task pane removes it from the device, and you can revoke it in Stripe at any time.
The add-in only accepts restricted keys, and the fourth check tells you whether the key you pasted can write so you can recreate it read-only. The add-in itself never writes to Stripe: it only reads payouts, balance transactions and balance, so it cannot create charges, issue refunds or move money.
⚠️ If you have to paste the key again next session
Some Excel webviews block persistent storage. When that happens the task pane says so: the key works for the current session, and you paste it again next time.
Pull Your First Payouts
Put your dates in two cells
On a blank sheet, type your From date in B1 and your To date in B2, for example 2026-06-01 and 2026-06-30.
Type the formula
In A4, type:
=STRIPE.PAYOUTS(B1,B2)
The results spill down and to the right from that cell, oldest-first. You can also write the dates inline as text, for example =STRIPE.PAYOUTS("2026-06-01","2026-06-30"). The third argument, includeHeader, defaults to TRUE; pass FALSE to leave the header row out.
| Payout ID | Arrival date | Amount | Currency | Status | Bank | Description |
|---|---|---|---|---|---|---|
| po_1Ka…7Qd | 2026-06-02 | 1240.50 | USD | paid | Bank ••4321 | STRIPE PAYOUT |
Or let the task pane write it for you
Click a single empty cell, then choose Insert last-30-days payouts at selection in 2 · Pull payouts. It writes =STRIPE.PAYOUTS(TODAY()-30, TODAY()) into that cell and the results spill below it.
Look inside a single payout
Point =STRIPE.PAYOUT_ITEMS(A5) at a po_… id from the first column to list the transactions behind that payout: Txn ID, Type, Description, Created, Gross, Fee, Net and Currency.
Amounts come back in major units, for example 123.45 rather than 12345, with zero-decimal currencies such as JPY handled correctly. Dates come back as yyyy-mm-dd text.
📏 Free plan limits
Free covers the last 30 days of payouts and up to 25 rows per call. The 25-row cap applies to =STRIPE.PAYOUT_ITEMS as well as =STRIPE.PAYOUTS, so a payout with more than 25 transactions needs Pro too. If a range is too wide you will see a message saying so; narrow the date range and pull in chunks, or move to Pro for full payout history and up to 1,000 rows per call on both functions. Pro is $19 per month. Paid upgrades are still being switched on, so the Upgrade button in 3 · Account only appears once billing is enabled on the deployment.
⚠️ Seeing #NAME?
That means the add-in is not loaded yet, not that the formula is wrong. Open the task pane once, then recalculate with Ctrl+Alt+F9 (Cmd+Alt+F9 on Mac).
Reconcile With the Template
The reconciliation workbook is a free download and needs no add-in account just to open it. It has four sheets: Start Here (instructions), Payouts (your pull), Bank Import (what you paste) and Reconciliation (the matching).
Direct .xlsx download. The workbook opens on its own; the =STRIPE.* formulas fill in once the add-in is installed and your key is connected.
Set the date range on the Payouts sheet
The From and To dates live in B1 and B2, and =STRIPE.PAYOUTS(B1,B2) is already placed below them. Change the two dates and the payouts underneath refresh. Do not type inside the spill area.
Paste your bank statement into Bank Import
Paste three columns from your bank into columns A to C, starting in row 4: Date, Description and Amount. Column D is the status column and fills itself in.
Delete the two example rows that ship in the sheet first. They are marked as examples to delete, and are only there to show the shape of the data.
The Date cells must be real dates rather than text, or the matching cannot compare them.
Read the flags on the Reconciliation sheet
Every payout is listed with the bank row it matched, and flagged in the Status column:
- Matched in green: a bank deposit was found for this payout.
- UNMATCHED in red: no bank deposit fits it yet.
- NO MATCHING PAYOUT in amber, over on the Bank Import sheet: a deposit with no payout behind it.
The summary block on the same sheet shows payouts listed, matched count, unmatched count, payouts total, matched total and unmatched total.
Adjust the match window in J1
A payout matches a bank row when the amounts agree to the cent and the bank date falls inside the match window in cell J1 on the Reconciliation sheet. The default is ± 3 days, because deposits often land a day or two after the payout's arrival date. Raise it if your bank is slower, lower it if you want stricter matching.
🔍 Two things to check by hand
- Two payouts of the same amount inside the same window can match the same deposit. The workbook tells you to verify those yourself.
- One copy of the workbook assumes a single currency. Use a separate copy per currency.
The matching is built from plain, auditable Excel formulas, SUMPRODUCT-based with no array-entry (CSE) formulas, so a bookkeeper can inspect every cell and change it.
When Something Does Not Look Right
"That's a full secret key…"
- You pasted a key starting with
sk_. Create a restricted key instead (Part 1). Publishable keys (pk_) are refused too, because they cannot read payouts.
"Stripe rejected this key"
- The key was deleted, rolled, or copied incompletely. Restricted keys are shown only once, so create a fresh one in Stripe and paste it again.
"The key is missing Balance: Read" or "missing Payouts: Read"
- Edit the key's permissions in Stripe and set that permission to Read, then run Test my key again.
"This key allows WRITES"
- The write probe found that the key carries write permission. The saved key is not blocked or deleted, but recreate it with Read-only permissions, since the add-in never needs write access.
A formula returns #NAME?
- The add-in is not loaded. Open the task pane, then recalculate with Ctrl+Alt+F9 (Cmd+Alt+F9 on Mac).
"Free plan shows the last 30 days", "more than 25 payouts" or "more than 1,000 rows"
- Narrow the date range and pull in chunks. For full history and up to 1,000 rows per call, upgrade to Pro from 3 · Account in the task pane. Paid upgrades are still being switched on, so the Upgrade button only appears once billing is enabled on the deployment.
A payout stays UNMATCHED although it is on the statement
- Check that the bank Date cell is a real date rather than text.
- Check that the amount matches to the cent.
- Widen the match window in
J1if the deposit lagged the arrival date by more than three days.
Need Help?
📧 Contact support
For setup questions, early access, or anything the checks above did not solve:
Email: support@innovaapps.ai · Support page