Skip to content

Collects as they arrive, acts daily

Get one evening email with the day's Gumroad sales

Instead of an email per sale, you get a single roundup each evening with totals for each product.

Runs
Collects as they arrive, acts daily
Apps
Gumroad
AI
Not needed
Access
access token

Send this to your assistant

Create a ClickRuntime automation: keep track of my Gumroad sales during the day and at 9pm email me how many of each product sold and the total earned.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Creators selling on Gumroad often get a notification for every sale, which is nice on day one and noise by day thirty. A newsletter writer with a course, a template pack and a membership can receive dozens of emails a day, and the picture of how the day actually went, which product moved, how much came in, is nowhere in the pile. Meanwhile the real figures sit behind a login.

As each sale arrives, a small record is stored, with no message sent. Once a day the stored sales are totaled per product and you receive one email with the day's count and revenue for each product, so a busy launch day is a single readable summary.

It is a good fit for creators who run launches, promotions or several products and want clarity more than instant pings.

What you get out of it

  • One clear picture of the day

    Instead of forty separate notifications, you read a per-product total and see which offering is carrying the day. You can see at a glance whether the course, the template pack or the membership carried the day, with revenue shown for each, not only a raw count.

  • Launch performance is easy to judge

    During a promotion you can compare days and see whether a newsletter push or a social post moved the numbers, because the digest gives you a consistent format. The format stays the same each day, so comparing yesterday to the day before is easy and the effect of any post is clear.

  • A quieter inbox

    Sale pings stop interrupting your work. You still hear about everything, just once a day in a format you can act on. Fewer interruptions mean more focused hours on creating, and the numbers still reach you.

  • Simple record for bookkeeping

    Daily totals per product make it easier to reconcile payouts and track revenue by product at month-end. Daily totals per product make it easier to reconcile payouts, check revenue by product and prepare month-end records with less digging.

  • Spot slow products quickly

    A product with zero sales for a week shows up as a gap in the digest, a prompt to rethink the price, description or promotion. That prompt can be the nudge to review the page, refresh the cover image or run a small promotion.

  • Totals that match how you work

    Because each sale is stored as it arrives, the digest does not depend on any dashboard export. It is generated from your own record, and can be reconciled against Gumroad payouts when you want to double-check.

How it works

What happens, step by step

  1. Throughout the day, ClickRuntime notes down each Gumroad sale as it happens.

  2. In the evening it totals the sales and the money made, overall and per product.

  3. You get one email with the day's totals and a line for each product.

Before it runs live

  • Connect Gumroad
  • Paste your automation's link into the other app's webhook settings

What you get

RunsCollects as they arrive, acts daily
Get one evening email with the day's Gumroad salestoday, 9:00Succeeded
Email · Gumroad todayGumroad today: 31 sales, $587.00 - Notion Finance Template: 22 sold, $418.00

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Gumroad steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
daily_sales_digest_gumroad.pyexample
from collections import defaultdict
from urllib.parse import parse_qs
from clickruntime import on_event, on_trigger, state, notify

@on_event
def remember(event):
    sale = {k: v[0] for k, v in parse_qs(event.body).items()}
    sales = state.get("sales") or {}
    sales[sale["sale_id"]] = [sale["product_name"], int(sale.get("price", 0))]  # keyed, so retries don't double count
    state.set("sales", sales)
    return {"stored": sale["sale_id"]}

@on_trigger
def digest(event):
    sales = state.get("sales") or {}
    by_product = defaultdict(lambda: [0, 0])
    for name, cents in sales.values():
        by_product[name][0] += 1
        by_product[name][1] += cents
    lines = [f"- {name}: {n} sold, ${cents / 100:,.2f}" for name, (n, cents) in sorted(by_product.items())]
    total = sum(c for _, c in sales.values()) / 100
    notify.email_me(f"Gumroad today: {len(sales)} sales, ${total:,.2f}", "\n".join(lines) or "No sales today.")
    state.set("sales", {})
    return {"sales": len(sales), "total": total}

FAQ

Common questions

Does it count refunds against the day's total?
Sales are recorded as they arrive, and refunds are a separate event. If you want refunds netted off, a companion refund alert or an added step can include them. The default digest reports sales only.
What time zone is the day measured in?
The digest day follows the time zone set for the schedule, so your totals match your own day, not UTC. Choose the zone you use for bookkeeping. Pick the zone you use for your books.
What if there were no sales?
You can receive a short note saying so, or no email at all. Many creators prefer a zero-sales note so they know the check ran and nothing broke. Either way the digest confirms that sale tracking is still running.
What permissions does it need?
access token. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Get one evening email with the day's Gumroad sales” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.