See which Kajabi offers actually made money this period
Pick any date range and see gross revenue, orders, refunds, and average order value for every Kajabi offer, then drill into the exact sales behind each number.
Build me an app that answers the question Kajabi's own analytics tab will not: which of my offers actually made money in a given period, and how much of that money stayed. I open the app, pick a date range at the top, and the main view gives me a table with one row per offer and per product, showing gross revenue, order count, the split between new and recurring revenue, refund and cancellation rate, and average order value. I want to be able to sort that table by any column, because the offer with the biggest revenue is not always the one with the healthiest numbers.
The handler builds this table itself rather than relying on any single summary endpoint. Use List Offers and List Offer's Products to learn which products belong to which offer, List Products for the product catalog, and List Orders plus List Purchases across the selected date range as the transaction data. Roll all of it up server side into the per offer and per product figures. Every one of these list endpoints is paginated, so the handler must page through with page[number] and page[size] and keep following links.next until it comes back null, otherwise the totals will be quietly short. Use sort=-created_at where recency matters. If the account has more than one site, pass filter[site_id] so the numbers are scoped to a single site instead of silently blending brands.
Clicking any offer row drills into the individual orders behind that number. This detail view lists the orders in the range with their customer, date, and amount, and uses Get Order Details and Get Transaction Details so I can see exactly which transactions moved the total. If a number in the summary table looks wrong or surprising, I should be able to click it and reach the specific transactions that produced it without leaving the app.
A second tab shows what is leaking: every cancelled and refunded purchase in the selected range, pulled with List Purchases and enriched with Get Purchase Details, showing the offer, the customer, the amount, and when it happened. This is the view I open when the gross number looks fine but the net does not.
Add an Explain this period button that kicks off a background agent. The agent recomputes the same rollup for the comparison period, compares it against the selected range, and identifies the two or three offers driving the swing in either direction. For each of those it works out whether the change came from volume (more or fewer orders), price (a different average order value), or churn (more cancellations and refunds), and then writes a short plain English business review back into the app, where it is displayed alongside the table. Write it for a business owner, not an analyst: what changed, which offers caused it, and why.
When that agent finishes, it also appends a snapshot row per offer to a Google Sheets tracker using Append Values, capturing the period start and end, offer name, gross revenue, order count, refund and cancellation rate, and average order value. That way I accumulate a running month by month history outside Kajabi that survives independently of the app.
Two rules to bake in throughout. First, every monetary amount Kajabi returns is in cents, including price_in_cents and amount_in_cents, so convert to real currency before anything is displayed, written into the review, or appended to the spreadsheet. Never show a raw cents value. Second, the comparison period defaults to the immediately preceding range of the same length, so a 30 day selection compares against the previous 30 days and a single month compares against the month before it. Let me override the comparison range if I want to, but that default is what should load.
What does this prompt do?
- Pick any date range and get one row per offer and product with gross revenue, order count, the new versus recurring split, refund and cancellation rate, and average order value.
- Click any offer to open the individual sales behind that total, right down to the specific transactions that moved the number.
- A second tab lists every cancelled and refunded purchase in the range, so you can see exactly where money is leaking back out.
- Press Explain this period and an assistant compares your range against the one before it, names the two or three offers driving the swing, says whether it came from volume, price, or churn, and writes a short plain English review inside the app while logging a snapshot row per offer to a Google Sheets tracker.
What do I need to use this?
- A Kajabi account with the Public API turned on. It is included on the Pro plan or available as a paid add-on, and only owners or subowners can create the connection.
- A Google account and a spreadsheet you want to keep the running month by month history in.
- If you run more than one Kajabi site, knowing which site the numbers should cover.
How can I customize it?
- Change the date range that loads by default when you open the app, and the comparison period the written review is measured against.
- Sort or filter the table the way you think about the business, for example by revenue, refund rate, or order count, and hide columns you do not use.
- Point the history tracker at a different spreadsheet or tab, and choose which figures get saved on each snapshot.
FAQs
How is this different from the analytics tab inside Kajabi?
Will the money amounts show correctly?
What date ranges can I choose?
Does it change anything in my Kajabi account?
What if I sell through more than one Kajabi site?
Related templates
Look up any Kajabi member by email or name and see every offer, purchase, and payment in one profile, then grant, revoke, or swap access from the same row.
See duplicate Keap contacts side by side with their orders and tags in view, merge the right record on purpose, and retire the tags nobody uses.
Clean your email list from one screen: see every audience, review who is in it, and suppress unengaged people in batches a human approves first.
Compare every WhatsApp campaign side by side, launch a new one from a spreadsheet audience, and stop a bad send in one click.
Every morning your reps open one queue of people publicly asking for alternatives, complaining about a renewal, or shopping your category.
Pick a Kajabi opt-in form and a launch window and see who opted in, who bought, and who did not, then tag the non-buyers for follow-up in one click.
Find out which offers actually made you money.
Stop exporting one spreadsheet per metric and guessing where the revenue really came from.