Button guide
Let the finance team run your Python reconciliation script themselves upload two exports, press Run, download the matches
You can use Button (https://button.bitgate.dev) to put a web form in front of the Python script on your own computer, so the finance team can upload their files, pick their options, press Run, and download the Excel output without installing Python. The Free plan is $0 for 1 published tool, up to 3 invited colleagues, and 100 runs per month, and each uploaded file can be up to 25 MB (up to 8 files and 100 MB total per run). If you need more than 1 tool or 3 people, Pro is $15/month (or $144/year, which comes to $12/month) for 50 tools, 250 people, and 5,000 runs per month.
How the script needs to take its inputs
If your pandas reconciliation script currently has hard-coded file paths at the top or uses input() prompts, swap those out for argparse. Button passes every form field to your program as a separate command-line argument without using a shell, so your script just needs to read those arguments and write its Excel files to an output directory that's also passed in as an argument.
Here is a script that takes a bank CSV, a ledger export (both with Date, Reference and Amount columns), a month such as 2026-09, and a tolerance, and writes matched and unmatched rows to an Excel file in the output directory:
import argparse
import os
import pandas as pd
parser = argparse.ArgumentParser()
parser.add_argument("--bank-csv", required=True)
parser.add_argument("--ledger-export", required=True)
parser.add_argument("--month", required=True)
parser.add_argument("--tolerance", type=float, required=True)
parser.add_argument("--out-dir", required=True)
args = parser.parse_args()
bank = pd.read_csv(args.bank_csv, parse_dates=["Date"])
ledger = pd.read_csv(args.ledger_export, parse_dates=["Date"])
bank = bank[bank["Date"].dt.strftime("%Y-%m") == args.month]
ledger = ledger[ledger["Date"].dt.strftime("%Y-%m") == args.month]
merged = bank.merge(
ledger, on="Reference", how="outer", suffixes=("_bank", "_ledger"), indicator=True
)
diff = (merged["Amount_bank"] - merged["Amount_ledger"]).abs()
is_match = (merged["_merge"] == "both") & (diff <= args.tolerance)
matched_df = merged[is_match]
unmatched_df = merged[~is_match]
out_path = os.path.join(args.out_dir, "reconciliation_results.xlsx")
with pd.ExcelWriter(out_path) as writer:
matched_df.to_excel(writer, sheet_name="Matched", index=False)
unmatched_df.to_excel(writer, sheet_name="Unmatched", index=False)
Fixed flags like --bank-csv and --tolerance are part of the command you approve on your machine. Your colleagues only supply the values through the form fields, and Button won't allow a form value to start with -.
Here is how those arguments map to the inputs you'll set up in Button:
| Script argument | Button input type | What the finance team does on the form |
|---|---|---|
--bank-csv |
File | Uploads the bank CSV export (up to 25 MB) |
--ledger-export |
File | Uploads the ledger export (up to 25 MB) |
--month |
Choice | Picks the month from the list you defined |
--tolerance |
Number | Enters the matching tolerance number |
Setting it up in Button
Button works with any program on your machine - Python, Node, R, PowerShell, shell scripts, compiled binaries - and the jobs always run on your computer, never in Button's cloud. Button's servers relay the form values and files between the browser and your computer.
- Sign in at https://button.bitgate.dev.
- Install the Button runner on your computer (macOS, Linux, or Windows) by running the one-line command the site shows you. It's a
curlcommand on macOS and Linux, and PowerShell on Windows. - Open the local setup page and pick your Python reconciliation script.
- Describe the inputs for the form: add two file inputs for the bank CSV and the ledger export, a choice input for the month, and a number input for the tolerance.
- Publish the tool. Button pins the exact command you approved on that computer by hash, and gives the tool its own page.
- Invite the colleagues on the finance team who need to run it. (On the Free plan you can invite up to 3 distinct colleagues, and you don't count toward that number; on Pro you can invite up to 250.)
When your colleagues get the invite email, they open the link, sign in with Google or a one-time email code, fill in the form, press Run, and download the resulting Excel file of matched and unmatched rows. They don't install anything and they never pay.
If you later change the tool, the people you've shared it with confirm the new version before their next run.
File limits, audit logs, and temporary staff
Before you hand this over to finance for month-end, keep a few practical details and limits in mind:
- File and run limits: Each uploaded file can be up to 25 MB, with a maximum of 8 files and 100 MB total per run. A run can take up to 30 minutes and produce up to 1 MB of logs. On the Free plan, you get 100 runs per month (which includes your own test runs) and 1 GB of file transfer per month; Pro gives you 5,000 runs and 50 GB of file transfer per month. If you ever downgrade from Pro to Free, nothing is deleted.
- Data retention on Button's servers: Because Button's servers relay the files between the user's browser and your computer, files do pass through Button. Input files (the bank and ledger exports) are deleted 24 hours after a run ends, and output files (your Excel results) are deleted after 7 days.
- Run logs: Every run is logged with who ran it and when, so you have a clear record of which person on the finance team ran the reconciliation and at what time.
- Expiring access for temporary staff: If finance brings in a contractor, an intern, or temporary help for month-end or audit season, you can set their access to expire at a specific time, or revoke it whenever they're done.
- Your computer's status: Your computer has to be turned on and online for people to run the tool, and it runs one job at a time. The tool page shows your colleagues whether your computer is Ready, Busy, or Offline. Each workspace can have one computer (runner) paired to it on any plan, and pairing a new computer replaces the previous one.
When another tool is the better choice
Button isn't the right fit for every setup. You should pick a different tool if:
- You can't leave your computer on and online when the finance team needs to run the reconciliation, or you need the script to run on a cloud server instead of your machine.
- Your bank or ledger exports are over 25 MB per file, over 100 MB total per run, or the script takes longer than 30 minutes to finish.
- Several people need to run jobs at the same moment (a computer runs one job at a time, and a workspace pairs with one computer).
- Your organization requires that financial files never pass through an external relay server at all.
FAQ
Do the people on the finance team need a paid Button account?
No, recipients never pay and don't install anything. They just click the link in their invite email, sign in with Google or a one-time email code, and use the form in their browser.
What happens if someone tries to pass a command-line flag into one of the form fields?
It won't work as a flag. The runner only executes the exact command you approved on your computer (pinned by hash), passes each form value as its own separate argument without using a shell, and blocks values that start with -.
Can I pair both my office desktop and my laptop to the same workspace?
No, every plan allows one computer (runner) per workspace. If you pair a new computer, it replaces the previous one.
What if my computer is asleep or running someone else's job when a colleague opens the link?
The tool page shows them whether your computer is Ready, Busy, or Offline. Because your computer runs one job at a time and must be on and online, they'll see Busy if another run is in progress, or Offline if your machine is turned off or disconnected.
Last updated
Put your script behind a form
Button turns a script on your computer into a web form. Colleagues sign in, fill it in, press Run and download the results. Free for 1 tool and 3 people.