Nightly Wise transfers sync to Google Sheets ledger
Every night at midnight, completed Wise transfers from the last 24 hours land as new rows in your Google Sheets ledger, with built-in duplicate skipping.
Build me a deterministic code workflow that syncs completed Wise transfers into a Google Sheets accounting ledger every night at midnight. No reasoning needed: every field is a known mapping, so this is a code workflow, not an agent.
Trigger: cron, every day at 00:00 in the workflow owner's timezone.
Step 1. Call Wise List Transfers, filtered to status outgoing_payment_sent, with a created-at window covering the previous 24 hours (now minus 24h to now). Target the configured Wise profile ID.
Step 2. Call Google Sheets Get Values on the configured spreadsheet, tab named "Wise Ledger", reading the transfer ID column (for example column A from row 2 down). Build a set of transfer IDs already present in the sheet.
Step 3. For each transfer returned from Wise, skip it if its ID is already in the set. Otherwise map it to a row with these columns in this order: transfer id, created date, source currency, source amount, target currency, target amount, exchange rate, recipient name, reference.
Step 4. Call Google Sheets Append Values once with all new rows, appending to the "Wise Ledger" tab using USER_ENTERED so dates and numbers parse cleanly. If there are no new rows, exit successfully without writing.
Configuration the workflow should expose: Wise profile ID, Google Sheets spreadsheet ID, tab name (default "Wise Ledger"), and the transfer ID column letter (default A).
Idempotency requirement: re-running the workflow on the same day, or running it with overlapping windows, must never create duplicate rows. The dedupe check in step 2 is the guard.
Additional information
What does this prompt do?
- Pulls every completed Wise transfer from the last 24 hours on a nightly schedule.
- Appends one tidy row per transfer to your Google Sheets ledger with the fields your bookkeeper actually wants.
- Checks the transfer ID column before writing so re-runs never create duplicate rows.
- Runs without any AI guessing because every field is a direct, deterministic mapping.
What do I need to use this?
- A Wise account with API access turned on and two-step verification enabled.
- A Google account with edit access to the spreadsheet you want to write to.
- A Google Sheet with a tab named Wise Ledger and a header row that includes a transfer ID column.
How can I customize it?
- Change the run time if midnight is not when your books close, for example 6am local time or every six hours.
- Add or remove columns in the row mapping to match the exact ledger format your accountant uses.
- Filter to a specific source currency, recipient, or reference prefix if you only want a subset of transfers in this tab.
Frequently asked questions
Will this create duplicate rows if it runs twice in one night?
Do I need to know how to code to use this?
Which Wise transfers get added to the sheet?
Can I send the rows to a different tab or a second sheet?
What if my Wise account has multiple profiles?
Stop pasting Wise transfers into your books by hand.
Connect Wise and Google Sheets once, and Geni quietly keeps your ledger up to date every night while you sleep.