Lemon Squeezy
GET orders with a Bearer key. Totals in the sample are cents. One page unless page[number] walks.
What you can track
Orders: count or sum of attributes.total by attributes.created_at. The list sample shows total: 1199 next to a formatted $11.99, so totals are minor units (cents). Scale by 0.01 for dollars. Subscriptions are a different route and were not fetched for this playbook.
Credential
An API key from Settings → API. Bearer. The key is shown once. Suggested name: LEMON_KEY. Host: api.lemonsqueezy.com.
Required headers on every request: Accept: application/vnd.api+json, Content-Type: application/vnd.api+json, and Authorization: Bearer.
Where to get it
tlly job
{"series":"lemon_revenue","cron":"0 7 * * *","request":{"url":"https://api.lemonsqueezy.com/v1/orders?page[size]=100","headers":{"Authorization":"Bearer {{secret:LEMON_KEY}}","Accept":"application/vnd.api+json","Content-Type":"application/vnd.api+json"}},"extract":{"format":"json","items":"data","date":"attributes.created_at","value":"attributes.total","aggregate":"sum"},"transform":[{"op":"scale","factor":0.01}]}
The list response includes meta.page (currentPage, lastPage, perPage, total). tlly can increment a numeric query parameter. page[number] may work as request.pages.param because it is a query key, but that was not tested here. Without paging, you only have one page (the sample default is 10; the URL above asks for 100). Say so if lastPage is greater than 1.
Filter paid orders only if the preview shows a status you can where (equals on attributes.status). where applies with aggregate.
Gotchas
- Test-mode orders are in the same list (test_mode on the sample). Filter them or the chart mixes tests and live.
- Rate limit: the getting-started page points at the API reference and does not state a number. Do not invent one. Daily is enough.
- Currency is on attributes.currency. Do not add currencies together.
Alert ideas
Red when yesterday’s paid total is zero. Yellow when refunds (a separate check of refunded) spike. The refunded path was on the sample object but a filtered job was not verified.
Verification
Checked 2026-10-26: key creation under Settings → API, Bearer, the three headers, base https://api.lemonsqueezy.com/v1/, and GET /v1/orders with data[].attributes.total and created_at. Page size and page[number] behaviour beyond the documented meta.page object is unverified.