Button guide
Agency reporting scripts your account managers can run themselves a web form per client report, free for 3 people
You can put a web form in front of your existing reporting script with Button (https://button.bitgate.dev), so account managers pick the client, choose the month and download the finished PDF or Excel report themselves. The script runs on your own agency computer, where your API keys and credentials already live, never in Button's cloud. The Free plan is $0 for 1 published tool, 3 people, and 100 runs per month, and the Pro plan is $15/month (or $144/year, which comes out to $12/month) for 50 tools and up to 250 people.
Prepare the reporting script for command-line inputs
Before you connect the script to Button, check how it takes inputs. If you normally edit hard-coded variables at the top of the file before each run, or use interactive prompts that wait for keyboard input, swap those out for command-line arguments.
Whether your report generator is written in Python, Node, R, PowerShell, a shell script, or a compiled binary, the pattern is the same: use argparse in Python, commandArgs() in R, a param() block in PowerShell, or $1 and $2 in bash.
Set the script up so it takes:
- A client name or ID (which will become a choice dropdown on the web form).
- The reporting month (text or choice).
- An input file path as an argument, if the report needs a file from the account manager, such as an ad spend export.
- An output folder path as an argument, where the script writes the final PDF or Excel report files.
Here is a minimal Python setup using argparse:
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument("--client", required=True)
parser.add_argument("--month", required=True)
parser.add_argument("--output-dir", required=True)
args = parser.parse_args()
report_path = os.path.join(args.output_dir, f"{args.client}_{args.month}.xlsx")
# Build the report with your existing code and credentials, then save it to report_path
Fixed flags like --client and --month belong to the command you approve on your machine; the people filling out the form only supply the values for the fields you expose.
Turn the script into a web form
Once the script accepts arguments and writes its output to a folder, you can publish it.
- Sign in at https://button.bitgate.dev.
- Install the Button runner on the macOS, Linux, or Windows computer that holds your reporting script and credentials. You run the one-line command the site shows you (
curlon macOS and Linux, PowerShell on Windows). - Open the local setup page and pick your reporting program.
- Describe the inputs you want on the form. For a standard agency report, set up a choice field for the client, a text or choice field for the month, and a file field if the report needs an upload. (Button supports text, number, yes/no, choice, and file fields.)
- Approve the exact command on your computer and publish the tool. Button gives the tool its own web page.
- Invite your account managers by email.
When an account manager needs a report, they open the link from their invite email, sign in with Google or a one-time email code, fill in the form, and press Run. When the script finishes, they download the PDF or Excel output straight from the browser. They don't install anything, and they never pay.
You can set up one shared tool with a client dropdown, or, on Pro with up to 50 tools, publish a separate tool per client with that client fixed in the command. Access is granted per tool, so if clients should pull their own reports, invite each client only to their own tool, never to the shared one with the dropdown. Recipients never pay, but each invited client counts toward your people limit.
How execution, credentials, and logs work
Jobs run on your computer, never in Button's cloud. That means you don't have to copy database credentials, API keys, or local environment setups into a third-party worker environment.
Button's servers still relay the form values and any uploaded or generated files between the user's browser and your computer. Uploaded inputs are deleted from Button's servers 24 hours after a run ends, and generated outputs are deleted after 7 days.
On your computer, the runner is locked down to what you explicitly allowed:
- The runner only executes the exact command you approved on that machine, pinned by hash.
- Every form value is passed to your program as its own separate argument, with no shell in between, and a form value can't start with
-. An account manager can't pass an extra flag into your script through a text box. - If you change a tool, the people using it have to confirm the new version before they can run it.
- Every run is logged with who ran it and when, and you can revoke someone's access or set it to expire at any time.
Plans, limits, and operational trade-offs
Your computer has to be switched on and online for anyone to run a report. The tool page shows users whether your runner is Ready, Busy, or Offline, and the runner processes one run at a time per computer. Every workspace gets one computer (runner) on every plan - if you pair a new computer, it replaces the previous one.
Here are the numbers for both plans and the runtime limits:
| Feature or limit | Free ($0) | Pro ($15/mo, or $144/yr at $12/mo) |
|---|---|---|
| Published tools | 1 | 50 |
| People (invited colleagues/clients; you don't count) | 3 | 250 |
| Runs per month (includes your own runs) | 100 | 5,000 |
| File transfer per month | 1 GB | 50 GB |
| Max file size | 25 MB per file (up to 8 files and 100 MB per run) | 25 MB per file (up to 8 files and 100 MB per run) |
| Max run duration | 30 minutes | 30 minutes |
| Max log size per run | 1 MB | 1 MB |
| Runners (computers) per workspace | 1 | 1 |
If you upgrade to Pro and later drop back to Free, downgrading deletes nothing.
When another tool is the better choice
Button isn't the right fit for every agency reporting setup. Another tool is the better choice if:
- You only run reports on a laptop that gets closed and put in a bag all day, and you don't have an always-on desktop, office machine, or server you can pair as your workspace's runner.
- Your reports take longer than 30 minutes to finish, or they produce files larger than 25 MB each (or over 100 MB total in a single run).
- Several account managers need to run long scripts at the exact same moment without waiting for a Busy runner to finish, since a workspace runs one job at a time on one computer.
- Your agency policies forbid report files or form parameters from passing through an external relay server at all.
In those cases, a job runner on an always-on server that you host, such as Windmill or Rundeck, fits better.
FAQ
Do account managers or clients need a paid seat to run a report?
No, recipients never pay and don't install anything. On the Free plan you can invite up to 3 people, and on the Pro plan you can invite up to 250 people (you don't count toward that number).
What happens if my computer is asleep when an account manager opens the form?
The computer running the Button runner has to be on and online for a job to execute. If it isn't, the tool page shows the status as Offline so the account manager knows right away instead of waiting on a stuck form.
Can an account manager inject shell commands through the form fields?
No. The runner only runs the exact command you approved (pinned by hash), passes every form value as its own argument without using a shell, and blocks any value that starts with -.
How long do uploaded files and finished PDF or Excel reports stay on Button's servers?
Button's servers relay the files between the browser and your computer. Input files are deleted 24 hours after a run ends, and output files are deleted after 7 days.
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.