Hook
A Domo user asked: how do you build a dataset that surfaces the action types inside a Magic ETL dataflow — the kind of metadata Domo doesn't expose out of the box? This tutorial answers that question with DomoLibrary, Python, and a Jupyter notebook.
Why It Matters
DomoStats gives you observability into your Domo environment, but it doesn't cover everything — dataflow action-type metadata being one notable gap. Without a custom connector, answering "what transformations are running inside our ETLs?" requires manual digging. This pattern shows how to hit Domo's undocumented internal APIs safely and repeatably, and how DomoLibrary abstracts away the authentication boilerplate so you can focus on the data shape you actually need.
What You'll Learn
- Build a custom DomoStats-style dataset that returns dataflow IDs, names, and action types
- Authenticate against Domo's undocumented APIs using username/password via
python-dotenvor Domo Jupyter account objects - Use DomoLibrary to reduce credential handling and API wiring to a few lines
- Structure a Jupyter notebook workflow that produces a clean, queryable dataset in Domo
- Avoid the credential anti-patterns that get people in trouble (yes,
.envfiles and.gitignorematter here)
Credential Safety and API Wiring with DomoLibrary
The first thing Jay addresses — and it's worth leading with — is credential hygiene. Domo's internal APIs require username/password auth, which means it's trivially easy to hardcode secrets and accidentally push them. The solution is load_dotenv: store credentials in a .env file, add it to .gitignore, and load at runtime. An alternative shown in the video uses Domo Jupyter's native account objects, which let you store secrets in a secured account object (fake_account in the demo) without touching environment files at all.
With auth handled, DomoLibrary does the heavy lifting. Rather than manually constructing HTTP requests against undocumented endpoints, the library provides a clean Python interface. The notebook walks through fetching dataflow metadata — iterating over dataflows, pulling action-type detail per flow, and flattening that into a tabular structure Domo can ingest.
The final dataset is intentionally minimal: dataflow ID, name, and action types. That's what the community question asked for, and the tutorial doesn't over-engineer it. The pattern generalizes — swap in a different metadata target and the same auth + library + flatten structure applies.
One architectural note worth calling out: the tutorial was built live during a Domo User Group community call, which means it reflects real questions from practitioners, not a contrived example. The code is available in the jaewilson07/domo_library GitHub repo under the blog section if you want to run it directly.


