The Scenario
You're a freelancer who invoices in Bitcoin. You've got 20 client rows in a Google Sheet — column A is the client name, column B is the amount owed, column C is the currency. You built this sheet last quarter to track outstanding balances, and it's been your source of truth ever since.
Now it's billing day, and BTCPay Server is where payment links actually get generated.
The bad version:
- You open the BTCPay dashboard, click "Create Payment Request," and manually type the client name, amount, and currency for client 1.
- You switch back to the sheet to double-check client 2's amount, then switch back to BTCPay and do it again.
- After 20 requests, you paste each payment URL back into the sheet — except you lose track of which URL goes with which client halfway through and have to cross-reference everything from scratch.
Twenty payment requests is twenty separate round-trips between two browser tabs, and every context switch is a chance to enter the wrong number against the wrong client. You're charging people for work you already did — this part shouldn't require an hour of your Tuesday.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Google Sheet. It reads the data in your sheet and talks to BTCPay Server for you — no dashboard-switching, no manual field entry. Open the SheetXAI sidebar and tell it what to do.
Create a BTCPay Server payment request for every row in my Google Sheet — use column A for the title, column B for the amount, and column C for the currency, then write the payment request URL back into column D
What You Get
- A BTCPay payment request created for each client row in your sheet.
- The resulting shareable payment URL written into column D of the same row.
- Any rows with missing or blank amounts flagged in the sidebar so you can fix them before sending.
- All 20 requests created in one action — not 20 separate dashboard trips.
What If the Data Is Not Quite Ready
Currency values are mixed-format (USD, usd, $, dollars)
BTCPay expects a consistent currency code. If column C has a mix of "USD," "usd," and "$," the API will reject some rows.
Create BTCPay payment requests for every row in my sheet — normalize the currency in column C to uppercase 3-letter codes (USD, EUR, GBP, BTC) before submitting, and flag any values you couldn't resolve in column E
Some rows are missing amounts
If column B is blank for a few clients, you don't want those rows silently skipped or submitted as $0 requests.
Create BTCPay payment requests from my sheet using columns A, B, and C — skip any row where column B is empty, and log skipped rows with a reason in column F
Client names and amounts are split across two tabs
Your sheet has the client list on the "Clients" tab and the balances on the "Invoices" tab, joined by client ID.
Create BTCPay payment requests by joining the "Clients" tab (column A = client ID, column B = client name) with the "Invoices" tab (column A = client ID, column C = amount, column D = currency) — use the client name as the payment request title and write the result URL into column E of the Invoices tab
Full pipeline: normalize, filter, create, and log in one shot
In my sheet, normalize column C currencies to uppercase ISO codes, skip any row where column B is blank or zero, create a BTCPay payment request for each remaining row using column A as the title and column D as the memo, write the payment URL into column E, and put a timestamp in column F for each successfully created request
The pattern: cleaning the data and creating the requests is one instruction, not two separate passes.
Try It
Get the 7-day free trial of SheetXAI and open a Google Sheet with your outstanding client invoice rows, then ask SheetXAI to turn them into BTCPay payment requests and write the links back. You can also see how to export payment request statuses for reconciliation or read the BTCPay Server hub overview for all four connection methods.
