Back to Ko-fi in Google Sheets
SheetXAI logo
Ko-fi logo
Ko-fi · Google Sheets Guide

Parse Ko-fi Webhook Payloads Into a Structured Google Sheet

2026-05-14
5 min read

The Scenario

You set up Ko-fi webhooks three months ago because the CSV export was slowing you down. Smart move — except now column A of your "Ko-fi Webhooks" sheet has 340 rows of raw JSON payloads, and every time you need to answer "how much did I make last month?" you open the sheet and stare at a wall of {"type":"donation","amount":"5.00","currency":"USD",...}. You've been putting off cleaning it because the last time you tried to write a formula to parse JSON in Sheets, you gave up after 20 minutes.

The bad version:

  • Open one JSON payload, manually copy the fields you need into a template row, and do it again for the next 339 rows
  • Try a REGEXEXTRACT formula to pull amount out of the string — it works for 200 rows, then silently fails on rows where the key order is different
  • Export the column to a Python script you found online, get a CSV back, paste it over the sheet, and discover the timestamp format is now ISO 8601 instead of the readable date you had before

The thing is, you're an illustrator, not a data engineer. You have commissions to fulfill. The webhook approach was supposed to save you time, not create a second job of cleaning its output.

The Easy Way: One Prompt in SheetXAI

SheetXAI is an AI agent that lives inside your Google Sheet. It reads the data in your tabs and, through its built-in Ko-fi integration, can parse structured fields out of raw JSON payloads and write them to a new sheet — in one step. No formulas, no script, no export.

The "Ko-fi Webhooks" sheet has raw JSON payloads in column A from Ko-fi payment events — parse each row and write structured columns: date, type (donation/subscription/commission/shop_order), amount, currency, supporter_email, and message into a new "Parsed Transactions" sheet

What You Get

  • A new "Parsed Transactions" sheet with one row per webhook event
  • Columns: date, type, amount, currency, supporter_email, message — in that order, with correct types (date as a date, amount as a number)
  • Rows where column A is blank are skipped automatically
  • Rows where the JSON is malformed get an error flag in a dedicated "parse_error" column so you can investigate without losing the rest of the batch

What If the Data Is Not Quite Ready

The type field has unexpected values

Some of your older payloads use "Shop Order" with a capital S and space instead of "shop_order". The parsed column is a mess of inconsistent values.

In the "Parsed Transactions" sheet, normalize the type column so that "Shop Order" becomes "shop_order", "Donation" becomes "donation", "Subscription" becomes "subscription", and "Commission" becomes "commission" — update in place

Some payloads are missing the supporter_email field

Older Ko-fi webhooks didn't always include the supporter's email — some rows in "Parsed Transactions" have a blank supporter_email. You need to flag them without losing the revenue data.

In "Parsed Transactions", add a column called "email_missing" and set it to TRUE for any row where supporter_email is blank — leave all other columns unchanged

You have payloads from two different Ko-fi pages mixed together

You run two Ko-fi pages — one for your illustration commissions and one for your Twitch stream. Both webhook logs ended up in column A of "Ko-fi Webhooks" mixed together, and you need to separate them by the page_id field in the JSON.

Parse column A of "Ko-fi Webhooks" — extract the page_id field along with date, type, amount, currency, and supporter_email — then write two separate output sheets: "Parsed Illustration" for rows where page_id is "abc123" and "Parsed Stream" for rows where page_id is "def456"

The full cleanup-and-summary kill chain

You want to go from raw webhook JSON to a clean revenue summary in one shot — parsing, deduplication, and totals all at once.

Parse all Ko-fi webhook payloads in column A of "Ko-fi Webhooks", skip blank rows and flag malformed rows in a "parse_error" column, write clean structured rows to "Parsed Transactions" with columns date/type/amount/currency/supporter_email, then create a "Revenue Summary" sheet showing total revenue and transaction count per type — sorted by total revenue descending

The pattern: ask for the cleanup and the analysis together. You don't have to finish the parsing before you ask for the summary — SheetXAI handles the sequence.

Try It

Get the 7-day free trial of SheetXAI and open any Google Sheet with Ko-fi webhook payloads in column A, then ask it to parse and structure your transaction data. For more Ko-fi workflows, see how to track membership churn and month-over-month growth or build a full supporter CRM from your webhook history, or go back to the Ko-fi integration overview.

Stop memorizing formulas.
Tell your spreadsheet what to do.

Join 4,000+ professionals saving hours every week with SheetXAI.

Learn more