Weekly
Get a weekly list of your Fly.io apps
Each Monday you get every app in your organization with how many Machines it runs, where, and in what state.
- Runs
- Weekly
- Apps
- Fly.io
- AI
- Not needed
- Access
- org token (read)
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9am, email me all apps in my Fly.io org 'acme' with their Machine count, regions and states.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A Fly.io account tends to accumulate apps: a staging copy, a forgotten prototype, a worker someone launched for a test, a database nobody remembers. Each one with running Machines is a line on the bill, and teams discover them only when the invoice jumps. Without a list, no one is sure what is running, who owns it or whether it is still needed, and cleaning up feels risky. Few teams track it.
Every week, ClickRuntime lists the apps in your organization, then lists the Machines for each app, and emails you a table of apps with their Machine counts and states. It gives a clear picture of what runs on your account right now. It takes seconds to skim.
It is handy for small engineering teams and agencies hosting several client projects.
What you get out of it
Find forgotten apps before they cost money
A weekly list shows an old prototype with two running Machines. Stopping it saves money every month and removes something nobody remembers maintaining. Each forgotten Machine is a recurring charge you can end with one command.
Know what is deployed
Anyone joining the team can read the email and understand what exists on the account. That saves onboarding questions and avoids duplicated services. New hires get oriented faster, and the same question is not asked repeatedly in chat.
Control Machine counts
Seeing counts per app shows when a service scaled up and stayed there. Scaling back after a traffic spike prevents a quiet rise in monthly spend. A quiet rise in Machine counts can add up to a surprising amount over a year.
Support security reviews
Unmaintained apps are a risk because they run old dependencies. An inventory is the first step in deciding what to patch, what to retire and who owns each app. Owners can then be identified.
Keep a record of changes
Weekly emails can be compared to see what appeared or disappeared. That history helps explain a change in the bill or a surprising new service. Trends become obvious after a few weeks.
How it works
What happens, step by step
Every Monday, ClickRuntime lists every app in your Fly.io organization.
For each app it counts the Machines, notes which regions they run in and whether they are running or stopped.
You get one email with a line per app, like "api-prod: 4 Machines | regions ams, iad | 4 started".
Before it runs live
- Connect Fly.io
What you get
Build your own
Need it to work differently?
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
- Run it at a different time, more or less often, or only on weekdays
- 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 Fly.io steps into one automation
Under the hood
The code that runs this automation
from collections import Counter
from clickruntime import on_trigger, credentials, http, notify
ORG = "acme"
API = "https://api.machines.dev/v1"
@on_trigger
def run(event):
headers = {"Authorization": f"Bearer {credentials.secret('FLY_API_TOKEN')}"}
apps = http.get(f"{API}/apps", params={"org_slug": ORG}, headers=headers).json()["apps"]
lines = []
for app in apps:
machines = http.get(f"{API}/apps/{app['name']}/machines", headers=headers).json()
regions = ", ".join(sorted({m["region"] for m in machines})) or "-"
states = ", ".join(f"{n} {s}" for s, n in Counter(m["state"] for m in machines).items()) or "none"
lines.append(f"{app['name']}: {len(machines)} Machines | regions {regions} | {states}")
notify.email_me(f"Fly.io inventory for {ORG}: {len(apps)} apps", "\n".join(lines))
return {"apps": len(apps)}FAQ
Common questions
Does it include volumes and databases?
Do I need to name each app?
Is the Fly token safe to use?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Shut down staging Machines overnight
Staging Machines stop in the evening and start again before work, and you only get an email if one refuses.
See how it worksCheck that your Fly volumes have recent snapshots
Once a week you see the newest snapshot date for each volume, with any that are falling behind flagged.
See how it worksHear in Slack when a Fly Machine stops or fails
If a Machine in your app leaves the started state, your channel gets one message naming it and its region.
See how it worksKeep exploring
Set up “Get a weekly list of your Fly.io apps” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.