CLI vs. dashboard: when scripting cold-email ops actually beats clicking
An honest, non-absolutist take on when the norbelys CLI is the right tool for an operational task, and when the dashboard genuinely serves you better.
By Gabriel Lara, Developer Relations, Norbelys
Founder-reviewed ·How we research and correct articles
Once you’ve installed the CLI and run a few real commands, there’s a natural pull toward doing everything from the terminal — it feels faster, it feels more “engineering,” and it’s scriptable in a way clicking never is. Resist that pull a little. The CLI and the dashboard aren’t competing for the same job; they’re built for different shapes of work, and picking the wrong one for a given task costs you time in the opposite direction from what you’d expect.
This is meant as a straight answer, not a pitch for the CLI. It has real limits, and pretending otherwise doesn’t help anyone who’s about to decide where to spend the next hour of a Tuesday.
What the CLI is actually built for
The dashboard and the CLI ultimately talk to the same control plane —
every generated command mirrors a REST endpoint one-to-one,
so there’s no capability gap in principle. The difference is in shape.
Terminal output is text: diffable, greppable, pipeable into jq, and
runnable unattended on a schedule
without a human present to watch it happen. Dashboard output is a rendered
UI: visual, discoverable, forgiving of exploration, and useless the moment
nobody’s looking at the screen.
That distinction is the whole answer to when to reach for which. Anything that benefits from being repeated identically, reviewed as a diff, or run without a person in the loop leans CLI. Anything that benefits from a human actually looking at it — judging a draft, skimming a new list, deciding whether a number looks right — leans dashboard, because a terminal can’t show you what a rendered email actually looks like or let you eyeball a segment before you commit to it.
Where scripting wins
Recurring checks. A question you’d otherwise ask yourself every Monday morning — “are all my senders still authenticated?” — is exactly what a scheduled CI job should be answering instead. The value isn’t that the CLI is faster than clicking through once; it’s that it runs the fifty-second time identically to the first, without anyone remembering to do it.
Gating an automated pipeline. If a deploy, a launch, or another pipeline step needs to know “is this configuration valid” before it proceeds, that check has to be something a machine can evaluate and act on — an exit code, not a person’s judgment call after glancing at a page.
The same operation across many orgs. An agency running one workspace per client and wanting to check, say, suppression list health across all twelve of them is doing the same query twelve times with a different credential. That’s a loop in a script. It’s twelve manual dashboard visits otherwise, and the twelfth one is where attention lapses and something gets missed.
Bulk or precise operations you want a record of. A shell history, a CI log, or a script committed to a repo is an audit trail for granted; a sequence of dashboard clicks isn’t, unless someone wrote it down. When you need to reconstruct “what exactly did we change and why,” scripted actions already have the answer.
Where the dashboard still wins
A genuine one-off. If you’re cleaning up a single imported list once, writing a script to do it is very often more expensive than just doing it — you’re paying the setup cost of a script for a task that will run exactly one time. The CLI earns its keep on repetition; a true one-off doesn’t generate any repetition to earn back.
Anything that needs a human eye on the actual output. Reviewing how a templated email renders with real merge fields, judging whether a subject line lands right, skimming a freshly imported audience for anything that looks off before you trust it — none of that is well served by a JSON blob in a terminal. The dashboard exists to be looked at; use it for the things that need looking at.
A non-technical teammate. A marketer, an account manager, or a founder who isn’t going to install a CLI and manage an API key isn’t a CLI use case at all, regardless of the task. Forcing a terminal on someone who’d rather click doesn’t make the workflow more rigorous — it just adds a barrier between them and getting their job done, and probably means the task doesn’t get automated so much as it gets avoided.
Exploring something you don’t understand yet. The first time you touch a new feature, the dashboard’s discoverability — labelled fields, inline help, visible defaults — teaches you the shape of the thing faster than reading command flags does. Script it once you know what you’re scripting.
A working heuristic
None of this is a strict rule — plenty of tasks could go either way depending on who’s doing them and how often. But as a starting point:
| Task | CLI / script | Dashboard |
|---|---|---|
| Recurring pre-send health check | ✓ | — |
| One-off cleanup on a single list | — | ✓ |
| Gate before a campaign or deploy proceeds | ✓ | — |
| Reviewing how a templated email actually renders | — | ✓ |
| Same check repeated across many client orgs | ✓ | — |
| A non-technical teammate doing the task | — | ✓ |
| Bulk operation you want a reviewable log of | ✓ | — |
| First time exploring an unfamiliar feature | — | ✓ |
The audience question underneath this
There’s also a simpler version of this decision that has nothing to do with the task and everything to do with who’s doing it. If the person doing the work already lives in a terminal — an engineer, a data analyst, someone maintaining an internal tool — the CLI’s learning curve is close to zero and the payoff is immediate. If they don’t, that learning curve is real cost against a benefit they may not need often enough to justify paying it. Optimizing a workflow for a tool the person doing it will resent using isn’t actually optimizing anything.
A middle case: scripting the setup, dashboarding the judgment
The cleanest version of this in practice usually isn’t “all CLI” or “all dashboard” for a whole workflow — it’s splitting a workflow at the seam between the mechanical part and the judgment part. Bulk-creating a hundred senders from a spreadsheet of mailbox credentials is mechanical; reviewing which of those senders is actually warmed up enough to trust with a real campaign is judgment. Script the first half, because doing it by hand a hundred times invites typos a machine won’t make. Look at the second half yourself, in the dashboard, because “trust this sender” isn’t a question a script should be answering unsupervised. Most real operational workflows have exactly this shape once you look for the seam, and the CLI is built to handle its half well rather than to swallow the whole thing.
Not a replacement, a different front door
The clearest way to think about this: the CLI, the SDKs, and the MCP server are all front doors onto the same API the dashboard’s own backend uses — none of them replace the dashboard, because the dashboard is solving a problem none of them are built for, which is showing a human something and letting them decide. Most people running cold email day to day will spend nearly all their time in the dashboard, and that’s correct, not a failure to “level up” to scripting. The CLI earns its place for the specific slice of work that’s repeatable, unattended, or run at a scale where clicking stops being the efficient choice — not as a wholesale upgrade path everyone should eventually take.
Next steps
- Install the CLI if you’ve identified a task that fits the “script it” column above.
- Automate an ops check in CI for a concrete recurring-check example.
- Managing multiple orgs from one terminal if the agency case above is your situation.
- The developer portal for the full picture of what’s available outside the dashboard.